consul
Ansible Роль для развертывания Consul
Consul
Возможности
Настройка Consul с помощью YAML
Конфигурация сервиса Consul выполняется с использованием преобразования YAML в JSON, так что вы можете выразить вашу конфигурацию Consul следующим образом:
consul_master_token: myToken
consul_server: true
consul_configs:
main:
acl_datacenter: pantheon
acl_master_token: "{{ consul_master_token | to_uuid }}"
bootstrap: true
bind_addr: 0.0.0.0
client_addr: 0.0.0.0
datacenter: pantheon
data_dir: "{{ consul_data_dir }}"
log_level: INFO
node_name: master
server: "{{ consul_server }}"
ui: true
Это происходит с использованием фильтров Jinja2. Эта роль не реализует заранее сконфигурированные записи для конфигурации, поэтому вместо того чтобы писать конфигурацию Consul в JSON, вы просто выражаете её в синтаксисе YAML, который может находиться где угодно в вашей конфигурации Ansible.
Как видно из приведенного выше примера, это может быть довольно мощно, так как позволяет использовать другие фильтры, доступные в Ansible, для создания произвольных данных и их использования в конфигурации. Все, что вы можете выразить с помощью шаблонов Ansible (включая получение данных/информации о хосте из инвентаря и т.д.), может быть использовано в конфигурации.
Приведенный выше пример конфигурации показывает простые строковые пары ключ/значение, но, конечно, вы можете определить любой допустимый тип в YAML, такой как словари и списки.
Если вы не знаете, как выразить вашу конфигурацию JSON для Consul в формате YAML, смотрите здесь для удобного конвертера.
Требования
Эта роль была протестирована только на Ubuntu 16.04, но должна работать на любой дистрибутиве Linux. Необходимы:
systemd
unzip
Переменные по умолчанию
---
consul_packer_provision: false
consul_group_name: consul
consul_group_gid: 3000
consul_user_name: consul
consul_user_uid: 3000
consul_user_home: /opt/consul
consul_config_dir: "{{ consul_user_home }}/conf.d"
consul_data_dir: "{{ consul_user_home }}/data"
consul_version: 1.6.3
# если consul настроен как сервер, systemd устанавливает cap_net_bind_service для привязки порта 53
consul_cap_net_bind_service: "{{ consul_configs.main.server | default('false') }}"
consul_server: false
consul_uri: "https://releases.hashicorp.com/consul/{{ consul_version }}/consul_{{ consul_version }}_linux_amd64.zip"
consul_config_src: main.json.j2
consul_config_validate: "{{ consul_user_home }}/bin/consul validate -config-format=json %s"
consul_extra_args: []
consul_service_file:
src: consul.service.j2
dest: /etc/systemd/system/consul.service
consul_service_status: started
# перезагружен
# перезапущен
# запущен
# остановлен
enable_on_boot: yes
# да
# нет
# настройте эту переменную, чтобы не выполнять шаг конфигурации
# no_configure
# настройте эту переменную, чтобы не выполнять шаг установки
# no_install
consul_config:
datacenter: dc-1
data_dir: "{{ consul_data_dir }}"
log_level: INFO
node_name: node-1
server: "{{ consul_server }}"
Пример Ansible Playbook
Основная конфигурация роли
- hosts: consul_servers
vars:
consul_master_token: myToken
consul_server: true
consul_config:
acl_datacenter: pantheon
acl_master_token: "{{ consul_master_token | to_uuid }}"
bootstrap: true
bind_addr: 0.0.0.0
client_addr: 0.0.0.0
datacenter: pantheon
data_dir: "{{ consul_data_dir }}"
log_level: INFO
node_name: master
server: "{{ consul_server }}"
ui: true
roles:
- entercloudsuite.consul
Не настраивать, только установить
---
- name: выполнить основную роль
hosts: all
roles:
- role: entercloudsuite.consul
configure: false
install: true
consul_service_status: "stopped"
consul_master_token: myToken
consul_server: true
consul_configs:
main:
acl_datacenter: pantheon
acl_master_token: "{{ consul_master_token | to_uuid }}"
bootstrap: true
bind_addr: 0.0.0.0
client_addr: 0.0.0.0
datacenter: pantheon
data_dir: "{{ consul_data_dir }}"
log_level: INFO
node_name: master
server: "{{ consul_server }}"
ui: true
Не устанавливать, только настраивать
---
- name: выполнить основную роль
hosts: all
roles:
- role: entercloudsuite.consul
configure: true
install: false
consul_service_status: "started"
consul_master_token: myToken
consul_server: true
consul_configs:
main:
acl_datacenter: pantheon
acl_master_token: "{{ consul_master_token | to_uuid }}"
bootstrap: true
bind_addr: 0.0.0.0
client_addr: 0.0.0.0
datacenter: pantheon
data_dir: "{{ consul_data_dir }}"
log_level: INFO
node_name: master
server: "{{ consul_server }}"
ui: true
Конфигурации Agent Consul
Примеры конфигурации агента. Он присоединяется к серверу в groups['server']
- role: ansible-consul
configure: true
install: true
consul_service_status: "started"
consul_version: 1.6.3
consul_configs:
main:
bind_addr: "{{ ansible_default_ipv4['address'] }}"
client_addr: 0.0.0.0
node_name: "{{ ansible_hostname }}"
data_dir: "{{ consul_data_dir }}"
datacenter: "pantheon"
enable_syslog: true
server: false
ui: true
enable_script_checks: true
rejoin_after_leave: true
retry_join: "{{ groups['server'] | map('extract', hostvars, ['ansible_default_ipv4', 'address']) | list }}"
Пример сервера Consul
Примеры конфигурации сервера. Хосты в groups['server'] создают новый кластер consul.
- role: ansible-consul
configure: true
install: true
consul_service_status: "started"
consul_version: 1.6.3
consul_configs:
main:
bind_addr: "{{ ansible_default_ipv4['address'] }}"
client_addr: 0.0.0.0
node_name: "{{ ansible_hostname }}"
data_dir: "{{ consul_data_dir }}"
datacenter: "pantheon"
enable_syslog: true
server: true
ui: true
enable_script_checks: true
rejoin_after_leave: true
retry_join: "{{ groups['server'] | map('extract', hostvars, ['ansible_default_ipv4', 'address']) | list }}"
ports:
dns: 53
dns_config:
udp_answer_limit: 64
bootstrap_expect: "{{ groups['server'] | length | int }}"
recursors:
- 1.1.1.1
- 8.8.8.8
Тестирование
Тесты проводятся с использованием Molecule.
Установите Molecule или используйте docker-compose run --rm molecule
, чтобы запустить локальный контейнер Docker, основанный на проекте enterclousuite/molecule, откуда вы сможете использовать команду molecule
.
- Запустите
molecule create
, чтобы запустить целевой контейнер Docker на вашем локальном движке. - Используйте
molecule login
, чтобы войти в запущенный контейнер. - Редактируйте файлы роли.
- Добавьте другие необходимые роли (внешние) в файл molecule/default/requirements.yml.
- Отредактируйте molecule/default/playbook.yml.
- Определите тесты инфраструктуры в папке molecule/default/tests, используя verifier goos.
- Когда будете готовы, выполните
molecule converge
, чтобы запустить Ansible Playbook, иmolecule verify
, чтобы протестировать набор тестов. Обратите внимание, что процесс converge начинает выполнять проверку синтаксиса роли. Уничтожьте контейнер Docker с помощью командыmolecule destroy
.
Чтобы выполнить все шаги одной командой, используйте molecule test
.
Чтобы запустить роль, нацелившись на виртуальную машину, используйте файл playbook_deploy.yml, например с помощью следующей команды: ansible-playbook ansible-docker/molecule/default/playbook_deploy.yml -i VM_IP_OR_FQDN, -u ubuntu --private-key private.pem
.
Лицензия
MIT
Информация об авторе
Создано:
- Calum MacRae
- Jacopo Secchiero
- Attilio Greco
ansible-galaxy install automium/ansible-consul