我想使用 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 ...
使用注册的变量。stdout
env:
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
该示例显示每次运行时都会读取该文件。