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:
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ś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