首页 > 解决方案 > Ansible - 将环境路径设置为库存变量

问题描述

Osmc 媒体播放器需要一个特定的 playbook 路径 https://github.com/osmc/osmc/issues/319

environment:
  PATH: "{{ ansible_env.PATH }}:/sbin:/usr/sbin"

我想知道是否可以将其设置为这些机器的库存中的环境变量,而不是在每个剧本中都有它或创建单独的剧本。

通常使用 - 如果在非 osmc 安装上实现,该路径是否可能会导致一般 *nix 机器出现问题?

如果您不能将其设置为库存变量:这仅仅是因为它没有实现/对大多数人有用吗?或者因为库存与路径无关 - 例如,它当时没有被调用?

或者将所有这些作为角色中特定于机器的变量/任务的更好方法?请问那看起来怎么样?

ansible 新手,但仍在尝试理解一些概念。

标签: pathansible-2.xansible-inventory

解决方案


如前所述,environment关键字只能在任务或剧本级别使用。

您将能够使用标准剧本,只需添加以下内容:

---
- name: Environment
  hosts: localhost
  connection: local
  gather_facts: False

  tasks:

  - name: Setup
    setup:
      gather_subset:
        - "!all"

或者

---
- name: Environment
  hosts: localhost
  connection: local
  gather_facts: True
  gather_subset:
    - "!all"

如果调试变量:

---
- name: Environment
  hosts: localhost
  connection: local
  gather_facts: False

  tasks:

  - name: Setup
    setup:
      gather_subset:
        - "!all"

  - name: Debug
    debug:
      var: ansible_env.PATH

你会得到类似的东西:

TASK [Setup] *******************************************************************************************************************************************************
ok: [localhost]

TASK [Debug] *******************************************************************************************************************************************************
ok: [localhost] => {
    "ansible_env.PATH": "/Users/imjoseangel/source/venv/ansible/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
}

如果您想将该变量传递给另一个具有不同库存的游戏怎么办?

做就是了hostvars.localhost.ansible_env.PATH

- name: Environment2
  hosts: windows
  connection: local
  gather_facts: False


  tasks:

  - name: Debug
    debug:
      var: hostvars.localhost.ansible_env.PATH

所以

environment:
  PATH: "{{ ansible_env.PATH }}:/sbin:/usr/sbin"

仅对已定义清单下的 gather_facts 或 setup 模块有效,但您不需要拆分剧本。


推荐阅读