machineroom

package module
v0.0.0-...-c604da2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 17, 2024 License: Apache-2.0 Imports: 62 Imported by: 0

README

Choria Machine Room

Overview

This is a framework for building SaaS infrastructure: an agent that deploys in a customer site and communicates with a SaaS backend. The agent can manage any software hosted at the customer site.

Choria and NATS technology is used for Provisioning, Streaming, Security, Reconciliation loops and more.

Status

This project is in very early beta stage, we are working with some real-world users to build out the capability.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type FactsGenerator

type FactsGenerator func(ctx context.Context, opts RuntimeOptions, log *logrus.Entry) (map[string]any, error)

FactsGenerator gathers facts

type Instance

type Instance interface {
	// Run starts running the command line
	Run(ctx context.Context) error
	// Application allows adding additional commands to the CLI application that will be built
	Application() *fisk.Application
	// CommonConfigure performs basic setup that a command added using Application() might need
	CommonConfigure() (RuntimeOptions, *logrus.Entry, error)
}

Instance is an instance of the Choria Machine Room Agent

func New

func New(o Options) (Instance, error)

New creates a new machine room agent instance based on options

type Options

type Options struct {
	// Name is the name reported in --help and other output from the command line
	Name string `json:"name"`
	// Contact will be shown during --help
	Contact string `json:"contact"`
	// Help will be shown during --help as the main command help
	Help string `json:"help"`
	// Version will be reported in --version and elsewhere
	Version string `json:"version"`
	// MachineSigningKey hex encoded ed25519 key used to sign autonomous agents
	MachineSigningKey string `json:"machine_signing_key"`

	// FactsRefreshInterval sets an interval to refresh facts on, 10 minutes by default and cannot be less than 1 minute
	FactsRefreshInterval time.Duration `json:"facts_refresh_interval"`
	// ConfigBucketPrefix will replicate only a subset of keys from the backend to the site
	ConfigBucketPrefix string `json:"config_bucket_prefix"`
	// Plugins are additional plugins like autonomous agents to add to the build
	Plugins map[string]plugin.Pluggable `json:"-"`
	// AdditionalFacts will be called during fact generation and the result will be shallow merged with the standard facts
	AdditionalFacts FactsGenerator `json:"-"`
	// ReadyFunc is an optional function that will be called once provisioning completes and system is fully initialized
	ReadyFunc ReadyFunc `json:"-"`
	// Args are parsed instead of os.Args if Args is not nil
	Args []string `json:"-"`

	// facts related opt-outs
	// NoStandardFacts disables gathering all standard facts
	NoStandardFacts bool `json:"no_standard_facts,omitempty"`
	// NoMemoryFacts disables built-in memory fact gathering
	NoMemoryFacts bool `json:"no_memory_facts,omitempty"`
	// NoSwapFacts disables built-in swap facts gathering
	NoSwapFacts bool `json:"no_swap_facts,omitempty"`
	// NoCPUFacts disables built-in cpu facts gathering
	NoCPUFacts bool `json:"no_cpu_facts,omitempty"`
	// NoDiskFacts disables built-in disk facts gathering
	NoDiskFacts bool `json:"no_disk_facts,omitempty"`
	// NoHostFacts disables built-in host facts gathering
	NoHostFacts bool `json:"no_host_facts,omitempty"`
	// NoNetworkFacts disables built-in network interface facts gathering
	NoNetworkFacts bool `json:"no_network_facts,omitempty"`

	// ConfigurationDirectory is the directory the configuration file is stored in (RO)
	ConfigurationDirectory string `json:"configuration_directory"`
	// MachinesDirectory is where autonomous agents are stored (RO)
	MachinesDirectory string `json:"machines_directory"`
	// ProvisioningJWTFile is the path to provisioning jwt file, defaults to provisioning.jwt in the options dir (RO)
	ProvisioningJWTFile string `json:"provisioning_jwt_file"`
	// FactsFile is the path to the facts file which default to instance.json in the options dir (RO)
	FactsFile string `json:"facts_file"`
	// ServerSeedFile is the path to the server seed file that will exist after provisioning (RO)
	ServerSeedFile string `json:"server_seed_file"`
	// ServerJWTFile is the path to the server jwt file that will exist after provisioning (RO)
	ServerJWTFile string `json:"server_jwt_file"`
	// ServerStatusFile is where the server will regularly write its status (RO)
	ServerStatusFile string `json:"server_status_file"`
	// ServerSubmissionDirectory is the directory holding the submission spool (RO)
	ServerSubmissionDirectory string `json:"server_submission_directory"`
	// ServerSubmissionSpoolSize is the maximum size of the submission spool (RO)
	ServerSubmissionSpoolSize int `json:"server_submission_spool_size"`
	// CommandPath is the path to the command being run, defaults to argv[0] (RO)
	CommandPath string `json:"command_path"`
	// ServerStorageDirectory the directory where state is stored (RO)
	ServerStorageDirectory string `json:"server_storage_directory"`
	// NatsNeySeedFile is a path to a nkey seed created at start
	NatsNeySeedFile string `json:"nats_ney_seed_file"`
	// NatsCredentialsFile is a path to the nats credentials file holding data received during provisioning
	NatsCredentialsFile string `json:"nats_credentials_file"`
	// StartTime the time the process started (RO)
	StartTime time.Time `json:"start_time"`
}

Options holds configuration and runtime derived paths, members marked RO are set during CommonConfigure(), setting them has no effect

type ReadyFunc

type ReadyFunc func(ctx context.Context, opts RuntimeOptions, log *logrus.Entry)

ReadyFunc is a custom function that will be called after provisioning and initialization

type RuntimeOptions

type RuntimeOptions interface {
	// Name is the configured application name
	Name() string
	// Version is the running version
	Version() string
	// CommandPath is the full path to the command being executed
	CommandPath() string
	// MachineSigningKey is the ed25519 public key used to sign autonomous agents and other items
	MachineSigningKey() string
	// FactsRefreshInterval is the frequency facts will be refreshed on disk
	FactsRefreshInterval() time.Duration
	// NoStandardFacts indicates if all built-in facts are disabled
	NoStandardFacts() bool
	// NoMemoryFacts indicates if built-in memory facts will be gathered
	NoMemoryFacts() bool
	// NoSwapFacts indicates if built-in swap facts will be gathered
	NoSwapFacts() bool
	// NoCPUFacts indicates if built-in cpu facts will be gathered
	NoCPUFacts() bool
	// NoDiskFacts indicates if built-in disk facts will be gathered
	NoDiskFacts() bool
	// NoHostFacts indicates if built-in host facts will be gathered
	NoHostFacts() bool
	// NoNetworkFacts indicates if built-in network facts will be gathered
	NoNetworkFacts() bool
	// ConfigurationDirectory is the path where configuration and other runtime files will be stored
	ConfigurationDirectory() string
	// MachinesDirectory is the directory where autonomous agents will be stored
	MachinesDirectory() string
	// ProvisioningJWTFile is the file issued by the SaaS provider used during provisioning
	ProvisioningJWTFile() string
	// FactsFile is a file holding instance data
	FactsFile() string
	// SeedFile is a ed25519 seed issued by the Choria Organization Issuer during provisioning
	SeedFile() string
	// JWTFile is the JWT file issued during provisioning
	JWTFile() string
	// StatusFile is a regularly updated file holding internal status of the Choria Backplane Server
	StatusFile() string
	// SubmissionDirectory is a spool directory that will hold messages submitted via Choria Submit
	SubmissionDirectory() string
	// SubmissionSpoolSize is the maximum size of the spool
	SubmissionSpoolSize() int
	// StorageDirectory is where JetStream and other state is kept
	StorageDirectory() string
	// NatsNeySeedFile is a NKey created during provisioning that could optionally be used to authenticate to the SaaS
	NatsNeySeedFile() string
	// NatsCredentialsFile is a NATS credential that, if provisioning signed a nats JWT, will hold a valid cred for accessing the SaaS backend
	NatsCredentialsFile() string
	// StartTime is the time this instance was started
	StartTime() time.Time
	// ConfigBucketPrefix will replicate only a subset of keys from the backend to the site
	ConfigBucketPrefix() string
}

RuntimeOptions provides read only access to run-time state and configuration

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL