Попробуйте использовать флаг -o
, чтобы печатать только совпадающие строки, например.
$ cat <<HEREDOC | grep -Po '\w+'
www.wifi.in.ua
YI-HondBrychka
HEREDOC
www
wifi
in
ua
YI
HondBrychka
Чтобы разделить производство и разработку, вы хотите сохранить для них отдельные файлы инвентаря -.
Таким образом, вы можете использовать один и тот же сценарий для разработки, интеграции и производства.
«Производство» и «Разработка» не являются группами в контексте ansible inventory, а «веб-сервер» и «база данных» — таковыми.
Распространенным случаем является :установка всего на одном хосте в процессе разработки, но наличие выделенных -серверов баз данных в производстве.
Ваш инвентарь для разработки -будет выглядеть примерно так:
[webserver]
host1
[dbserver]
host1
и ваша производственная -среда чем-то похожи:
[webserver]
host1
[dbserver]
host2
Всякий раз, когда ваши роли пересекаются, вам нужно написать новую роль, чтобы включить необходимые профили.
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]