Я хотел бы экспортировать переменную среды в Docker с помощью Ansible (желательно), который имеет значение подстановки команды, например
export SSH_AUTH_SOCK=`cat /root/file.txt`
file.txt
содержимое время от времени меняется, поэтому мне нужна подстановка команд для динамического изменения значения переменной.
Как добиться этого? Я попытался
env:
SSH_AUTH_SOCK="`cat /root/file.txt`"
но он добавил буквальную строку, а не ее значение.
Вы можете использовать pipe
плагин поиска:
environment:
SSH_AUTH_SOCK: "{{ lookup('pipe', 'cat /root/file.txt') }}"
Помните, что подключаемые модули поиска выполняются локально на управляющей машине, а не на целевом сервере. Если целевой сервер отличается, вам необходимо зарегистрировать значение в отдельной задаче, как предлагает другой ответ.
Также обратите внимание, что вы должны использовать нотацию YAML для объявления environment
словарь (и это не env
).
Таким образом, скорее всего, это не сработает.
Выполнить cat ...
с командным модулем ansibles и зарегистрируйте переменную. Затем используйте зарегистрированные переменные stdout
в env:
.
https://docs.ansible.com/ansible/2.5/user_guide/playbooks_conditionals.html#register-variables
Пример: запустить дважды и сравнить date.stdout
с 1-го по myvar.stdout
со 2-го пробега.
- hosts: all
remote_user: hargut
tasks:
- name: touch ~/myvar.txt
file:
path: ~/myvar.txt
state: touch
- name: read ~/myvar.txt into myvar
shell: cat ~/myvar.txt
register: myvar
- debug:
var: myvar.stdout
- pause:
seconds: 5
- name: write date into ~/myvar.txt
shell: date > ~/myvar.txt
register: date
- name: read ~/myvar.txt into date
shell: cat ~/myvar.txt
register: date
- debug:
var: date.stdout
Пример показывает, что файл читается при каждом запуске.