comment définir le chemin lors de l'application d'un module marionnette unique?

12

J'essaie d'exécuter un seul module comme celui-ci:

puppet apply --verbose --modulepath=moduleshere --noop -e 'include myclass'

Cependant, j'obtiens ce genre d'erreur, indiquant que le chemin n'est pas défini

Parameter unless failed: '[ -e "${logfile}" ]' is not qualified and no path was specified. Please qualify the command or specify a path.

Je ne veux pas spécifier explicitement le chemin dans chacun de ces emplacements, et cela fonctionne très bien lorsqu'il est exécuté dans le cadre d'une course de marionnettes complète. Comment spécifier le chemin lors de l'exécution d'un seul module?

Chèvre Hess
la source
1
Pourriez-vous accepter la réponse appropriée?
kenorb

Réponses:

15

Les commandes d'une Execressource doivent être entièrement qualifiées (c'est- /usr/bin/testà- dire au lieu de test) ou l' pathattribut de cette Execressource doit être défini.

Si vous pouvez modifier le (s) manifeste (s) Puppet, vous pouvez simplement ajouter la définition suivante pour définir un pathattribut par défaut pour toutes les Execressources /bin:

Exec { path => "/bin" }

En tant que solution de contournement (plus ou moins) sale, vous pouvez également définir la valeur pathpar défaut pour toute Execressource sur la ligne de commande:

$ puppet apply --verbose -e 'Exec { path => "/bin" }' your_manifest.pp

Pointeurs de documentation:

joschi
la source
2

Cela .. ne devrait pas fonctionner dans le cadre d'une course complète. Il a besoin d'un chemin complet vers l'exécutable dans la unlesscommande. Vous avez peut-être un chemin d'accès défini dans un fichier global qui fait partie de vos exécutions complètes?

Essayez unless => '/usr/bin/[ -e "${logfile}" ]'plutôt.

Shane Madden
la source
1

Je suis d'accord avec Shane que le chemin par défaut est probablement défini dans un manifeste de portée mondiale. Vous pouvez faire de même mais vous ne pouvez pas le passer comme argument, utilisez donc stdin:

$ puppet apply -v --modulepath=moduleshere --noop <<EOF
Exec { path => "/bin:/sbin:/usr/bin:/usr/sbin" }
include myclass
EOF

ou placez l'Exec et incluez des lignes dans example.pppuis utilisez puppet apply -v ... example.pp.

Dominic Cleal
la source
1

Vous devez utiliser un chemin d'accès complet.

Par exemple, soit:

exec { "sample":
  command => "/usr/bin/test",
}

ou:

exec { "sample":
  path    => ['/usr/bin', '/usr/sbin', '/bin'],
  command => "test",
}
Kenorb
la source