J'essaie d'écrire une fonction dans une marionnette qui fera un fail
si le chemin de répertoire passé n'existe pas.
if File["/some/path"]
Renvoie toujours vrai, et if defined(File["/some/path"])
ne renvoie vrai que si la ressource est définie dans marionnette, qu'elle existe réellement ou non.
Existe-t-il un moyen de le faire avec une simple instruction if
?
Merci
Solution de contournement pour cela: utilisez uniquement si sur un "test" exec et l'exigez dans votre action que vous souhaitez exécuter:
exec {"check_presence":
command => '/bin/true',
onlyif => '/usr/bin/test -e /path/must/be/available',
}
whatever {"foo...":
.....
require => Exec["check_presence"],
}
N'oubliez pas: les manifestes sont compilés sur le maître. Ils ne savent rien du client, à l'exception des faits qu'il soumet. Donc, soit écrivez un fait qui contient ces informations, soit prenez du recul et dites-nous ce que vous essayez réellement de résoudre afin que nous puissions trouver une meilleure approche qu'une instruction if.
Vous pouvez également utiliser la fonction intégrée find_file () pour cela ... elle retourne undef lorsque le fichier/chemin n'existe pas et une chaîne si elle existe.
Moi aussi, j'avais du mal à comprendre comment empêcher un module de fonctionner si un répertoire n'était pas présent. C'est ce que j'ai trouvé qui a fonctionné pour moi.
exec { 'module_name':
command => "command to run with variables", # Double quotes for Variable interpolation
path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:",
onlyif => 'test -d /mydirectory',
}
Ajouter le chemin est ce qui a vraiment fait l'affaire pour moi. Pour une raison quelconque, même si j'ai ajouté le chemin d'accès à la commande de test, comme /bin/test
cela ne semblait pas fonctionner correctement.
J'espère que cela aide d'autres personnes qui peuvent avoir le même problème.