Documentation
¶
Overview ¶
Package client provides a simple RMB interface to work with the node.
Package client for node client ¶
Package client provides a simple RMB interface to work with the node.
Requirements ¶
1. A msg bus instance must be running on the node. this client uses RMB (message bus) to send messages to nodes, and get the responses. 2. A valid ed25519 key pair. this key is used to sign deployments and MUST be the same key used to configure the local twin on substrate.
Simple deployment ¶
create an instance from the default rmb client. ``` cl, err := rmb.Default()
if err != nil {
panic(err)
}
``` then create an instance of the node client ``` node := client.NewNodeClient(NodeTwinID, cl) ``` define your deployment object ```
dl := gridtypes.Deployment{
Version: Version,
twinID: Twin, //LocalTwin,
// this contract id must match the one on substrate
Workloads: []gridtypes.Workload{
network(), // network workload definition
zmount(), // zmount workload definition
publicip(), // public ip definition
zmachine(), // zmachine definition
},
SignatureRequirement: gridtypes.SignatureRequirement{
WeightRequired: 1,
Requests: []gridtypes.SignatureRequest{
{
twinID: Twin,
Weight: 1,
},
},
},
}
``` compute hash ``` hash, err := dl.ChallengeHash()
if err != nil {
panic("failed to create hash")
}
``` create the contract and ge the contract id then “ dl.ContractID = 11 // from substrate ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() err = node.DeploymentDeploy(ctx, dl)
if err != nil {
panic(err)
}
```
Index ¶
- Variables
- func AreNodesUp(ctx context.Context, sub subi.SubstrateExt, nodes []uint32, ...) error
- func TryDecodeBase64OrElse(possiblyEncoded string) []byte
- type ExitDevice
- type GPU
- type IfaceType
- type Interface
- type NodeClient
- func (n *NodeClient) DeploymentChanges(ctx context.Context, contractID uint64) (changes []zosTypes.Workload, err error)
- func (n *NodeClient) DeploymentDelete(ctx context.Context, contractID uint64) error
- func (n *NodeClient) DeploymentDeploy(ctx context.Context, dl zosTypes.Deployment) error
- func (n *NodeClient) DeploymentGet(ctx context.Context, contractID uint64) (dl zosTypes.Deployment, err error)
- func (n *NodeClient) DeploymentList(ctx context.Context) (dls []zosTypes.Deployment, err error)
- func (n *NodeClient) DeploymentUpdate(ctx context.Context, dl zosTypes.Deployment) error
- func (n *NodeClient) GPUs(ctx context.Context) (gpus []GPU, err error)
- func (n *NodeClient) GetNodeEndpoint(ctx context.Context) (net.IP, error)
- func (n *NodeClient) GetNodeFreeWGPort(ctx context.Context, nodeID uint32, usedPorts []uint16) (int, error)
- func (n *NodeClient) GetPerfTestResult(ctx context.Context, testName string) (result TaskResult, err error)
- func (n *NodeClient) GetPerfTestResults(ctx context.Context) (result []TaskResult, err error)
- func (n *NodeClient) HasPublicIPv6(ctx context.Context) (bool, error)
- func (n *NodeClient) IsNodeUp(ctx context.Context) error
- func (n *NodeClient) NetworkGetPublicConfig(ctx context.Context) (cfg PublicConfig, err error)
- func (n *NodeClient) NetworkGetPublicExitDevice(ctx context.Context) (exit ExitDevice, err error)
- func (n *NodeClient) NetworkListAllInterfaces(ctx context.Context) (result map[string]Interface, err error)
- func (n *NodeClient) NetworkListIPs(ctx context.Context) ([]string, error)
- func (n *NodeClient) NetworkListInterfaces(ctx context.Context) (map[string][]net.IP, error)
- func (n *NodeClient) NetworkListPrivateIPs(ctx context.Context, networkName string) ([]string, error)
- func (n *NodeClient) NetworkListWGPorts(ctx context.Context) ([]uint16, error)
- func (n *NodeClient) NetworkSetPublicConfig(ctx context.Context, cfg PublicConfig) error
- func (n *NodeClient) NetworkSetPublicExitDevice(ctx context.Context, iface string) error
- func (n *NodeClient) Pools(ctx context.Context) (pools []PoolMetrics, err error)
- func (n *NodeClient) Statistics(ctx context.Context) (total gridtypes.Capacity, used gridtypes.Capacity, err error)
- func (n *NodeClient) SystemDMI(ctx context.Context) (result dmi.DMI, err error)
- func (n *NodeClient) SystemGetNodeFeatures(ctx context.Context) (feat []string, err error)
- func (n *NodeClient) SystemHypervisor(ctx context.Context) (result string, err error)
- func (n *NodeClient) SystemVersion(ctx context.Context) (ver Version, err error)
- type NodeClientGetter
- type NodeClientPool
- type PoolMetrics
- type PublicConfig
- type TaskResult
- type Version
Constants ¶
This section is empty.
Variables ¶
var ErrNoAccessibleInterfaceFound = errors.Errorf("could not find a publicly accessible ipv4 or ipv6")
ErrNoAccessibleInterfaceFound no accessible interface found
Functions ¶
func AreNodesUp ¶
func AreNodesUp(ctx context.Context, sub subi.SubstrateExt, nodes []uint32, nc NodeClientGetter) error
AreNodesUp checks if nodes are up
func TryDecodeBase64OrElse ¶
TryDecodeBase64OrElse tries to decode a possibly base64 encoded string into a byte array or returns the string as a byte array assuming it was decoded already
Types ¶
type ExitDevice ¶
type ExitDevice struct {
// IsSingle is set to true if br-pub
// is connected to zos bridge
IsSingle bool `json:"is_single"`
// IsDual is set to true if br-pub is
// connected to a physical nic
IsDual bool `json:"is_dual"`
// AsDualInterface is set to the physical
// interface name if IsDual is true
AsDualInterface string `json:"dual_interface"`
}
ExitDevice stores the dual nic setup of a node.
type NodeClient ¶
type NodeClient struct {
// contains filtered or unexported fields
}
NodeClient struct
func NewNodeClient ¶
NewNodeClient creates a new node RMB client. This client then can be used to communicate with the node over RMB.
func (*NodeClient) DeploymentChanges ¶
func (n *NodeClient) DeploymentChanges(ctx context.Context, contractID uint64) (changes []zosTypes.Workload, err error)
DeploymentChanges return changes of a deployment via contract ID
func (*NodeClient) DeploymentDelete ¶
func (n *NodeClient) DeploymentDelete(ctx context.Context, contractID uint64) error
DeploymentDelete deletes a deployment, the node will make sure to decomission all deployments and set all workloads to deleted. A call to Get after delete is valid
func (*NodeClient) DeploymentDeploy ¶
func (n *NodeClient) DeploymentDeploy(ctx context.Context, dl zosTypes.Deployment) error
DeploymentDeploy sends the deployment to the node for processing.
func (*NodeClient) DeploymentGet ¶
func (n *NodeClient) DeploymentGet(ctx context.Context, contractID uint64) (dl zosTypes.Deployment, err error)
DeploymentGet gets a deployment via contract ID
func (*NodeClient) DeploymentList ¶ added in v0.14.13
func (n *NodeClient) DeploymentList(ctx context.Context) (dls []zosTypes.Deployment, err error)
DeploymentList gets all deployments for a twin
func (*NodeClient) DeploymentUpdate ¶
func (n *NodeClient) DeploymentUpdate(ctx context.Context, dl zosTypes.Deployment) error
DeploymentUpdate update the given deployment. deployment must be a valid update for a deployment that has been already created via DeploymentDeploy
func (*NodeClient) GPUs ¶
func (n *NodeClient) GPUs(ctx context.Context) (gpus []GPU, err error)
GPUs returns a list of gpus
func (*NodeClient) GetNodeEndpoint ¶
GetNodeEndpoint gets node end point network ip
func (*NodeClient) GetNodeFreeWGPort ¶
func (n *NodeClient) GetNodeFreeWGPort(ctx context.Context, nodeID uint32, usedPorts []uint16) (int, error)
GetNodeFreeWGPort returns node free wireguard port
func (*NodeClient) GetPerfTestResult ¶ added in v0.11.5
func (n *NodeClient) GetPerfTestResult(ctx context.Context, testName string) (result TaskResult, err error)
GetPerfTestResult get a single perf test result
func (*NodeClient) GetPerfTestResults ¶ added in v0.15.1
func (n *NodeClient) GetPerfTestResults(ctx context.Context) (result []TaskResult, err error)
GetPerfTestsResults get all perf tests results
func (*NodeClient) HasPublicIPv6 ¶
func (n *NodeClient) HasPublicIPv6(ctx context.Context) (bool, error)
HasPublicIPv6 returns true if the node has a public ip6 configuration
func (*NodeClient) IsNodeUp ¶
func (n *NodeClient) IsNodeUp(ctx context.Context) error
IsNodeUp checks if the node is up
func (*NodeClient) NetworkGetPublicConfig ¶
func (n *NodeClient) NetworkGetPublicConfig(ctx context.Context) (cfg PublicConfig, err error)
NetworkGetPublicConfig returns the current public node network configuration. A node with a public config can be used as an access node for wireguard.
func (*NodeClient) NetworkGetPublicExitDevice ¶
func (n *NodeClient) NetworkGetPublicExitDevice(ctx context.Context) (exit ExitDevice, err error)
NetworkGetPublicExitDevice gets the current dual nic setup of the node.
func (*NodeClient) NetworkListAllInterfaces ¶
func (n *NodeClient) NetworkListAllInterfaces(ctx context.Context) (result map[string]Interface, err error)
NetworkListAllInterfaces return all physical devices on a node
func (*NodeClient) NetworkListIPs ¶
func (n *NodeClient) NetworkListIPs(ctx context.Context) ([]string, error)
NetworkListIPs list taken public IPs on the node
func (*NodeClient) NetworkListInterfaces ¶
NetworkListInterfaces return a map of all interfaces and their ips
func (*NodeClient) NetworkListPrivateIPs ¶ added in v0.14.13
func (n *NodeClient) NetworkListPrivateIPs(ctx context.Context, networkName string) ([]string, error)
NetworkListPrivateIPs list private ips reserved for a network
func (*NodeClient) NetworkListWGPorts ¶
func (n *NodeClient) NetworkListWGPorts(ctx context.Context) ([]uint16, error)
NetworkListWGPorts return a list of all "taken" ports on the node. A new deployment should be careful to use a free port for its network setup.
func (*NodeClient) NetworkSetPublicConfig ¶
func (n *NodeClient) NetworkSetPublicConfig(ctx context.Context, cfg PublicConfig) error
NetworkSetPublicConfig sets the current public node network configuration. A node with a public config can be used as an access node for wireguard.
func (*NodeClient) NetworkSetPublicExitDevice ¶
func (n *NodeClient) NetworkSetPublicExitDevice(ctx context.Context, iface string) error
NetworkSetPublicExitDevice select which physical interface to use as an exit device setting `iface` to `zos` will then make node run in a single nic setup.
func (*NodeClient) Pools ¶
func (n *NodeClient) Pools(ctx context.Context) (pools []PoolMetrics, err error)
Pools returns statistics of separate pools
func (*NodeClient) Statistics ¶
func (n *NodeClient) Statistics(ctx context.Context) (total gridtypes.Capacity, used gridtypes.Capacity, err error)
Statistics returns some node statistics. Including total and available cpu, memory, storage, etc...
func (*NodeClient) SystemGetNodeFeatures ¶ added in v0.16.0
func (n *NodeClient) SystemGetNodeFeatures(ctx context.Context) (feat []string, err error)
SystemGetNodeFeatures gets the supported nodes features.
func (*NodeClient) SystemHypervisor ¶
func (n *NodeClient) SystemHypervisor(ctx context.Context) (result string, err error)
SystemHypervisor executes hypervisor cmd
func (*NodeClient) SystemVersion ¶
func (n *NodeClient) SystemVersion(ctx context.Context) (ver Version, err error)
SystemVersion executes system version cmd
type NodeClientGetter ¶
type NodeClientGetter interface {
GetNodeClient(sub subi.SubstrateExt, nodeID uint32) (*NodeClient, error)
}
NodeClientGetter is an interface for node client
type NodeClientPool ¶
type NodeClientPool struct {
// contains filtered or unexported fields
}
NodeClientPool is a pool for node clients and rmb
func NewNodeClientPool ¶
func NewNodeClientPool(rmb rmb.Client, timeout time.Duration) *NodeClientPool
NewNodeClientPool generates a new client pool
func (*NodeClientPool) GetNodeClient ¶
func (p *NodeClientPool) GetNodeClient(sub subi.SubstrateExt, nodeID uint32) (*NodeClient, error)
GetNodeClient gets the node client according to node ID
type PoolMetrics ¶
type PoolMetrics struct {
Name string `json:"name"`
Type zos.DeviceType `json:"type"`
Size gridtypes.Unit `json:"size"`
Used gridtypes.Unit `json:"used"`
}
PoolMetrics stores storage pool metrics
type PublicConfig ¶
type PublicConfig struct {
// Type define if we need to use
// the Vlan field or the MacVlan
Type IfaceType `json:"type"`
IPv4 gridtypes.IPNet `json:"ipv4"`
IPv6 gridtypes.IPNet `json:"ipv6"`
GW4 net.IP `json:"gw4"`
GW6 net.IP `json:"gw6"`
// Domain is the node domain name like gent01.devnet.grid.tf
// or similar
Domain string `json:"domain"`
}
PublicConfig is the configuration of the interface that is connected to the public internet
type TaskResult ¶ added in v0.15.1
type TaskResult struct {
Name string `json:"name"`
Description string `json:"description"`
Timestamp uint64 `json:"timestamp"`
Result interface{} `json:"result"`
}
TaskResult holds the perf test result