如何在ansible的jinja2模板中获取环境变量

时间:2020-09-29 20:00:10

标签: bash ansible jinja2 ansible-template

所以我有这个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
...

然后我有这个供滑稽剧本使用的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变量...。

1 个答案:

答案 0 :(得分:2)

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

{% 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 %}