Ansible命令输出用作环境变量

时间:2018-08-05 11:41:59

标签: ansible

我想将“ date”命令输出用作环境变量。

假设

- tasks:
   - name: Getting start date
     shell: date +%d%b%Y:%H:%M
     register: start_date
   - debug:
       vars: start_date.stdout
     environment: 
     start_date_env:  start_date.stdout

 - name: Echo my_env_var 
   shell: echo $start_date_env
   register: some
 - debug:
     var: some.stdout

O / P

changed: [host1]

cmd: date +%d%b%Y:%H:%M

stdout: 05Aug2018:09:30

TASK [Echo my_env_var] ***********************************************************************************************************************

cmd: echo $start_date_env
ok: [host1] => {
"some.stdout": ""

我想在远程主机上以上述格式运行date命令,然后将变量保存为目标主机上的环境。这是因为我必须在执行3-4本剧本时使用此变量来获取一些数据。这些数据将取决于剧本的start_time和剧本的end_time。基本上我可以在最后使用两个环境变量start_timeend_time

简而言之,是否可以将在主机上执行的一个命令的输出设置为环境变量,而将同一主机设置为环境变量

1 个答案:

答案 0 :(得分:1)

您几乎拥有所有必需的代码,但是您没有在正确的位置使用environment

 - hosts: localhost
   tasks:
    - name: Getting start date
      shell: date +%b%Y%H%M
      register: start_date

    - debug:
        var: "{{ start_date.stdout }}"

    - name: Echo my_env_var
      shell: echo $start_date_env
      environment:
        start_date_env: start_date.stdout
      register: some
    - debug:
        var: "{{ some.stdout }}"

请注意,我还必须纠正不正确的缩进,并在第一个vars任务中将var替换为debug。作为一般建议,请使用ansible-playbook --syntax-check来验证您的剧本。

最后:最好将ansible变量括在“ {{ }}”中