reconstructed/example/01-test-reconstructed.yml
Emmanuel BENOîT f2d1e2da50 Implemented vars clause
* Can be used on any instruction
  * Variables are evaluated before condition is checked
2022-09-18 10:06:19 +02:00

112 lines
2.9 KiB
YAML

---
plugin: reconstructed
instructions:
# Check whether that host is managed
- action: set_fact
name: inv__managed
value: >-
{{ inv__data is defined
and inv__data.network is defined
and inv__data.service is defined
and inv__data.instance is defined }}
- when: not inv__managed
action: stop
# Fail when the host name starts with "evil".
- action: block
block:
- when: inventory_hostname.startswith( 'evil' )
action: fail
msg: "{{ inventory_hostname }} is obviously evil, skipping."
rescue:
# Do not crash on redeemably evil VMs, but still skip them.
- when: inv__data.unredeemable is defined
action: fail
msg: "{{ reconstructed_error }}"
- action: create_group
group: reedmably_evil
add_host: true
- action: stop
# Only create the managed groups if we *have* managed hosts
- action: block
run_once: true
block:
- action: create_group
group: managed
- loop: [by_environment, by_network, by_failover_stack, by_service]
action: create_group
group: "{{ item }}"
parent: managed
# Copy inv__data fields to separate inv__ variables
- loop:
- component
- description
- fostack
- instance
- network
- service
- subcomponent
when: inv__data[item] is defined
action: set_fact
name: "inv__{{ item }}"
value: "{{ inv__data[ item ] }}"
# Environment variable and groups
- action: set_fact
name: inv__environment
value: >-
{{
inv__data.environment | default(
( inv__instance == "prod" ) | ternary( "prod", "dev" )
)
}}
- action: create_group
group: "env_{{ inv__environment }}"
parent: by_environment
add_host: true
# Failover stack group
- action: create_group
group: >-
{{
( inv__fostack is defined )
| ternary( "fostack_" ~ inv__fostack | default("") , "no_failover" )
}}
parent: by_failover_stack
add_host: true
# Network group
- action: create_group
group: "net_{{ inv__network }}"
parent: by_network
add_host: true
# Service group
- action: set_var
name: service_group
value: "svc_{{ inv__service }}"
- action: create_group
group: "{{ service_group }}"
parent: by_service
# Component group. We add the host directly if there is no subcomponent.
- when: inv__component is defined
action: block
vars:
comp_group: "svcm_{{ inv__service }}_{{ inv__component }}"
block:
- action: create_group
group: "{{ comp_group }}"
parent: "{{ service_group }}"
# Subcomponent group, or lack thereof.
- when: inv__subcomponent is not defined
action: add_host
group: "{{ comp_group }}"
- when: inv__subcomponent is defined
action: create_group
group: "svcm_{{ inv__service }}_{{ inv__subcomponent }}"
parent: "{{ comp_group }}"
add_host: true