如果MongoDB数据库没有';不存在

如果MongoDB数据库没有';不存在,mongodb,puppet,Mongodb,Puppet,我在和一个流浪汉一起工作。无论何时启动VM,都会进行测试,以查看MongoDB数据库是否存在。如果它不存在,Grunt任务将创建它。问题是,当数据库不存在时,我的命令总是返回1,因为Mongo只返回一个空字符串。在上面运行wc-m,它总是返回1,所以我的exec永远不会被调用 我的执行{}呼叫: exec { 'grunt --gruntfile /var/www/Gruntfile.js exec:populateDatabase': require => Package[['gru

我在和一个流浪汉一起工作。无论何时启动VM,都会进行测试,以查看MongoDB数据库是否存在。如果它不存在,Grunt任务将创建它。问题是,当数据库不存在时,我的命令总是返回1,因为Mongo只返回一个空字符串。在上面运行wc-m,它总是返回1,所以我的exec永远不会被调用

我的执行{}呼叫:

exec { 'grunt --gruntfile /var/www/Gruntfile.js exec:populateDatabase':
  require => Package[['grunt-cli', 'mongodb-server']],
  unless => 'mongo dbName --eval "db.getCollectionNames()" | tail -1'
}
除非调用的输出示例:

[vagrant@localhost www]$ mongo dbName --eval "db.getCollectionNames()" | tail -1
collection_one,collection_two
[vagrant@localhost www]$ mongo dbThatDoesntExist --eval "db.getCollectionNames()" | tail -1

[vagrant@localhost www]$
使用grep作为您的测试
grep
如果匹配将返回0,如果不匹配将返回1

Grep模式 您可能需要根据mongo实际返回的内容进行调整,但这应该涵盖您:

grep "^$" # match the empty string

grep "^   $" # match a string of spaces

grep -v "^$" # match a non-empty string

amir@amir-MacPro:~$ echo "" | grep -v "^$"
amir@amir-MacPro:~$ echo $?
1
把它们放在一起
您也可以直接查询数据库名称,如下所示:

$echo$dbname

我是一个丹麦人

$mongo localhost--quiet--eval“db.getMongo().getDBs().databases.forEach(函数(x){if(x.name='$dbname'){print(x.name);}}”


我很好。还发现了另一个稍微脏一点的情况,grep通过将整个除非语句更改为:onlyif=>“mongo-archetype--eval'db.getCollectionNames().length'| tail-1 | grep'^0',也解决了这个问题。”
exec { 'grunt --gruntfile /var/www/Gruntfile.js exec:populateDatabase':
  require => Package[['grunt-cli', 'mongodb-server']],
  unless => 'mongo dbName --eval "db.getCollectionNames()" | grep -v "^$"'
}