Предоставляет ли Ansible эксклюзивные группы?

Попробуйте использовать флаг -o, чтобы печатать только совпадающие строки, например.

$ cat <<HEREDOC | grep -Po '\w+'
www.wifi.in.ua
YI-HondBrychka
HEREDOC

www
wifi
in
ua
YI
HondBrychka
0
11.01.2020, 23:35
2 ответа

Чтобы разделить производство и разработку, вы хотите сохранить для них отдельные файлы инвентаря -.

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

«Производство» и «Разработка» не являются группами в контексте ansible inventory, а «веб-сервер» и «база данных» — таковыми.

Распространенным случаем является :установка всего на одном хосте в процессе разработки, но наличие выделенных -серверов баз данных в производстве.

Ваш инвентарь для разработки -будет выглядеть примерно так:

[webserver]
host1

[dbserver]
host1

и ваша производственная -среда чем-то похожи:

[webserver]
host1

[dbserver]
host2

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

0
28.01.2020, 02:56

Q: "Is there a method to imbue that logic in the groups in the inventory. To be sure that one host isn't attached to two conflicting groups?"

A :Нет. В инвентаре такого метода нет. Но это легко реализовать в задаче. Переменная Ansible group_namesхранит список групп, членом которых является хост. Давайте определим список exclusive_groupsи проверимintersect

exclusive_groups|intersect(group_names)|length > 1

Например, с инвентарем

$ cat hosts
[group1]
test_01 ansible_host=10.1.0.51
test_02 ansible_host=10.1.0.52

[group2]
test_03 ansible_host=10.1.0.53
test_04 ansible_host=10.1.0.54

[group3]
test_02 ansible_host=10.1.0.52
test_03 ansible_host=10.1.0.53

сборник пьес

- hosts: all

  vars:
    exclusive_groups:
      - group1
      - group3

  tasks:
    - set_fact:
        member_exclusive_groups: "{{ exclusive_groups|intersect(group_names) }}"
    - block:
        - debug:
            msg: "{{ msg.split('\n') }}"
          vars:
            msg: |-
              {{ inventory_hostname }} is member of exclusive groups
              {{ member_exclusive_groups|to_yaml }}
              End of host.
        - meta: end_host
      when: member_exclusive_groups|length > 1

дает

skipping: [test_01]
ok: [test_02] => {
    "msg": [
        "test_02 is member of exclusive groups", 
        "[group1, group3]", 
        "", 
        "End of host."
    ]
}
skipping: [test_03]
skipping: [test_04]
0
28.01.2020, 02:56

Теги

Похожие вопросы