我有以下任务:
- name: Retrieve records from Route53
route53:
command: get
zone: "{{ stag_zone }}"
record: "{{ stag_record }}"
type: A
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
register: rec
- name: Print records
debug: var=rec
- name: Record contains IP
debug: msg="{{rec}} contains {{stag_ip}}"
when: "'{{stag_ip}}' in {{rec.set.values}}"
Run Code Online (Sandbox Code Playgroud)
该Print records任务输出是这样的:
ok: [XXX.XXX.XXX.XXX] => {
"var": {
"rec": {
"changed": false,
"invocation": {
"module_args": "",
"module_name": "route53"
},
"set": {
"alias": false,
"record": "YYY.XXX.ZZZ.",
"ttl": "300",
"type": "A",
"value": "AAA.AAA.AAA.AAA,BBB.BBB.BBB.BBB",
"values": [
"AAA.AAA.AAA.AAA",
"BBB.BBB.BBB.BBB"
],
"zone": "XXX.ZZZ."
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想只执行"记录包含IP"任务时{{stag_ip}}是{{rec.set.values}}.但我的when条款肯定被打破了.它输出这个:
fatal: [XXX.XXX.XXX.XXX] => Failed to template {% if 'QQQ.QQQ.QQQ.QQQ' in <built-in method values of dict object at 0x7fb66f54e6e0> %} True {% else %} False {% endif %}: template error while templating string: unexpected '<'
Run Code Online (Sandbox Code Playgroud)
我如何"施放" rec.set.values到列表中?
这里的问题是因为values是一种dict方法.因此它比访问密钥"优先".要解决此问题,必须明确调用get:
when: stag_ip in rec.set.get('values')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8996 次 |
| 最近记录: |