是否可以在Ansible剧本中分配常量变量?

时间:2018-08-05 22:13:19

标签: ansible

我想通过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}}会在我获取时重新评估和更改。

因此,提取操作无法找到脚本执行结果文件名。

我想要在我的剧本中分配不变的(恒定的)值。

有什么解决方法吗?

1 个答案:

答案 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