AWSルート53レコードを作成するループ内で複数回プレイブックを実行しようとしています。 route53レコードを作成するには不可能 - 変数/ファクトを定義しないように強制します
私の仕事は、次のようになります。
- 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) }}"
私の問題は、ヘルスチェックは、常にたびに定義されていないということです。ヘルスチェックの
作成は、次のようになります。
- 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
ループが5回実行した場合、それが唯一の反復で定義されてもよいです。ヘルスチェックが実行されると、 'healthcheck'変数にはヘルスチェックの詳細が含まれます。 ID。それは与えられたループ上ない実行を行う場合は、「ヘルスチェック」変数には以下が含まれています。
私route53作成で"healthcheck": {
"changed": false,
"skip_reason": "Conditional check failed",
"skipped": true
}
「ヘルスチェック」変数が定義されていない場合は、ヘルスチェックが省略されています。しかし、がである場合、存在しないhealthcheckのhealth_checkパラメータのidパラメータを参照解除しようとします。
ヘルスチェックを使用していないときにデフォルト値に設定しようとすると、 {}それでも定義されていて、route53の作成は失敗します。
変数またはファクトを強制的に未定義にする方法はありますか?ような何か:スキップされたとhealthcheck.health_check.id
そうhealthcheck
場合、これはomit
を渡します
- name: Create Public DNS record
route53:
... cut ...
health_check: "{{ healthcheck | skipped | ternary(omit, (healthcheck.health_check | default({})).id) }}"
... cut ...
:
- name: Undefine health check
set_fact:
healthcheck: undef
あなたのループの変数を設定する部分を追加してください。間違った方向に進んでいるようですが、どのようにして毎回手動でリセットする必要がありますか? –
この詳細を追加しました – RikSaunderson