我想通过Ansible在远程执行一些脚本,并从远程获取结果文件到主机。
我写了如下的剧本:
---
- name : script deploy
hosts: all
vars:
timestamp: "{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}"
become: true
tasks:
- name: script deployment
script: ./exe.sh {{ansible_nodename}}_{{ timestamp }}
args:
chdir: /tmp
exe.sh
在远程上成功执行,并将结果重定向到输出文件,例如remote_20170806065817.data
脚本执行需要几秒钟,我试图在执行完成后获取结果文件。
但是{{timestamp}}
会在我获取时重新评估和更改。
因此,提取操作无法找到脚本执行结果文件名。
我想要在我的剧本中分配不变的(恒定的)值。
有什么解决方法吗?
答案 0 :(得分:2)
Ansible使用惰性计算,因此变量在使用时进行评估。
您应该设置一个事实,该事实将被评估一次:
---
- name : script deploy
hosts: all
become: true
tasks:
- set_fact:
timestamp: "{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}"
- name: script deployment
script: ./exe.sh {{ansible_nodename}}_{{ timestamp }}
args:
chdir: /tmp