Определим группы кластеров в инвентаризации Ansible.
Определите хосты, которые будут содержать несколько кластеров приложений.
$ cat hosts
[application:children] application_cluster_development application_cluster_production [application_cluster_development] dev_server_1 ansible_host=127.0.0.1 dev_server_2 ansible_host=127.0.0.1 dev_server_3 ansible_host=127.0.0.1 [application_cluster_production] pro_server_1 ansible_host=127.0.0.1 pro_server_2 ansible_host=127.0.0.1 pro_server_3 ansible_host=127.0.0.1
Определите конфигурацию кластера по умолчанию.
cat group_vars/application/application.yml
--- application__pool: 5
Определите конфигурацию для конкретного кластера.
$ cat group_vars/application_cluster_production/application_cluster.yml
--- application__pool: 10
Плейбук:
$ cat playbook.yml
--- - hosts: application tasks: - name: Determine application cluster group set_fact: application_cluster_group: '{{ group_names | select("match","application_cluster_*") | first }}' - name: Display host groups debug: var: group_names - name: Display application cluster group debug: var: application_cluster_group - name: List cluster servers debug: var: groups[application_cluster_group] - name: Display per cluster variable debug: var: application__pool
Выполните созданный плейбук чтобы увидеть, как это работает.
$ ansible-playbook -i hosts playbook.yml
PLAY [application] *********************************************************************************************************************************************************************************** TASK [Gathering Facts] ******************************************************************************************************************************************************************************* ok: [dev_server_1] ok: [pro_server_1] ok: [pro_server_2] ok: [dev_server_3] ok: [dev_server_2] ok: [pro_server_3] TASK [Determine application cluster group] *********************************************************************************************************************************************************** ok: [dev_server_1] ok: [dev_server_2] ok: [dev_server_3] ok: [pro_server_1] ok: [pro_server_2] ok: [pro_server_3] TASK [Display host groups] *************************************************************************************************************************************************************************** ok: [dev_server_1] => { "group_names": [ "application", "application_cluster_development" ] } ok: [dev_server_2] => { "group_names": [ "application", "application_cluster_development" ] } ok: [dev_server_3] => { "group_names": [ "application", "application_cluster_development" ] } ok: [pro_server_1] => { "group_names": [ "application", "application_cluster_production" ] } ok: [pro_server_2] => { "group_names": [ "application", "application_cluster_production" ] } ok: [pro_server_3] => { "group_names": [ "application", "application_cluster_production" ] } TASK [Display application cluster group] ************************************************************************************************************************************************************* ok: [dev_server_1] => { "application_cluster_group": "application_cluster_development" } ok: [dev_server_2] => { "application_cluster_group": "application_cluster_development" } ok: [dev_server_3] => { "application_cluster_group": "application_cluster_development" } ok: [pro_server_1] => { "application_cluster_group": "application_cluster_production" } ok: [pro_server_2] => { "application_cluster_group": "application_cluster_production" } ok: [pro_server_3] => { "application_cluster_group": "application_cluster_production" } TASK [List cluster servers] ************************************************************************************************************************************************************************** ok: [dev_server_1] => { "groups[application_cluster_group]": [ "dev_server_1", "dev_server_2", "dev_server_3" ] } ok: [dev_server_2] => { "groups[application_cluster_group]": [ "dev_server_1", "dev_server_2", "dev_server_3" ] } ok: [dev_server_3] => { "groups[application_cluster_group]": [ "dev_server_1", "dev_server_2", "dev_server_3" ] } ok: [pro_server_1] => { "groups[application_cluster_group]": [ "pro_server_1", "pro_server_2", "pro_server_3" ] } ok: [pro_server_2] => { "groups[application_cluster_group]": [ "pro_server_1", "pro_server_2", "pro_server_3" ] } ok: [pro_server_3] => { "groups[application_cluster_group]": [ "pro_server_1", "pro_server_2", "pro_server_3" ] } TASK [Display per cluster variable] ****************************************************************************************************************************************************************** ok: [dev_server_1] => { "application__pool": 5 } ok: [dev_server_2] => { "application__pool": 5 } ok: [dev_server_3] => { "application__pool": 5 } ok: [pro_server_1] => { "application__pool": 10 } ok: [pro_server_2] => { "application__pool": 10 } ok: [pro_server_3] => { "application__pool": 10 } PLAY RECAP ******************************************************************************************************************************************************************************************* dev_server_1 : ok=6 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 dev_server_2 : ok=6 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 dev_server_3 : ok=6 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 pro_server_1 : ok=6 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 pro_server_2 : ok=6 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 pro_server_3 : ok=6 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Это просто и удобно.
Например, используйте следующий код для различения нескольких кластеров Kafka, таких как kafka_cluster_logging, kafka_cluster_webapp и так далее.
kafka_cluster_group: '{{ group_names | select("match","kafka_cluster_*") | first }}'
см. также:
- 📜 Как клонировать репозиторий Git с помощью Ansible
- 📜 Как отобразить настройки конфигурации ansible, которые изменились по сравнению с настройками по умолчанию
- 📜 9 Ansible плейбуков примеров для администрирования Windows
- 📜 Запуск Ansible плейбука и Vagrant up
- 📜 Как с помощью Ansible обновить все пакеты в Ubuntu / Debian Linux
- 📜 Как поручить Ansible использовать конкретную версию Python
- 📜 Как использовать статические и динамические файлы inventory в Ansible – часть 4