- name: Install requirements ansible.builtin.apt: name: - "unzip" # Not required for Ubuntu 24, was a test for Debian 13 - name: Disable IPv6 on all interfaces ansible.posix.sysctl: name: "net.ipv6.conf.all.disable_ipv6" value: "1" sysctl_set: true - name: Create Consul directory ansible.builtin.file: path: "/usr/local/consul-{{ consul_version }}" state: "directory" mode: "0755" - name: Install Consul ansible.builtin.unarchive: src: "https://releases.hashicorp.com/consul/{{ consul_version }}/consul_{{ consul_version }}_linux_amd64.zip" dest: "/usr/local/consul-{{ consul_version }}" creates: "/usr/local/consul-{{ consul_version }}/consul" remote_src: true notify: - "Restart Consul" - name: Link Consul ansible.builtin.file: src: "/usr/local/consul-{{ consul_version }}/consul" dest: "/usr/local/bin/consul" state: "link" notify: - "Restart Consul" - name: Create consul system group ansible.builtin.group: name: "consul" system: true - name: Create consul system user ansible.builtin.user: name: "consul" group: "consul" groups: ["ssl-cert"] password: "!" system: true home: "/opt/consul" - name: Create consul config directory ansible.builtin.file: path: "/etc/consul" state: "directory" group: "consul" mode: "0750" - name: Create consul log dir ansible.builtin.file: path: "/var/log/consul" state: "directory" group: "consul" mode: "0770" - name: Generate Consul config ansible.builtin.template: src: "templates/config.json" dest: "/etc/consul/config.json" group: "consul" mode: "0640" notify: - "Restart Consul" - name: Deploy Consul service file ansible.builtin.template: src: "templates/consul.service" dest: "/etc/systemd/system/consul.service" mode: "0644" notify: - "Restart Consul" - name: Enable and start Consul ansible.builtin.service: name: "consul" state: "started" enabled: true daemon_reload: true # consul acl bootstrap -format=json # { # "CreateIndex": 1042, # "ModifyIndex": 1042, # "AccessorID": "50f8bfb6-b259-4c08-f9aa-2dc0eeb08e99", # "SecretID": "b7f16a8a-0b4f-4661-fea2-f79d95dd011b", # "Description": "Bootstrap Token (Global Management)", # "Policies": [ # { # "ID": "00000000-0000-0000-0000-000000000001", # "Name": "global-management" # } # ], # "Local": false, # "CreateTime": "2026-01-19T18:41:13.294800712+03:00", # "Hash": "X2AgaFhnQGRhSSF/h0m6qpX1wj/HJWbyXcxkEM/5GrY=" # } - name: Register services to consul loop: "{{ consul_services }}" community.general.consul_agent_service: name: "{{ item.name }}" service_port: "{{ item.port }}" tags: "{{ item.tags | default([]) }}" - name: Register HTTP checks to consul loop: "{{ consul_services }}" when: "item.check_http | default(None) != None" community.general.consul_agent_check: name: "{{ item.name }}_check" service_id: "{{ item.name }}" interval: "{{ item.check_interval | default(consul_default_check_interval) }}" timeout: "{{ item.check_timeout | default(consul_default_check_timeout) }}" http: "{{ item.check_http }}" scheme: "{{ item.check_scheme | default('http') }}" - name: Register TCP checks to consul loop: "{{ consul_services }}" when: "item.check_tcp | default(None) != None" community.general.consul_agent_check: name: "{{ item.name }}_check" service_id: "{{ item.name }}" interval: "{{ item.check_interval | default(consul_default_check_interval) }}" timeout: "{{ item.check_timeout | default(consul_default_check_timeout) }}" tcp: "{{ item.check_tcp }}"