consul
Consul
Простая роль Ansible для развертывания и настройки 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, смотрите здесь удобный конвертер.
Развертывание нескольких конфигурационных файлов
Как показано в примере выше, переменная consul_configs
имеет словарь main
. Как вы могли догадаться, вы можете определить несколько словарей с конфигурациями. Они затем развертываются в файлы, названные в честь родительского ключа в директории conf.d
.
KISS
Не совсем уверен, что это стоит рассматривать как функцию... но я считаю это полезным.
Consul, за то, что делает, удивительно прост в настройке и запуске - следовательно, он заслуживает такой же простой роли Ansible.
Основной файл задач содержит чуть более 70 строк, включая пробелы. А основной шаблон конфигурации? 1 строка.
Сохранение этой роли простой позволяет ей быть гибкой и легко интегрироваться с чем угодно, что вам может понадобиться.
Поддержка развертывания Packer
Очень простая, но полезная функция этой роли - возможность установить consul_packer_provision
в true
(по умолчанию false
). Когда это значение true
, во время выполнения Ansible сервис Consul не будет запущен. Это нужно, чтобы вы могли разместить значения в вашей конфигурации, которые могут быть недействительными и предназначены для использования при создании образов машин с помощью Packer, которые позже будут заменены с помощью конфигурации запуска/скрипта пользователя/данных пользователя.
Требования
Эта роль была протестирована только на Ubuntu 16.04, но должна работать на любом дистрибутиве Linux, который использует systemd
и имеет пакет unzip
.
Переменные роли по умолчанию
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: 0.8.4
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_service_file:
src: consul.service.j2
dest: /etc/systemd/system/consul.service
consul_config:
datacenter: dc-1
data_dir: "{{ consul_data_dir }}"
log_level: INFO
node_name: node-1
server: "{{ consul_server }}"
Пример плейбука
- 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:
- cmacrae.consul
Лицензия
MIT
Информация об авторе
Создано Каллом Макрэем
Не стесняйтесь:
- Связаться со мной: @calumacrae, [email protected]
- Сообщить о проблеме
- Принять участие
ansible-galaxy install cmacrae/ansible-consul