cmacrae.consul
Consul
Un rôle Ansible simple pour déployer et configurer Consul
Caractéristiques
Configurer Consul avec YAML
La configuration du service Consul se fait par conversion YAML en JSON, vous pouvez donc exprimer vos configurations Consul comme suit :
consul_master_token: monToken
consul_server: vrai
consul_configs:
principal:
acl_datacenter: pantheon
acl_master_token: "{{ consul_master_token | to_uuid }}"
bootstrap: vrai
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: vrai
Cela se fait en utilisant des filtres Jinja2. Ce rôle n'implémente aucune entrée préconfigurée pour la configuration, donc plutôt que d'écrire la configuration de votre Consul en JSON ; vous l'exprimez simplement dans la syntaxe équivalente de YAML, ce qui signifie qu'elle peut se trouver n'importe où dans votre configuration Ansible.
Comme nous l'avons vu dans l'exemple ci-dessus, cela peut être très puissant, car cela permet d'utiliser d'autres filtres disponibles dans Ansible pour construire des données arbitraires et les utiliser dans la configuration. Tout ce que vous pouvez exprimer avec le système de templates d'Ansible (y compris la récupération de données/informations sur les hôtes à partir de l'inventaire, etc.) peut être utilisé dans la configuration.
L'exemple de configuration ci-dessus montre des paires clé/valeur simples, mais vous pouvez bien sûr définir tout type valide en YAML, tel que des dictionnaires et des listes.
Si vous ne savez pas comment exprimer la configuration JSON de votre Consul en YAML, voir ici pour un convertisseur pratique.
Déploiements de plusieurs fichiers de configuration
Comme montré dans l'exemple ci-dessus, la variable consul_configs
a un dictionnaire principal
. Comme vous l'avez peut-être deviné ; vous pouvez définir plusieurs dictionnaires de configuration. Ceux-ci sont ensuite déployés dans des fichiers nommés d'après leur clé parente dans le répertoire conf.d
.
KISS
Je ne suis pas vraiment sûr que cela devrait être listé comme une caractéristique... mais je le considère comme précieux.
Consul, pour ce qu'il fait, est fantastiquement simple à configurer et à démarrer - de ce fait, il mérite un rôle Ansible tout aussi simple.
Le fichier principal des tâches compte juste un peu plus de 70 lignes, espaces compris. Et le modèle de configuration principal ? 1 ligne.
Garder ce rôle simple permet d'être très flexible et facile à intégrer avec tout autre outil que vous pourriez vouloir utiliser.
Support de provisionnement Packer
Une caractéristique très simple, mais utile de ce rôle est la possibilité de définir consul_packer_provision
sur vrai
(faux
par défaut). Lorsque c'est vrai
, pendant l'exécution d'Ansible, il ne démarrera pas le service Consul. Cela existe pour que vous puissiez placer des valeurs dans votre configuration qui peuvent ne pas être valides, destinées à être utilisées lors de la production d'images de machines avec Packer, censées être remplacées plus tard par une sorte de configuration de lancement/script utilisateur/données utilisateur.
Exigences
Ce rôle n'a été testé que sur Ubuntu 16.04, mais devrait fonctionner sur n'importe quelle distribution Linux qui exécute systemd
et dispose d'un package unzip
.
Variables de rôle par défaut
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: faux
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 }}"
Exemple de playbook
- hosts: consul_servers
vars:
consul_master_token: monToken
consul_server: vrai
consul_config:
acl_datacenter: pantheon
acl_master_token: "{{ consul_master_token | to_uuid }}"
bootstrap: vrai
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: vrai
roles:
- cmacrae.consul
Licence
MIT
Informations sur l'auteur
Créé par Calum MacRae
N'hésitez pas à :
- Me contacter : @calumacrae, [email protected]
- Signaler un problème
- Contribuer
ansible-galaxy install cmacrae.consul