automium.consul

Ansible-Rolle für das Bereitstellen von Consul

Consul

Consul

Build Status Galaxy

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.

  1. Führen Sie molecule create aus, um den Ziel-Docker-Container auf Ihrer lokalen Engine zu starten.
  2. Verwenden Sie molecule login, um sich bei dem laufenden Container anzumelden.
  3. Bearbeiten Sie die Rollendateien.
  4. Fügen Sie andere erforderliche Rollen (extern) in der Datei molecule/default/requirements.yml hinzu.
  5. Bearbeiten Sie die molecule/default/playbook.yml.
  6. Definieren Sie Infrastrukturtests im Ordner molecule/default/tests mithilfe des Goos Verifiers.
  7. Wenn Sie bereit sind, verwenden Sie molecule converge, um das Ansible-Playbook auszuführen, und molecule 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 Befehl molecule 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
Über das Projekt

Role for deploying Consul

Installieren
ansible-galaxy install automium.consul
GitHub Repository
Lizenz
mit
Downloads
1.4k
Besitzer
Portable services for scalable and resilient infrastructures