首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ansible playbook for mongo中有关于rs.add()的问题

在ansible playbook for mongo中有关于rs.add()的问题
EN

Stack Overflow用户
提问于 2019-08-06 23:44:50
回答 1查看 471关注 0票数 2

在我的行动手册中,我使用以下任务来初始化群集并将次要群集添加到主要群集:

代码语言:javascript
复制
- name: Initialize replica set
  run_once: true
  delegate_to: host1
  shell: >
       mongo --eval 'printjson(rs.initiate())'

- name: Format secondaries
  run_once: true
  local_action:
     module: debug
     msg: '"{{ item }}:27017"'
  with_items: ['host2', 'host3']
  register: secondaries

- name: Add secondaries
  run_once: true
  delegate_to: host1
  shell: >
        /usr/bin/mongo --eval 'printjson(rs.add({{ item.msg }}))'
  with_items: secondaries.results

我得到了下面的错误:

代码语言:javascript
复制
TASK [mongodb-setup : Add secondaries] *******************************
fatal: [host1]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'msg'\n\nThe error appears to have been in '/var/lib/awx/projects/_dev/roles/mongodb-setup/tasks/users.yml': line 15, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Add secondaries\n  ^ here\n"}

感谢你的回复,我已经修改了我的代码如下

代码语言:javascript
复制
-  name: Add secondaries
   run_once: true
   delegate_to: host-1
   shell: >
        /usr/bin/mongo --eval 'printjson(rs.add({{ item }}:27017))'
   with_items:
    - host2
    - host3

但是得到下面的错误

failed: [host-2 -> host-1] (item=host-2) => {"changed": true, "cmd": "/usr/bin/mongo --eval 'printjson(rs.add(host-2:27017))'", "delta": "0:00:00.173077", "end": "2019-08-06 13:29:09.422560", "item": "host-2", "msg": "non-zero return code", "rc": 252, "start": "2019-08-06 13:29:09.249483", "stderr": "", "stderr_lines": [], "stdout": "MongoDB shell version: 3.2.22\nconnecting to: test\n2019-08-06T13:29:09.419-0500 E QUERY [thread1] SyntaxError: missing ) after argument list @(shell eval):1:37", "stdout_lines": ["MongoDB shell version: 3.2.22", "connecting to: test", "2019-08-06T13:29:09.419-0500 E QUERY [thread1] SyntaxError: missing ) after argument list @(shell eval):1:37"]}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-07 01:39:40

你的问题不是rs.add(),而是你循环的数据。在您的上一个任务中,您的项目列表是单个字符串。

代码语言:javascript
复制
# Wrong #
with_items: secondaries.results

您希望从先前注册的结果中传递一个实际的列表:

代码语言:javascript
复制
with_items: "{{ secondaries.results }}"

也就是说,注册调试任务的结果是相当奇怪的。您应该使用set_fact在var中注册所需的内容,或者更好地直接在任务中循环其他主机列表。它看起来也很像rs.add funcion is exepecting a string,所以你应该在你的评估中引用参数。类似于:

代码语言:javascript
复制
- name: Add secondaries
  shell: >
    /usr/bin/mongo --eval 'printjson(rs.add("{{ item }}:27017"))'
  with_items:
    - host2
    - host3

在这种情况下,你使用委托的方式对我来说似乎相当奇怪,但如果没有一个完整的剧本示例来说明你想要做什么,就很难给出任何有效的线索(如果需要的话,你可能会提出一个新的问题)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57379695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档