在Mongo DB CLI中使用Ansible发送命令

时间:2017-03-27 13:28:22

标签: mongodb ansible

我正在设置一个用于健康检查的ansible脚本。

我想在登录mongo db admin cli后运行rs.status()命令。

---
- name: Perform Health Checks.
  hosts: mongodb
  tasks:
    - name: Check MongoDB nodes.
      shell: mongo admin -u root -p root ; rs.status()
      register: output

    - debug: msg={{ output.stdout_lines }}

命令rs.status()只能在mongodb管理控制台中运行一次。

但是使用shell模块运行上面的playbook会给我一个错误。

TASK [Check MongoDB nodes.] **************************************************
fatal: [172.29.219.107]: FAILED! => {"changed": true, "cmd": "mongo admin -u root -p root ; rs.status()", "delta": "0:00:00.002825", "end": "2017-03-27 13:26:45.211397", "failed": true, "rc": 1, "start": "2017-03-27 13:26:45.208572", "stderr": "/bin/sh: -c: line 1: syntax error: unexpected end of file", "stdout": "", "stdout_lines": [], "warnings": []}
fatal: [172.29.219.106]: FAILED! => {"changed": true, "cmd": "mongo admin -u root -p root ; rs.status()", "delta": "0:00:00.002906", "end": "2017-03-27 13:26:47.486562", "failed": true, "rc": 1, "start": "2017-03-27 13:26:47.483656", "stderr": "/bin/sh: -c: line 1: syntax error: unexpected end of file", "stdout": "", "stdout_lines": [], "warnings": []}

有没有办法使用Ansible我可以在登录mongodb控制台后发送rs.status()命令?

1 个答案:

答案 0 :(得分:0)

您可以使用rs.status()命令行参数运行--eval

- name: Check MongoDB nodes.
  shell: mongo admin --quiet --eval 'printjson(rs.status())'
  register: output
如果需要,可以将

-u user-p pwd命令行参数添加到命令行。