Vmm_resourcesSourceA tree data structure including policies and dynamic usage.
Considering delegation of resources to someone, and further delegation to others - using a process which is not controlled by the authority - requires runtime tracking of these delegations and the actual usage:
If Alice may create 2 virtual machines, and she delegates the same capability further to both Bob and Charlie, the authority must still enforce that Alice, Bob, and Charlie are able to run 2 virtual machines in total, rather than 2 each.
type t = private {policies : Vmm_core.Policy.t Vmm_trie.t;block_devices : (int * bool) Vmm_trie.t;unikernels : Vmm_core.Unikernel.t Vmm_trie.t;}The type of the resource tree.
find_vm t id is either Some vm or None.
find_policy t Name.t is either Some policy or None.
find_block t Name.t is either Some (size, active) or None.
val check_vm :
t ->
Vmm_core.Name.t ->
Vmm_core.Unikernel.config ->
(unit, [> `Msg of string ]) resultcheck_vm t Name.t vm checks whether vm under Name.t in t would be allowed under the current policies.
insert_vm t Name.t vm inserts vm under Name.t in t, and returns the new t. The caller has to ensure (using check_vm) that a VM with the same name does not yet exist, and the block device is not in use.
val insert_policy :
t ->
Vmm_core.Name.t ->
Vmm_core.Policy.t ->
(t, [> `Msg of string ]) resultinsert_policy t Name.t policy inserts policy under Name.t in t, and returns the new t or an error.
check_block t Name.t size checks whether size under Name.t in t would be allowed under the current policies.
insert_block t Name.t size inserts size under Name.t in t, and returns the new t or an error.
remove_vm t Name.t removes vm Name.t from t.
remove_policy t Name.t removes policy Name.t from t.
remove_block t Name.t removes block Name.t from t.