2016-04-19 3 views
0

Der Versuch, ein cfengine3-Versprechen zu schreiben, nimmt ein ganzes Verzeichnis in Anspruch und verschiebt es um eine Ebene nach unten.CFE-Syntaxfehler

Ich habe meine Politik Hub verwendet, um das Versprechen zu verteilen, aber ich habe noch nicht es in meiner aktiven promise.cf gefaltet

Hier ist das Versprechen:

body common control 

{ 

     bundlesequence => { dirstructure }; 
} 


#Find out by existance of directories if filesystem is old structure or new 
#Set classes for each instance. If old, copy down one level. 
#If new file system already, pat yourself on the back 

bundle agent dirstructure 
{  
classes: 

    "oldFILEstructure"expression => isdir("/old/dir/structure/"); 
    "newFILEstructure" expression => isdir("/new/dir/structure/"); 


reports: 

    oldFILEstructure:: 
     "system has old file structure.."; 
    newFILEstructure:: 
     "system has new file structure.."; 

methods: 
    oldFILEstructure:: 
     "migratedirectories" usebundle => movedirectories 
} 

bundle agent movedirectories 

{ 
files: 
     "/new/dir/" 

     copy_from => local_cp ("/old/dir/structure/."); 
     depth_search => recurse ("inf"); 
} 

I this "isdir" verwendet haben Quelle und this example für local_cp, beide von CFE, um das Versprechen auf Basis. Wenn aufgerufen, bekomme ich die folgende Fehlerausgabe und ich versuche herauszufinden, warum.

:/var/cfengine/inputs/standalone# cf-agent --no-lock --inform --file ./file_structure.cf 
./file_structure.cf:41:12: error: syntax error 
depth_search => recurse ("inf"); 
     ^
./file_structure.cf:41:12: error: Expected promiser string, got 'depth_search' 
depth_search => recurse ("inf"); 
     ^
./file_structure.cf:41:15: error: Expected ';', got '=>' 
depth_search => recurse ("inf"); 
      ^
./file_structure.cf:41:23: error: Expected promiser string, got 'recurse' 
depth_search => recurse ("inf"); 
        ^
./file_structure.cf:41:25: error: Expected ';', got '(' 
depth_search => recurse ("inf"); 
         ^
./file_structure.cf:41:31: error: Expected ';', got ')' 
depth_search => recurse ("inf"); 
          ^
./file_structure.cf:41:32: error: Expected promiser string, got ';' 
depth_search => recurse ("inf"); 
          ^
./file_structure.cf:42:1: error: Expected ';', got '}' 
} 

Antwort

2
files: 
     "/new/dir/" 

     copy_from => local_cp ("/old/dir/structure/."); 
     depth_search => recurse ("inf"); 
} 

Sie haben ein zusätzliches Semikolon am Ende der copy_from Linie.

Ein Semikolon ; identifiziert das Ende eines Versprechens. Versuchen Sie, das Semikolon am Ende der Zeile copy_from zu einem Komma , zu wechseln.

Zusätzlich können Sie das transformer Attribut überprüfen. Es kann oder kann nicht eine gute Verwendung für Ihren Fall sein. \

bundle agent example 
{ 
    files: 
     "/old/dir/structure" -> { "jira:EXAMPLE-1234" } 
     transformer => "/bin/mv /old/dir/structure /new/dir/structure", 
     comment => "The standard is to use the new location because x, y, z. Bad thing Q or U might happen if this is not managed properly."; 
}