Ansible - установить путь среды как переменную инвентаря - PullRequest
0 голосов
/ 28 августа 2018

Медиаплеер Osmc нуждается в определенном пути для playbooks https://github.com/osmc/osmc/issues/319

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

Мне было интересно, могу ли я установить это как переменную среды в инвентаре для этих машин, вместо того, чтобы иметь ее в каждой книге или создавать отдельные книги.

При обычном использовании - может ли этот путь вызвать проблемы для обычных машин * nix, если он реализован на установках, отличных от osmc?

Если вы не можете установить эту переменную инвентаря: Это только потому, что это не реализовано / полезно для большинства? Или потому что инвентарь не имеет никакого отношения к пути - например, это не вызывается в тот момент?

Или для всего этого лучше использовать ее в качестве машинно-зависимой переменной / задачи в роли? Как это будет выглядеть, пожалуйста?

Впервые в истории и все еще пытаюсь осмыслить некоторые концепции.

1 Ответ

0 голосов
/ 30 августа 2018

Как уже говорилось, ключевое слово 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"

Будет действителен только с набором наборов или модулем настройки в пределах указанного инвентаря, но вам не нужно разделять игровые книги.

...