On Mon, 18 Jun 2012 18:26:48 +0200 (CEST) msvob...@linkedin.com wrote: 

Hi Mike,

that was a very interesting and useful post.

I wanted to bring up a tool I wrote on my own recently, and it's not
CFEngine-specific (although it can produce a CFEngine config, it can
also produce JSON and eventually YAML).

https://github.com/tzz/jim

It lets you do the kind of structured assignments you show in the vars:
section using a purely data-driven structure.

n>      7       vars:
n>      8               PROD::
n>      9                       "environment"                   string  =>      
"PROD";
...
n>     30               ################################################### dc1 
##################################################################
n>     31               (dc1|dc5)::
n>     32                       "mps1"                          string  =>      
"dc1-cage1-mps01.corp.cfengine.com",
n>     33                                                       policy  =>      
"free";
...
n>    127               "master_policy_servers"         or              =>      
{
n>    128                                                                       
"dc3_cage6_mps01_prod_cfengine_com",
n>    129                                                                       
"dc3_cage6_mps02_prod_cfengine_com",
n>    130                                                                       
"dc3_cage7_mps01_prod_cfengine_com",
n>    131                                                                       
"dc3_cage7_mps02_prod_cfengine_com",
n>    132                                                                       
"dc3_cage9_mps01_prod_cfengine_com",
n>    133                                                                       
"dc3_cage9_mps02_prod_cfengine_com",
n>    134                                                                       
"dc1_cage1_mps01_corp_cfengine_com",
n>    135                                                                       
"dc1_cage1_mps02_corp_cfengine_com",
n>    136                                                                       
"dc2_cage1_mps01_prod_cfengine_com",
n>    137                                                                       
"dc2_cage1_mps02_prod_cfengine_com",
n>    138                                                                       
"dc2_cage5_mps01_prod_cfengine_com",
n>    139                                                                       
"dc2_cage5_mps02_prod_cfengine_com",
n>    140                                                                       
"dc2_cage2_mps01_prod_cfengine_com",
n>    141                                                                       
"dc2_cage2_mps02_prod_cfengine_com",
n>    142                                                                       
"dc2_cage4_mps01_prod_cfengine_com",
n>    143                                                                       
"dc2_cage4_mps02_prod_cfengine_com",
n>    144                                                                       
"dc4_cage10_mps01_corp_cfengine_com",
n>    145                                                                       
"dc4_cage10_mps02_corp_cfengine_com",
n>    146                                                                       
"dc6_cage11_mps01_prod_cfengine_com",
n>    147                                                                       
"dc6_cage11_mps02_prod_cfengine_com", };
...
n>    285               "CORP"                          xor     =>      
{"dc4_corp_cfengine_com", "dc5_corp_cfengine_com", "dc1_corp_cfengine_com", 
"dc6_corp_cfengine_com", };
...
n>      7               PROD.dc1::
n>      8                       "site_specific_policy_location" string  =>      
"/var/cfengine/masterfiles/PROD/dc1/cf-agent";

The last one, especially, where you repeatedly define the masterfiles
location based on some classes, can be greatly simplified through jim.

Let me know if the README.md for jim makes sense, and if you are
interested in how it could handle your use case.  I can write out an example.

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

Reply via email to