--- - name: Configure Consul Persistent Storage hosts: ch4,ash3c,warden become: yes gather_facts: yes vars: consul_data_dir: "/opt/consul/data" nomad_config_file: "/etc/nomad.d/nomad.hcl" tasks: - name: Create consul data directory file: path: "{{ consul_data_dir }}" state: directory owner: nomad group: nomad mode: '0755' - name: Backup existing nomad configuration copy: src: "{{ nomad_config_file }}" dest: "{{ nomad_config_file }}.backup.{{ ansible_date_time.epoch }}" remote_src: yes backup: yes - name: Check if consul-data host volume already configured lineinfile: path: "{{ nomad_config_file }}" line: ' host_volume "consul-data" {' state: absent check_mode: yes register: consul_volume_check changed_when: false - name: Add consul-data host volume configuration blockinfile: path: "{{ nomad_config_file }}" marker: "# {mark} CONSUL PERSISTENT STORAGE" block: | # Consul 持久化存储 client { host_volume "consul-data" { path = "{{ consul_data_dir }}" read_only = false } } insertafter: EOF when: consul_volume_check is not changed notify: restart nomad - name: Verify consul data directory permissions file: path: "{{ consul_data_dir }}" owner: nomad group: nomad mode: '0755' state: directory - name: Display consul data directory info stat: path: "{{ consul_data_dir }}" register: consul_dir_stat - name: Show directory information debug: msg: | Consul data directory: {{ consul_data_dir }} Owner: {{ consul_dir_stat.stat.pw_name }}:{{ consul_dir_stat.stat.gr_name }} Permissions: {{ consul_dir_stat.stat.mode }} handlers: - name: restart nomad systemd: name: nomad state: restarted daemon_reload: yes - name: wait for nomad wait_for: port: 4646 host: "{{ ansible_host }}" delay: 5 timeout: 30 listen: restart nomad - name: Verify Nomad client status hosts: ch4,ash3c,warden become: yes gather_facts: no tasks: - name: Check nomad service status systemd: name: nomad register: nomad_status - name: Display nomad status debug: msg: | Node: {{ inventory_hostname }} Nomad Status: {{ nomad_status.status.ActiveState }} - name: Verify nomad client connectivity uri: url: "http://{{ ansible_host }}:4646/v1/status/leader" method: GET timeout: 10 register: nomad_api_check ignore_errors: yes - name: Show connectivity result debug: msg: | Node: {{ inventory_hostname }} API Check: {{ 'SUCCESS' if nomad_api_check.status == 200 else 'FAILED' }} - name: Summary Report hosts: localhost gather_facts: no run_once: true tasks: - name: Display completion summary debug: msg: | ✅ Consul 持久化存储配置完成! 已配置节点: ch4, ash3c, warden 数据目录: /opt/consul/data 权限: nomad:nomad (755) 下一步: 1. 部署持久化 Consul job 2. 验证集群状态 3. 恢复 KV 数据