【问题标题】:Ansible command output to use as environment variable用作环境变量的 Ansible 命令输出
【发布时间】:2018-08-05 11:41:58
【问题描述】:

我想使用“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": ""

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

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

【问题讨论】:

  • 你能提供更多信息吗?
  • 另外,ansible gather_fact 提供了日期时间信息。 ansible_date_time.date 你可以用它来简化事情。唯一需要注意的是,gather-fact 必须设置为 true。

标签: ansible


【解决方案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 }}"

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

最后一件事:最好将 ansible 变量包含在“{{ }}”中

【讨论】:

  • 谢谢,我现在收到错误消息:失败! => {"msg": "模板化字符串时出现模板错误:意外的 char u'A' at 4. String: {{05Aug2018:20:01}}"}
  • date +%d%b%Y:%H:%M的值不是注册变量的好例子,它包含开头的数字和中间的:,改为date +%b%Y%H%M就可以了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 2017-02-07
  • 2012-01-19
  • 1970-01-01
  • 2016-07-14
  • 2018-08-05
  • 1970-01-01
相关资源
最近更新 更多