Ich versuche, ein Playbook mehrmals in einer Schleife zu starten, die AWS route53-Datensätze erstellt.Ansible - erzwinge das Undefinieren einer Variablen/Fakt.
Meine Aufgabe der route53 Datensatz zu erstellen wie folgt aussieht:
- name: Create Public DNS record
route53:
profile: "{{ route53_profile_id }}"
command: "{{ dns_command }}"
zone: "{{ dns_zone }}"
record: "{{ dns_record_name }}.{{ dns_zone }}"
type: "{{ dns_type }}"
value: "{{ dns_value }}"
overwrite: "{{ dns_overwrite }}"
ttl: "{{ dns_ttl }}"
health_check: "{{ healthcheck.health_check.id | default(omit) }}"
failover: "{{ dns_setting.failover | default(omit) }}"
weight: "{{ dns_setting.weight | default(omit) }}"
region: "{{ region | default(omit) }}"
identifier: "{{ identifier | default(omit) }}"
Mein Problem ist, dass der Gesundheitscheck nicht immer jedes Mal definiert ist.
Erstellung der Gesundheitscheck sieht wie folgt aus:
- name: Create healthcheck with IP address for EC2 instance
route53_health_check:
state: "{{ healthcheck.state | default(healthcheck_defaults.state) }}"
profile: "{{ route53_profile_id }}"
region: "{{ vpc.region }}"
ip_address: "{{ dns_value }}"
type: "{{ healthcheck.type | default(healthcheck_defaults.type) }}"
resource_path: "{{ healthcheck.resource_path | default(omit) }}"
port: "{{ healthcheck.port | default(omit) }}"
security_token: "{{ healthcheck.security_token | default(omit) }}"
validate_certs: "{{ healthcheck.validate_certs | default(omit) }}"
string_match: "{{ healthcheck.string_match | default(omit) }}"
request_interval: "{{ healthcheck.request_interval | default(healthcheck_defaults.request_interval) }}"
failure_threshold: "{{ healthcheck.failure_threshold | default(healthcheck_defaults.failure_threshold) }}"
register: healthcheck
when:
- dns_type == "A"
- dns_setting.healthcheck is defined
Wenn die Schleife 5 mal läuft, ist es nur in einer Iteration definiert werden kann. Wenn der Gesundheitscheck ausgeführt wird, enthält die Variable 'healthcheck' die Details des Gesundheitschecks, z. die ID. Ist dies der Fall nicht laufen auf einer gegebenen Schleife, die ‚Gesundheitscheck‘ Variable enthält folgende Komponenten:
"healthcheck": {
"changed": false,
"skip_reason": "Conditional check failed",
"skipped": true
}
In meiner route53 Schöpfung wird die Gesundheitsprüfung entfällt, wenn die ‚Healthcheck‘ Variable nicht definiert ist. Wenn es jedoch definiert ist, versucht ansible, den ID-Parameter des health_check-Parameters von healthcheck zu dereferenzieren, der nicht vorhanden ist.
Wenn ich versuche, den Health Check auf einen Standardwert zu setzen, wenn er nicht verwendet wird, z. {} dann ist es immer noch definiert und meine route53-Erstellung schlägt fehl.
Gibt es eine Möglichkeit, eine Variable oder eine Tatsache zu erzwingen, um undefiniert zu sein? Etwas wie:
- name: Undefine health check
set_fact:
healthcheck: undef
Bitte fügen Sie den Teil hinzu, in dem Sie Variablen für Ihre Schleife festgelegt haben Es scheint, dass Sie in die falsche Richtung gehen Wie ist das möglich, dass Sie sie bei jedem Schritt manuell zurücksetzen müssen? –
Dieses Detail hinzugefügt – RikSaunderson