entercloudsuite.consul

Ansible Rolle zum Bereitstellen von Consul

Consul

Consul

Build Status Galaxy

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.

  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 in den laufenden Container einzuloggen.
  3. Bearbeiten Sie die Rollen-Dateien.
  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 mit dem goos-Verifier.
  7. Wenn Sie bereit sind, verwenden Sie molecule converge, um das Ansible-Playbook auszuführen, und molecule 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 Befehl molecule 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
Über das Projekt

Role for deploying Consul

Installieren
ansible-galaxy install entercloudsuite.consul
GitHub Repository
Lizenz
mit
Downloads
7.5k