如何使用Ansible playbook在mongoDB中创建集合?

时间:2014-08-29 05:17:18

标签: mongodb vagrant ansible

我使用Ansible配置Vagrant VM,在vagrant up上启动mongoDB并创建数据库并准备好接收数据。另一个进程将数据写入mongoDB集合。这是剧本中的一个片段:

- hosts: all
  user: vagrant
  sudo: True

  tasks:
    - name: install packages
      action: apt update_cache=yes pkg={{item}} state=installed
      with_items:
        - mongodb

    - service: name=mongodb state=started

    - shell: mongo mydb --eval "db.createCollection('mycollection')"

Playbook安装并启动mongoDB服务。但是,它不会创建数据库/集合。 " - shell: mongo ..."" TASK: [shell mongo mydb --eval "db.createCollection('mycollection')"] **** failed: [default] => {"changed": true, "cmd": "mongo mydb --eval\"db.createCollection('mycollection')\" ", "delta": "0:00:00.084196", "end": "2014-08-29 04:48:40.333460", "rc": 255, "start": "2014-08-29 04:48:40.249264"} stderr: exception: connect failed stdout: MongoDB shell version: 2.0.4 connecting to: mydb Fri Aug 29 04:48:40 Error: couldn't connect to server 127.0.0.1 shell/mongo.js:84 "线。它返回:

{{1}}

你能看出我做错了吗?

1 个答案:

答案 0 :(得分:0)

你的方法应该是正确的。我刚刚在安装了mongo的vagrant启动实例上测试了你的mongo行,它工作正常。

你能检查一下mongo日志,看看它在抱怨什么吗?如果你无法连接,可能是mongo服务绑定到ipv6 addr,绑定到错误的端口(应该是27017),或者它们是一些身份验证问题。

检查完之后,你可以启动机器,上机,然后执行这个位:

mongo mydb --eval“db.createCollection('mycollection')”

它是否可以从shell运行? (以与Ansible相同的用户身份运行)。