Ansible 无法访问节点时,将结果写入文件不工作错误
由于ansible的错误报告对用户不友好,我创建了一个python包装器,它将读取输出文件,并在出现任何错误时正确报告Ansible 无法访问节点时,将结果写入文件不工作错误,ansible,Ansible,由于ansible的错误报告对用户不友好,我创建了一个python包装器,它将读取输出文件,并在出现任何错误时正确报告 - name: my play hosts: all gather_facts: false tasks: - name: my action shell: "<run some script>" register: rc failed_when: false -
- name: my play
hosts: all
gather_facts: false
tasks:
- name: my action
shell: "<run some script>"
register: rc
failed_when: false
- local_action: copy content={{ rc | to_json }} dest="result_{{ inventory_hostname }}.json"
-名称:我的剧本
主持人:全部
收集事实:错误
任务:
-姓名:我的行动
贝壳:“”
注册号码:rc
当:false时失败
-local_action:copy content={{rc}to_json}}dest=“result{{{inventory\u hostname}}.json”
这里的错误报告很好。无论成功与否,它都会将shell命令的输出转储到结果_wk.json。当rc.rc为非零时,我使用python进行处理并正确报告
但是我想修改上面的代码,使其仅在所有节点都可访问时继续执行。因此在开头添加了一些代码,如下所示
- name: my play
hosts: all
gather_facts: false
tasks:
- name: check if all nodes are reachable
shell: echo ""
register: rc
failed_when: false
- local_action: copy content={{ rc | to_json }} dest="result_{{ inventory_hostname }}.json"
- name: fail here
local_action: shell /bin/false
when: rc.rc != 0
- name: my action
shell: "<run some script>"
register: rc
failed_when: false
- local_action: copy content={{ rc | to_json }} dest="result_{{ inventory_hostname }}.json"
-名称:我的剧本
主持人:全部
收集事实:错误
任务:
-名称:检查是否可以访问所有节点
shell:echo“”
注册号码:rc
当:false时失败
-local_action:copy content={{rc}to_json}}dest=“result{{{inventory\u hostname}}.json”
-姓名:此处不及格
本地操作:shell/bin/false
时间:rc.rc!=0
-姓名:我的行动
贝壳:“”
注册号码:rc
当:false时失败
-local_action:copy content={{rc}to_json}}dest=“result{{{inventory\u hostname}}.json”
现在在本例中,在第一个操作中,我将执行一个简单的回显,并测试节点是否可访问。我期望,当无法访问节点时,寄存器将包含正确的输出。但是错误是不同的,并且没有为不可访问的节点创建result.json文件。但是,结果文件是为echo成功的可访问节点创建的。无论如何,playbook在那个位置正在中止,但我无法正确地报告错误
fatal: [node-1]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host <node-1 IP> port 22: Connection refused", "unreachable": true}
fatal:[node-1]:无法访问!=>{“changed”:false,“msg”:“未能通过ssh连接到主机:ssh:连接到主机端口22:连接被拒绝”,“无法访问”:true}
我不知道该怎么做。即使result.json文件有任何转储,我也可以根据结果继续使用python处理该文件
任何帮助都将不胜感激。我可以在上面做什么修改,将所有内容转储到结果文件中,并在无法访问节点时中止。可以在播放或任务中使用(因为在这种情况下,“收集事实”为false)忽略无法访问的主机错误。在第一个任务中(检查是否所有节点都可访问),rc.unreachable
将是true
,如果主机不可访问
下面是在游戏中使用的示例
-名称:我的剧本
主持人:全部
忽略无法访问的内容:是
收集事实:错误
任务:
...
可以在游戏或任务中使用(因为在本例中收集事实为false)忽略无法访问的主机错误。在第一个任务中(检查是否所有节点都可访问),rc.unreachable
将是true
,如果主机不可访问
下面是在游戏中使用的示例
-名称:我的剧本
主持人:全部
忽略无法访问的内容:是
收集事实:错误
任务:
...
谢谢你的回答。我必须使用rc.unreachable
,并结合是否定义了它。不过,我不得不对代码做更多的修改。但是,ignore\u unreachable:是的,
非常有效。谢谢你的回答。我必须使用rc.unreachable
,并结合是否定义了它。不过,我不得不对代码做更多的修改。但是,ignore\u unreable:是的,
就像一个魔咒一样工作。