1

寻求一些指导:

我有一个 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

4

2 回答 2

1

阅读此文档仅用于保留有关set_statsplaybook 运行的一些数据,因此不能用于变量。

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

于 2018-07-26T21:20:03.993 回答
0

代替

- 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 }}在第二场比赛中使用

于 2018-11-30T18:24:32.393 回答