#bash #ansible #jinja2 #ansible-template
#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, который используется в сборнике игр ansible:
{% for node in groups.getenv('STACK') -%}
- job_name: '{{ lookup('env', 'STACK') }}-{{ lookup('env', 'NODE_TYPE') }}-{{ node }}'
static_configs:
- targets: ['{{ node }}:9100']
{% endfor %}
Как мне получить стек переменных ENV, определенный в скрипте bash, внутри шаблона ?!
Если я вручную определяю внутри шаблона jinja2 {{ for noe in groups.SERVERS %}
, он работает просто отлично.
Так что в основном мне нужны эти группы.СЕРВЕРЫ должны быть любым переменным ENV, который я определяю при выполнении скрипта bash….
Ответ №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 %}
Комментарии:
1. БОЖЕ! Я пытался сделать это уже более 2 часов и не смог разобраться. Это сработало как шарм! Вы спасли мой день! Большое вам спасибо!