gpt4 book ai didi

linux - CFENGINE:对一堆包执行一堆命令的策略

转载 作者:太空宇宙 更新时间:2023-11-04 11:19:56 24 4
gpt4 key购买 nike

我必须创建一个 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 的隐式循环。您将值存储在列表中,然后在 promise 中迭代它们。对于您的示例,它将是这样的:

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() 使传递给 satisfied() 主体的字符串成为有效的类名。

现在,如果您要进行大量这样的安装,我建议定义一个新的 package_method 定义,它负责在内部遵循正确的步骤,这样您的策略中就可以有很多东西清洁器,像这样:

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

您可以在此处找到有关包 promise 的文档:http://cfengine.com/docs/3.5/reference-promise-types-packages.html#packages ,以及 CFEngine 标准库中的一堆 package_method 定义示例: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

关于linux - CFENGINE:对一堆包执行一堆命令的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18867258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com