如何使用变量访问支柱数据?

Nag*_*gri 0 jinja2 salt-stack

我有一个这样的支柱数据集;

vlan_tag_id:
  nginx: 1
  apache: 2
  mp: 3
  redis: 4
Run Code Online (Sandbox Code Playgroud)

在公式sls文件中我这样做;

{% set tag = pillar.get('vlan_tag_id', 'u') %}
Run Code Online (Sandbox Code Playgroud)

所以现在我有一个变量tag,这是一个字典{'apache': 2, 'nginx': 1, 'redis': 4, 'mp': 3}

在运行时,我传递一个支柱数据,app其值将是

1. apache
2. nginx
3. redis
4. mp
Run Code Online (Sandbox Code Playgroud)

因此,如果在运行时我通过,apache我想要一些能让我获得价值的东西2

我不能这样做,{{ salt['pillar.get']('vlan_tag_id:app', '')}}因为app本身就是一个变量.

我尝试了{{salt'pillar.get'}},但它会抛出错误.

我怎样才能做到这一点 ?

And*_*rew 5

既然tag只是另一本字典,你也可以这样做:

{%- set tag = pillar.get('vlan_tag_id', 'u') %}
{%- set app = pillar.get('app') %}
{{ tag.get(app) }} # Note lack of quotes
Run Code Online (Sandbox Code Playgroud)

如果要使用冒号语法,可以将内容附加app到键字符串:

{%- set app = pillar.get('app') %}
{{ salt['pillar.get']('vlan_tab_id:' + app) }}
Run Code Online (Sandbox Code Playgroud)

我发现如果我将别名作为别名并将其分解,则更容易理解:

{%- set pget = salt['pillar.get'] %}
{%- set app = pget('app')         %}
{%- set tag = pget('vlan_tag_id') %}
{{ tag.get(app) }}
Run Code Online (Sandbox Code Playgroud)