Назад | Перейти на главную страницу

Экспорт Env Var в контейнер с помощью Ansible

Я хотел бы экспортировать переменную среды в 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

Пример показывает, что файл читается при каждом запуске.