Ansible 无法访问节点时,将结果写入文件不工作错误

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 -

由于ansible的错误报告对用户不友好,我创建了一个python包装器,它将读取输出文件,并在出现任何错误时正确报告

- 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:是的,
就像一个魔咒一样工作。