Mit Wörterbuch (definiert in map.jinja)filtern Schlüssel aus Wörterbuch
{% set intellij = salt['grains.filter_by']({
'default': {
'orig_name': 'idea-IC-145.1617.8',
'download_url': 'www.example.com',
'archive_format': 'tar',
'archive_opts': 'xfz',
'owner': 'root',
'owner_link_location': '/blabla/bin/idea',
},
}, merge=salt['pillar.get']('intellij')) %}
und einige Funktionsdefinition Argumente fast die gleiche wie die Wörterbuch der Tasten (nehmen wir an, die „Funktion“ ist eigentlich ein Makro zu akzeptieren)
{% macro some_macro(state_id, orig_name, download_url, archive_format, owner, archive_opts=None) %}
ich mag würde einige Schlüssel, um herauszufiltern, so dass ich es so nennen kann:
{{ some_macro('some_state', **intellij) }}
Ich habe verschiedene Konstrukte versucht, wie:
{{ some_macro('intellij', **(intellij|rejectattr("owner_link_location"))) }}
, die auch nicht funktionieren
Jinja error: call() argument after ** must be a mapping, not generator
Dict Verständnis (statt jinja Filter) ergibt.
Wie erreicht man die oben genannte Funktionalität (Herausfiltern des Schlüssels oder zumindest Aufruf der Funktion mit "extrahiertem" und gefiltertem Wörterbuch in übersichtlicher Form)?
es scheint, dass die Definition von ‚some_macro‘ ist nicht im Einklang mit, wie Sie es nennen. Können Sie den Inhalt Ihrer Pillar-Datei einfügen, um mehr Details zu erhalten? –
Säule ist leer und überschreibt nichts. Ich habe Tippfehler in Frage gestellt, danke! – lakier
Es scheint, dass rejectattr nur zum Filtern von Listen verwendet werden kann, aber "intellij" ist Mapping. Wenn Sie nur die Schlüssel filtern wollen, dann definieren Sie das Makro einfach als '' 'some_macro (state_id, orig_name, download_url, archive_format, owner, archive_opts = None, owner_link_location = None)' '' –