Hi,
Le 08/07/2011 15:05, [email protected] a écrit :
> Forum: CFEngine Help
> Subject: edit global list
> Author: schattenfell
> Link to topic: https://cfengine.com/forum/read.php?3,22770,22770#msg-22770
>
> Hello,
>
> by design it seems not to be possible, to edit global lists. E.g. I create a
> list in a bundle (common or agent).
>
>
> bundle common v
> {
> vars:
> "my_module_list_global" slist => { "loop" }, policy => "overridable";
> }
>
>
> Now I want to add literals to this global list in the "vars:" - section of
> other bundles. But here only a local use is possible like:
>
>
> "my_module_list_local" slist => {
> @(v.my_module_list_global),
> "drbd"
> },
> policy => "overridable";
>
>
> So my intention ist the following: I have different bundles of type agent for
> different services, that I want to configure.
> In every bundle I want to be able to collect information about needed kernel
> modules.
> At the end a bundle agent called modules shall use this global list, to
> create /etc/modules from it.
>
> I know I could e.g. define classes in the different service bundles and check
> them in the module bundle, but then I always have to edit the module bundle,
> if I want to add a new service bundle with the need of a specific kernel
> module.
>
> Does anyone have an idea, how I can define a global var / list, that is
> acessible from different bundles for writing?
> Or another way to deal with the mentionned problem?
I'm pretty sure that you can't edit lists in other bundles, so I see
your frustration.
I can see two approaches that I would use here, depending on whether you
need a list of modules to *set* (ie, the whole list, and you must delete
any other lines) or whether you need a list of modules to *add* (just
adding lines to /etc/modules).
Both cases would use a bundle agent that takes a parameter (the module
name), that you can call using a "methods" promise from each of your
service bundles, ie :
bundle agent add_module(module_name) {
files:
"/etc/modules"
edit_line => add_lines("$(module_name)");
}
bundle agent my_service {
# do real stuff
methods:
"any" usebundle => add_module("some module");
}
This would just add lines to /etc/modules, if they don't exist (2nd case
above).
If you want to *set* the contents of the file, I suggest using a
temporary file to build up the list (similar to your approach of
building up a slist). The bundle add_module above would be the same, but
using a temporary file. Then at the end of your bundlesequence, add a
bundle with a files promise to replace /etc/modules with that temporary
file.
Hope this helps,
Jonathan
--
==========================================
Jonathan CLARKE
CTO - Directeur technique
------------------------------------------
Normation
44 rue Cauchy, 94110 Arcueil, France
------------------------------------------
Telephone: +33 (0)1 83 62 41 24
------------------------------------------
Web: http://www.normation.com/
==========================================
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine