2017-03-02 1 views
0

Bonjour Iam nouveau à la marionnette et maintenant essayer d'explorer avec des manifestes de marionnettes. En fait je crée un manifeste pour mongodb et je veux utiliser une variable dans l'exec. Mais chaque fois, cela me donne une erreur. Mon mongodb.pp est comme ci-dessousUtilisation de la variable dans la commande exec de la marionnette?

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" ]})\'"' : 
} 
} 

Mais lors de l'exécution de cette Iam obtenir erreur comme ci-dessous

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

partie IP est manquante dans l'erreur, car ip $ ne substituait IP dans la commande mongo .. J'ai essayé différentes manières mais toutes donnent la même erreur. En fait, je veux savoir comment utiliser variable dans la commande exec comme ci-dessus dans la marionnette ?? Toute aide est très appréciée.

Répondre

1

Les variables ne sont interpolées dans les chaînes entre guillemets doubles (""), et non des chaînes entre guillemets simples ('') et devraient être sous la forme ${ip} lorsque l'intérieur d'une chaîne (documentation, via visual index).

Vous avez là aussi tout à fait quelques citations, supprimant ainsi l'emballage bash -c simplifierait en supprimant un jeu:

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

Si le shell bash est nécessaire, utilisez provider => shell à la place.

+0

Merci .. donnant 'provider => shell' résout le problème .. Mais pourquoi bin/bash avec la même commande que ci-dessus ne fonctionne pas ?? –