Я знаю об окружающей среде Ansible: команда в верхней части playbook, но я не думаю, что это будет работать для меня, видя, как я не знаю значения переменных до исполнения playbook. Я пытаюсь получить версии пакетов и модули PHP и зарегистрировать их в файле. Я хочу использовать regex для захвата версии и сохранения ее в переменной среды. Затем я хочу написать, что переменная равна значению переменной для файла среды с помощью команды оболочки. Я также хочу вытащить массив из среды и пройти через это. Ansible, похоже, не сохраняет среду оболочки, а переменная среды обрывается между командами. Это просто в Баше. Возможно ли это в Ansible? Я пытаюсь:Ansible Set Динамические переменные окружения
---
- hosts: all
become: yes
vars:
site_variables:
code_directory: /home/
dependency_versions:
WGET_VERSION: placeholder
PHP_MODULES: placeholder
tasks:
- name: Retrieve Environment
shell: export WGET_VERSION=$(wget --version | grep -o 'Wget [0-9]*.[0-9]*\+')
shell: export PHP_MODULES=$(php -m)
shell: echo "export {{ item }}={{ lookup('env', item) }}" >> {{ site_variables.code_directory }}/.env.log
with_items:
- WGET_VERSION
- name: Write PHP Modules Out
shell: export PHP_MODULES=$(php -m)
shell: export PHP_MODULES=$(echo {{ lookup('env', 'PHP_MODULES') }} | sed 's/\[PHP Modules\]//g')
shell: export PHP_MODULES=$(echo {{ lookup('env', 'PHP_MODULES') }} | sed 's/\[Zend Modules\]//g')
shell: export PHP_MODULES=({{ lookup('env', 'PHP_MODULES') }})
shell: echo "# - {{ item.0 }}" >> {{ site_variables.code_directory }}/.env.log
with_items:
- "{{ lookup('env', 'PHP_MODULES') }}"
Не уверен, что если я после вас полностью. Я отправился на удаленный хост и вручную установил WGET_VERSION ... так, скажем, WGET_VERSION = 1.1.1. {{lookup ('env', item)}} фактически вытащил переменную окружения из remote_host, которую я установил вручную (1.1.1), и выполнил его правильную запись. Он просто не устанавливал новое значение через Ansible в shell: export WGET_VERSION = $ (wget -version | grep -o 'Wget [0-9] *. [0-9] * \ +'). Мне, вероятно, просто нужно подумать об этом больше, так как мне определенно нужно кормить все через массив в конце. Возможно, Ansible просто не способ сделать это. – Nabsta
Большое спасибо за ваш совет! Я новичок в Ansible, и это определенно полезно. – Nabsta
Еще раз спасибо! Я получил его работу с помощью set_fact, набора параллельных массивов и экранированных операторов regex. Похоже, что в этом случае прямолинейный bash является более подходящим и более чистым: P. – Nabsta