Thanks, Tokarski.

I had to tweak your suggestion a bit and it worked.  Here is my config file for 
others who may need it as well.

/tmp/templates/copy_local_folder.cf
"#
#       testing cfengine with following:
#               copy local folder
#
body common control
{
        bundlesequence          => { "createFile" , "copyLocalFolder" };
        ignore_missing_bundles  => "true";
        require_comments        => "true";
        inputs                  => { "/var/cfengine/inputs/cfengine_stdlib.cf" 
};
        version                 => "1.0";
}

body agent control
{
        verbose         => "true";
}

bundle agent createFile
{
        files:
#
#       the stanza below creates folders and file if it does not exist
#
                "/tmp/test/create_folder1/create_file4.txt"
                comment => "create file",
                perms => mog("755", "root", "root"),
                create => "true";

                "/tmp/test/create_folder1/create_folder2/create_file5.txt"
                comment => "create file",
                perms => mog("755", "root", "root"),
                create => "true";

               "/tmp/test/create_folder1/create_folder3/create_file6.txt"
                comment => "create file",
                perms => mog("755", "root", "root"),
                create => "true";
}

bundle agent copyLocalFolder
{
        files:
                "/tmp/test/create_folder1/copy_local_folder"
                comment         => "copy local folder",
                include_dirs    => { "/etc/cron.*" },
                depth_search    => recurse("inf"),
                file_select     => folders("/cron.*"),
                preserve        => "true",
                copy_from       => local_cp("/etc");
}

body file_select folders(x)
{
        path_name               => { "$(x)" };
        file_types              => { "dir" };
        file_result             => "path_name";
}"

Regards,
j


From: Tokarski Boleslaw [mailto:boleslaw.tokar...@tieto.com]
Sent: Sunday, June 12, 2011 11:26 PM
To: Jerome Yanga
Cc: 'help-cfengine@cfengine.org'
Subject: Re: Cfengine Help: Copying Local Folder

Hello, J,

Have a look at 
http://www.cfengine.org/manuals/cf3-reference.html#file_005fselect-in-files

Basically you need a well-written file_select stanza, I believe this should 
work (this is just out of my head, you need to test it yourself:

body file_select cronfiles
{
    path_name => { "cron.* };
    file_result => "path_name";
}

bundle agent copyLocalFolder
{
        files:
             "/data/test/create_folder1/copy_local_folder"
                comment         => "copy local folder",
                depth_search    => recurse("inf"),
                preserve        => "true",
                copy_from       => local_cp("/etc"),
                file_select     => cronfiles;
}

Best regards,
B


On 06/10/2011 11:40 PM, Jerome Yanga wrote:
CORRECTION:  I sent the wrong version of the config file.

/data/templates/copy_local_folder.cf
"#
#       testing cfengine with following:
#               copy local folder
#
body common control
{
        bundlesequence          => { "createFile" , "copyLocalFolder" };
        ignore_missing_bundles  => "true";
        require_comments        => "true";
        inputs                  => { "/var/cfengine/inputs/cfengine_stdlib.cf" 
};
        version                 => "1.0";
}

body agent control
{
        verbose         => "true";
}

bundle agent createFile
{
        files:
#
#       the stanza below creates folders and file if it does not exist
#
                "/data/test/create_folder1/create_file4.txt"
                comment => "create file",
                perms => mog("755", "root", "root"),
                create => "true";

                "/data/test/create_folder1/create_folder2/create_file5.txt"
                comment => "create file",
                perms => mog("755", "root", "root"),
                create => "true";

                "/data/test/create_folder1/create_folder3/create_file6.txt"
                comment => "create file",
                perms => mog("755", "root", "root"),
                create => "true";
}

bundle agent copyLocalFolder
{
        files:
                "/data/test/create_folder1/copy_local_folder"
                comment         => "copy local folder",
                include_dirs    => { "/etc/cron.*" },
                depth_search    => recurse("inf"),
                preserve        => "true",
                copy_from       => local_cp("/etc");
}"

Regards,
j

From: Jerome Yanga
Sent: Friday, June 10, 2011 2:36 PM
To: 'Tokarski Boleslaw'
Cc: 'help-cfengine@cfengine.org<mailto:help-cfengine@cfengine.org>'
Subject: RE: Cfengine Help: Copying Local Folder

Thanks, B.  I was able to implement you suggestions....at least most of it.  I 
still have an issue though.  The configuration below copies all the /etc/cron* 
folders and files.  However, it also copies all the files in /etc/*.  I tried 
testing with exclude_dirs but as its description specifies, it only affects 
directories.  Is there a way to just copy /etc/cron*?

/data/templates/copy_local_folder.cf
"#
#       testing cfengine with following:
#               copy local folder
#
body common control
{
        bundlesequence          => { "createFile" , "copyLocalFolder" };
        ignore_missing_bundles  => "true";
        require_comments        => "true";
        inputs                  => { "/var/cfengine/inputs/cfengine_stdlib.cf" 
};
        version                 => "1.0";
}

body agent control
{
        verbose         => "true";
}

bundle agent createFile
{
        files:
#
#       the stanza below creates folders and file if it does not exist
#
                "/data/test/create_folder1/create_file4.txt"
                comment => "create file",
                perms => mog("755", "root", "root"),
                create => "true";

                "/data/test/create_folder1/create_folder2/create_file5.txt"
                comment => "create file",
                perms => mog("755", "root", "root"),
                create => "true";

                "/data/test/create_folder1/create_folder3/create_file6.txt"
                comment => "create file",
                perms => mog("755", "root", "root"),
                create => "true";
}

bundle agent copyLocalFolder
{
        files:
                "/data/test/create_folder1/copy_local_folder"
                comment         => "copy local folder",
                depth_search    => recurse("inf"),
                preserve        => "true",
                copy_from       => local_cp("/etc/cron");
}"

Regards,
j

From: 
help-cfengine-boun...@cfengine.org<mailto:help-cfengine-boun...@cfengine.org> 
[mailto:help-cfengine-boun...@cfengine.org] On Behalf Of Tokarski Boleslaw
Sent: Thursday, June 09, 2011 10:33 PM
To: help-cfengine@cfengine.org<mailto:help-cfengine@cfengine.org>
Subject: Re: Cfengine Help: Copying Local Folder

Hello,


I would like to copy the folders /etc/cron* and its contents to another 
location.  However, I still end up copying the whole /etc directory.
Well, this should be feasible :)
bundle agent copyLocalFolder
{
        files:
                "/tmp/test/create_folder1/copy_local_folder"
                comment         => "copy local folder",
                preserve        => "true",
                depth_search    => allofit("99999999999"),
                exclude_dirs    => { "*" },
                include_dirs    => { "cron" },
                copy_from       => myLocalCopy("/etc/.");
}
Looks wrong to me. Have a look at 
http://www.cfengine.org/manuals/cf3-reference.html#Pattern-matching-and-referencing
The thing is you are using shell-type pattern * instead of perl-compatible ones 
.*

Also this stanza looks pretty valid as to copy /etc directory to 
/tmp/.../copy_local_folder. Did you mean to put something like /etc/cron.*?

For depth_search you can use "inf", it's much better than specifying any 
constant integer.

body depth_search allofit(d)
{
        depth                   => "$(d)";
}

body copy_from myLocalCopy(from)
{
        source  => "$(from)";
}"

I saw you included cfengine_stdlib.cf. You can actually use recurse(depth) and 
local_cp(from) body from there instead of rewriting your own.

Best regards,
B

_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to