2017-03-02 211 views
0

你好Iam新来的木偶,现在试图与木偶清单探索。实际上Iam为mongodb创建了一个清单,我想在exec中使用一个变量。但每次它给我错误。我mongodb.pp是如下在puppet exec命令中使用变量?

class db::mongodb ($interface) { 
    $ip = inline_template("<%= scope.lookupvar('::ipaddress_${interface}') -%>") 
exec {'/bin/bash -c "mongo --host $ip --eval \' db = db.getSiblingDB("test"); db.addUser({user: "test", pwd: "test", roles: [ "readWrite", "dbAdmin" ]})\'"' : 
} 
} 

但是当运行这个荫得到错误像下面

could not connect to the server --eval:27017 at src/mongo/shell/mongo.js:147 

IP部分缺失的错误,因为$ IP不是在蒙戈命令来替换IP ..我尝试了不同的方式,但都给出了相同的错误。其实我想知道如何在exec命令中使用变量,如上所述在puppet中?任何帮助深表感谢。

回答

1

变量仅插在双引号字符串(""),而不是单引号字符串('')和应在形式${ip}当在字符串中(documentation,经由visual index)。

你也有相当多的报价出现,让去除bash -c包装将被删除一组简化它:

exec { "mongo --host ${ip} --eval ' db = db.getSiblingDB(\"test\"); db.addUser({user: \"test\", pwd: \"test\", roles: [ \"readWrite\", \"dbAdmin\" ]})'" : 
} 

如果bash shell中是必要的,使用provider => shell代替。

+0

Thanks ..给'provider => shell'解决了这个问题..但是为什么bin/bash和上面的命令不一样? –