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

时间:2016-09-22 13:43:22

标签: jinja2 salt-stack

我有这样的支柱数据集;

vlan_tag_id:
  nginx: 1
  apache: 2
  mp: 3
  redis: 4

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

{% set tag = pillar.get('vlan_tag_id', 'u') %}

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

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

1. apache
2. nginx
3. redis
4. mp

所以如果在运行时我通过了apache,我希望得到一些能让我获得价值的2

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

我尝试过{{salt' pillar.get'}},但它会引发错误。

我该怎么做?

1 个答案:

答案 0 :(得分:5)

由于tag只是另一个字典,你也可以这样做:

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

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

{%- set app = pillar.get('app') %}
{{ salt['pillar.get']('vlan_tab_id:' + app) }}

我发现如果我将别名列为别名并将其分解一下则更容易理解:

{%- set pget = salt['pillar.get'] %}
{%- set app = pget('app')         %}
{%- set tag = pget('vlan_tag_id') %}
{{ tag.get(app) }}