Ansible:在各组之间共享库存变量

Ansible:在各组之间共享库存变量

我有一个剧本,里面有两个剧本,一个是本地剧本,一个是远程剧本。我有两个清单,一个用于测试,一个用于生产。每个清单都为远程组定义了一个变量,但我想在本地剧本中使用该变量而不使用委托。这可行吗?我该怎么做?

剧本示例:

- hosts: local
  tasks:
    # ... lots of local build steps here
    - command: tar -czf {{ archive_name }} /build_dir
- hosts: remote
  tasks:
    - unarchive: src={{ archive_name }} dest=/deploy_dir

测试库存:

[local]
127.0.0.1

[remote]
test.example.com

[remote:vars]
archive_name=/tmp/test-build.tgz

生产库存:

[local]
127.0.0.1

[remote]
www.example.com

[remote:vars]
archive_name=/tmp/production-build.tgz

此示例失败,因为{{ archive_name }}没有为该local组定义。

解决这个问题将有以下限制:

  • 我无法将其放入文件中,group_vars因为我有具有相同组名的不同库存。
  • 我宁愿不委托构建过程任务,而是使用单独的方案。
  • 我想将变量保留在库存文件中,而不是动态加载其他文件。

我目前看到的唯一选择是{{ archive_name }}为该local组重新定义,但这很容易出错。

答案1

您应该能够archive_name通过以下方式访问的值hostvars

- hosts: local
  tasks:
    # ... lots of local build steps here
    - command: tar -czf {{ hostvars[groups['remote'][0]]['archive_name'] }} /build_dir
- hosts: remote
  tasks:
    - unarchive: src={{ hostvars[groups['remote'][0]]['archive_name'] }} dest=/deploy_dir

相关内容