【问题标题】:How to get an env var inside a jinja2 template in ansible如何在 ansible 的 jinja2 模板中获取 env var
【发布时间】:2020-09-29 20:00:10
【问题描述】:

所以我有这个 bash 脚本:

#!/bin/bash

echo -ne "Enter stack name: "
read -r STACK
echo -ne "Enter node type (Compute/Storage): "
read -r NODE_TYPE

export STACK
export NODE_TYPE

ansible-playbook -i inventory -l "$AC_STACK" node-exporter-install.yml -e "stack=$STACK"

库存文件就像定义一个组一样简单:

[SERVERS]
ip-address-1
ip-address-2
...

然后我有这个由 ansible playbook 使用的 Jinja2 模板:

{% for node in groups.getenv('STACK') -%}
  - job_name: '{{ lookup('env', 'STACK') }}-{{ lookup('env', 'NODE_TYPE') }}-{{ node }}'
    static_configs:
    - targets: ['{{ node }}:9100']
{% endfor %}

如何获取模板内 bash 脚本中定义的 ENV 变量 STACK?!

如果我在 jinja2 模板 {{ for noe in groups.SERVERS %} 中手动定义它就可以了。

所以基本上我需要 groups.SERVERS 是我在执行 bash 脚本时定义的任何 ENV var....

【问题讨论】:

    标签: bash ansible jinja2 ansible-template


    【解决方案1】:

    我很难弄清楚你在问什么,但我想你想要这个:

    {% for node in groups[lookup('env', 'STACK')] -%}
      - job_name: '{{ lookup('env', 'STACK') }}-{{ lookup('env', 'NODE_TYPE') }}-{{ node }}'
        static_configs:
        - targets: ['{{ node }}:9100']
    {% endfor %}
    

    您可以像这样简化它,这样我们就不必多次查找STACK

    {% set stack = lookup('env', 'STACK') %}
    {% for node in groups[stack] -%}
      - job_name: '{{ stack }}-{{ lookup('env', 'NODE_TYPE') }}-{{ node }}'
        static_configs:
        - targets: ['{{ node }}:9100']
    {% endfor %}
    
    

    【讨论】:

    • 天啊!我一直在尝试这样做超过 2 小时,但无法弄清楚。它就像一个魅力!你救了我的一天!非常感谢!
    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多