automium.consul
Ansible-Rolle für das Bereitstellen von Consul
Consul
Funktionen
Konfigurieren Sie Consul mit YAML
Die Konfiguration für den Consul-Dienst erfolgt über eine Umwandlung von YAML in JSON. So können Sie Ihre Consul-Konfigurationen wie folgt ausdrücken:
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 mithilfe von Jinja2-Filtern. Diese Rolle implementiert keine vorab konfigurierten Einträge für die Konfiguration, sodass Sie die Konfiguration von Consul einfach im Syntaxäquivalent von YAML ausdrücken können. Dies bedeutet, dass es überall in Ihrer Ansible-Konfiguration platziert werden kann.
Wie im obigen Beispiel zu sehen ist, kann dies sehr mächtig sein, da es Ihnen ermöglicht, andere Filter in Ansible zu nutzen, um beliebige Daten zu erstellen und in der Konfiguration zu verwenden. Alles, was Sie mit der Vorlagenbearbeitung in Ansible ausdrücken können (einschließlich das Abrufen von Daten/Host-Informationen aus dem Inventar usw.), kann in der Konfiguration verwendet werden.
Die obige Beispielkonfiguration zeigt einfache Schlüssel/Wert-Paare, aber Sie können natürlich jeden gültigen Typ in YAML definieren, wie z. B. Wörterbücher oder Listen.
Wenn Sie nicht wissen, wie Sie die JSON-Konfiguration Ihres Consul als YAML ausdrücken, finden Sie hier einen praktischen Konverter.
Anforderungen
Diese Rolle wurde nur auf Ubuntu 16.04 getestet, sollte aber auch auf anderen Linux-Distributionen funktionieren. Erforderlich sind:
systemd
unzip
Standardrollenvariablen
---
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 so konfiguriert ist, dass es ein Server ist, setzen Sie systemd cap_net_bind_service für den 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
# diese Variable konfigurieren, um den Konfigurationsschritt nicht auszuführen
# no_configure
# diese Variable konfigurieren, 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
Einfache Rollenkonfiguration
- 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: "stopped"
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: "started"
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 Agenten, der sich den Servern in groups['server'] anschließt.
- 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 }}"
Beispiel für einen Consul-Server
Beispielkonfigurationen für Server, die in groups['server'] ein neues Consul-Cluster erstellen.
- 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
Testen
Tests werden mithilfe von Molecule durchgeführt.
Installieren Sie Molecule oder verwenden Sie docker-compose run --rm molecule
, um einen lokalen Docker-Container zu starten, basierend auf dem entercloudsuite/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 bei dem laufenden Container anzumelden. - Bearbeiten Sie die Rollendateien.
- 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 mithilfe des Goos Verifiers.
- Wenn Sie bereit sind, verwenden Sie
molecule converge
, um das Ansible-Playbook auszuführen, undmolecule verify
, um die Test-Suite auszuführen. Beachten Sie, dass der Prozess von converge mit einer Syntaxüberprü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 ein VM-Target zu richten, verwenden Sie die Datei playbook_deploy.yml beispielsweise 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
Autorinformationen
Erstellt von:
- Calum MacRae
- Jacopo Secchiero
- Attilio Greco