MyTetra Share
Делитесь знаниями!
Как в Ansible преобразовать список в набор bash-переменных для использования внутри модуля shell
Время создания: 15.04.2022 12:27
Текстовые метки: ansible, список, bash, переменная, shell
Раздел: Компьютер - Linux - Оркестрация - Ansible
Запись: xintrea/mytetra_syncro/master/base/16500148648na84e1ih0/text.html на raw.github.com

Иногда нужно передать в модуль shell набор системных переменных, заданных в виде YAML списка. Как это можно сделать?


Пример возможного решения приведен ниже:



---

- hosts: ourHost


vars:


lines:

- "isProduction=true"

- "targetSPO=free"

- "themeSupport=default"



tasks:


- set_fact:

result: ""


- set_fact:

result: |

{{result}}

export {{line}}

loop: "{{lines}}"

loop_control:

loop_var: line


- name: Набор переменных

debug:

msg: '{{result}}'


- shell: |

# Установка переменных

{{result}}


# Проверка доступности значений переменных

varA=$user

echo variable A is $varA


register: shellResult


- name: Проверка значений

debug:

msg: '{{shellResult}}'



Примечание: в цикле формирования команд в переменную result происходит наполнение данной переменной "с накоплением". То есть к уже имеющимся строкам переменной result в цикле добавляются новые строки, содержащие команду export.



Данный код имеет список переменных lines, который содержит и имена переменных и их значения. Далее происходит проход по данному списку и формирование bash-команд для установки значений переменных. Данные команды скапливаются в переменной result. Затем эти bash-команды выполняются в задаче shell, причем команды установки значений переменных вызываются самыми первыми, а затем можно писать код, который использует эти переменные.


Естественно, заданные таким образом переменные сохраняются в bash-среде только в текущей shell-задаче. При последующих вызовах shell-задач, надо в каждом вызове задачи shell вначале вызывать команды установки переменных.


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования