garm/vendor/github.com/lxc/lxd/shared/api/cluster.go
Gabriel Adrian Samfira bbbe67bf7c Vendor packages and add Makefile
* Vendors packages
  * Adds a Makefile that uses docker to build a static binary against musl
using alpine linux.

Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-06-30 10:20:32 +00:00

301 lines
8.4 KiB
Go

package api
import (
"encoding/base64"
"encoding/json"
)
// Cluster represents high-level information about a LXD cluster.
//
// swagger:model
//
// API extension: clustering
type Cluster struct {
// Name of the cluster member answering the request
// Example: lxd01
ServerName string `json:"server_name" yaml:"server_name"`
// Whether clustering is enabled
// Example: true
Enabled bool `json:"enabled" yaml:"enabled"`
// List of member configuration keys (used during join)
// Example: []
//
// API extension: clustering_join
MemberConfig []ClusterMemberConfigKey `json:"member_config" yaml:"member_config"`
}
// ClusterMemberConfigKey represents a single config key that a new member of
// the cluster is required to provide when joining.
//
// The Value field is empty when getting clustering information with GET
// /1.0/cluster, and should be filled by the joining node when performing a PUT
// /1.0/cluster join request.
//
// swagger:model
//
// API extension: clustering_join
type ClusterMemberConfigKey struct {
// The kind of configuration key (network, storage-pool, ...)
// Example: storage-pool
Entity string `json:"entity" yaml:"entity"`
// The name of the object requiring this key
// Example: local
Name string `json:"name" yaml:"name"`
// The name of the key
// Example: source
Key string `json:"key" yaml:"key"`
// The value on the answering cluster member
// Example: /dev/sdb
Value string `json:"value" yaml:"value"`
// A human friendly description key
// Example: "source" property for storage pool "local"
Description string `json:"description" yaml:"description"`
}
// ClusterPut represents the fields required to bootstrap or join a LXD
// cluster.
//
// swagger:model
//
// API extension: clustering
type ClusterPut struct {
Cluster `yaml:",inline"`
// The address of the cluster you wish to join
// Example: 10.0.0.1:8443
ClusterAddress string `json:"cluster_address" yaml:"cluster_address"`
// The expected certificate (X509 PEM encoded) for the cluster
// Example: X509 PEM certificate
ClusterCertificate string `json:"cluster_certificate" yaml:"cluster_certificate"`
// The local address to use for cluster communication
// Example: 10.0.0.2:8443
//
// API extension: clustering_join
ServerAddress string `json:"server_address" yaml:"server_address"`
// The trust password of the cluster you're trying to join
// Example: blah
//
// API extension: clustering_join
ClusterPassword string `json:"cluster_password" yaml:"cluster_password"`
}
// ClusterMembersPost represents the fields required to request a join token to add a member to the cluster.
//
// swagger:model
//
// API extension: clustering_join_token
type ClusterMembersPost struct {
// The name of the new cluster member
// Example: lxd02
ServerName string `json:"server_name" yaml:"server_name"`
}
// ClusterMemberJoinToken represents the fields contained within an encoded cluster member join token.
//
// swagger:model
//
// API extension: clustering_join_token
type ClusterMemberJoinToken struct {
// The name of the new cluster member
// Example: lxd02
ServerName string `json:"server_name" yaml:"server_name"`
// The fingerprint of the network certificate
// Example: 57bb0ff4340b5bb28517e062023101adf788c37846dc8b619eb2c3cb4ef29436
Fingerprint string `json:"fingerprint" yaml:"fingerprint"`
// The addresses of existing online cluster members
// Example: ["10.98.30.229:8443"]
Addresses []string `json:"addresses" yaml:"addresses"`
// The random join secret.
// Example: 2b2284d44db32675923fe0d2020477e0e9be11801ff70c435e032b97028c35cd
Secret string `json:"secret" yaml:"secret"`
}
// String encodes the cluster member join token as JSON and then base64.
func (t *ClusterMemberJoinToken) String() string {
joinTokenJSON, err := json.Marshal(t)
if err != nil {
return ""
}
return base64.StdEncoding.EncodeToString(joinTokenJSON)
}
// ClusterMemberPost represents the fields required to rename a LXD node.
//
// swagger:model
//
// API extension: clustering
type ClusterMemberPost struct {
// The new name of the cluster member
// Example: lxd02
ServerName string `json:"server_name" yaml:"server_name"`
}
// ClusterMember represents the a LXD node in the cluster.
//
// swagger:model
//
// API extension: clustering
type ClusterMember struct {
ClusterMemberPut `yaml:",inline"`
// Name of the cluster member
// Example: lxd01
ServerName string `json:"server_name" yaml:"server_name"`
// URL at which the cluster member can be reached
// Example: https://10.0.0.1:8443
URL string `json:"url" yaml:"url"`
// Whether the cluster member is a database server
// Example: true
Database bool `json:"database" yaml:"database"`
// Current status
// Example: Online
Status string `json:"status" yaml:"status"`
// Additional status information
// Example: fully operational
Message string `json:"message" yaml:"message"`
// The primary architecture of the cluster member
// Example: x86_64
//
// API extension: clustering_architecture
Architecture string `json:"architecture" yaml:"architecture"`
}
// Writable converts a full Profile struct into a ProfilePut struct (filters read-only fields)
func (member *ClusterMember) Writable() ClusterMemberPut {
return member.ClusterMemberPut
}
// ClusterMemberPut represents the the modifiable fields of a LXD cluster member
//
// swagger:model
//
// API extension: clustering_edit_roles
type ClusterMemberPut struct {
// List of roles held by this cluster member
// Example: ["database"]
//
// API extension: clustering_roles
Roles []string `json:"roles" yaml:"roles"`
// Name of the failure domain for this cluster member
// Example: rack1
//
// API extension: clustering_failure_domains
FailureDomain string `json:"failure_domain" yaml:"failure_domain"`
// Cluster member description
// Example: AMD Epyc 32c/64t
//
// API extension: clustering_description
Description string `json:"description" yaml:"description"`
// Additional configuration information
// Example: {"scheduler.instance": "all"}
//
// API extension: clustering_config
Config map[string]string `json:"config" yaml:"config"`
// List of cluster groups this member belongs to
// Example: ["group1", "group2"]
//
// API extension: clustering_groups
Groups []string `json:"groups" yaml:"groups"`
}
// ClusterCertificatePut represents the certificate and key pair for all members in a LXD Cluster
//
// swagger:model
//
// API extension: clustering_update_certs
type ClusterCertificatePut struct {
// The new certificate (X509 PEM encoded) for the cluster
// Example: X509 PEM certificate
ClusterCertificate string `json:"cluster_certificate" yaml:"cluster_certificate"`
// The new certificate key (X509 PEM encoded) for the cluster
// Example: X509 PEM certificate key
ClusterCertificateKey string `json:"cluster_certificate_key" yaml:"cluster_certificate_key"`
}
// ClusterMemberStatePost represents the fields required to evacuate a cluster member.
//
// swagger:model
//
// API extension: clustering_evacuation
type ClusterMemberStatePost struct {
// The action to be performed. Valid actions are "evacuate" and "restore".
// Example: evacuate
Action string `json:"action" yaml:"action"`
}
// ClusterGroupsPost represents the fields available for a new cluster group.
//
// swagger:model
//
// API extension: clustering_groups
type ClusterGroupsPost struct {
ClusterGroupPut
// The new name of the cluster group
// Example: group1
Name string `json:"name" yaml:"name"`
}
// ClusterGroup represents a cluster group.
//
// swagger:model
//
// API extension: clustering_groups
type ClusterGroup struct {
ClusterGroupPut `yaml:",inline"`
ClusterGroupPost `yaml:",inline"`
}
// ClusterGroupPost represents the fields required to rename a cluster group.
//
// swagger:model
//
// API extension: clustering_groups
type ClusterGroupPost struct {
// The new name of the cluster group
// Example: group1
Name string `json:"name" yaml:"name"`
}
// ClusterGroupPut represents the modifiable fields of a cluster group.
//
// swagger:model
//
// API extension: clustering_groups
type ClusterGroupPut struct {
// The description of the cluster group
// Example: amd64 servers
Description string `json:"description" yaml:"description"`
// List of members in this group
// Example: ["node1", "node3"]
Members []string `json:"members" yaml:"members"`
}
// Writable converts a full ClusterGroup struct into a ClusterGroupPut struct (filters read-only fields)
func (c *ClusterGroup) Writable() ClusterGroupPut {
return c.ClusterGroupPut
}