Comment puis-je utiliser la sortie d'une commande dans cfengine3

8

Je veux lister un contenu de répertoire et utiliser le résultat ailleurs:

bundle agent test
{

   commands:
      "ls /tmp/test/";

    reports:
    ubuntu::
       "print output here for example";  
# or add it to a variable which is how I really want to use it.
 }
awsiv
la source

Réponses:

12
bundle agent test
{

    vars:
        "my_result" string => execresult("/bin/ls /tmp/test/","noshell");

    reports:
        ubuntu::
            "Output is : $(my_result)";  
}

Voir https://cfengine.com/manuals/cf3-solutions#Execresult-example

truqueur
la source
Il faut se méfier! Cette commande sera exécutée plusieurs fois par cf-agentexécution. Voir les documents sur la commande normale et la note au bas des documents pourexecresult() . Car lsce n'est peut-être pas important, mais pour des commandes plus chères, ce le sera certainement.
Wildcard
4

Depuis la version 3.3.0, vous pouvez utiliser la fonction lsdir () à la place.

vars:
  "result" slist => lsdir("/tmp/test", ".*", "false");

en savoir plus: https://cfengine.com/manuals/cf3-Reference#Function-lsdir

Gage
la source
C'est en fait mieux pour le lscas d'utilisation car il utilise la mise en cache des fonctions internes de CFEngine et n'appelle pas une commande externe plusieurs fois par exécution. Bien sûr, execresult()c'est plus général.
Wildcard