Current section

Files

Jump to
fifo_spec src fifo.erl
Raw

src/fifo.erl

-module(fifo).
-export_type([attr_list/0,
key/0,
keys/0,
object/0,
config/0,
vm_config/0,
vm_type/0,
vm_state/0,
vm_state_atom/0,
log/0,
value/0,
matcher/0,
uuid/0,
obj/0,
firewall_rule/0,
smartos_fw_rule/0]).
-export_type([
dataset/0,
dataset_id/0,
dtrace_id/0,
dtrace/0,
grouping_id/0,
grouping/0,
hypervisor/0,
hypervisor_id/0,
iprange/0,
iprange_id/0,
network/0,
network_id/0,
package/0,
package_id/0,
vm/0,
vm_id/0
]).
-export_type([user/0,
user_id/0,
client_id/0,
role/0,
role_id/0,
org/0,
org_id/0,
user_token_id/0,
token/0,
oauth_token_type/0,
scope_list/0,
scope_map/0,
trigger/0,
event/0
]).
-export_type([permission/0,
comparer/0,
number_comparer/0,
set_comparer/0,
element_comparer/0,
permission_comparer/0]).
-export_type([sniffle_message/0,
sniffle_dataset_message/0,
sniffle_dtrace_message/0,
sniffle_grouping_message/0,
sniffle_hypervisor_message/0,
sniffle_iprange_message/0,
sniffle_network_message/0,
sniffle_package_message/0,
sniffle_vm_message/0,
howl_message/0,
chunter_message/0,
snarl_message/0,
snarl_user_message/0,
snarl_role_message/0,
snarl_org_message/0,
snarl_acc_message/0,
snarl_oauth_message/0
]).
-export_type([write_fsm_reply/0,
read_fsm_reply/0,
coverage_fsm_reply/0]).
-type key()::binary()|integer().
-type keys()::key()|[key()].
-type value()::binary()|number()|object()|jsxarray()|null|true|false.
-type object():: #{binary() => value()}.
-type jsxarray()::[value()].
-type user_token_id() :: user_id() | {token, Token::token()}.
-type realm() :: binary().
-type grouping_type() :: cluster | stack | none.
-type trigger() :: term().
-type log() :: {{integer(), integer(), integer()}, term()}.
%% Types for the different FiFo datasets
-type dataset() :: ft_dataset:dataset().
-type dataset_id() :: uuid().
-type dtrace_id() :: uuid().
-type dtrace() :: ft_dtrace:dtrace().
-type grouping_id() :: uuid().
-type grouping() :: ft_grouping:grouping().
-type hypervisor() :: ft_hypervisor:hypervisor().
-type hypervisor_id() :: uuid().
-type iprange() :: ft_iprange:iprange().
-type iprange_id() :: uuid().
-type network() :: ft_network:network().
-type network_id() :: uuid().
-type package() :: ft_package:package().
-type package_id() :: uuid().
-type vm() :: ft_vm:vm().
-type vm_id() :: uuid().
-type obj() :: ft_obj:obj().
-type org() :: ft_org:org().
-type org_id() :: uuid().
-type role() :: ft_role:role().
-type role_id() :: uuid().
-type user() :: ft_user:user().
-type user_id() :: uuid().
-type client_id() :: uuid().
-type oauth_token_type() :: access_codes | access_tokens | refresh_tokens.
-type token() :: binary() | {oauth_token_type(), binary()}.
-type event() :: atom().
-type permission() ::
[binary()].
-type number_comparer() ::
'>=' | '<=' | '>' | '<' | '=:=' | '=/='.
-type set_comparer() ::
'subset' | 'superset' | 'disjoint'.
-type element_comparer() ::
'element'.
-type permission_comparer() ::
'allowed'.
-type comparer() ::
number_comparer() |
set_comparer() |
element_comparer() |
permission_comparer().
-type matcher_type() ::
'must' | 'cant' | number().
-type permission_key() ::
[binary() | {binary(), binary()}].
-type matcher() ::
{matcher_type(), number_comparer(), Key::binary(), number()} |
{matcher_type(), set_comparer(), Key::binary(), [term()]} |
{matcher_type(), element_comparer(), Key::binary(), term()} |
{matcher_type(), permission_comparer(), Key::permission_key(),
[permission()]}.
-type attr_list() :: [{Key::keys(),
Value::value() | delete}].
-type vm_config() :: object().
-type config() :: object().
-type uuid() :: <<_:288>>.
-type vm_type() :: kvm | zone.
-type vm_state_atom() ::
booting |
shutting_down |
running |
stopped.
-type vm_state() ::
binary().
-type backup_opt() :: term().
%%%===================================================================
%%% Howl
%%%===================================================================
-type howl_message() ::
ping |
version |
{msg, Channel::uuid(), Message::object()} |
{msg, Messages::[{Channel::uuid(), Message::object()}]}.
%%%===================================================================
%%% Chunter
%%%===================================================================
-type chunter_message() ::
ping |
version |
update |
{lock, LockID::binary()} |
{release, LockID::binary()} |
{machines, start, UUID::vm_id()} |
{machines, start, UUID::vm_id(), Image::binary()} |
{machines, stop, UUID::vm_id()} |
{machines, stop, force, UUID::vm_id()} |
{machines, reboot, UUID::vm_id()} |
{machines, reboot, force, UUID::vm_id()} |
{machines, snapshot, UUID::vm_id(), SnapID::uuid()} |
{machines, snapshot, delete, UUID::vm_id(), SnapID::uuid()} |
{machines, snapshot, rollback, UUID::vm_id(), SnapID::uuid()} |
{machines, snapshot, store, UUID::vm_id(), SnapID::uuid(),
ImgID::uuid()} |
{machines, snapshot, store, UUID::vm_id(), SnapId::uuid(), Img::uuid(),
Host::inet:ip_address() | inet:hostname(), Port::inet:port_number(),
Bucket::binary(), AKey::binary(), SKey::binary(),
Opts::[proplists:property()]} |
{machines, backup, UUID::vm_id(), BackupID::uuid(),
Opts::[backup_opt()]} |
{machines, backup, restore, UUID::vm_id(), BackupID::uuid(),
Opts::[backup_opt()]} |
{machines, backup, delete, UUID::vm_id(), BackupID::uuid()} |
{machines, service, enable | disable | clear | restart | refresh,
UUID::vm_id(), Service::uuid()} |
{service, enable | disable | clear | refresh | restart,
Service :: uuid()} |
{machines, create,
UUID::vm_id(),
PSpec::package(),
DSpec::dataset(),
Config::config()} |
{machines, delete, UUID::vm_id()} |
{machines, update,
UUID::vm_id(),
PSpec::package() | undefined,
Config::config()} |
{fw, update, UUID::vm_id()}.
%%%===================================================================
%%% Sniffle
%%%===================================================================
-type ac_user()::user_id() | undefined.
-type sniffle_message() ::
ping |
version |
{s3, Type :: atom()} |
{cloud, status}.
-type sniffle_dtrace_message() ::
{dtrace, add, Name::binary(), Script::string()} |
{dtrace, delete, ID::dtrace_id()} |
{dtrace, get, ID::dtrace_id()} |
{dtrace, list} |
{dtrace, list, Requreiments::[matcher()], Full::boolean()} |
{dtrace, name, ID::dtrace_id(), binary()} |
{dtrace, uuid, ID::dtrace_id(), binary()} |
{dtrace, script, ID::dtrace_id(), string()} |
{dtrace, set_metadata, ID::dtrace_id(), attr_list()} |
{dtrace, set_config, ID::dtrace_id(), attr_list()} |
{dtrace, run, ID::dtrace_id(), Servers::[hypervisor()]}.
-type sniffle_vm_message() ::
{vm, store, ac_user(), binary()} |
{vm, backup, incremental, Vm::vm_id(), Parent::uuid(), BackupID::uuid(),
Opts::[backup_opt()]} |
{vm, backup, full,
Vm::vm_id(), BackupID::uuid(), Opts::[backup_opt()]} |
{vm, backup, restore, Vm::vm_id(), BackupID::uuid()} |
{vm, backup, restore,
ac_user(), Vm::vm_id(), BackupID::uuid(), Opts::[backup_opt()]} |
{vm, backup, delete, Vm::vm_id(), BackupID::uuid(),
Where::hypervisor|cloud} |
{vm, service, enable, Vm::vm_id(), Service::binary()} |
{vm, service, disable, Vm::vm_id(), Service::binary()} |
{vm, service, clear, Vm::vm_id(), Service::binary()} |
{vm, service, refresh, Vm::vm_id(), Service::binary()} |
{vm, service, restart, Vm::vm_id(), Service::binary()} |
{vm, log, Vm::vm_id(), Log::term()} |
{vm, register, Vm::vm_id(), Hypervisor::binary()} |
{vm, snapshot, Vm::vm_id(), Comment::binary()} |
{vm, snapshot, delete, Vm::vm_id(), UUID::uuid()} |
{vm, snapshot, rollback, Vm::vm_id(), UUID::uuid()} |
{vm, snapshot, commit_rollback, Vm::vm_id(), UUID::uuid()} |
{vm, snapshot, promote, Vm::vm_id(),
SnapUUID::uuid(), Dataset::config()} |
{vm, create, Package::binary(), Dataset::binary(), Config::config()} |
{vm, dry_run, Package::binary(), Dataset::binary(), Config::config()} |
{vm, update, ac_user(), Vm::vm_id(),
Package::package_id() | undefined, Config::config()} |
{vm, unregister, Vm::vm_id()} |
{vm, get, Vm::vm_id()} |
{vm, start, Vm::vm_id()} |
{vm, delete, ac_user(), Vm::vm_id()} |
{vm, stop, Vm::vm_id()} |
{vm, reboot, Vm::vm_id()} |
{vm, stop, force, Vm::vm_id()} |
{vm, reboot, force, Vm::vm_id()} |
{vm, owner, ac_user(), vm_id(), binary()} |
{vm, state, vm_id(), binary()} |
{vm, set_service, vm_id(), attr_list()} |
{vm, set_backup, vm_id(), attr_list()} |
{vm, set_snapshot, vm_id(), attr_list()} |
{vm, set_metadata, vm_id(), attr_list()} |
{vm, set_config, vm_id(), attr_list()} |
{vm, set_info, vm_id(), attr_list()} |
{vm, list, Requirements::[matcher()], Full::boolean()} |
{vm, list} |
{vm, nic, add, Vm::vm_id(), IPRange::iprange_id()} |
{vm, nic, remove, Vm::vm_id(), IPRange::iprange_id()} |
{vm, nic, primary, Vm::vm_id(), MAC::binary()}.
-type sniffle_hypervisor_message() ::
{hypervisor, register, Hypervisor::hypervisor_id(),
Host::binary(),
Port::inet:port_number()} |
{hypervisor, unregister, Hypervisor::hypervisor_id()} |
{hypervisor, get, Hypervisor::hypervisor_id()} |
{hypervisor, service, Hypervisor::hypervisor_id(),
Action::enable|disable|clear|refresh|restart, Service::binary()} |
{hypervisor, set_resource, Hypervisor::hypervisor_id(), attr_list()} |
{hypervisor, set_characteristic,
Hypervisor::hypervisor_id(), attr_list()} |
{hypervisor, set_metadata, Hypervisor::hypervisor_id(), attr_list()} |
{hypervisor, set_pool, Hypervisor::hypervisor_id(), attr_list()} |
{hypervisor, set_service, Hypervisor::hypervisor_id(), attr_list()} |
{hypervisor, alias, Hypervisor::hypervisor_id(), binary()} |
{hypervisor, etherstubs, Hypervisor::hypervisor_id(), list()} |
{hypervisor, host, Hypervisor::hypervisor_id(), binary()} |
{hypervisor, networks, Hypervisor::hypervisor_id(), list()} |
{hypervisor, path, Hypervisor::hypervisor_id(), list()} |
{hypervisor, port, Hypervisor::hypervisor_id(), inet:port_number()} |
{hypervisor, sysinfo, Hypervisor::hypervisor_id(), list()} |
{hypervisor, uuid, Hypervisor::hypervisor_id(), binary()} |
{hypervisor, version, Hypervisor::hypervisor_id(), binary()} |
{hypervisor, virtualisation, Hypervisor::hypervisor_id(), list()} |
{hypervisor, list} |
{hypervisor, list, Requirements::[matcher()], Full::boolean()}.
-type sniffle_dataset_message() ::
{dataset, create, Dataset::dataset_id()} |
{dataset, delete, Dataset::dataset_id()} |
{dataset, import, URL::dataset_id()} |
{dataset, get, Dataset::dataset_id()} |
{dataset, list} |
{dataset, status, Dataset::dataset_id(), binary()} |
{dataset, imported,
Dataset::dataset_id(), float() | non_neg_integer()} |
{dataset, description, Dataset::dataset_id(), binary()} |
{dataset, disk_driver, Dataset::dataset_id(), binary()} |
{dataset, homepage, Dataset::dataset_id(), binary()} |
{dataset, image_size, Dataset::dataset_id(), non_neg_integer()} |
{dataset, name, Dataset::dataset_id(), binary()} |
{dataset, networks, Dataset::dataset_id(), list()} |
{dataset, nic_driver, Dataset::dataset_id(), binary()} |
{dataset, os, Dataset::dataset_id(), binary()} |
{dataset, type, Dataset::dataset_id(), kvm | zone} |
{dataset, users, Dataset::dataset_id(), list()} |
{dataset, version, Dataset::dataset_id(), binary()} |
{dataset, set_metadata, Dataset::dataset_id(), attr_list()} |
{dataset, list, Requirements::[matcher()], Full::boolean()}.
-type sniffle_network_message() ::
{network, create, binary()} |
{network, delete, network_id()} |
{network, add_iprange, network_id(), iprange_id()} |
{network, remove_iprange, network_id(), iprange_id()} |
{network, add_resolver, network_id(), binary()} |
{network, remove_resolver, network_id(), binary()} |
{network, get, network_id()} |
{network, uuid, network_id(), binary()} |
{network, name, network_id(), binary()} |
{network, set_metadata, iprange_id(), attr_list()} |
{network, list} |
{network, list, Requirements::[matcher()], Full::boolean()}.
-type sniffle_iprange_message() ::
{iprange, create,
Iprange::binary(),
Network::integer(),
Gateway::integer(),
Netmask::integer(),
First::integer(),
Last::integer(),
Tag::binary(),
VLan::pos_integer()} |
{iprange, delete, Iprange::iprange_id()} |
{iprange, get, Iprange::iprange_id()} |
{iprange, release, Iprange::iprange_id(), Ip::integer()} |
{iprange, claim, Iprange::iprange_id()} |
{iprange, list} |
{iprange, name, iprange_id(), binary()} |
{iprange, uuid, iprange_id(), binary()} |
{iprange, network, iprange_id(), non_neg_integer()} |
{iprange, netmask, iprange_id(), non_neg_integer()} |
{iprange, gateway, iprange_id(), non_neg_integer()} |
{iprange, set_metadata, iprange_id(), attr_list()} |
{iprange, tag, iprange_id(), non_neg_integer()} |
{iprange, vlan, iprange_id(), non_neg_integer()} |
{iprange, list, Requirements::[matcher()], Full::boolean()}.
-type sniffle_package_message() ::
{package, create, PackageName::binary()} |
{package, delete, package_id()} |
{package, get, package_id()} |
{package, set_metadata, package_id(), attr_list()} |
{package, blocksize, package_id(), pos_integer()} |
{package, compression, package_id(), binary()} |
{package, cpu_cap, package_id(), pos_integer()} |
{package, cpu_shares, package_id(), pos_integer()} |
{package, max_swap, package_id(), pos_integer()} |
{package, name, package_id(), binary()} |
{package, quota, package_id(), pos_integer()} |
{package, ram, package_id(), pos_integer()} |
{package, uuid, package_id(), binary()} |
{package, zfs_io_priority, package_id(), pos_integer()} |
{package, remove_requirement, package_id(), term()} |
{package, add_requirement, package_id(), term()} |
{package, list} |
{package, list, Requirements::[matcher()], Full::boolean()}.
-type sniffle_grouping_message() ::
{grouping, add, GroupingName::binary(), grouping_type()} |
{grouping, delete, grouping_id()} |
{grouping, get, grouping_id()} |
{grouping, element, add | remove,
grouping_id(), Element::grouping_id()| vm_id()} |
{grouping, grouping, add | remove,
grouping_id(), Parent::grouping_id()} |
{grouping, metadata, set, grouping_id(), attr_list()} |
{grouping, config, set, grouping_id(), attr_list()} |
{grouping, list} |
{grouping, list, Requirements::[matcher()], Full::boolean()}.
%%%===================================================================
%%% Snarl
%%%===================================================================
-type snarl_message() ::
version |
{cloud, status} |
{token, delete, Realm::realm(), Token::token()} |
{user, auth, Realm::realm(), UserName::binary(), Pass::binary()} |
{user, token, Realm::realm(), user_id()} |
{user, auth,
Realm::realm(), UserName::binary(), Pass::binary(), basic | binary()} |
{user, allowed,
Realm::realm(), User::user_token_id(), Permission::permission()}.
-type snarl_user_message() ::
{user, list, realm()} |
{user, list, realm(), Requirements::[matcher()], Full::boolean()} |
{user, get, realm(), user_id()} |
{user, get, realm(), token()} |
{user, lookup, realm(), UserName::binary()} |
{user, cache, realm(), token()} |
{user, cache, realm(), user_id()} |
{user, add, realm(), UserName::binary()} |
{user, add, realm(), Creator::user_id(), UserName::binary()} |
{user, delete, realm(), user_id()} |
{user, passwd, realm(), user_id(), Pass::binary()} |
{user, join, realm(), user_id(), Role::role_id()} |
{user, leave, realm(), user_id(), Role::role_id()} |
{user, grant, realm(), user_id(), Permission::permission()} |
{user, revoke, realm(), user_id(), Permission::permission()} |
{user, revoke_prefix, realm(), user_id(), Permission::permission()} |
{user, keys, find, realm(), KeyID::binary()} |
{user, keys, add, realm(), user_id(), KeyID::binary(), Key::binary()} |
{user, keys, revoke, realm(), user_id(), KeyID::binary()} |
{user, keys, get, realm(), user_id()} |
{user, yubikeys, add, realm(), user_id(), binary()} |
{user, yubikeys, remove, realm(), user_id(), binary()} |
{user, yubikeys, get, realm(), user_id()} |
{user, set_metadata, realm(), user_id(), Attrs::attr_list()} |
{user, org, join, realm(), user_id(), Org::org_id()} |
{user, org, leave, realm(), user_id(), Org::role_id()} |
{user, org, active, realm(), user_id()} |
{user, org, select, realm(), user_id(), Org::org_id()}.
-type snarl_role_message() ::
{role, list, realm()} |
{role, list, realm(), Requirements::[matcher()], Full::boolean()} |
{role, get, realm(), role_id()} |
{role, add, realm(), RoleName::binary()} |
{role, delete, realm(), role_id()} |
{role, set_metadata, realm(), role_id(), Attrs::attr_list()} |
{role, grant, realm(), role_id(), Permission::permission()} |
{role, revoke_prefix, realm(), role_id(), Permission::permission()} |
{role, revoke, realm(), role_id(), Permission::permission()}.
-type snarl_org_message() ::
{org, list, realm()} |
{org, list, realm(), Requirements::[matcher()], Full::boolean()} |
{org, get, realm(), org_id()} |
{org, add, realm(), OrgName::binary()} |
{org, delete, realm(), org_id()} |
{org, set_metadata, realm(), org_id(), Attrs::attr_list()} |
{org, trigger, add, realm(), org_id(), Trigger::trigger()} |
{org, trigger, remove, realm(), org_id(), Trigger::trigger()} |
{org, trigger, execute, realm(), org_id(), Trigger::trigger(),
Payload::term()} |
{org, resource_action, realm(), org_id(), Resource::binary(),
Timestamp::pos_integer(), Action::atom(), Opts::proplists:proplist()}.
-type acc_action() :: create | update | destroy.
-type snarl_acc_message() ::
{accounting, acc_action(),
realm(), org_id(), uuid(), pos_integer(), term()} |
{accounting, get, realm(), org_id()} |
{accounting, get, realm(), org_id(), uuid()} |
{accounting, get, realm(), org_id(),
Start :: pos_integer(), End :: pos_integer()}.
-type scope_list() :: [binary()].
-type scope_map() :: #{
scope => binary(),
desc => binary(),
default => boolean(),
permissions => list()
}.
-type uri() :: binary().
-type snarl_oauth_message() ::
{oauth2, scope, realm()} |
{oauth2, scope, realm(), ScopeName ::binary()} |
{oauth2, authorize_password,
realm(), user_id(), scope_list()} |
{oauth2, authorize_password,
realm(), user_id(), client_id(), scope_list()} |
{oauth2, authorize_password,
realm(), user_id(), client_id(), uri(), scope_list()} |
{oauth2, authorize_client_credentials,
realm(), client_id(), scope_list()} |
{oauth2, authorize_code_grant,
realm(), client_id(), Code::binary(), uri()} |
{oauth2, authorize_code_request,
realm(), user_id(), client_id(), uri(), scope_list()} |
{oauth2, issue_code, realm(), Auth::term()} |
{oauth2, issue_token, realm(), Auth::term()} |
{oauth2, issue_token_and_refresh, realm(), Auth::term()} |
{oauth2, verify_access_token, realm(), Token::binary()} |
{oauth2, verify_access_code, realm(), AccessCode::binary()} |
{oauth2, verify_access_code,
realm(), AccessCode::binary(), client_id()} |
{oauth2, refresh_access_token,
realm(), client_id(), RefreshToken::binary(), scope_list()}.
-type write_fsm_reply() ::
not_found | ok | {error, timeout} | {ok, term()}.
-type read_fsm_reply() ::
not_found | {error, timeout} | {ok, term()}.
-type coverage_fsm_reply() ::
not_found | {error, timeout} | {ok, term()}.
-type smartos_fw_targets() ::
{vm, UUID :: vm_id() | all} |
{ip, IP :: integer()} |
{subnet, Base :: integer(), Mask :: integer()} |
{tag, Tag :: binary(), Val :: binary() | integer()} |
{tag, Tag :: binary()} |
any.
-type icmp_type() ::
{icmp, Type :: non_neg_integer()} |
{icmp, Type :: non_neg_integer(), Code :: non_neg_integer()}.
-type fw_action() ::
allow |
block.
-type smartos_fw_rule() ::
{fw_action(), [smartos_fw_targets()], [smartos_fw_targets()],
tcp | udp, [integer()]} |
{fw_action(), [smartos_fw_targets()], [smartos_fw_targets()],
icmp, [icmp_type()]}.
-type fw_direction() ::
inbound |
outbound.
-type fw_target() ::
all |
{ip, IP :: pos_integer()} |
{subnet, Network :: pos_integer(), Mask ::integer()} |
{vm, UUID :: vm_id()} |
{cluster, UUID :: grouping_id()} |
{stack, UUID :: grouping_id()} |
{network, UUID :: network_id()}.
-type fw_filter() ::
{tcp | udp, [integer()]} |
{icmp, [icmp_type()]}.
-type fw_iface() ::
{nic, Interface :: binary()} |
{network, UUID :: network_id()} |
all.
-type firewall_rule() ::
{fw_action(), fw_direction(), fw_target(), fw_filter()} |
{fw_action(), fw_iface(), fw_direction(), fw_target(), fw_filter()}.