Giter Site home page Giter Site logo

bryopsida / eureka-operator Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 446 KB

A operator using the eureka library to manage and join systems based on seeded configuration profiles

License: The Unlicense

JavaScript 91.76% Makefile 0.79% Jinja 7.24% Dockerfile 0.20%
asset-management javascript nodejs operator zeroconf

eureka-operator's People

Contributors

bryopsida avatar renovate[bot] avatar dependabot[bot] avatar

Watchers

 avatar

eureka-operator's Issues

Implement APT manager

The operator needs to be able to be able to manage system packages, to start with ubuntu/debian system packages.

TODO

  • Can install/remove packages
  • Should be idempotent
  • Should not repeat itself on every message if the system is already in the desired state.

Implement cmd manager

The operator needs to support command executions, these should executed once.

TODO

  • Support running commands defined in multicast messages
  • Only run the commands once per system/operator.

Create buildroot artifact

Create a buildroot img that can be used to create VMs and/or flash machines so they immediately join the group and can be managed.

Implement unicast control api

In some cases the managers will need to be directly controlled on a specific box, for this a unicast control interface is needed. Access to this should be controlled via pub/priv key. The keypair should be generated on each startup. The public key is announced over the authenticated discovery channel, when a client sees other peers it should add their pub keys as accepted clients. gRPC may be used but alternatively a tcp stream may be used to keep the runtime deps at 0.

TODO

  • add unicast control api

Support Alpine Linux

Operator should detect OS/Linux Distro and support the same management/functionality when running on alpine linux.

Serialize message handling

As a maintainer, I want to ensure beacon message handling is serialized, when many messages arrive at once, and the messages trigger change, it could cause conflicts on the OS operations if not serialized.

Implement Filemanager

The operator needs to be able to inject configuration files to the system that other things are watching/waiting on. To start with, it should be able to seed values in a configuration file tree where the files are keys and the contents are the key values. It should also support regex replacements of existing configuration files. The operations should be idempotent but also tracked to avoid causing unneeded syscalls/io ops.

TODO

  • Support seeding simple key value pairs to the fs
  • Support regex replacement on existing files
  • Track operations and do not repeat operations that would end up with the same state the system is already in

Revision profiles

When introducing profile changes to an established network and unsealing a node, that node will need to filter out profile adverts from nodes that haven't had a new profile applied and only accept and seal upon receipt of a new profile.

Implement Download Manager

The operator will need to be able to download, verify and put assets from remote locations into desired locations in the system.

TODO

  • Can download assets over https from remote locations without authentication
  • Can check with head requests for modifications to those assets to keep them fresh
  • Does not repeat itself if the system is already in the desired state

Package in .deb

As part of the release process, create a .deb file that packages the SEA to make this installable without npm.

Implement seal/unseal concept

When a thing comes online it should be unsealed and accept broadcast profiles for desired state, once it has a profile applied it should switch to a sealed mode and no longer take profile changes. Their should be a way for an admin client node unseal and propagate a new profile change.

Release to NPM

Release the executable as something that can be installed npm install -g and run as a system service

Implement in go

Once the API/Interface layers have stabilized implement in go

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

This repository currently has no open or pending branches.

Detected dependencies

devcontainer
.devcontainer/devcontainer.json
  • ghcr.io/devcontainers/features/common-utils 2
  • ghcr.io/devcontainers/features/docker-in-docker 2
  • ghcr.io/devcontainers/features/github-cli 1
  • ghcr.io/devcontainers/features/node 1
  • ghcr.io/devcontainers-contrib/features/ansible 2
  • ghcr.io/rocker-org/devcontainer-features/apt-packages 1
dockerfile
.devcontainer/Dockerfile
  • mcr.microsoft.com/devcontainers/javascript-node 22
github-actions
.github/workflows/build-sea.yaml
  • actions/checkout v4
  • actions/setup-node v4
  • actions/upload-artifact v4
.github/workflows/ci.yaml
.github/workflows/release.yaml
npm
node/package.json
  • @bryopsida/eureka ^0.1.0
  • esbuild ^0.23.0
  • nodemon ^3.1.0
  • npm-pkgbuild ^15.3.9
  • standard ^17.1.0

  • Check this box to trigger a request for Renovate to run again on this repository

Generate pub/priv key for unicast control

The UDP multicast comms work well for discovery of peers and exchanging public keys but something like tcp unicast stream would work better for more complex unicast comms. To support this we need to generate a pub/priv key on startup and include this in our announcements along with the port binding where the service is available.

Release lib to NPM

Release as a library to NPM so the operator can be extended, likely will need to split the code into workspaces.

Implement Snap manager

The operator will need to be able to install/remove snap packages

TODO

  • Can install snap packages
  • Can remove snap packages
  • Does not do operations when the system is already in the desired state.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.