web-dev-qa-db-fra.com

Comment faire un fichier / dir existe conditionnel dans Puppet?

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

19
ddario

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"],
}
32
Pascal Schmiel

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.

4
Dennis Kaarsemaker

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.

https://puppet.com/docs/puppet/5.5/function.html#findfile

0
Mike

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.

0
Mike Taylor