Ansible-将环境路径设置为库存变量

时间:2018-08-28 14:30:25

标签: path ansible-2.x ansible-inventory

Osmc媒体播放器需要用于剧本的特定路径 https://github.com/osmc/osmc/issues/319

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

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

常用-如果在非OSMC安装上实现,该路径是否可能对普通* nix机器造成问题?

如果您不能将此设置为库存变量: 仅仅是因为它对大多数人没有实现/有用吗? 或者因为广告资源与路径无关-例如在那个时候还没有被调用?

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

Ansible的新手,但仍然想让我了解一些概念。

1 个答案:

答案 0 :(得分:1)

如上所述,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"

仅对定义的广告资源下的collect_facts或设置模块有效,而您无需拆分剧本。