所以我有这个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 %}
中手动定义,它就可以正常工作。
所以基本上我需要这些团体。SERVERS是我在执行bash脚本时定义的任何ENV var。。。。
我很难弄清楚你在问什么,但我想你想要这个:
{% 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 %}