首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ansible中获取jinja2模板中的env变量

如何在ansible中获取jinja2模板中的env变量
EN

Stack Overflow用户
提问于 2020-09-30 04:00:10
回答 1查看 1K关注 0票数 0

所以我有这个bash脚本:

代码语言:javascript
复制
#!/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"

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

代码语言:javascript
复制
[SERVERS]
ip-address-1
ip-address-2
...

然后我有了这个Jinja2模板,它被ansible攻略使用:

代码语言:javascript
复制
{% for node in groups.getenv('STACK') -%}
  - job_name: '{{ lookup('env', 'STACK') }}-{{ lookup('env', 'NODE_TYPE') }}-{{ node }}'
    static_configs:
    - targets: ['{{ node }}:9100']
{% endfor %}

如何获得在模板内的bash脚本中定义的ENV变量堆栈?!

如果我在jinja2模板{{ for noe in groups.SERVERS %}中手动定义,它就可以很好地工作。

因此,基本上我需要groups.SERVERS是我在执行bash脚本时定义任何ENV ...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-30 04:17:39

我费了好大劲才弄明白你在问什么,但我认为你想要这个:

代码语言:javascript
复制
{% for node in groups[lookup('env', 'STACK')] -%}
  - job_name: '{{ lookup('env', 'STACK') }}-{{ lookup('env', 'NODE_TYPE') }}-{{ node }}'
    static_configs:
    - targets: ['{{ node }}:9100']
{% endfor %}

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

代码语言:javascript
复制
{% 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64126794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档