Ansible v2.2与在1.7中运行良好的_子元素一起使用时出错
运行ansible playbook时出现以下错误 任务[基础:Rsyslog yapilandiliyor] ****************************************致命:[gkts.ahtapot]:失败!=>{“failed”:true,“msg”:“条件检查” 'ansible_fqdn=={{item.1}}'失败。错误为:错误为 计算条件(ansible_fqdn=={{item.1}}):'item'为 未定义\n\n该错误似乎已被忽略 “/etc/ansible/roles/base/tasks/rsyslog.yml”:第2行第3列,但 根据确切的语法,可能\n出现在文件的其他位置 问题。\n\n出现问题的行是:\n\n---\n-名称:Rsyslog YapilandiLiyor。\n^此处\n“} 这在ansible 1.7中运行良好,但在ansible 2.2.1中不起作用Ansible v2.2与在1.7中运行良好的_子元素一起使用时出错,ansible,Ansible,运行ansible playbook时出现以下错误 任务[基础:Rsyslog yapilandiliyor] ****************************************致命:[gkts.ahtapot]:失败!=>{“failed”:true,“msg”:“条件检查” 'ansible_fqdn=={{item.1}}'失败。错误为:错误为 计算条件(ansible_fqdn=={{item.1}}):'item'为 未定义\n\n该错误似乎已被忽略 “/etc/ansi
- name: Rsyslog yapilandiriliyor.
template:
src: "{{ rsyslog['conf']['source'] }}"
dest: "{{ rsyslog['conf']['destination'] }}"
owner: "{{ rsyslog['conf']['owner'] }}"
group: "{{ rsyslog['conf']['group'] }}"
mode: "{{ rsyslog['conf']['mode'] }}"
# when: "ansible_fqdn == item.1"
when: "ansible_fqdn == {{item.1}}"
with_subelements:
- "{{ossimciks}}"
- "{{clients}}"
notify:
- rsyslog servisini yeniden baslat
sudo: yes
tags: rsyslog
OSSIMCIK和客户端在我的vars文件中定义:
ossimciks:
server01:
fqdn: "OSSIMCIK_FQDN"
port: "20514"
clients:
- "LOG_KAYNAGI_FQDN"
- "LOG_KAYNAGI_FQDN"
我错过了什么
with_subelements:
- "{{ossimciks}}"
- "{{clients}}"
语法
我不知道Ansible在哪里/如何/何时会发生变化,但我认为
- 带有子元素的
中的第一个元素是变量,并且
- 带有子元素的
中的第二个元素是键
with.*
循环[1],因为它们始终是查找[2]):
资料
我不清楚您试图在您的剧本中使用{{item.1}
瞄准哪个项目,但是如果允许对数据进行微小更改,您可以对其进行结构调整,以便在和_subelements
循环中访问显示的任何信息(我还对数据进行了一些扩展和重组,以澄清循环正在做什么):
这将产生:
skipping: [localhost] => (item=None) => {"skip_reason": "Conditional result was False"}
skipping: [localhost] => (item=None) => {"skip_reason": "Conditional result was False"}
ok: [localhost] => (item=None) => {
"msg": "server02 client: LOG_KAYNAGI_FQDN_1"
}
ok: [localhost] => (item=None) => {
"msg": "server02 client: LOG_KAYNAGI_FQDN_2"
}
- [1]
- [2]
编辑添加:我使用上述语法的剧本肯定在2.x发行版系列中——我认为~2.1.我仍然会遇到同样的错误。它似乎无法解决.1是什么项目。但我不明白为什么。我用一个可能有用的示例更新了我的答案。
---
- hosts: localhost
gather_facts: false
vars:
fqdn_var: "OSSIMCIK_FQDN_2"
ossimciks:
- server: "server01"
fqdn: "OSSIMCIK_FQDN_1"
port: "20514"
clients:
- "LOG_KAYNAGI_FQDN_1"
- "LOG_KAYNAGI_FQDN_2"
- server: "server02"
fqdn: "OSSIMCIK_FQDN_2"
port: "20514"
clients:
- "LOG_KAYNAGI_FQDN_1"
- "LOG_KAYNAGI_FQDN_2"
tasks:
- name: Output ossimciks contents.
debug:
msg: "{{ item.0.server }} client: {{ item.1 }}"
with_subelements:
- "{{ ossimciks }}"
- clients
when: item.0.fqdn == fqdn_var
skipping: [localhost] => (item=None) => {"skip_reason": "Conditional result was False"}
skipping: [localhost] => (item=None) => {"skip_reason": "Conditional result was False"}
ok: [localhost] => (item=None) => {
"msg": "server02 client: LOG_KAYNAGI_FQDN_1"
}
ok: [localhost] => (item=None) => {
"msg": "server02 client: LOG_KAYNAGI_FQDN_2"
}