我必须创建一个CFENGINE 3策略,它应该从已定义的输入列表中获取输入,然后希望逐个对该集合执行一些命令。
例如:
对于这里的一个包,我有一个示例:

bundle agent test_tester_install

{

commands:

    "/usr/bin/wget  http://something.example.com/perl-modules/Test-Tester-0.104.tar.gz;
    /usr/bin/gunzip Test-Tester-0.104.tar.gz;
    tar -xf Test-Tester-0.104.tar;
    cd Test-Tester-0.104;
    /usr/bin/perl Makefile.PL;
    /usr/bin/make;
    /usr/bin/make install"


    contain =>  standard,
            classes => satisfied("Test-Tester Installed");
     }
body contain standard

{

    useshell => "true";
    exec_owner => "root";
}

body classes satisfied(new_class)


{

    promise_repaired => { "$(new_class)" };
}

但我不知道如何做,如果我想做同样的100包。我认为“slist会这样做,但我不确定我到底需要如何起草这项政策”
这非常类似于在bash shell中应用“for”循环,在这里我们逐个迭代输入并执行一些操作
专家请帮忙

最佳答案

这样做的方法是使用CFEngine的隐式循环。您将值存储在列表中,然后在承诺中对其进行迭代。以你的例子来说,可能是这样的:

bundle agent install

{
vars:
    "packages" slist => { "Test-Tester-0.104", "Foo-Bar-1.001" }; # etc.
commands:
    "/usr/bin/wget  http://something.example.com/perl-modules/$(packages).tar.gz;
    /usr/bin/gunzip $(packages).tar.gz;
    tar -xf $(packages).tar;
    cd $(packages);
    /usr/bin/perl Makefile.PL;
    /usr/bin/make;
    /usr/bin/make install"
            contain =>  standard,
            classes => satisfied(canonify("$(packages)-installed"));
     }

请注意,每当您以前使用Test-Tester-0.104时,我都会使用$(package)。当然,只有当所有的名字在这方面都一致时,这才有效。要添加更多,只需将名称添加到packages变量。我还使用canonify()使传递给safesfied()主体的字符串成为有效的类名。
现在,如果您要进行很多这样的安装,我建议您定义一个新的package_method definition,它负责在内部执行正确的步骤,以便在您的策略中可以有更干净的东西,例如:
vars:
    "packages" slist => { "Test-Tester-0.104", "Foo-Bar-1.001" }; # etc.
packages:
    "$(packages)"
       package_policy => "add",
       package_method => perlsrcpkg;  # or whatever you call your new package_method

您可以在这里找到包承诺的文档:http://cfengine.com/docs/3.5/reference-promise-types-packages.html#packages,以及CFEngine标准库中的一堆包方法定义示例:https://github.com/cfengine/masterfiles/blob/master/lib/3.5/packages.cf
最后,如果您正在安装的软件包来自CPAN,您可以使用设计中心的Packages::Installed::cpanm草图:https://cfengine.com/cfengine-design-center/sketches/packages-cpan-cpanm

10-06 06:03