Re: Re: abort_bundle_classe are not working...somwhat

"'[email protected]' via help-cfengine" <[email protected]> Tue, 30 Jul 2024 08:31:06 -0700 (PDT)
Newsgroups gmane.comp.sysutils.cfengine.general
Message-ID <[email protected]>
Hey there,

I tried to make a self-contained example to try this out and am not having 
any troubles with parsing either with 3.21.5 or latest master (3.25.0a).

Maybe you could send a complete verbose log of the smallest reproducer you 
can manage to the ticket? https://northerntech.atlassian.net/browse/CFE-3411

---

Here is my def.json, notice I removed some trailing commas you had. 
Probably not an issue but might be worth fixing. I used `jq` to validate it.

{

  "variables": {

    "default:def.control_agent_abortclasses": {

      "value": [

        "abort_.*"

      ]

    },

    "default:def.control_agent_abortbundleclasses": {

      "value": [

        "bundle_abort_.*"

      ]

    }

  }

}


the self contained policy:

bundle common def

{

  vars:

    "control_agent_abortclasses"

      slist => {},

      if => not( isvariable( "default:def.control_agent_abortclasses" ));

    "control_agent_abortbundleclasses"

      slist => { "abortbundle" },

      if => not( isvariable( "default:def.control_agent_abortbundleclasses" 
));

  classes:

    "full_name_exists" expression => 
isvariable("default:def.control_agent_abortclasses");

    "short_name_exists" expression => 
isvariable("control_agent_abortclasses");

}


body agent control

{

  abortclasses => { @(def.control_agent_abortclasses) };


  abortbundleclasses => { @(def.control_agent_abortbundleclasses) };

}


bundle agent main

{

  reports: "hi";

    "default:def.control_agent_abortclasses is 
$(default:def.control_agent_abortclasses)";

    "default:def.control_agent_abortbundleclasses is 
$(default:def.control_agent_abortbundleclasses)";

    default:full_name_exists::

      "default:def.control_agent_abortclasses is a variable in the context 
of default:def bundle";

    default:short_name_exists::

      "control_agent_abortclasses is a variable in the context of 
default:def bundle";

}

and the output:

cf-agent -KIf ./t.cf 

R: hi

R: default:def.control_agent_abortclasses is abort_.*

R: default:def.control_agent_abortbundleclasses is bundle_abort_.*

R: default:def.control_agent_abortclasses is a variable in the context of 
default:def bundle

R: control_agent_abortclasses is a variable in the context of default:def 
bundle


And I don't see any parse errors in verbose output:


 verbose: Setting abort classes from ...

 verbose: Setting abort bundle classes from ...

 verbose: ----------------------------------------------------------------

 verbose:  Begin policy/promise evaluation 

 verbose: ----------------------------------------------------------------
On Tuesday, July 30, 2024 at 7:38:55 AM UTC-5 Xander Cage wrote:

> i tested with 3.21.5...
>
> abort and abortbundleclasses defined in augments...
>
>  "variables": {
>                      
>                      "default:def.control_agent_abortclasses": {
>                      "value": [
>                          "abort_.*"
>                      ],
>                     }
>
>                       "default:def.control_agent_abortbundleclasses": {
>                      "value": [
>                          "bundle_abort_.*"
>                      ],
>                     }
>   }
>
> still parsing errros...
>
> root@aixtest01: /var/cfengine/inputs #  /var/cfengine/bin/cf-agent -KIv | 
> grep abort
>  verbose: Installing augments slist variable 
> 'default:def.control_agent_abortclasses' from file 
> '/var/cfengine/inputs/def.json'
>  verbose: Installing augments slist variable 
> 'default:def.control_agent_abortbundleclasses' from file 
> '/var/cfengine/inputs/def.json'
>  verbose: Skipping promise 'control_agent_abortclasses' because constraint 
> 'if => not(isvariable("$(this.promiser)"))' is not met
>  verbose: Skipping promise 'control_agent_abortbundleclasses' because 
> constraint 'if => not(isvariable("$(this.promiser)"))' is not met
>  verbose: Skipping promise 'control_agent_abortclasses' because constraint 
> 'if => not(isvariable("$(this.promiser)"))' is not met
>  verbose: Skipping promise 'control_agent_abortbundleclasses' because 
> constraint 'if => not(isvariable("$(this.promiser)"))' is not met
>  verbose: Skipping promise 'control_agent_abortclasses' because constraint 
> 'if => not(isvariable("$(this.promiser)"))' is not met
>  verbose: Skipping promise 'control_agent_abortbundleclasses' because 
> constraint 'if => not(isvariable("$(this.promiser)"))' is not met
>  verbose: Skipping promise 'control_agent_abortclasses' because constraint 
> 'if => not(isvariable("$(this.promiser)"))' is not met
>  verbose: Skipping promise 'control_agent_abortbundleclasses' because 
> constraint 'if => not(isvariable("$(this.promiser)"))' is not met
>  verbose: Skipping promise 'control_agent_abortclasses' because constraint 
> 'if => not(isvariable("$(this.promiser)"))' is not met
>  verbose: Skipping promise 'control_agent_abortbundleclasses' because 
> constraint 'if => not(isvariable("$(this.promiser)"))' is not met
>
>  verbose: Setting abort classes from ...
>  verbose: Setting abort bundle classes from ...
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>    error: Unable to parse class expression 'bundle_abort_.*'
>
>
> as mentioned numerious time..this only occurs when the abortclasses are 
> defined in augments...
>
> when defining it in policy no error are emitted...
>
> body agent control
> {
>       # List of regular expressions to match classes. When the class is 
> found to
>       # be defined, the agent will abort execution of the bundle.
>       # 
> https://docs.cfengine.com/docs/master/reference-components-cf-agent.html#abortbundleclasses
>
>       # BUG: aborbundleclasses errors with regular expressions, wrongly.
>       #  "abort_bundle_sys_host_not_match_sys_uqhost"
>         abortbundleclasses => {  "abort_bundle.*" };
> }
> bundle agent __main__
> {
>
>   methods:
>       "bundle1";
>       "bundle2";
>
>   reports:
>       "CFEngine: $(sys.cf_version)";
> }
> bundle agent bundle1
> {
>
>   classes:
>       "abort_bundle_sys_fqhost_matches_sys_uqhost"
>         expression => strcmp( $(sys.fqhost), $(sys.uqhost) );
>
>   methods: # More bundles, they wont be called because it aborts ...
>       reports: "$(this.bundle) here!";
> }
> bundle agent bundle1_1
> {
>
>       reports: "$(this.bundle) here!";
> }
> bundle agent bundle2
> {
>
>   classes:
>
>       reports: "$(this.bundle) here!";
> }
>
> :
>
> On Friday, September 11, 2020 at 3:38:52 PM UTC+2 [email protected] 
> wrote:
>
>> Yes, I encountered the same error yesterday. If you use specific classes 
>> and not regular expressions it should work without emitting the errors 
>> about being unable to parse the class expression.
>>
>> I filed an issue for it yesterday: 
>> https://tracker.mender.io/browse/CFE-3411
>>
>> On Friday, September 11, 2020 at 6:56:37 AM UTC-5 Xander Cage wrote:
>>
>>> i noticed one more little thing..since upgrade to the new mpf version 
>>> this error is printed. it
>>>
>>> verbose: C: BEGIN classes / conditions (pass 1)
>>>
>>>    error: Unable to parse class expression 'ITSV_BUNDLE_ABORT.*'
>>>  verbose: C:     +  Private class: percent_of_runs
>>>    error: Unable to parse class expression 'ITSV_BUNDLE_ABORT.*'
>>>
>>>  verbose: V:     Computing value of 'tags'
>>>  verbose: A: Promise was KEPT
>>>  verbose: P: END meta promise (tags)
>>>
>>>
>>> first i thouhgt this is caused by the downlevel binary, but 3.12.5 makes 
>>> no difference. seems that the wildcard class expression in def.json is not 
>>> playing very well. ('ITSV_BUNDLE_ABORT.*')
>>>
>>> On Friday, September 11, 2020 at 1:13:07 PM UTC+2, Xander Cage wrote:
>>>>
>>>> hi nick,
>>>>
>>>> you are absolutley right, after upgrading mpf to 3.12.5 everything 
>>>> works fine...
>>>>
>>>> verbose: 
>>>> ----------------------------------------------------------------
>>>>  verbose:  Begin policy/promise evaluation
>>>>  verbose: 
>>>> ----------------------------------------------------------------
>>>>     info: Using command line specified bundlesequence
>>>>  verbose: Using bundlesequence =>  {"b0040abort_test"}
>>>>  verbose: B: 
>>>> *****************************************************************
>>>>  verbose: B: BEGIN bundle b0040abort_test
>>>>  verbose: B: 
>>>> *****************************************************************
>>>>  verbose: V:     Computing value of 'tags'
>>>>  verbose: A: Promise was KEPT
>>>>  verbose: P: END meta promise (tags)
>>>>  verbose: V: .........................................................
>>>>  verbose: V: BEGIN variables (pass 1)
>>>>  verbose: V:     Computing value of 'userlist'
>>>>  verbose: C: .........................................................
>>>>  verbose: C: BEGIN classes / conditions (pass 1)
>>>>  verbose: C:     +  Private class: ITSV_BUNDLE_ABORT_INVALID_USER
>>>>    error: Bundle 'b0040abort_test' aborted on defined class 
>>>> 'ITSV_BUNDLE_ABORT_INVALID_USER'
>>>>  verbose: A: ...................................................
>>>>  verbose: A: Bundle Accounting Summary for 'b0040abort_test' in 
>>>> namespace default
>>>>  verbose: A: Promises kept in 'b0040abort_test' = 2
>>>>  verbose: A: Promises not kept in 'b0040abort_test' = 0
>>>>  verbose: A: Promises repaired in 'b0040abort_test' = 0
>>>>  verbose: A: Aggregate compliance (promises kept/repaired) for bundle 
>>>> 'b0040abort_test' = 100.0%
>>>>  verbose: A: ...................................................
>>>>  verbose: B: 
>>>> *****************************************************************
>>>>  verbose: B: END bundle b0040abort_test
>>>>  verbose: B: 
>>>> *****************************************************************
>>>>  verbose: No lock purging scheduled
>>>>  verbose: Logging total compliance, total 'Outcome of version CFEngine 
>>>> Promises.cf 3.12.5 (agent-0): Promises observed to be kept 100.00%, 
>>>> Promises repaired 0.00%, Promises not repaired 0.00%'
>>>>
>>>>
>>>> thank you...
>>>>
>>>> chris
>>>>
>>>>
>>>> On Thursday, September 10, 2020 at 6:52:14 PM UTC+2, Nick Anderson 
>>>> wrote:
>>>>>
>>>>> Xander Cage writes: 
>>>>>
>>>>> i tested with an example policy, to reduce clutter… still no bundle 
>>>>>> abort… 
>>>>>>
>>>>> Hi Christian, 
>>>>>
>>>>> From your original post, I can see that you are running 3.12.2. 
>>>>>
>>>>> verbose: Logging total compliance, total 'Outcome of version CFEngine Promises.cf 3.12.2 (agent-0): Promises observed to be kept 100.00%, Promises repaired 0.00%, Promises not repaired 0.00%'
>>>>>
>>>>> Are you running the MPF from 3.12.2 as well? 
>>>>>
>>>>> I see that augments support for abortbundleclasses and abortclasses 
>>>>> were added in 3.12.3. 
>>>>> https://github.com/cfengine/masterfiles/commit/e2c4c1c57e51edcb46e80aa906048daea0b75192 
>>>>>
>>>>> What if you pull in controls/cf_agent.cf and controls/def.cf from 
>>>>> 3.12.3? 
>>>>>
>>>>>
>>>>> https://github.com/cfengine/masterfiles/blob/3.12.3/controls/cf_agent.cf 
>>>>> https://github.com/cfengine/masterfiles/blob/3.12.3/controls/def.cf 
>>>>>
>>>>> Does it work then? 
>>>>>
>>>>> – Nick Anderson | Doer of Things | (+1) 785-550-1767 
>>>>> <(785)%20550-1767> | https://northern.tech 
>>>>>
>>>>

-- 
You received this message because you are subscribed to the Google Groups "help-cfengine" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion on the web visit https://groups.google.com/d/msgid/help-cfengine/b7e86a77-346d-46c8-bbe8-124b7529bef7n%40googlegroups.com.