pub struct Spec {Show 22 fields
pub version: Version,
pub name: String,
pub networks: IndexMap<String, Network>,
pub reach: Vec<Reach>,
pub dns: Option<EnvironmentDns>,
pub inputs: Inputs,
pub secrets: IndexMap<String, SecretSource>,
pub volumes: IndexMap<String, SharedVolume>,
pub machines: IndexMap<String, Machine>,
pub common: Option<Shared>,
pub groups: IndexMap<String, Group>,
pub provision: Vec<Provision>,
pub controller: Option<Controller>,
pub checks: Vec<Check>,
pub message: Option<String>,
pub overrides: Overrides,
pub tools: IndexMap<String, Tool>,
pub targets: Option<Vec<Target>>,
pub constraints: Option<Constraints>,
pub cloud: Option<CloudServices>,
pub clones: IndexMap<String, Vec<String>>,
pub spans: Spans,
}Expand description
An environment spec, as written. Field order is kept (machines start in the order written).
Fields§
§version: VersionThe version of the isoloom.yml format the file is written in: 1.
name: StringThe environment’s id, in kebab case (supplier-portal): it names its containers, VMs,
networks and cloud resources.
networks: IndexMap<String, Network>The environment’s networks, by name: each an address block the machines on it share.
reach: Vec<Reach>Allowed traffic between networks; everything else between networks is blocked.
dns: Option<EnvironmentDns>The environment’s names in a private DNS zone: off unless private: true.
inputs: InputsValues given at each start (a flag, a launch token): a list of names, or a map of name to
{ sensitive, description }. An input is sensitive unless it says otherwise: it reaches a
machine as a file (files: [{ path, input }]), never as an environment variable.
secrets: IndexMap<String, SecretSource>Secrets, by kebab-case name: the store each value is read from at each start (env,
file, vault, sops). A machine gets one as a file (files: [{ path, secret }]).
volumes: IndexMap<String, SharedVolume>Volumes shared between machines, by name: { owner, persistent }.
machines: IndexMap<String, Machine>The environment’s machines, by name, started in the order written (after their
depends_on).
common: Option<Shared>Machine fields every machine shares (a machine’s own value wins).
groups: IndexMap<String, Group>Named sets of machines sharing fields, also Ansible inventory groups and overrides keys.
provision: Vec<Provision>The environment’s own Ansible, run from Isoloom’s Linux controller once every machine is up.
controller: Option<Controller>The controller added for provision: and playbook checks: { resources, keep_running }.
checks: Vec<Check>Black-box checks that prove the behaviour on every target.
message: Option<String>Shown once the environment is up, in Markdown, with {{ path }} placeholders:
machines.<m>.ports.<name>.port, .published, .url, machines.<m>.addresses.<network>
and cloud.outputs.<name>, each checked at validation.
overrides: OverridesPer-target facts with no portable meaning, by target (docker, vagrant, proxmox,
aws, …).
tools: IndexMap<String, Tool>Observers beside the environment, on every network: a toolbox (shell), or any container
image.
targets: Option<Vec<Target>>Narrows the targets the machines’ forms allow.
constraints: Option<Constraints>What the place it runs in imposes: an HTTP proxy, registry and package mirrors, time servers.
cloud: Option<CloudServices>An environment of cloud services rather than machines: a Terraform module applied into the user’s own cloud account.
clones: IndexMap<String, Vec<String>>Base machine name → its clones, for machines that had a count. Filled when parsing.
spans: SpansWhere each field is written, for the problems found after parsing.
Trait Implementations§
Source§impl JsonSchema for Spec
impl JsonSchema for Spec
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read more