【问题标题】:Ansible Tower - set_stats does not seem to workAnsible Tower - set_stats 似乎不起作用
【发布时间】:2018-02-27 04:22:26
【问题描述】:

寻求指导:

我有一个 3 步工作流程 - 前 2 个模板使用 set_stats 设置一些事实数据。例如:

- set_stats:
    data:
      xldeploy_workstation_host : "{{ hostvars['localhost']['targethost'] }}"
  when: tower_job_id is defined

- set_stats:
    data:
      target_inv: "xld{{ env }}"
      target_env: "{{ env }}/TEMPLATE"
      app_system: "{{ system | lower }}"
  when: tower_job_id is defined

在第三个模板中,它使用app_system 变量,如下所示:

- name: Run {{ app_system }} playbook
  import_playbook: "{{ app_system }}.yml"

但是,我收到以下错误消息:

ERROR! 'app_system' is undefined

通过查看工作流程中先前步骤的日志,我可以看到 set_stats 起作用了:

ok: [1.2.3.4] => {
    "ansible_stats": {
        "aggregate": true, 
        "data": {
            "xldeploy_workstation_host": "*host.fqdn*"
        }, 
        "per_host": false
    }, 
    "changed": false
}

ok: [1.2.3.5] => {
    "ansible_stats": {
        "aggregate": true, 
        "data": {
            "app_system": "*app*", 
            "project_name": "*projectname*", 
            "target_env": "dev/TEMPLATE", 
            "target_inv": "xlddev"
        }, 
        "per_host": false
    }, 
    "changed": false
}

不知道为什么工作流程的最后一步没有获取 set_stats 数据 - 看起来它应该根据文档工作。

我使用的是 Tower 3.2.2 版和 Ansible 2.4.3.0 版

【问题讨论】:

    标签: ansible ansible-2.x ansible-tower


    【解决方案1】:

    读取set_statsdocumentation 这只是用于保存有关 playbook 运行的一些数据,因此不能用于变量。

    如果你想定义一个名为{{ app_system }}的变量,你需要设置变量值或设置一个事实。

    【讨论】:

    • 嗨 - 阅读 doco,该示例显示运行剧本,使用 set_stats 设置 var,然后在工作流中的另一个剧本中使用该 var - 请参阅步骤 2. Through the invoke_set_stats playbook, set_stats is then invoked to artifact the URL of the uploaded integration_results.txt into the Ansible variable “integration_results_url”.这就是我想要实现的目标。
    【解决方案2】:

    代替

    - set_stats:
        data:
          app_system: "{{ system | lower }}"
    

    尝试使用模块set_fact,如下:

    - set_fact:
        app_system: "{{ system | lower }}"
    

    之后,您应该能够使用通常的{{ app_system }} 获取变量值。但是这个变量是为你现在正在玩的主机设置的。

    如果你想在一个游戏中设置一个变量(它正在为某个主机 #1 播放)并希望在另一个游戏中获得它的值(它正在为另一个主机 #2 播放)你应该在第二场:

    - set_fact:
        app_system: "{{ hostvars[host_#1][foo] }}"
    

    然后你又可以在第二场比赛中使用{{ app_system }}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 2016-02-01
      • 2020-09-23
      • 2010-12-05
      • 2011-06-14
      • 2015-01-10
      • 2016-02-24
      相关资源
      最近更新 更多