cmacrae.consul
Consul
Un rol de Ansible sencillo para desplegar y configurar Consul
Características
Configura Consul con YAML
La configuración del servicio Consul se realiza utilizando la conversión de YAML a JSON, por lo que puedes expresar tu(s) configuración(es) de Consul así:
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
Esto se hace utilizando filtros de Jinja2. Este rol no implementa entradas preconfiguradas para la configuración, por lo que en lugar de escribir la configuración de tu Consul en JSON; simplemente la expresas en la sintaxis equivalente de YAML, lo que significa que puede estar en cualquier parte de tu configuración de Ansible.
Como se muestra en el ejemplo anterior, esto puede ser muy poderoso, ya que te permite aprovechar otros filtros disponibles en Ansible para construir datos arbitrarios y usarlos en la configuración. Cualquier cosa que puedas expresar con el plantillado de Ansible (incluyendo la obtención de datos/información de host del inventario, etc.) puede ser utilizada en la configuración.
El ejemplo de configuración anterior muestra pares de clave/valor de cadena simples, pero por supuesto, puedes definir cualquier tipo válido en YAML, como diccionarios y listas.
Si no sabes cómo expresar la configuración JSON de tu Consul como YAML, ve aquí para un conversor útil.
Despliegues de múltiples archivos de configuración
Como se muestra en el ejemplo anterior, la variable consul_configs
tiene un diccionario main
. Como podrías haber adivinado, puedes definir múltiples diccionarios de configuración. Estos se despliegan en archivos llamados según su clave principal en el directorio conf.d
.
KISS
No estoy muy seguro de que esto debería estar listado como una característica... pero lo considero valioso.
Consul, por lo que hace, es fantásticamente simple de configurar y poner en marcha; por lo tanto, merece un rol de Ansible igualmente simple.
El archivo de tareas principal tiene solo poco más de 70 líneas, incluyendo espacios en blanco. ¿Y la plantilla de configuración principal? 1 línea.
Mantener este rol simple permite que sea muy flexible y fácil de integrar con cualquier otra cosa que desees.
Soporte para aprovisionamiento con Packer
Una característica muy simple, pero útil de este rol es la capacidad de establecer consul_packer_provision
en true
(false
por defecto). Cuando esto es true
, durante la ejecución de Ansible, no se iniciará el servicio Consul. Esto existe para que puedas colocar valores en tu configuración que pueden no ser válidos, destinados a ser usados al producir imágenes de máquinas de algún tipo con Packer, que se sustituirán más tarde mediante algún tipo de configuración de lanzamiento/script de usuario/datos de usuario.
Requisitos
Este rol solo ha sido probado en Ubuntu 16.04, pero se espera que funcione en cualquier distribución de Linux que ejecute systemd
y tenga disponible un paquete unzip
.
Variables de Rol por Defecto
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 }}"
Ejemplo de 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:
- cmacrae.consul
Licencia
MIT
Información del Autor
Creado por Calum MacRae
Siéntete libre de:
- Contactarme: @calumacrae, [email protected]
- Reportar un problema
- Contribuir
ansible-galaxy install cmacrae.consul