使用 Ansible 将环境变量导出到容器

使用 Ansible 将环境变量导出到容器

我想使用 Ansible(最好)将具有命令替换值的环境变量导出到 Docker,例如

export SSH_AUTH_SOCK=`cat /root/file.txt`

file.txt的内容会时常发生变化,因此我需要命令替换来动态地改变变量的值。

有什么办法可以实现这样的目标?我试过了

env:
  SSH_AUTH_SOCK="`cat /root/file.txt`"

但它附加的是文字字符串而不是其值。

答案1

您可以使用pipe查找插件

environment:
  SSH_AUTH_SOCK: "{{ lookup('pipe', 'cat /root/file.txt') }}"

请记住,查找插件是在控制机器上本地执行的,而不是在目标服务器上执行的。如果目标服务器不同,则需要在单独的任务中注册该值,如另一个答案所建议的那样。

还要注意,您应该使用 YAML 符号来声明environment字典(但事实并非如此env)。

答案2

这样它很可能就不会起作用。

使用 ansibles 命令模块执行并注册一个变量。然后在 中cat ...使用注册的变量。stdoutenv:

https://docs.ansible.com/ansible/2.5/user_guide/playbooks_conditionals.html#register-variables

示例:运行两次并比较date.stdout第一次运行与myvar.stdout第二次运行。

- 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

该示例显示每次运行时都会读取该文件。

相关内容