Skip to content

Instantly share code, notes, and snippets.

@waptang
Created March 28, 2013 21:59
Show Gist options
  • Save waptang/5267188 to your computer and use it in GitHub Desktop.
Save waptang/5267188 to your computer and use it in GitHub Desktop.
What seems to be a bug in CFEngine when using useresult/bundle_return_value_index. It appears that in some situations, the called bundles fail unless there is an additional output in the results section of the called bundle. The only difference between the bad_result and good_result bundles is that good_result has "input: $(input)" in the report…
R: input: test_result.data[alpha]
R: good: ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz
body common control
{
inputs => {"cfengine_stdlib.cf"};
bundlesequence => {"test_result"};
}
bundle agent test_result
{
vars:
any::
"data[alpha][upper]" string => "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
"data[alpha][lower]" string => "abcdefghijklmnopqrstuvwxyz";
"data_idx" slist => getindices("data");
"bad_classes" slist => maplist("bad_$(this)", "data_idx");
"good_classes" slist => maplist("good_$(this)", "data_idx");
classes:
any::
"bad_done" and => {@(bad_classes)};
"good_done" and => {@(good_classes)};
methods:
any::
"test bad result" usebundle => bad_result("test_result.data[$(data_idx)]"),
classes => if_repaired("bad_$(data_idx)"),
useresult => "bad[$(data_idx)]";
"test good result" usebundle => good_result("test_result.data[$(data_idx)]"),
classes => if_repaired("good_$(data_idx)"),
useresult => "good[$(data_idx)]";
reports:
bad_done::
"bad: $(bad[$(data_idx)][0])";
good_done::
"good: $(good[$(data_idx)][0])";
}
bundle agent bad_result(input)
{
vars:
any::
"input_idx" slist => getindices("$(input)");
"input_vals" slist => maplist("$($(input)[$(this)])", "input_idx");
"result" string => join("-", "input_vals"),
classes => if_repaired("done");
reports:
done::
"$(result)",
bundle_return_value_index => "0";
}
bundle agent good_result(input)
{
vars:
any::
"input_idx" slist => getindices("$(input)");
"input_vals" slist => maplist("$($(input)[$(this)])", "input_idx");
"result" string => join("-", "input_vals"),
classes => if_repaired("done");
reports:
done::
"input: $(input)";
"$(result)",
bundle_return_value_index => "0";
}
cf3> CFEngine - autonomous configuration engine - commence self-diagnostic prelude
cf3> ------------------------------------------------------------------------
cf3> Work directory is /var/cfengine
cf3> Looking for a source of entropy in /var/cfengine/randseed
cf3> Making sure that locks are private...
cf3> Checking integrity of the state database
cf3> Checking integrity of the module directory
cf3> Checking integrity of the PKI directory
cf3> -> Loaded private key /var/cfengine/ppkeys/localhost.priv
cf3> -> Loaded public key /var/cfengine/ppkeys/localhost.pub
cf3> Setting cfengine default port to 5308 = 5308
cf3> Reference time set to Thu Mar 28 22:41:19 2013
cf3> CFEngine Core 3.4.4
cf3> ------------------------------------------------------------------------
cf3> Host name is: localhost.localdomain
cf3> Operating System Type is linux
cf3> Operating System Release is 2.6.32-279.el6.x86_64
cf3> Architecture = x86_64
cf3> Using internal soft-class linux for host localhost.localdomain
cf3> The time is now Thu Mar 28 22:41:19 2013
cf3> ------------------------------------------------------------------------
cf3> # Extended system discovery is only available in version Nova and above
cf3> Additional hard class defined as: 64_bit
cf3> Additional hard class defined as: linux_2_6_32_279_el6_x86_64
cf3> Additional hard class defined as: linux_x86_64
cf3> Additional hard class defined as: linux_x86_64_2_6_32_279_el6_x86_64
cf3> GNU autoconf class from compile time: compiled_on_linux_gnu
cf3> Address given by nameserver: 127.0.0.1
cf3> -> No interface exception file /var/cfengine/inputs/ignore_interfaces.rx
cf3> Interface 1: lo
cf3> Interface 2: eth0
cf3> Interface 3: eth1
cf3> Trying to locate my IPv6 address
cf3> Found IPv6 address fe80::a00:27ff:fe41:f043
cf3> Found IPv6 address fe80::a00:27ff:fec9:dd25
cf3> Looking for environment from cf-monitord...
cf3> Unable to detect environment from cf-monitord
cf3> This appears to be a redhat (or redhat-based) system.
cf3> Looking for redhat linux info in "CentOS release 6.3 (Final)"
cf3> Reading /proc/stat utilization data -------
cf3> -> Found 1 cpu cores
cf3> ***********************************************************
cf3> Loading persistent classes
cf3> ***********************************************************
cf3> ***********************************************************
cf3> Loaded persistent memory
cf3> ***********************************************************
cf3> -> No policy server (hub) watch yet registered
cf3> -> Input file is outside default repository, validating it
cf3> -> Promises seem to change
cf3> -> Input file is changed since last validation, validating it
cf3> -> Verifying the syntax of the inputs...
cf3> Checking policy with command ""/var/cfengine/bin/cf-promises" -f "./test.cf""
cf3> > Parsing file ./test.cf
cf3> Initiate variable convergence...
cf3> Function "join" was promised a list called "this.input_vals" but this was not (yet) found
cf3> Function "join" was promised a list called "this.input_vals" but this was not (yet) found
cf3> > Parsing file ./cfengine_stdlib.cf
cf3> Initiate variable convergence...
cf3> Function "join" was promised a list called "this.input_vals" but this was not (yet) found
cf3> Function "join" was promised a list called "this.input_vals" but this was not (yet) found
cf3> -> Checking common class promises...
cf3> ?> defining additional global class _stdlib_path_exists_df
cf3> ?> defining explicit global class _stdlib_path_exists_df
cf3> ?> defining additional global class _stdlib_path_exists_cat
cf3> ?> defining explicit global class _stdlib_path_exists_cat
cf3> ?> defining additional global class _stdlib_path_exists_chkconfig
cf3> ?> defining explicit global class _stdlib_path_exists_chkconfig
cf3> ?> defining additional global class _stdlib_path_exists_find
cf3> ?> defining explicit global class _stdlib_path_exists_find
cf3> ?> defining additional global class _stdlib_path_exists_ifconfig
cf3> ?> defining explicit global class _stdlib_path_exists_ifconfig
cf3> ?> defining additional global class _stdlib_path_exists_hostname
cf3> ?> defining explicit global class _stdlib_path_exists_hostname
cf3> ?> defining additional global class _stdlib_path_exists_sort
cf3> ?> defining explicit global class _stdlib_path_exists_sort
cf3> ?> defining additional global class _stdlib_path_exists_sed
cf3> ?> defining explicit global class _stdlib_path_exists_sed
cf3> ?> defining additional global class _stdlib_path_exists_service
cf3> ?> defining explicit global class _stdlib_path_exists_service
cf3> ?> defining additional global class _stdlib_path_exists_printf
cf3> ?> defining explicit global class _stdlib_path_exists_printf
cf3> ?> defining additional global class _stdlib_path_exists_egrep
cf3> ?> defining explicit global class _stdlib_path_exists_egrep
cf3> ?> defining additional global class _stdlib_path_exists_rpm
cf3> ?> defining explicit global class _stdlib_path_exists_rpm
cf3> ?> defining additional global class _stdlib_path_exists_groupdel
cf3> ?> defining explicit global class _stdlib_path_exists_groupdel
cf3> ?> defining additional global class _stdlib_path_exists_userdel
cf3> ?> defining explicit global class _stdlib_path_exists_userdel
cf3> ?> defining additional global class _stdlib_path_exists_domainname
cf3> ?> defining explicit global class _stdlib_path_exists_domainname
cf3> ?> defining additional global class _stdlib_path_exists_useradd
cf3> ?> defining explicit global class _stdlib_path_exists_useradd
cf3> ?> defining additional global class _stdlib_path_exists_svc
cf3> ?> defining explicit global class _stdlib_path_exists_svc
cf3> ?> defining additional global class _stdlib_path_exists_netstat
cf3> ?> defining explicit global class _stdlib_path_exists_netstat
cf3> ?> defining additional global class _stdlib_path_exists_groupadd
cf3> ?> defining explicit global class _stdlib_path_exists_groupadd
cf3> ?> defining additional global class _stdlib_path_exists_echo
cf3> ?> defining explicit global class _stdlib_path_exists_echo
cf3> ?> defining additional global class _stdlib_path_exists_yum
cf3> ?> defining explicit global class _stdlib_path_exists_yum
cf3> ?> defining additional global class _stdlib_path_exists_grep
cf3> ?> defining explicit global class _stdlib_path_exists_grep
cf3> ?> defining additional global class _stdlib_path_exists_cksum
cf3> ?> defining explicit global class _stdlib_path_exists_cksum
cf3> ?> defining additional global class _stdlib_path_exists_tr
cf3> ?> defining explicit global class _stdlib_path_exists_tr
cf3> ?> defining additional global class _stdlib_path_exists_awk
cf3> ?> defining explicit global class _stdlib_path_exists_awk
cf3> ?> defining additional global class _stdlib_path_exists_diff
cf3> ?> defining explicit global class _stdlib_path_exists_diff
cf3> ?> defining additional global class _stdlib_path_exists_ip
cf3> ?> defining explicit global class _stdlib_path_exists_ip
cf3> ?> defining additional global class _stdlib_path_exists_ls
cf3> ?> defining explicit global class _stdlib_path_exists_ls
cf3> ?> defining additional global class _stdlib_path_exists_cut
cf3> ?> defining explicit global class _stdlib_path_exists_cut
cf3> Initiate variable convergence...
cf3> Function "join" was promised a list called "this.input_vals" but this was not (yet) found
cf3> Function "join" was promised a list called "this.input_vals" but this was not (yet) found
cf3> -> Checking common class promises...
cf3> -> Hard classes = { 10_0_2_15 192_168_34_10 1_cpu 64_bit Day28 Evening GMT_Hr21 Hr22 Hr22_Q3 Lcycle_0 March Min40_45 Min41 PK_MD5_ae5bc9f4ce9bf15bde526741b3231153 Q3 Thursday Yr2013 agent any centos centos_6 centos_6_3 cfengine cfengine_3 cfengine_3_4 cfengine_3_4_4 community_edition compiled_on_linux_gnu fe80__a00_27ff_fe41_f043 fe80__a00_27ff_fec9_dd25 ipv4_10 ipv4_10_0 ipv4_10_0_2 ipv4_10_0_2_15 ipv4_192 ipv4_192_168 ipv4_192_168_34 ipv4_192_168_34_10 linux linux_2_6_32_279_el6_x86_64 linux_x86_64 linux_x86_64_2_6_32_279_el6_x86_64 linux_x86_64_2_6_32_279_el6_x86_64__1_SMP_Fri_Jun_22_12_19_21_UTC_2012 localdomain localhost localhost4 localhost4_localdomain4 localhost6 localhost6_localdomain6 localhost_localdomain mac_08_00_27_41_f0_43 mac_08_00_27_c9_dd_25 net_iface_eth0 net_iface_eth1 redhat verbose_mode x86_64 }
cf3> -> Additional classes = { _stdlib_path_exists_awk _stdlib_path_exists_cat _stdlib_path_exists_chkconfig _stdlib_path_exists_cksum _stdlib_path_exists_cut _stdlib_path_exists_df _stdlib_path_exists_diff _stdlib_path_exists_domainname _stdlib_path_exists_echo _stdlib_path_exists_egrep _stdlib_path_exists_find _stdlib_path_exists_grep _stdlib_path_exists_groupadd _stdlib_path_exists_groupdel _stdlib_path_exists_hostname _stdlib_path_exists_ifconfig _stdlib_path_exists_ip _stdlib_path_exists_ls _stdlib_path_exists_netstat _stdlib_path_exists_printf _stdlib_path_exists_rpm _stdlib_path_exists_sed _stdlib_path_exists_service _stdlib_path_exists_sort _stdlib_path_exists_svc _stdlib_path_exists_tr _stdlib_path_exists_useradd _stdlib_path_exists_userdel _stdlib_path_exists_yum }
cf3> -> Negated Classes = { }
cf3> Function "join" was promised a list called "this.input_vals" but this was not (yet) found
cf3> Function "join" was promised a list called "this.input_vals" but this was not (yet) found
cf3> Function "join" was promised a list called "this.input_vals" but this was not (yet) found
cf3> Function "join" was promised a list called "this.input_vals" but this was not (yet) found
cf3> Initiate variable convergence...
cf3> Function "join" was promised a list called "this.input_vals" but this was not (yet) found
cf3> Function "join" was promised a list called "this.input_vals" but this was not (yet) found
cf3> -> Checking common class promises...
cf3> ?> defining additional global class _stdlib_has_path_createrepo
cf3> ?> defining explicit global class _stdlib_has_path_createrepo
cf3> ?> defining additional global class _stdlib_has_path_df
cf3> ?> defining explicit global class _stdlib_has_path_df
cf3> ?> defining additional global class _stdlib_has_path_ping
cf3> ?> defining explicit global class _stdlib_has_path_ping
cf3> ?> defining additional global class _stdlib_has_path_cat
cf3> ?> defining explicit global class _stdlib_has_path_cat
cf3> ?> defining additional global class _stdlib_has_path_chkconfig
cf3> ?> defining explicit global class _stdlib_has_path_chkconfig
cf3> ?> defining additional global class _stdlib_has_path_find
cf3> ?> defining explicit global class _stdlib_has_path_find
cf3> ?> defining additional global class _stdlib_has_path_ifconfig
cf3> ?> defining explicit global class _stdlib_has_path_ifconfig
cf3> ?> defining additional global class _stdlib_has_path_dig
cf3> ?> defining explicit global class _stdlib_has_path_dig
cf3> ?> defining additional global class _stdlib_has_path_hostname
cf3> ?> defining explicit global class _stdlib_has_path_hostname
cf3> ?> defining additional global class _stdlib_has_path_sort
cf3> ?> defining explicit global class _stdlib_has_path_sort
cf3> ?> defining additional global class _stdlib_has_path_sed
cf3> ?> defining explicit global class _stdlib_has_path_sed
cf3> ?> defining additional global class _stdlib_has_path_crontabs
cf3> ?> defining explicit global class _stdlib_has_path_crontabs
cf3> ?> defining additional global class _stdlib_has_path_service
cf3> ?> defining explicit global class _stdlib_has_path_service
cf3> ?> defining additional global class _stdlib_has_path_printf
cf3> ?> defining explicit global class _stdlib_has_path_printf
cf3> ?> defining additional global class _stdlib_has_path_egrep
cf3> ?> defining explicit global class _stdlib_has_path_egrep
cf3> ?> defining additional global class _stdlib_has_path_rpm
cf3> ?> defining explicit global class _stdlib_has_path_rpm
cf3> ?> defining additional global class _stdlib_has_path_groupdel
cf3> ?> defining explicit global class _stdlib_has_path_groupdel
cf3> ?> defining additional global class _stdlib_has_path_userdel
cf3> ?> defining explicit global class _stdlib_has_path_userdel
cf3> ?> defining additional global class _stdlib_has_path_domainname
cf3> ?> defining explicit global class _stdlib_has_path_domainname
cf3> ?> defining additional global class _stdlib_has_path_useradd
cf3> ?> defining explicit global class _stdlib_has_path_useradd
cf3> ?> defining additional global class _stdlib_has_path_svc
cf3> ?> defining explicit global class _stdlib_has_path_svc
cf3> ?> defining additional global class _stdlib_has_path_crontab
cf3> ?> defining explicit global class _stdlib_has_path_crontab
cf3> ?> defining additional global class _stdlib_has_path_netstat
cf3> ?> defining explicit global class _stdlib_has_path_netstat
cf3> ?> defining additional global class _stdlib_has_path_groupadd
cf3> ?> defining explicit global class _stdlib_has_path_groupadd
cf3> ?> defining additional global class _stdlib_has_path_echo
cf3> ?> defining explicit global class _stdlib_has_path_echo
cf3> ?> defining additional global class _stdlib_has_path_yum
cf3> ?> defining explicit global class _stdlib_has_path_yum
cf3> ?> defining additional global class _stdlib_has_path_grep
cf3> ?> defining explicit global class _stdlib_has_path_grep
cf3> ?> defining additional global class _stdlib_has_path_cksum
cf3> ?> defining explicit global class _stdlib_has_path_cksum
cf3> ?> defining additional global class _stdlib_has_path_tr
cf3> ?> defining explicit global class _stdlib_has_path_tr
cf3> ?> defining additional global class _stdlib_has_path_bc
cf3> ?> defining explicit global class _stdlib_has_path_bc
cf3> ?> defining additional global class _stdlib_has_path_dc
cf3> ?> defining explicit global class _stdlib_has_path_dc
cf3> ?> defining additional global class _stdlib_has_path_awk
cf3> ?> defining explicit global class _stdlib_has_path_awk
cf3> ?> defining additional global class _stdlib_has_path_diff
cf3> ?> defining explicit global class _stdlib_has_path_diff
cf3> ?> defining additional global class _stdlib_has_path_ip
cf3> ?> defining explicit global class _stdlib_has_path_ip
cf3> ?> defining additional global class _stdlib_has_path_ls
cf3> ?> defining explicit global class _stdlib_has_path_ls
cf3> ?> defining additional global class _stdlib_has_path_cut
cf3> ?> defining explicit global class _stdlib_has_path_cut
cf3> -> Immunizing against parental death
cf3> -> Bundlesequence => {'test_result'}
cf3>
cf3> *****************************************************************
cf3> BUNDLE test_result
cf3> *****************************************************************
cf3>
cf3>
cf3> =========================================================
cf3> vars in bundle test_result (1)
cf3> =========================================================
cf3>
cf3>
cf3> =========================================================
cf3> classes in bundle test_result (1)
cf3> =========================================================
cf3>
cf3> Initiate variable convergence...
cf3>
cf3> + Private classes augmented:
cf3>
cf3> - Private classes diminished:
cf3>
cf3>
cf3>
cf3> =========================================================
cf3> methods in bundle test_result (1)
cf3> =========================================================
cf3>
cf3>
cf3> .........................................................
cf3> Promise's handle:
cf3> Promise made by: "test bad result"
cf3> .........................................................
cf3>
cf3>
cf3> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
cf3> BUNDLE bad_result( {'test_result.data[alpha]'} )
cf3> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
cf3>
cf3> Initiate variable convergence...
cf3> Function "join" was promised a list called "this.input_vals" but this was not (yet) found
cf3> ? Augment scope bad_result with input (s)
cf3>
cf3> =========================================================
cf3> vars in bundle bad_result (1)
cf3> =========================================================
cf3>
cf3> ?> defining promise result class done
cf3> ?> defining promise result class done
cf3>
cf3> + Private classes augmented:
cf3>
cf3> - Private classes diminished:
cf3>
cf3>
cf3>
cf3> =========================================================
cf3> reports in bundle bad_result (1)
cf3> =========================================================
cf3>
cf3>
cf3> =========================================================
cf3> vars in bundle bad_result (2)
cf3> =========================================================
cf3>
cf3> ?> defining promise result class done
cf3> ?> defining promise result class done
cf3>
cf3> + Private classes augmented:
cf3>
cf3> - Private classes diminished:
cf3>
cf3>
cf3>
cf3> =========================================================
cf3> reports in bundle bad_result (2)
cf3> =========================================================
cf3>
cf3> -> This promise has already been verified
cf3>
cf3> =========================================================
cf3> vars in bundle bad_result (3)
cf3> =========================================================
cf3>
cf3> ?> defining promise result class done
cf3> ?> defining promise result class done
cf3>
cf3> + Private classes augmented:
cf3>
cf3> - Private classes diminished:
cf3>
cf3>
cf3>
cf3> =========================================================
cf3> reports in bundle bad_result (3)
cf3> =========================================================
cf3>
cf3> -> This promise has already been verified
cf3> ==> Zero promises executed for bundle "bad_result"
cf3> -> Method verified
cf3>
cf3> .........................................................
cf3> Promise's handle:
cf3> Promise made by: "test good result"
cf3> .........................................................
cf3>
cf3>
cf3> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
cf3> BUNDLE good_result( {'test_result.data[alpha]'} )
cf3> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
cf3>
cf3> Initiate variable convergence...
cf3> Function "join" was promised a list called "this.input_vals" but this was not (yet) found
cf3> ? Augment scope good_result with input (s)
cf3>
cf3> =========================================================
cf3> vars in bundle good_result (1)
cf3> =========================================================
cf3>
cf3> ?> defining promise result class done
cf3> ?> defining promise result class done
cf3>
cf3> + Private classes augmented:
cf3>
cf3> - Private classes diminished:
cf3>
cf3>
cf3>
cf3> =========================================================
cf3> reports in bundle good_result (1)
cf3> =========================================================
cf3>
cf3>
cf3> .........................................................
cf3> Promise's handle:
cf3> Promise made by: "input: test_result.data[alpha]"
cf3> .........................................................
cf3>
cf3> Report: input: test_result.data[alpha]
cf3> R: input: test_result.data[alpha]
cf3>
cf3> =========================================================
cf3> vars in bundle good_result (2)
cf3> =========================================================
cf3>
cf3> ?> defining promise result class done
cf3> ?> defining promise result class done
cf3>
cf3> + Private classes augmented:
cf3>
cf3> - Private classes diminished:
cf3>
cf3>
cf3>
cf3> =========================================================
cf3> reports in bundle good_result (2)
cf3> =========================================================
cf3>
cf3> -> This promise has already been verified
cf3> -> This promise has already been verified
cf3>
cf3> =========================================================
cf3> vars in bundle good_result (3)
cf3> =========================================================
cf3>
cf3> ?> defining promise result class done
cf3> ?> defining promise result class done
cf3>
cf3> + Private classes augmented:
cf3>
cf3> - Private classes diminished:
cf3>
cf3>
cf3>
cf3> =========================================================
cf3> reports in bundle good_result (3)
cf3> =========================================================
cf3>
cf3> -> This promise has already been verified
cf3> -> This promise has already been verified
cf3> ==> == Bundle Accounting Summary for "good_result" ==
cf3> ==> Promises kept in "good_result" = 0
cf3> ==> Promises not kept in "good_result" = 0
cf3> ==> Promises repaired in "good_result" = 1
cf3> ==> Aggregate compliance (promises kept/repaired) for bundle "good_result" = 100.0%
cf3> !! Method invoked repairs
cf3> ?> defining promise result class good_alpha
cf3>
cf3> =========================================================
cf3> reports in bundle test_result (1)
cf3> =========================================================
cf3>
cf3>
cf3> . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3> Skipping whole next promise (bad: ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz), as context bad_done is not relevant
cf3> . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3>
cf3> . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3> Skipping whole next promise (good: ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz), as context good_done is not relevant
cf3> . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3>
cf3> =========================================================
cf3> vars in bundle test_result (2)
cf3> =========================================================
cf3>
cf3>
cf3> =========================================================
cf3> classes in bundle test_result (2)
cf3> =========================================================
cf3>
cf3> ?> defining explicit local bundle class good_done
cf3> Initiate variable convergence...
cf3>
cf3> + Private classes augmented:
cf3> + good_done
cf3>
cf3> - Private classes diminished:
cf3>
cf3>
cf3>
cf3> =========================================================
cf3> methods in bundle test_result (2)
cf3> =========================================================
cf3>
cf3>
cf3> =========================================================
cf3> reports in bundle test_result (2)
cf3> =========================================================
cf3>
cf3>
cf3> . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3> Skipping whole next promise (bad: ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz), as context bad_done is not relevant
cf3> . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3>
cf3> .........................................................
cf3> Promise's handle:
cf3> Promise made by: "good: ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz"
cf3> .........................................................
cf3>
cf3> Report: good: ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz
cf3> R: good: ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz
cf3>
cf3> =========================================================
cf3> vars in bundle test_result (3)
cf3> =========================================================
cf3>
cf3>
cf3> =========================================================
cf3> classes in bundle test_result (3)
cf3> =========================================================
cf3>
cf3> Initiate variable convergence...
cf3>
cf3> + Private classes augmented:
cf3> + good_done
cf3>
cf3> - Private classes diminished:
cf3>
cf3>
cf3>
cf3> =========================================================
cf3> methods in bundle test_result (3)
cf3> =========================================================
cf3>
cf3>
cf3> =========================================================
cf3> reports in bundle test_result (3)
cf3> =========================================================
cf3>
cf3>
cf3> . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3> Skipping whole next promise (bad: ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz), as context bad_done is not relevant
cf3> . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3> ==> == Bundle Accounting Summary for "test_result" ==
cf3> ==> Promises kept in "test_result" = 1
cf3> ==> Promises not kept in "test_result" = 0
cf3> ==> Promises repaired in "test_result" = 3
cf3> ==> Aggregate compliance (promises kept/repaired) for bundle "test_result" = 100.0%
cf3> Total: Outcome of version (not specified) (agent-0): Promises observed to be kept 25%, Promises repaired 75%, Promises not repaired 0%
cf3> -> Checked 0 objects with 20 promises, i.e. model efficiency 0.00%
cf3> -> The 20 declared promise patterns actually expanded into 4 individual promises, i.e. declaration efficiency -400.00%
cf3> -> No lock purging scheduled
@baptr
Copy link

baptr commented Mar 29, 2013

None of the promises in your bad_result agent are actually repaired. Since you're only setting classes in test_result from the methods "if_repaired", there's nothing to trigger that.

Reporting a line happens to count as a repair, so having the good_result log anything triggers your if_repaired.

You could also use body classes always or if_ok.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment