entercloudsuite.consul
Rola Ansible dla wdrażania Consul
Consul
Funkcje
Konfiguracja Consul za pomocą YAML
Konfiguracja usługi Consul jest realizowana poprzez konwersję YAML do JSON, co pozwala wyrazić konfiguracje Consul w następujący sposób:
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
Jest to realizowane za pomocą filtrów Jinja2. Ta rola nie implementuje wstępnie skonfigurowanych wpisów dla konfiguracji, więc zamiast pisać konfigurację Consul w JSON; po prostu wyrażasz ją w równoważnej składni YAML, co oznacza, że może być wszędzie w twojej konfiguracji Ansible.
Jak pokazano w powyższym przykładzie, jest to bardzo potężne, ponieważ pozwala wykorzystać inne filtry dostępne w Ansible do konstruowania dowolnych danych i ich użycia w konfiguracji. Cokolwiek możesz wyrazić za pomocą szablonów Ansible (w tym pobieranie danych/informacji o hostach z inwentarza itp.) może być użyte w konfiguracji.
Powyższy przykład konfiguracji pokazuje proste pary klucz/wartość, ale oczywiście możesz zdefiniować dowolny prawidłowy typ w YAML, taki jak słowniki i listy.
Jeśli nie wiesz, jak wyrazić konfigurację JSON dla Consul jako YAML, zobacz tutaj przydatny konwerter.
Wymagania
Ta rola była testowana tylko na Ubuntu 16.04, ale powinna działać na każdej dystrybucji Linuksa. Wymaga:
systemd
unzip
Domyślne zmienne roli
---
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
# JeśliConsul jest skonfigurowany jako serwer, systemd ustawia cap_net_bind_service dla portu 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
# załadowano
# zrestartowane
# uruchomione
# zatrzymane
enable_on_boot: yes
# tak
# nie
# skonfiguruj tę zmienną, aby nie uruchamiać kroku konfiguracji
# no_configure
# skonfiguruj tę zmienną, aby nie uruchamiać kroku instalacji
# no_install
consul_config:
datacenter: dc-1
data_dir: "{{ consul_data_dir }}"
log_level: INFO
node_name: node-1
server: "{{ consul_server }}"
Przykład playbooka
Podstawowa konfiguracja roli
- 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
Nie konfiguruj, tylko zainstaluj
---
- name: uruchom główną rolę
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
Nie instaluj, tylko konfiguruj
---
- name: uruchom główną rolę
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
Konfiguracje agenta Consul
Przykładowe konfiguracje agenta, dołącza do serwera w 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 }}"
Przykład serwera Consul
Przykładowe konfiguracje serwera, host w groups['server'] tworzy nowy klaster 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
Testowanie
Testy są realizowane za pomocą Molecule.
Zainstaluj Molecule lub użyj docker-compose run --rm molecule
, aby uruchomić lokalny kontener Docker, oparty na projekcie entercloudsuite/molecule, skąd możesz użyć molecule
.
- Uruchom
molecule create
, aby uruchomić docelowy kontener Docker na swoim lokalnym silniku. - Użyj
molecule login
, aby zalogować się do uruchomionego kontenera. - Edytuj pliki roli.
- Dodaj inne wymagane role (zewnętrzne) w pliku molecule/default/requirements.yml.
- Edytuj molecule/default/playbook.yml.
- Zdefiniuj testy infra w folderze molecule/default/tests przy użyciu weryfikatora goos.
- Gdy będziesz gotowy, użyj
molecule converge
, aby uruchomić playbook Ansible imolecule verify
, aby wykonać zestaw testów. Zauważ, że proces konwergencji rozpoczyna się od sprawdzenia składni roli. Zniszcz kontener Docker komendąmolecule destroy
.
Aby wykonać wszystkie kroki jednym poleceniem, uruchom molecule test
.
Aby uruchomić rolę kierując się na VM, użyj pliku playbook_deploy.yml np. z następującą komendą: ansible-playbook ansible-docker/molecule/default/playbook_deploy.yml -i VM_IP_OR_FQDN, -u ubuntu --private-key private.pem
Licencja
MIT
Informacje o autorze
Stworzone przez:
- Calum MacRae
- Jacopo Secchiero
- Attilio Greco
ansible-galaxy install entercloudsuite.consul