No, what it says that you can use both the class expression and the
ifvarclass to conditionnaly execute  a promise, and you can use variable
in the ifvarclass, that CFEngine will expand and match against an
existing class name
So it doesn't build a class, it checks if a class has the name (hence
the name of the attribute : ifvarclass)

Regards
Nicolas

Le 14/09/2011 14:08, Aleksey Tsalolikhin a écrit :
> Thank you, Seva.  The reference manual states ifvarclass builds out a
> class from variable content:
>
> CFEngine 3 has a new class predicate ifvarclass which is ANDed with
> the normal class expression, and which is evaluated together with the
> promise. It may contain variables as long as the resulting expansion
> is a legal class expression.
>
> Best,
> Aleksey
>
>
> On Wed, Sep 14, 2011 at 12:34 AM, Seva Gluschenko
> <seva.glusche...@gmail.com> wrote:
>> Aleksey,
>>
>> Don't misguide newcomers ) The ifvarclass attribute does NOT create a
>> class from variable, it allows to build out a class name from a
>> variable content and check whether such class has been defined already
>> or not. To create (i.e. to define) a class from a variable, one must
>> use classes: section.
>>
>> 2011/9/14 Aleksey Tsalolikhin <atsaloli.t...@gmail.com>:
>>> Hi, Jerome.  I suggest using cf-promises to check the syntax on your policy:
>>>
>>> [cfengine00  ~]# cf-promises -f ./test.cf
>>> Arguments to function readfile(.) do not tally. Expect 2 not 1
>>> Promise (version not specified) belongs to bundle 'g' in file
>>> './test.cf' near line 5
>>> [cfengine00  ~]#
>>>
>>> You have to tell readfile max number of bytes to read from the file.
>>>
>>>
>>> If you want to explicitly make a class (rather than just use
>>> ifvarclass to create
>>> the class), you can do it with a classes type promise as Seva suggested.
>>>
>>> {{{
>>>
>>> bundle common g
>>> {
>>>       vars:
>>>
>>>               "temp"  string  =>      readfile( "/tmp/test.txt", "99" );
>>>
>>>        classes:
>>>                "$(temp)" expression => "any";
>>> }
>>>
>>> bundle agent animal
>>> {
>>>       commands:
>>>               "/bin/echo $(g.temp)"
>>>                       ifvarclass              =>      canonify("$(g.temp)");
>>>       reports:
>>>               DOG::
>>>                       "I have a pet dog.";
>>> }
>>>
>>> }}}
>>>
>>> How's that?
>>>
>>> Aleksey
>>>
>>>
>>> On Tue, Sep 13, 2011 at 11:36 AM, Jerome Yanga <jya...@esri.com> wrote:
>>>> Aleksey,
>>>>
>>>> I came up with the following but I seem to be misinterpreting the 
>>>> reference manual.  I have also used canonify to no avail.  Help.
>>>>
>>>> $ cat /tmp/test.txt
>>>> DOG
>>>>
>>>> bundle common g
>>>> {
>>>>        vars:
>>>>
>>>>                "temp"  string  =>      readfile( "/tmp/test.txt" );
>>>> }
>>>>
>>>> bundle agent animal
>>>> {
>>>>        commands:
>>>>                "/bin/echo $(g.temp)"
>>>>                        ifvarclass              =>      "$(g.temp)";
>>>>        reports:
>>>>                DOG::
>>>>                        "I have a pet dog.";
>>>> }
>>>>
>>>> Regards,
>>>> j
>>>>
>>>> -----Original Message-----
>>>> From: Aleksey Tsalolikhin [mailto:atsaloli.t...@gmail.com]
>>>> Sent: Tuesday, September 13, 2011 11:20 AM
>>>> To: Jerome Yanga
>>>> Cc: help-cfengine@cfengine.org
>>>> Subject: Re: CFEngine Help: how to convert vars to a class
>>>>
>>>> Yes, you can do it using the ifvarclass, which converts a variable to
>>>> a class.  Could you please read the ifvarclass section of the
>>>> reference manual, and let me know if you have any questions.
>>>>
>>>> Best,
>>>> Aleksey
>>>>
>>>>
>>>> On Tue, Sep 13, 2011 at 11:13 AM, Jerome Yanga <jya...@esri.com> wrote:
>>>>> Is it possible to do what I am attempting to?
>>>>>
>>>>> Regards,
>>>>> j
>>>>>
>>>>> -----Original Message-----
>>>>> From: Jerome Yanga
>>>>> Sent: Monday, September 12, 2011 4:27 PM
>>>>> To: 'Aleksey Tsalolikhin'
>>>>> Cc: 'help-cfengine@cfengine.org'
>>>>> Subject: RE: CFEngine Help: how to convert vars to a class
>>>>>
>>>>> Aleksey,
>>>>>
>>>>> Thank you for the quick response.
>>>>>
>>>>> My main objective is to make the contents of /tmp/test.txt into a class.  
>>>>> Hence, I would like to do the reporting.
>>>>>
>>>>> bundle agent animal
>>>>> {
>>>>>        reports:
>>>>>                DOG::
>>>>>                        "I have a pet dog.";
>>>>> }
>>>>>
>>>>> Regards,
>>>>> j
>>>>>
>>>>> -----Original Message-----
>>>>> From: Aleksey Tsalolikhin [mailto:atsaloli.t...@gmail.com]
>>>>> Sent: Monday, September 12, 2011 4:15 PM
>>>>> To: Jerome Yanga
>>>>> Cc: help-cfengine@cfengine.org
>>>>> Subject: Re: CFEngine Help: how to convert vars to a class
>>>>>
>>>>> On Mon, Sep 12, 2011 at 3:58 PM, Jerome Yanga <jya...@esri.com> wrote:
>>>>>> I saw another post on how to do this but it does not seem to work for 
>>>>>> me.  Please correct my syntax
>>>>> How's this?
>>>>>
>>>>> [cfengine00  ~]# cat /tmp/test.txt
>>>>> DOG
>>>>> [cfengine00  ~]# cat test.cf
>>>>> body common control {
>>>>>        bundlesequence => { "animal" };
>>>>> }
>>>>>
>>>>> bundle common g
>>>>> {
>>>>>       vars:
>>>>>
>>>>>               "temp"  string  =>      readfile("/tmp/test.txt", "4" );
>>>>> }
>>>>>
>>>>> bundle agent animal
>>>>> {
>>>>>       commands: "/bin/echo $(g.temp)";
>>>>>       commands:
>>>>>                       "/bin/echo I have a pet dog."
>>>>>                                ifvarclass => "$(g.temp)";
>>>>> }
>>>>> [cfengine00  ~]# cf-agent -f ./test.cf
>>>>> Q: ".../bin/echo DOG": DOG
>>>>> I: Last 1 quoted lines were generated by promiser "/bin/echo DOG"
>>>>> [cfengine00  ~]#
>>>>>
>>>>> Note the use of ifvarclass attribute to use a variable as a class; and
>>>>> the full name of the variable (including the bundle name) in g.temp.
>>>>> CFEngine bundles have scope, so you have to use the full name to call
>>>>> a variable from another bundle (even a global variable).
>>>>>
>>>>> Yours,
>>>>> -at
>>>>>
>>>>>
>>>>
>>> _______________________________________________
>>> Help-cfengine mailing list
>>> Help-cfengine@cfengine.org
>>> https://cfengine.org/mailman/listinfo/help-cfengine
>>>
>>
>>
>> --
>> SY, Seva Gluschenko.
>>
> _______________________________________________
> Help-cfengine mailing list
> Help-cfengine@cfengine.org
> https://cfengine.org/mailman/listinfo/help-cfengine

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

Reply via email to