Re: Passing data in bundle
"'Nick Anderson' via help-cfengine" <[email protected]>
| Newsgroups | gmane.comp.sysutils.cfengine.general |
|---|---|
| Message-ID | <[email protected]> |
thierry thunot <[email protected]> writes: > Hi all i need help about this promise. I have been looking for many > hours why my promise does not work. I want in my report that all > nom_clef_brute values are displayed in the report for each entry of > the variable parametrage_des_sources. only one is display... Hi Thierry, The first thing that I noticed in this policy is a bit of invalid JSON. The last entry in `graylog' has a trailing comma which isn't valid JSON. ,---- | { | "mogodb" : { | "nom_de_la_liste" : "mogodb.list", | "nom_clef_brute" : "GPG-KEY-mongodb.gpg.key", | "url_repo" : "http://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" | }, | "elasticsearch" : { | "nom_de_la_liste" : "elasticsearch.list", | "nom_de_la_clef" : "GPG-KEY-elasticsearch.gpg.key", | "url_repo" : "https://artifacts.elastic.co/packages/oss-7.x/apt stable main" | }, | | "graylog" : { | "nom_de_la_liste" : "graylog.list", | "nom_de_la_clef" : "graylog-keyring.gpg.key", | "url_repo" : "https://packages.graylog2.org/repo/debian/ stable 4.2", | } | } `---- Listing 1: /tmp/parametrage_des_sources.json ,---- | exec 2>&1 | jq < /tmp/parametrage_des_sources.json | python3 -m json.tool < /tmp/parametrage_des_sources.json | : `---- Listing 2: Checking json syntax with jq and python ,---- | parse error: Expected another key-value pair at line 17, column 5 | Expecting property name enclosed in double quotes: line 17 column 5 (char 688) `---- Though CFEngine handles it without complaint. ,---- | bundle agent __main__ | { | vars: | "file" string => "/tmp/parametrage_des_sources.json"; | | "data_from_external_file" data => readjson( $(file) ); | | "data_from_inline" data => '{ | "mogodb" : { | "nom_de_la_liste" : "mogodb.list", | "nom_clef_brute" : "GPG-KEY-mongodb.gpg.key", | "url_repo" : "http://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" | }, | "elasticsearch" : { | "nom_de_la_liste" : "elasticsearch.list", | "nom_de_la_clef" : "GPG-KEY-elasticsearch.gpg.key", | "url_repo" : "https://artifacts.elastic.co/packages/oss-7.x/apt stable main" | }, | | "graylog" : { | "nom_de_la_liste" : "graylog.list", | "nom_de_la_clef" : "graylog-keyring.gpg.key", | "url_repo" : "https://packages.graylog2.org/repo/debian/ stable 4.2", | } | }'; | | reports: | "$(file)" | printfile => cat( $(file) ); | | "CFEngine dealt with data from external file:$(const.n)$(with)" with => storejson( data_from_external_file ); | | "CFEngine dealt with data from inline:$(const.n)$(with)" with => storejson( data_from_inline ); | } `---- Listing 3: Example illustrating how CFEngine deals with trailing commas in JSON without complaint ,---- | R: /tmp/parametrage_des_sources.json | R: { | R: "mogodb" : { | R: "nom_de_la_liste" : "mogodb.list", | R: "nom_clef_brute" : "GPG-KEY-mongodb.gpg.key", | R: "url_repo" : "http://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" | R: }, | R: "elasticsearch" : { | R: "nom_de_la_liste" : "elasticsearch.list", | R: "nom_de_la_clef" : "GPG-KEY-elasticsearch.gpg.key", | R: "url_repo" : "https://artifacts.elastic.co/packages/oss-7.x/apt stable main" | R: }, | R: | R: "graylog" : { | R: "nom_de_la_liste" : "graylog.list", | R: "nom_de_la_clef" : "graylog-keyring.gpg.key", | R: "url_repo" : "https://packages.graylog2.org/repo/debian/ stable 4.2", | R: } | R: } | R: CFEngine dealt with data from external file: | { | "elasticsearch": { | "nom_de_la_clef": "GPG-KEY-elasticsearch.gpg.key", | "nom_de_la_liste": "elasticsearch.list", | "url_repo": "https://artifacts.elastic.co/packages/oss-7.x/apt stable main" | }, | "graylog": { | "nom_de_la_clef": "graylog-keyring.gpg.key", | "nom_de_la_liste": "graylog.list", | "url_repo": "https://packages.graylog2.org/repo/debian/ stable 4.2" | }, | "mogodb": { | "nom_clef_brute": "GPG-KEY-mongodb.gpg.key", | "nom_de_la_liste": "mogodb.list", | "url_repo": "http://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" | } | } | R: CFEngine dealt with data from inline: | { | "elasticsearch": { | "nom_de_la_clef": "GPG-KEY-elasticsearch.gpg.key", | "nom_de_la_liste": "elasticsearch.list", | "url_repo": "https://artifacts.elastic.co/packages/oss-7.x/apt stable main" | }, | "graylog": { | "nom_de_la_clef": "graylog-keyring.gpg.key", | "nom_de_la_liste": "graylog.list", | "url_repo": "https://packages.graylog2.org/repo/debian/ stable 4.2" | }, | "mogodb": { | "nom_clef_brute": "GPG-KEY-mongodb.gpg.key", | "nom_de_la_liste": "mogodb.list", | "url_repo": "http://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" | } | } `---- The second thing I notice is that `nom_clef_brute' is only present in `mogodb', hence why that is the only `GPG-KEY' entry emitted. Nothing jumps out at me with respect to why `elasticsearch' is not emitted. Back to your example ... I only altered some whitespace and yanked the trailing comma in the JSON and added a report for the version of CFEngine that I am running. I get the output for each key, `elasticsearch', `graylog', and `mongodb'. as expected. What do you get if you run this policy? ,---- | bundle agent __main__ | { | vars: | | "parametrage_des_sources" | data => '{ | "mogodb": { | "nom_de_la_liste": "mogodb.list", | "nom_clef_brute": "GPG-KEY-mongodb.gpg.key", | "url_repo": "http://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" | }, | "elasticsearch": { | "nom_de_la_liste": "elasticsearch.list", | "nom_de_la_clef": "GPG-KEY-elasticsearch.gpg.key", | "url_repo": "https://artifacts.elastic.co/packages/oss-7.x/apt stable main" | }, | "graylog": { | "nom_de_la_liste": "graylog.list", | "nom_de_la_clef": "graylog-keyring.gpg.key", | "url_repo": "https://packages.graylog2.org/repo/debian/ stable 4.2" | } | }'; | | methods: | "" usebundle => donnees( storejson(parametrage_des_sources) ); | #"" usebundle => donnees($(parametrage_des_sources)); | | reports: | "CFEngine $(sys.cf_version)"; | } | | bundle agent donnees(valeurs) | { | vars: | "donnees_extraites" data => parsejson( $(valeurs) ); | "nom" slist => getindices( $(valeurs) ); | #"decompo" data => readjson ($(valeurs)); | | reports: | "Nom des datas $(nom)"; | "Nom_de_la_liste pour l'entre '$(nom)' est $(donnees_extraites[$(nom)][nom_clef_brute])"; | } `---- Listing 4: Original policy with fixed, reflowed, with minor whitespace changes for my own readability ,---- | R: Nom des datas elasticsearch | R: Nom des datas graylog | R: Nom des datas mogodb | R: Nom_de_la_liste pour l'entre 'mogodb' est GPG-KEY-mongodb.gpg.key | R: CFEngine 3.20.0a.8a11a6ae4 `---- -- 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/878rpxzs80.fsf%40northern.tech. -- Nick Anderson | Doer of Things | (+1) 785-550-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/878rpxzs80.fsf%40northern.tech.