Primitives are the software components of the CloudCIX IaaS platform that manage the hardware on which the infrastructure is built.
There are three critical properties of all primitives. These properties are required to ensure the platform produces reliable and consistent results.
Primitives are (usually) Idempotent
There is (usually) no difference in outcome between calling a primitive once and calling it multiple times.
For example, if a VM has 4GB of RAM and a primitive call is to increase that to 8GB. If you call the primitive twice, then the resulting RAM should remain at 8GB. Thus, a primitive to increase RAM by an amount does not exist but a primitive to change RAM to a certain amount exists.
Some primitives, such as snapshot_kvm build, create a new shapshot instance every time the primitive is called.
Non self interference
A primitive will not change that which has already been instanciated by another instance of the same primitive being called.
For example, if a primitive adds a new interface to a VM, it does not delete or modify an existing interface to that VM.
Non interference with other primitives
A primitive will not change that which was created by another primitive.
If different primitives use the same underlying technology then there must be a mechanism to separate their domains. For example if two different primitives use nftables (perhaps one creating a firewall and the other a VPN tunnel) then each should not interfere with configuration applied by the other.
Currently CloudCIX supports 26 primitives:
firewall_main (build)
net_main (build, quiesce, restart)
vpns2s_main (build)
bridge_main (build, head)
firewall_ns (build, scrub)
net_ns (build, update, scrub)
dhcp_ns (build, scrub)
nginx_ns (build, scrub)
vpns2s_ns (build, scrub)
vpndyn_ns (build, scrub)
kvm (build, quiesce, restart, scrub)
bridge_kvm (build, scrub)
storage_kvm (build, update, scrub)
cpu_kvm (update)
ram_kvm (update)
backup_kvm (build, scrub)
snapshot_kvm (build, update, scrub)
gpu_kvm (build, scrub)
rbd (build, update, scrub)
rbd_kvm (build, update)
hyperv (build, quiesce, restart, scrub)
storage_hyperv (build, update, scrub)
cpu_hyperv (update)
ram_hyperv (update)
backup_hyperv (build, scrub)
snapshot_hyperv (build, update, scrub)
The config_filepath is an optional parameter, if it is not provided it will
default to the current path where the primitives
project is installed.
Primitive |
Build |
Update |
Quiesce |
Restart |
Scrub |
Head |
---|---|---|---|---|---|---|
PodNet Networking Primitives |
||||||
firewall_main |
Build |
|||||
net_main |
Build |
Quiesce |
Restart |
|||
bridge_main |
Build |
Head |
||||
vpns2s_main |
Build |
|||||
Project Networking Primitives |
||||||
firewall_ns |
Build |
Scrub |
||||
net_ns |
Build |
Update |
Scrub |
|||
dhcp_ns |
Build |
Scrub |
||||
nginx_ns |
Build |
Scrub |
||||
vpns2s_ns |
Build |
Scrub |
||||
vpndyn_ns |
Build |
Scrub |
||||
Compute KVM Primitives |
||||||
kvm |
Build |
Quiesce |
Restart |
Scrub |
||
bridge_kvm |
Build |
Scrub |
Head |
|||
storage_kvm |
Build |
Update |
Scrub |
|||
cpu_kvm |
Update |
|||||
ram_kvm |
Update |
|||||
snapshot_kvm |
Build |
Update |
Scrub |
|||
backup_kvm |
Build |
Scrub |
||||
gpu_kvm |
Quiesce |
Restart |
||||
rbd |
Build |
Update |
Scrub |
|||
rbd_kvm |
Quiesce |
Restart |
||||
Compute HyperV Primitives |
||||||
hyperv |
Build |
Quiesce |
Restart |
Scrub |
||
storage_hyperv |
Build |
Update |
Scrub |
|||
cpu_hyperv |
Update |
|||||
ram_hyperv |
Update |
|||||
snapshot_hyperv |
Build |
Update |
Scrub |
|||
backup_hyperv |
Build |
Scrub |
Primitive |
Contract |
Config file |
---|---|---|
firewall_main.build |
|
|
net_main.build |
|
|
vpns2s_main.build |
|
|
firewall_ns.build |
|
|
net_ns.build |
|
|
net_ns.scrub |
|
|
vpns2s_ns.bulld |
|
|
vpns2s_ns.scrub |
|
|
vpndyn_ns.bulld |
||
vpndyn_ns.scrub |
||
bridge_main.build |
|
|
bridge_main.head |
|
|
bridge_kvm.build |
|
|
bridge_kvm.scrub |
|
|
bridge_kvm.head |
|
|
hyperv.build |
|
|
hyperv.quiesce |
|
|
hyperv.restart |
|
|
hyperv.scrub |
|
|
kvm.build |
|
|
kvm.quiesce |
|
|
kvm.restart |
|
|
kvm.scrub |
|
|
storage_hyperv.build |
|
|
storage_hyperv.update |
|
|
storage_hyperv.scrub |
|
|
storage_kvm.build |
|
|
storage_kvm.update |
|
|
storage_kvm.scrub |
|
|
cpu_hyperv.update |
|
|
cpu_kvm.update |
|
|
ram_hyperv.update |
|
|
ram_kvm.update |
|
|
backup_hyperv.build |
|
|
backup_hyperv,scrub |
|
|
backup_kvm.build |
|
|
backup_kvm.scrub |
|
|
snapshot_hyperv.build |
|
|
snapshot_hyperv.update |
|
|
snapshot_hyperv.scrub |
|
|
snapshot_kvm.build |
|
|
snapshot_kvm.update |
|
|
snapshot_kvm.scrub |
|
|
gpu_kvm.update_attach |
|
|
gpu_kvm.update_detach |
|
|
rbd.build |
|
|
rbd.update |
||
rbd.scrub |
|
|
rbd_kvm.update_attach |
|
|
rbd_kvm.update_detach |
|