consul

Ansible Роль для развертывания Consul

Consul

Consul

Статус сборки Galaxy

Возможности

Настройка Consul с помощью YAML

Конфигурация сервиса Consul выполняется с использованием преобразования YAML в JSON, так что вы можете выразить вашу конфигурацию Consul следующим образом:

consul_master_token: myToken
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

Это происходит с использованием фильтров Jinja2. Эта роль не реализует заранее сконфигурированные записи для конфигурации, поэтому вместо того чтобы писать конфигурацию Consul в JSON, вы просто выражаете её в синтаксисе YAML, который может находиться где угодно в вашей конфигурации Ansible.
Как видно из приведенного выше примера, это может быть довольно мощно, так как позволяет использовать другие фильтры, доступные в Ansible, для создания произвольных данных и их использования в конфигурации. Все, что вы можете выразить с помощью шаблонов Ansible (включая получение данных/информации о хосте из инвентаря и т.д.), может быть использовано в конфигурации.

Приведенный выше пример конфигурации показывает простые строковые пары ключ/значение, но, конечно, вы можете определить любой допустимый тип в YAML, такой как словари и списки.
Если вы не знаете, как выразить вашу конфигурацию JSON для Consul в формате YAML, смотрите здесь для удобного конвертера.

Требования

Эта роль была протестирована только на Ubuntu 16.04, но должна работать на любой дистрибутиве Linux. Необходимы:

  • systemd
  • unzip

Переменные по умолчанию

---
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
# если consul настроен как сервер, systemd устанавливает cap_net_bind_service для привязки порта 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
# перезагружен
# перезапущен
# запущен
# остановлен

enable_on_boot: yes
# да
# нет

# настройте эту переменную, чтобы не выполнять шаг конфигурации
# no_configure

# настройте эту переменную, чтобы не выполнять шаг установки
# no_install

consul_config:
  datacenter: dc-1
  data_dir: "{{ consul_data_dir }}"
  log_level: INFO
  node_name: node-1
  server: "{{ consul_server }}"

Пример Ansible Playbook

Основная конфигурация роли

- hosts: consul_servers
  vars:
    consul_master_token: myToken
    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

Не настраивать, только установить

---
- name: выполнить основную роль
  hosts: all
  roles:
    - role: entercloudsuite.consul
      configure: false
      install: true
      consul_service_status: "stopped"
      consul_master_token: myToken
      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

Не устанавливать, только настраивать

---
- name: выполнить основную роль
  hosts: all
  roles:
    - role: entercloudsuite.consul
      configure: true
      install: false
      consul_service_status: "started"
      consul_master_token: myToken
      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

Конфигурации Agent Consul

Примеры конфигурации агента. Он присоединяется к серверу в groups['server']

    - 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 }}"

Пример сервера Consul

Примеры конфигурации сервера. Хосты в groups['server'] создают новый кластер consul.

    - 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

Тестирование

Тесты проводятся с использованием Molecule.

Установите Molecule или используйте docker-compose run --rm molecule, чтобы запустить локальный контейнер Docker, основанный на проекте enterclousuite/molecule, откуда вы сможете использовать команду molecule.

  1. Запустите molecule create, чтобы запустить целевой контейнер Docker на вашем локальном движке.
  2. Используйте molecule login, чтобы войти в запущенный контейнер.
  3. Редактируйте файлы роли.
  4. Добавьте другие необходимые роли (внешние) в файл molecule/default/requirements.yml.
  5. Отредактируйте molecule/default/playbook.yml.
  6. Определите тесты инфраструктуры в папке molecule/default/tests, используя verifier goos.
  7. Когда будете готовы, выполните molecule converge, чтобы запустить Ansible Playbook, и molecule verify, чтобы протестировать набор тестов. Обратите внимание, что процесс converge начинает выполнять проверку синтаксиса роли. Уничтожьте контейнер Docker с помощью команды molecule destroy.

Чтобы выполнить все шаги одной командой, используйте molecule test.

Чтобы запустить роль, нацелившись на виртуальную машину, используйте файл playbook_deploy.yml, например с помощью следующей команды: ansible-playbook ansible-docker/molecule/default/playbook_deploy.yml -i VM_IP_OR_FQDN, -u ubuntu --private-key private.pem.

Лицензия

MIT

Информация об авторе

Создано:

  • Calum MacRae
  • Jacopo Secchiero
  • Attilio Greco
О проекте

Role for deploying Consul

Установить
ansible-galaxy install automium/ansible-consul
Лицензия
mit
Загрузки
1316
Владелец
Portable services for scalable and resilient infrastructures