automium.consul
Rola Ansible do wdrożenia Consul
Consul
Cechy
Konfiguracja Consul przy użyciu YAML
Konfiguracja usługi Consul odbywa się poprzez konwersję YAML na JSON, więc możesz wyrazić swoje konfiguracje Consul w ten 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
To odbywa się przy użyciu filtrów Jinja2. Ta rola nie implementuje żadnych wstępnie skonfigurowanych wpisów do 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 znajdować się w dowolnym miejscu w twojej konfiguracji Ansible.
Jak widać w powyższym przykładzie, to może być bardzo potężne, ponieważ pozwala ci wykorzystać inne filtry dostępne w Ansible do konstruowania dowolnych danych i używania ich w konfiguracji. Wszystko, co 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 możesz oczywiście zdefiniować dowolny ważny typ w YAML, na przykład 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 w systemie Ubuntu 16.04, ale powinna działać na dowolnej dystrybucji Linuxa. Wymaga:
systemdunzip
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śli consul 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
# przeładowane
# ponownie uruchomione
# uruchomione
# zatrzymane
enable_on_boot: yes
# tak
# nie
# skonfiguruj tę zmienną, aby nie wykonywać kroku konfiguracyjnego
# no_configure
# skonfiguruj tę zmienną, aby nie wykonywać 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 konfigurować, tylko instalować
---
- 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 instalować, tylko konfigurować
---
- 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, łączy się z serwerem 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 konfiguracji serwera
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ą wykonywane przy użyciu Molecule.
Zainstaluj Molecule lub użyj docker-compose run --rm molecule, aby uruchomić lokalny kontener Docker, bazując na projekcie enterclousuite/molecule, z którego możesz korzystać z molecule.
- Uruchom
molecule create, aby uruchomić docelowy kontener Docker na twoim 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, używając weryfikatora goos.
- Gdy będziesz gotowy, użyj
molecule converge, aby uruchomić Playbook Ansible, amolecule verify, aby wykonać zestaw testów. Zauważ, że proces konwergencji zaczyna się od sprawdzenia składni roli. Zniszcz kontener Docker poleceniemmolecule destroy.
Aby wykonać wszystkie kroki za pomocą jednego polecenia, uruchom molecule test.
Aby uruchomić rolę celującą w VM, użyj pliku playbook_deploy.yml, na przykład z następującym poleceniem: 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 automium.consul