Заполните переменные на основе выполненного условия Ansible - PullRequest
2 голосов
/ 18 октября 2019

Кто-нибудь знает хорошую статью, в которой объясняется, как я буду заполнять переменные в зависимости от выполняемого условия?

Пример:

- name: test
  file: 
    path: "{{ item.path }}"
    state: directory
    owner: "{{ item.owner }}"
    group: "{{ item.group }}" 
    mode: 0755
  loop:
    - { path: "{{ file_location }}", owner: "{{ user }}", group: "{{ group }}" }
    - { path: "{{ configfile_path }}", owner: "{{ user }}", group: "{{ group }}"  }

Необходимо заполнить первое: owner: "{{ user }}", group: "{{ group }}"пользователь и группа с именем «X», когда машина называется XXX

Затем заполните второе: owner: "{{ user }}", group: "{{ group }}" пользователем и группой с именем «Y», когда машина называется YYY

Iеще ничего не пробовал, потому что я не уверен, как с этим справиться, любые ссылки на документацию или примеры будут с благодарностью.

Спасибо

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Q: "Заполните владельца:" x "... когда машина имеет имя XXX. Затем заполните владельца:" y "... когда машина имеет имя YYY."

A: Можно использовать инвентарь . Например, в формате INI

$ cat hosts
XXX owner='x' group='x'
YYY owner='y' group='y'

, или в YAML

$ cat hosts
---
  hosts:
    XXX:
      owner: 'x'
      group: 'x'
    YYY:
      owner: 'y'
      group: 'y'

, или можно использовать host_vars

$ tree host_vars
host_vars
├── XXX
├── YYY

$ cat host_vars/XXX
owner: 'x'
group: 'x'

$ cat host_vars/YYY
owner: 'y'
group: 'y'

См. Приоритет переменной: куда поместить переменную? .

0 голосов
/ 18 октября 2019

Это можно сделать с помощью модуля set_fact и предложений when.

set_fact :

Синопсис

  • Этот модуль позволяет устанавливать новые переменные.
  • Переменные устанавливаются для каждого хоста отдельно, как факты, обнаруженные модулем установки.
  • Эти переменные будут доступны для последующего воспроизведения во время воспроизведения. запуск ansible-playbook.

- set_fact:
    one_fact: something
    other_fact: "{{ local_var * 2 }}"
    another_fact: "{{ some_registered_var.results | map(attribute='ansible_facts.some_fact') | list }}"

при :

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

Это легко сделать вAnsible с предложением when, которое содержит необработанное выражение Jinja2 без двойных фигурных скобок (см. Group_by - Создание групп Ansible на основе фактов). На самом деле все довольно просто:

tasks:
  - name: "shut down Debian flavored systems"
    command: /sbin/shutdown -t now
    when: ansible_facts['os_family'] == "Debian"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...