Wie kann ich die Ausgabe eines Befehls in cfengine3 verwenden?

8

Ich möchte einen Verzeichnisinhalt auflisten und das Ergebnis woanders verwenden:

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
quelle

Antworten:

12
bundle agent test
{

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

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

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

Schwindler
quelle
In acht nehmen! Dieser Befehl wird mehrmals pro cf-agentLauf ausgeführt. Weitere Informationen finden Sie in den Dokumenten zur normalen Bestellung und im Hinweis unten in den Dokumentenexecresult() . Denn lses mag nicht wichtig sein, aber für teurere Befehle wird es sicherlich sein.
Wildcard
4

Ab Version 3.3.0 können Sie stattdessen die Funktion lsdir () verwenden.

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

Lesen Sie mehr: https://cfengine.com/manuals/cf3-Reference#Function-lsdir

Versprechen
quelle
Dies ist für den lsAnwendungsfall tatsächlich besser, da das interne Funktions-Caching von CFEngine verwendet wird und kein externer Befehl mehrmals pro Lauf aufgerufen wird. Natürlich execresult()ist allgemeiner.
Wildcard