tfgrid #
TFGrid workload deployment
inspired by: https://library.threefold.me/info/manual/#/manual3_iac/grid3_javascript
this client allows deployment of all kinds of workloads on TFGrid
- kubernetes
- vm
- zdb
- networks
- qsfs (quantum safe filesystem)
- kvs (key value stor)
- gateways
- ...
TODO:
Principles
The metadata we need to remember is stored in the KVS on TFChain (encrypted by the private key of the account). This metadata is important it has all info in relation to workloads we have deployed, where are they deployed, ...
TODO
- key value stor on tfchain
- most of primitives
- how to do capacity planning using the TFGrid Proxy
fn account_delete #
fn account_delete(name string) ?
delete account on the handler in case it was already initialized, does not give error if not active yet if multisignature more than one will have to do
fn account_init #
fn account_init(args AccountArgs)
init the account on the action handler for TFGrid will give error if it already exists and mneomonic or type different will also give error if an error to create it e.g. wrong mnemonic the account will be selected, which means all actions done after are done on this account
fn vm_create #
fn vm_create(args VMArgs) ?
init the account on the action handler for TFGrid will give error if it already exists and mneomonic or type different will also give error if an error to create it e.g. wrong mnemonic the account will be selected, which means all actions done after are done on this account
fn vm_delete #
fn vm_delete(name string) ?
fn vm_info #
fn vm_info(name string) ?VMInfo
get object info from a deployed ZDB namespace
fn zdb_create #
fn zdb_create(args ZDBArgs) ?
init the account on the action handler for TFGrid will give error if it already exists and mneomonic or type different will also give error if an error to create it e.g. wrong mnemonic the account will be selected, which means all actions done after are done on this account
fn zdb_delete #
fn zdb_delete(name string) ?
fn zdb_info #
fn zdb_info(name string) ?ZDBInfo
get object info from a deployed ZDB namespace
enum ZDBMode #
enum ZDBMode {
user
seq
}
struct AccountArgs #
struct AccountArgs {
pub:
name string
mnemonic string // private key in mnemonic form to be able to work on the right TFGrid net (TFChain)
nettype TFGridNet
expiration int = 300 // will expire default 5 min
multisig MultiSig // optional, not implemented yet in TFGrid
}
struct IPRange #
struct IPRange {
pub:
range string = '10.10.0.0'
mask i16 = 16
}
struct MultiSig #
struct MultiSig {
pub:
pubkeys []string // the pubkeys of who needs to sign
min_signature i16 // how many need minimally to sign
}
used for when we do smart contract for IT with multiple people
struct VMArgs #
struct VMArgs {
pub:
name string
disks []VMDisk
network VMNet
node_id u32 // id of the node where this VM needs to be deployed
public_ip bool // connect virtual machine to public internet, this VM will receive an IP address
planetary bool // connect the virtual machine to the planetary network
cpu u8 // nr of cpu cores 1...16
memory u16 // MB of ram e.g. 1024*2 would be 2 GB
rootfs_size u16 = 1 // GB of root filesystem
flist string = 'https://hub.grid.tf/tf-official-apps/base:latest.flist'
entrypoint string = '/sbin/zinit init'
env map[string]string // environment variables as passed to VM
ssh_key string // default ssh_key is alias to SSH_KEY in env
}
struct VMDisk #
struct VMDisk {
pub:
name string = 'default'
size i16 = 8 // GB size of disk
mountpoint string = '/testdisk'
}
struct VMInfo #
struct VMInfo {
pub:
name string
disks []VMDisk
network VMNet
node_id u32 // id of the node where this VM needs to be deployed
public_ip bool // connect virtual machine to public internet, this VM will receive an IP address
planetary bool // connect the virtual machine to the planetary network
cpu u8 // nr of cpu cores 1...16
memory u16 // MB of ram e.g. 1024*2 would be 2 GB
rootfs_size u16 = 1 // GB of root filesystem
flist string = 'https://hub.grid.tf/tf-official-apps/base:latest.flist'
entrypoint string = '/sbin/zinit init'
env map[string]string // environment variables as passed to VM
ssh_key string // default ssh_key is alias to SSH_KEY in env
}
TODO what info comes back?
struct VMNet #
struct VMNet {
pub:
name string
range IPRange
}
network needs to correspond to network created on nodes, otherwise this will not work
struct ZDBArgs #
struct ZDBArgs {
pub:
name string
node_id u32 // id of the node where this ZDB namespace needs to be deployed
mode ZDBMode
disk_size u16 = 9
public bool // a public namespace can be read-only if a password is set
password string // password as set on the namespace
}
struct ZDBInfo #
struct ZDBInfo {
pub:
name string
node_id u32 // id of the node where this ZDB namespace needs to be deployed
mode ZDBMode
disk_size u16 = 9
public bool // a public namespace can be read-only if a password is set
password string // password as set on the namespace
}
TODO what info comes back?