【问题标题】:FAILED! => {"msg": "'dict object' has no attribute 'stdout'"}失败的! => {"msg": "'dict object' 没有属性 'stdout'"}
【发布时间】:2019-07-11 01:50:32
【问题描述】:

我正在尝试获取工作节点的 IP 地址和主机名并将其写入主 /root/hosts 文件。出现错误,失败! => {"msg": "'dict object' 没有属性 'stdout'"}

- name: set glusterfs device in hostfile
  shell: echo "{{ name }} glusterfs_devices='[ \"/dev/abcd\" ]'"
  register: opt_gluster
  when: type == "worker"

- name: add glusterfs
  lineinfile:
    dest: /root/hosts
    line: "{{item}}"
    insertafter: EOF
  with_items:
       - "{{ opt_gluster.stdout }}"
  when: type == "master"
{"msg": "'dict object' has no attribute 'stdout'"}

【问题讨论】:

  • 考虑将其视为事实,而不是任务的回报。
  • 你能分享一个例子吗..这会很有帮助。
  • 我更新了我的代码......所以我必须收集工人的 IP 地址和主机名并将其写在 master 上,所以如果我使用事实而不是任务,我如何使用条件?

标签: ansible


【解决方案1】:

我认为问题出在

的 when 语句中
- name: add glusterfs
  lineinfile:
    dest: /root/hosts
    line: "{{item}}"
    insertafter: EOF
  with_items:
       - "{{ opt_gluster.stdout }}"
  when: type == "master"

我认为它缺少一个

when: type == "master" and opt_gluster.stdout is defined

因为当您在一个不是worker 的节点上时, opt_gluster 不会有标准输出,因为它正在跳过。

最好的问候

【讨论】:

  • 现在它不会抛出错误,而是跳过任务的主节点,即它没有在文件中插入行
  • 你能告诉我如何解决这个问题吗?
  • 对不起,我不确定你到底需要什么,你能发布你的 ansible-playbook 命令的结果吗?我不明白type 是如何同时成为工人和主人的。
  • type 对于这两个任务是不同的。我在类型为 worker 的节点上运行的第一个任务(在库存文件中定义),在第二个任务中我想编写第一个任务的输出(在工作节点上运行)到主节点 /root/hosts 位置
  • 以上代码是我的方法,如果您知道如何实现该场景,我将不胜感激
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 2018-10-28
  • 1970-01-01
  • 2020-10-16
  • 2013-10-22
  • 2021-06-25
  • 1970-01-01
相关资源
最近更新 更多