entercloudsuite.consul
Ansible Rolle zum Bereitstellen von Consul
Consul
Funktionen
Konfiguration von Consul mit YAML
Die Konfiguration des Consul-Dienstes erfolgt durch Umwandlung von YAML in JSON, sodass Sie Ihre Consul-Konfiguration(en) wie folgt ausdrücken können:
consul_master_token: meinToken
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
Dies geschieht mit Jinja2-Filter. Diese Rolle implementiert keine vorgefertigten Einträge für die Konfiguration, sodass Sie Ihre Consul-Konfiguration nicht in JSON schreiben müssen; Sie können sie einfach in der entsprechenden YAML-Syntax ausdrücken, was bedeutet, dass sie überall in Ihrer Ansible-Konfiguration stehen kann.
Wie im obigen Beispiel zu sehen ist, kann dies sehr mächtig sein, da es Ihnen ermöglicht, andere in Ansible verfügbare Filter zu nutzen, um beliebige Daten zu erstellen und in der Konfiguration zu verwenden. Alles, was Sie mit der Vorlagenverarbeitung von Ansible ausdrücken können (einschließlich Abrufen von Daten/Hostinformationen aus dem Inventar usw.), kann in der Konfiguration verwendet werden.
Die obige Beispielkonfiguration zeigt einfache Schlüssel/Wert-Paare, aber natürlich können Sie auch jeden gültigen Typ in YAML definieren, wie z. B. Wörterbücher und Listen.
Wenn Sie nicht wissen, wie Sie die JSON-Konfiguration von Consul in YAML ausdrücken, sehen Sie hier für einen praktischen Konverter.
Anforderungen
Diese Rolle wurde nur auf Ubuntu 16.04 getestet, sollte aber auf jeder Linux-Distribution funktionieren. Es werden benötigt:
systemd
unzip
Standard Rollenvariablen
---
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
# Wenn Consul als Server konfiguriert ist, setzen Sie systemd cap_net_bind_service für Bind-Port 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
# neu geladen
# neu gestartet
# gestartet
# gestoppt
enable_on_boot: yes
# ja
# nein
# Konfigurieren Sie diese Variable, um den Konfigurationsschritt nicht auszuführen
# no_configure
# Konfigurieren Sie diese Variable, um den Installationsschritt nicht auszuführen
# no_install
consul_config:
datacenter: dc-1
data_dir: "{{ consul_data_dir }}"
log_level: INFO
node_name: node-1
server: "{{ consul_server }}"
Beispiel Playbook
Grundkonfiguration der Rolle
- hosts: consul_servers
vars:
consul_master_token: meinToken
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
Nur installieren, nicht konfigurieren
---
- name: die Hauptrolle ausführen
hosts: all
roles:
- role: entercloudsuite.consul
configure: false
install: true
consul_service_status: "gestoppt"
consul_master_token: meinToken
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
Nur konfigurieren, nicht installieren
---
- name: die Hauptrolle ausführen
hosts: all
roles:
- role: entercloudsuite.consul
configure: true
install: false
consul_service_status: "gestartet"
consul_master_token: meinToken
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
Consul Agent-Konfigurationen
Beispielkonfigurationen für den Agent, die sich in die Gruppen['server'] eingliedern
- role: ansible-consul
configure: true
install: true
consul_service_status: "gestartet"
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 }}"
Beispiel-Consul-Server
Server Beispielkonfigurationen, Hosts in Gruppen['server'] erstellen einen neuen Consul-Cluster.
- role: ansible-consul
configure: true
install: true
consul_service_status: "gestartet"
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
Testen
Tests werden mit Molecule durchgeführt.
Installieren Sie Molecule oder verwenden Sie docker-compose run --rm molecule
, um einen lokalen Docker-Container zu starten, basierend auf dem enterclousuite/molecule Projekt, von wo aus Sie molecule
verwenden können.
- Führen Sie
molecule create
aus, um den Ziel-Docker-Container auf Ihrer lokalen Engine zu starten. - Verwenden Sie
molecule login
, um sich in den laufenden Container einzuloggen. - Bearbeiten Sie die Rollen-Dateien.
- Fügen Sie andere erforderliche Rollen (extern) in der Datei molecule/default/requirements.yml hinzu.
- Bearbeiten Sie die molecule/default/playbook.yml.
- Definieren Sie Infrastrukturtests im Ordner molecule/default/tests mit dem goos-Verifier.
- Wenn Sie bereit sind, verwenden Sie
molecule converge
, um das Ansible-Playbook auszuführen, undmolecule verify
, um die Testreihe zu starten. Beachten Sie, dass der Konvergenzprozess mit einer Syntaxprüfung der Rolle beginnt. Zerstören Sie den Docker-Container mit dem Befehlmolecule destroy
.
Um alle Schritte mit nur einem Befehl auszuführen, führen Sie molecule test
aus.
Um die Rolle auf einer VM auszuführen, verwenden Sie die Datei playbook_deploy.yml, zum Beispiel mit folgendem Befehl: ansible-playbook ansible-docker/molecule/default/playbook_deploy.yml -i VM_IP_OR_FQDN, -u ubuntu --private-key private.pem
Lizenz
MIT
Autoreninformationen
Erstellt von:
- Calum MacRae
- Jacopo Secchiero
- Attilio Greco
ansible-galaxy install entercloudsuite.consul