2014-08-29 82 views
0

我使用Ansible來配置Vagrant虛擬機,它在vagrant up上啓動mongoDB並創建一個數據庫並準備收集數據。另一個進程將數據寫入mongoDB集合。以下是劇本的一個片段:如何使用Ansible手冊在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')" 

劇本安裝並啓動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 

你能看到我做錯了嗎?

回答

0

你的方法應該是正確的。我只是在安裝了mongo的流浪引導實例上測試了你的mongo系列,它運行良好。

你能檢查mongo日誌,看看它在抱怨什麼嗎?如果無法連接,可能是mongo服務綁定到ipv6 addr,綁定到錯誤的端口(應該是27017),或者它們是一些身份驗證問題。

檢查後,就可以啓動機器,得到的shell,然後執行此位:

蒙戈MYDB --eval 「db.createCollection( 'MyCollection的')」

它的工作原理從殼? (以與Ansible相同的用戶身份運行)。

+0

謝謝@tmruss。它以Ansible使用的相同用戶身份登錄時可以在shell中工作。它從劇本中不起作用。我不確定如何檢查虛擬機上的日誌,因爲它由於錯誤而未配置。 – 2014-08-29 05:32:37

+0

@AlexWoolford也許我誤解了 - 如果你能從shell中測試它,你應該能夠訪問mongo日誌? – tmruss 2014-08-29 05:38:33

+1

其他一些建議: - 確保你在mongo conf文件中有bind_ip = 127.0.0.1(放在那裏由你或者ansible/provisioners提供) - 有些人有幸運走了一個鎖文件,但我懷疑是你的情況下的問題,因爲它是一個流浪者vm: http://stackoverflow.com/questions/5726032/ – tmruss 2014-08-29 05:47:49

相關問題