Documentation ¶
Index ¶
- Constants
- Variables
- type Allocation
- type BrokenDevice
- type BrokenPool
- type Container
- type ContainerID
- type ContainerModule
- type ContainerNetworkConfig
- type DeviceType
- type DiskIOCountersStat
- type DisksIOCountersStat
- type ErrInvalidDeviceType
- type ErrNotEnoughSpace
- type FarmID
- type Filesystem
- type Flister
- type HostMonitor
- type Identifier
- type IdentityManager
- type Member
- type MountInfo
- type MountOptions
- type NetID
- type NetResource
- type NetlinkAddress
- type NetlinkAddresses
- type Network
- type NetworkInfo
- type Networker
- type NicIOCounterStat
- type NicsIOCounterStat
- type Peer
- type PoolStats
- type PoolsStats
- type Provision
- type ProvisionCounters
- type RaidProfile
- type StorageModule
- type StoragePolicy
- type StrIdentifier
- type SystemMonitor
- type TimesStat
- type Usage
- type VDisk
- type VDiskModule
- type VM
- type VMDisk
- type VMIface
- type VMInfo
- type VMModule
- type VMNetworkInfo
- type VersionMonitor
- type VirtualMemoryStat
- type VolumeAllocater
- type ZDBAllocater
- type ZDBMode
- type ZDBNamespace
Constants ¶
const ( ZDBModeUser = "user" ZDBModeSeq = "seq" )
Enumeration of the modes 0-db can operate in
Variables ¶
var ( //DefaultMountOptions has sane values for mount DefaultMountOptions = MountOptions{ ReadOnly: false, Limit: 256, Type: SSDDevice, } //ReadOnlyMountOptions shortcut for readonly mount options ReadOnlyMountOptions = MountOptions{ ReadOnly: true, } )
var ( NetworkSchemaV1 = versioned.MustParse("1.0.0") NetworkSchemaV2 = versioned.MustParse("2.0.0") // NetworkSchemaLatestVersion network object latest version NetworkSchemaLatestVersion = NetworkSchemaV2 )
Version of the network workloads keep in cache by networkd
var ( // DefaultPolicy value DefaultPolicy = StoragePolicy{ Raid: Single, } // NullPolicy does not create pools NullPolicy = StoragePolicy{} )
Functions ¶
This section is empty.
Types ¶
type Allocation ¶
Allocation is returned when calling the ZDB allocate. it contains the volume ID and the volume path that has the namespace allocated
type BrokenDevice ¶
type BrokenDevice struct { // Path to allow identification of the disk Path string // Err returned which lead to the disk being marked as faulty Err error }
BrokenDevice is a disk which is somehow not fully functional. Storage keeps track of disks which have failed at some point, so they are not used, and to be able to later report this to other daemons.
type BrokenPool ¶
type BrokenPool struct { // Label of the broken pool Label string // Err returned by the action which let to the pool being marked as broken Err error }
BrokenPool contains info about a malfunctioning storage pool
type Container ¶
type Container struct { // Name of container Name string // path to the rootfs of the container RootFS string // Env env variables to container in format {'KEY=VALUE', 'KEY2=VALUE2'} Env []string // WorkingDir of the entrypoint command WorkingDir string // Network network info for container Network NetworkInfo // Mounts extra mounts for container Mounts []MountInfo // Entrypoint the process to start inside the container Entrypoint string // Interactivity enable Core X as PID 1 on the container Interactive bool // CPU count limit CPU uint // Memory limit in bytes Memory uint64 // Logs backends Logs []logger.Logs // Stats container metrics backend Stats []stats.Stats }
Container creation info
type ContainerModule ¶
type ContainerModule interface { // Run creates and starts a container on the node. It also auto // starts command defined by `entrypoint` inside the container // ns: tenant namespace // data: Container info Run(ns string, data Container) (ContainerID, error) // ListNS list the name of all the container namespaces ListNS() ([]string, error) // List all the existing container IDs from a certain namespace ns // if ns is empty, then the container IDs from all existing namespaces will be return List(ns string) ([]ContainerID, error) // Inspect, return information about the container, given its container id Inspect(ns string, id ContainerID) (Container, error) Delete(ns string, id ContainerID) error }
ContainerModule defines rpc interface to containerd
type ContainerNetworkConfig ¶ added in v0.4.0
ContainerNetworkConfig defines how to construct the network namespace of a container
type DeviceType ¶
type DeviceType string
DeviceType is the actual type of hardware that the storage device runs on, i.e. SSD or HDD
const ( SSDDevice DeviceType = "ssd" HDDDevice DeviceType = "hdd" )
Known device types
type DiskIOCountersStat ¶
type DiskIOCountersStat struct { disk.IOCountersStat Time time.Time }
DiskIOCountersStat struct
func (*DiskIOCountersStat) String ¶
func (s *DiskIOCountersStat) String() string
type DisksIOCountersStat ¶
type DisksIOCountersStat map[string]DiskIOCountersStat
DisksIOCountersStat alias for map[string]IOCountersStat required by zbus
type ErrInvalidDeviceType ¶ added in v0.3.4
type ErrInvalidDeviceType struct {
DeviceType DeviceType
}
ErrInvalidDeviceType raised when trying to allocate space on unsupported device type
func (ErrInvalidDeviceType) Error ¶ added in v0.3.4
func (e ErrInvalidDeviceType) Error() string
type ErrNotEnoughSpace ¶
type ErrNotEnoughSpace struct {
DeviceType DeviceType
}
ErrNotEnoughSpace indicates that there is not enough space in a pool of the requested type to create the filesystem
func (ErrNotEnoughSpace) Error ¶
func (e ErrNotEnoughSpace) Error() string
type Filesystem ¶ added in v0.4.9
type Filesystem struct { // Filesystem ID ID int // Path of the Filesystem Path string // Usage reports the current usage of the Filesystem Usage Usage // Name of the Filesystem Name string // FsType of the Filesystem FsType string // DiskType of the Filesystem DiskType DeviceType }
Filesystem represents a storage space that can be used as a filesystem
type Flister ¶
type Flister interface { // Mount mounts an flist located at url using the 0-db located at storage. // MountOptions, can be nil, in that case falls to default, other wise // use the provided values. // Returns the path in the filesystem where the flist is mounted or an error Mount(url string, storage string, opts MountOptions) (path string, err error) // Mount mounts an flist located at url using the 0-db located at storage. // MountOptions, can be nil, in that case falls to default, other wise // use the provided values. // Name is a unique name to identify this mount. The flist can later be unmounted // with the same name. It is up to the caller to ensure `name` is unique. // Returns the path in the filesystem where the flist is mounted or an error NamedMount(name string, url string, storage string, ots MountOptions) (path string, err error) // Umount the flist mounted at path Umount(path string) error // NamedUmount unmounts the flist mounted via the NamedMount call, with the same name NamedUmount(path string) error // HashFromRootPath returns flist hash from a running g8ufs mounted with NamedMount HashFromRootPath(name string) (string, error) // FlistHash returns md5 of flist if available (requesting the hub) FlistHash(url string) (string, error) }
Flister is the interface for the flist module
type HostMonitor ¶
HostMonitor interface (provided by monitord)
type Identifier ¶
type Identifier interface {
Identity() string
}
Identifier is the interface that defines how an object can be used as an identity
type IdentityManager ¶
type IdentityManager interface { // NodeID returns the node id (public key) NodeID() StrIdentifier // FarmID return the farm id this node is part of. this is usually a configuration // that the node is booted with. An error is returned if the farmer id is not configured FarmID() (FarmID, error) // Sign signs the message with privateKey and returns a signature. Sign(message []byte) ([]byte, error) // Verify reports whether sig is a valid signature of message by publicKey. Verify(message, sig []byte) error // Encrypt encrypts message with the public key of the node Encrypt(message []byte) ([]byte, error) // Decrypt decrypts message with the private of the node Decrypt(message []byte) ([]byte, error) // EncryptECDH aes encrypt msg using a shared key derived from private key of the node and public key of the other party using Elliptic curve Diffie Helman algorithm // the nonce if prepended to the encrypted message EncryptECDH(msg []byte, publicKey []byte) ([]byte, error) // DecryptECDH decrypt aes encrypted msg using a shared key derived from private key of the node and public key of the other party using Elliptic curve Diffie Helman algorithm DecryptECDH(msg []byte, publicKey []byte) ([]byte, error) // PrivateKey sends the keypair PrivateKey() []byte }
IdentityManager interface.
type MountInfo ¶
type MountInfo struct { Source string // source of the mount point on the host Target string // target of mount inside the container }
MountInfo defines a mount point
type MountOptions ¶
type MountOptions struct { // ReadOnly ReadOnly bool // Limit size of read-write layer in Mib Limit uint64 // Type of disk to use Type DeviceType }
MountOptions struct
type NetResource ¶
type NetResource struct { Name string //unique id inside the reservation is an autoincrement (USE AS NET_ID) NetID NetID `json:"net_id"` // IP range of the network, must be an IPv4 /16 NetworkIPRange types.IPNet `json:"ip_range"` NodeID string `json:"node_id"` // IPV4 subnet for this network resource Subnet types.IPNet `json:"subnet"` WGPrivateKey string `json:"wg_private_key"` WGPublicKey string `json:"wg_public_key"` WGListenPort uint16 `json:"wg_listen_port"` Peers []Peer `json:"peers"` }
NetResource is the description of a part of a network local to a specific node
func (*NetResource) Valid ¶ added in v0.4.0
func (nr *NetResource) Valid() error
Valid checks if the network resource is valid.
type NetlinkAddresses ¶
type NetlinkAddresses []NetlinkAddress
NetlinkAddresses alias for [][]NetlinkAddress
type Network ¶
type Network struct { Name string `json:"name"` //unique id inside the reservation is an autoincrement (USE AS NET_ID) NetID NetID `json:"net_id"` // IP range of the network, must be an IPv4 /16 IPRange types.IPNet `json:"ip_range"` NetResources []NetResource `json:"net_resources"` }
Network represent the description if a user private network
type NetworkInfo ¶
type NetworkInfo struct { // Containers don't need to know about anything about bridges, // IPs, wireguards since this is all is only known by the network // resource which is out of the scope of this module Namespace string }
NetworkInfo defines a network configuration for a container
type Networker ¶
type Networker interface { // Ready return nil is networkd is ready to operate // This function is used by other deamon to test if networkd is done booting Ready() error // Create a new network resource CreateNR(NetResource) (string, error) // Delete a network resource DeleteNR(NetResource) error // Join a network (with network id) will create a new isolated namespace // that is hooked to the network bridge with a veth pair, and assign it a // new IP from the network resource range. The method return the new namespace // name. // The member name specifies the name of the member, and must be unique // The NetID is the network id to join Join(networkdID NetID, containerID string, cfg ContainerNetworkConfig) (join Member, err error) // Leave delete a container nameapce created by Join Leave(networkdID NetID, containerID string) (err error) // ZDBPrepare creates a network namespace with a macvlan interface into it // to allow the 0-db container to be publicly accessible // it retusn the name of the network namespace created // hw is an optional hardware address that will be set on the new interface ZDBPrepare(hw net.HardwareAddr) (string, error) // ZDBDestroy is the opposite of ZDPrepare, it makes sure network setup done // for zdb is rewind. ns param is the namespace return by the ZDBPrepare ZDBDestroy(ns string) error // SetupTap sets up a tap device in the network namespace for the networkID. It is hooked // to the network bridge. The name of the tap interface is returned SetupTap(networkID NetID) (string, error) // TapExists checks if the tap device exists already TapExists(networkID NetID) (bool, error) // RemoveTap removes the tap device from the network namespace // of the networkID RemoveTap(networkID NetID) error // PublicIPv4Support enabled on this node for reservations PublicIPv4Support() bool // SetupPubTap sets up a tap device in the host namespace for the public ip // reservation id. It is hooked to the public bridge. The name of the tap // interface is returned SetupPubTap(PubIPReservationID string) (string, error) // PubTapExists checks if the tap device for the public network exists already PubTapExists(PubIPReservationID string) (bool, error) // RemovePubTap removes the public tap device from the host namespace RemovePubTap(PubIPReservationID string) error // DisconnectPubTap disconnects the public tap from the network. The interface // itself is not removed and will need to be cleaned up later DisconnectPubTap(PubIPReservationID string) error // GetSubnet of the network with the given ID on the local node GetSubnet(networkID NetID) (net.IPNet, error) // GetNet returns the full network range of the network GetNet(networkID NetID) (net.IPNet, error) // GetPublicIPv6Subnet returns the IPv6 prefix op the public subnet of the host GetPublicIPv6Subnet() (net.IPNet, error) // GetDefaultGwIP returns the IPs of the default gateways inside the network // resource identified by the network ID on the local node, for IPv4 and IPv6 // respectively GetDefaultGwIP(networkID NetID) (net.IP, net.IP, error) // GetIPv6From4 generates an IPv6 address from a given IPv4 address in a NR GetIPv6From4(networkID NetID, ip net.IP) (net.IPNet, error) // Addrs return the IP addresses of interface // if the interface is in a network namespace netns needs to be not empty Addrs(iface string, netns string) ([]net.IP, error) // ZOSAddresses monitoring streams for ZOS bridge IPs ZOSAddresses(ctx context.Context) <-chan NetlinkAddresses // DMZAddresses monitoring streams for dmz public interface DMZAddresses(ctx context.Context) <-chan NetlinkAddresses // YggAddresses monitoring streams for yggdrasil interface YggAddresses(ctx context.Context) <-chan NetlinkAddresses PublicAddresses(ctx context.Context) <-chan NetlinkAddresses }
Networker is the interface for the network module
type NicIOCounterStat ¶
type NicIOCounterStat struct { net.IOCountersStat RateOut uint64 RateIn uint64 }
NicIOCounterStat counter for a nic
type NicsIOCounterStat ¶
type NicsIOCounterStat []NicIOCounterStat
NicsIOCounterStat alias for []NicIOCounterStat
type Peer ¶
type Peer struct { // IPV4 subnet of the network resource of the peer Subnet types.IPNet `json:"subnet"` WGPublicKey string `json:"wg_public_key"` AllowedIPs []types.IPNet `json:"allowed_ips"` Endpoint string `json:"endpoint"` }
Peer is the description of a peer of a NetResource
type PoolStats ¶
type PoolStats struct { disk.UsageStat // Counters IO counter for each pool device Counters map[string]disk.IOCountersStat `json:"counters"` }
PoolStats is pool statistics reported by storaged
type Provision ¶ added in v0.4.9
type Provision interface { Counters(ctx context.Context) <-chan ProvisionCounters DecommissionCached(id string, reason string) error }
Provision interface
type ProvisionCounters ¶
type ProvisionCounters struct { Container int64 `json:"container"` Volume int64 `jons:"volume"` Network int64 `json:"network"` ZDB int64 `json:"zdb"` VM int64 `json:"vm"` Debug int64 `json:"debug"` }
ProvisionCounters struct
type RaidProfile ¶
type RaidProfile string
RaidProfile type
const ( // Single profile Single RaidProfile = "single" // Raid0 profile Raid0 RaidProfile = "raid0" // Raid1 profile Raid1 RaidProfile = "raid1" // Raid10 profile Raid10 RaidProfile = "raid10" )
func (RaidProfile) Validate ¶
func (p RaidProfile) Validate() error
Validate make sure profile is correct
type StorageModule ¶
type StorageModule interface { VolumeAllocater ZDBAllocater // Total gives the total amount of storage available for a device type Total(kind DeviceType) (uint64, error) // BrokenPools lists the broken storage pools that have been detected BrokenPools() []BrokenPool // BrokenDevices lists the broken devices that have been detected BrokenDevices() []BrokenDevice //Monitor returns stats stream about pools Monitor(ctx context.Context) <-chan PoolsStats }
StorageModule defines the api for storage
type StoragePolicy ¶
type StoragePolicy struct { // Raid profile for this policy Raid RaidProfile // Number of disks to use in a single pool // note that, the disks count must be valid for // the chosen raid profile. Disks uint8 // Only create this amount of storage pools. Default to 0 -> unlimited. // The spared disks can later be used in automatic repair if a physical // disk got corrupt or bad. // Note that if it's set to 0 (unlimited), some disks might be spared anyway // in case the number of disks required in the policy doesn't add up to pools // for example, a pool of 2s on a machine with 5 disks. MaxPools uint8 }
StoragePolicy describes the pool creation policy
type StrIdentifier ¶
type StrIdentifier string
StrIdentifier is a helper type that implement the Identifier interface on top of simple string
func (StrIdentifier) Identity ¶
func (s StrIdentifier) Identity() string
Identity implements the Identifier interface
type SystemMonitor ¶
type SystemMonitor interface { Memory(ctx context.Context) <-chan VirtualMemoryStat CPU(ctx context.Context) <-chan TimesStat Disks(ctx context.Context) <-chan DisksIOCountersStat Nics(ctx context.Context) <-chan NicsIOCounterStat }
SystemMonitor interface (provided by monitord)
type VDiskModule ¶
type VDiskModule interface { // AllocateDisk with given id and size, return path to virtual disk Allocate(id string, size int64) (string, error) // DeallocateVDisk removes a virtual disk Deallocate(id string) error // Exists checks if disk with that ID already allocated Exists(id string) bool // Inspect return info about the disk Inspect(id string) (VDisk, error) // List lists all the available vdisks List() ([]VDisk, error) }
VDiskModule interface
type VM ¶
type VM struct { // virtual machine name, or ID Name string // CPU is number of cores assigned to the VM CPU uint8 // Memory size in Mib Memory int64 // Network is network info Network VMNetworkInfo // KernelImage path to uncompressed linux kernel ELF KernelImage string // InitrdImage (optiona) path to initrd disk InitrdImage string // KernelArgs to override the default kernel arguments. (default: "ro console=ttyS0 noapic reboot=k panic=1 pci=off nomodules") KernelArgs string // Disks are a list of disks that are going to // be auto allocated on the provided storage path Disks []VMDisk // If this flag is set, the VM module will not auto start // this machine hence, also no auto clean up when it exits // it's up to the caller to check for the machine status // and do clean up (module.Delete(vm)) when needed NoKeepAlive bool }
VM config structure
type VMIface ¶ added in v0.4.9
type VMIface struct { // Tap device name Tap string // Mac address of the device MAC string // Address of the device in the form of cidr for ipv4 IP4AddressCIDR net.IPNet // Gateway address for ipv4 IP4GatewayIP net.IP // Full subnet for the IP4 resource. This allows configuration of networking for // non local subnets (i.e. NR on other nodes). // Does not need to be set for public ifaces IP4Net net.IPNet // Address of the device in the form of cidr for ipv6 IP6AddressCIDR net.IPNet // Gateway address for ipv6 IP6GatewayIP net.IP // Private or public network Public bool }
VMIface structure
type VMInfo ¶
type VMInfo struct { // Flag for enabling/disabling Hyperthreading // Required: true HtEnabled bool // Memory size of VM // Required: true Memory int64 // Number of vCPUs (either 1 or an even number) CPU int64 }
VMInfo returned by the inspect method
type VMModule ¶
type VMModule interface { Run(vm VM) error Inspect(name string) (VMInfo, error) Delete(name string) error Exists(name string) bool Logs(name string) (string, error) }
VMModule defines the virtual machine module interface
type VMNetworkInfo ¶
type VMNetworkInfo struct { // Interfaces for the vm network Ifaces []VMIface // Nameservers dns servers Nameservers []net.IP // NewStyle version of the network. This specifically differentiates between // the old way of statically setting the IP via the `IP` kernel parameter, // or using a boot script. The new way allows multiple interfaces and more // configuration NewStyle bool }
VMNetworkInfo structure
type VersionMonitor ¶
VersionMonitor interface (provided by identityd)
type VolumeAllocater ¶
type VolumeAllocater interface { // CreateFilesystem creates a filesystem with a given size. The filesystem // is mounted, and the path to the mountpoint is returned. The filesystem // is only attempted to be created in a pool of the given type. If no // more space is available in such a pool, `ErrNotEnoughSpace` is returned. // It is up to the caller to handle such a situation and decide if he wants // to try again on a different devicetype CreateFilesystem(name string, size uint64, poolType DeviceType) (Filesystem, error) // ReleaseFilesystem signals that the named filesystem is no longer needed. // The filesystem will be unmounted and subsequently removed. // All data contained in the filesystem will be lost, and the // space which has been reserved for this filesystem will be reclaimed. ReleaseFilesystem(name string) error // ListFilesystems return all the filesystem managed by storeaged present on the nodes // this can be an expensive call on server with a lot of disk, don't use it in a // intensive loop // Special filesystem like internal cache and vdisk are not return by this function // to access them use the GetCacheFS or GetVdiskFS ListFilesystems() ([]Filesystem, error) // Path return the filesystem named name // if no filesystem with this name exists, an error is returned Path(name string) (Filesystem, error) // GetCacheFS return the special filesystem used by 0-OS to store internal state and flist cache GetCacheFS() (Filesystem, error) }
VolumeAllocater is the zbus interface of the storage module responsible for volume allocation
type ZDBAllocater ¶
type ZDBAllocater interface { // Allocate is responsible to make sure the subvolume used by a 0-db as enough storage capacity // of specified size, type and mode // it returns the volume ID and its path or an error if it couldn't allocate enough storage // Note: if allocation already exists with the namespace name, the current allocation is returned // so no need to call Find before calling allocate Allocate(namespace string, diskType DeviceType, size uint64, mode ZDBMode) (Allocation, error) // Find searches the system for the current allocation for the namespace // Return error = "not found" if no allocation exists. Find(namespace string) (allocation Allocation, err error) }
ZDBAllocater is the zbus interface of the storage module responsible for 0-db allocation
type ZDBNamespace ¶
type ZDBNamespace struct { ID string DiskType DeviceType Size uint64 Mode ZDBMode Password string Port int // Listen port of the 0-db owning the namespace }
ZDBNamespace is a 0-db namespace
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package gedis implements a client for Gedis (https://github.com/threefoldtech/digitalmeX/tree/master/docs/Gedis)
|
Package gedis implements a client for Gedis (https://github.com/threefoldtech/digitalmeX/tree/master/docs/Gedis) |
Package provision exposes the Engine type.
|
Package provision exposes the Engine type. |
common
Package common hold logic that is used by both the provision and primitive package it purpose is mainly to avoid circular dependencies
|
Package common hold logic that is used by both the provision and primitive package it purpose is mainly to avoid circular dependencies |
Package zdb implements a client to 0-db: https://github.com/threefoldtech/0-DB
|
Package zdb implements a client to 0-db: https://github.com/threefoldtech/0-DB |
Package zinit exposes function to interat with zinit service life cyle management
|
Package zinit exposes function to interat with zinit service life cyle management |