161 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			YAML
		
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			YAML
		
	
	
	
| ---
 | |
| - name: Install and Configure Nomad Podman Driver on Client Nodes
 | |
|   hosts: nomad_clients
 | |
|   become: yes
 | |
|   vars:
 | |
|     nomad_plugin_dir: "/opt/nomad/plugins"
 | |
|     
 | |
|   tasks:
 | |
|     - name: Create backup directory with timestamp
 | |
|       set_fact:
 | |
|         backup_dir: "/root/backup/{{ ansible_date_time.date }}_{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}{{ ansible_date_time.second }}"
 | |
|     
 | |
|     - name: Create backup directory
 | |
|       file:
 | |
|         path: "{{ backup_dir }}"
 | |
|         state: directory
 | |
|         mode: '0755'
 | |
|     
 | |
|     - name: Backup current Nomad configuration
 | |
|       copy:
 | |
|         src: /etc/nomad.d/nomad.hcl
 | |
|         dest: "{{ backup_dir }}/nomad.hcl.backup"
 | |
|         remote_src: yes
 | |
|       ignore_errors: yes
 | |
|     
 | |
|     - name: Backup current apt sources
 | |
|       shell: |
 | |
|         cp -r /etc/apt/sources.list* {{ backup_dir }}/
 | |
|         dpkg --get-selections > {{ backup_dir }}/installed_packages.txt        
 | |
|       ignore_errors: yes
 | |
|     
 | |
|     - name: Create temporary directory for apt
 | |
|       file:
 | |
|         path: /tmp/apt-temp
 | |
|         state: directory
 | |
|         mode: '1777'
 | |
|     
 | |
|     - name: Download HashiCorp GPG key
 | |
|       get_url:
 | |
|         url: https://apt.releases.hashicorp.com/gpg
 | |
|         dest: /tmp/hashicorp.gpg
 | |
|         mode: '0644'
 | |
|       environment:
 | |
|         TMPDIR: /tmp/apt-temp
 | |
|     
 | |
|     - name: Install HashiCorp GPG key
 | |
|       shell: |
 | |
|         gpg --dearmor < /tmp/hashicorp.gpg > /usr/share/keyrings/hashicorp-archive-keyring.gpg        
 | |
|       environment:
 | |
|         TMPDIR: /tmp/apt-temp
 | |
|     
 | |
|     - name: Add HashiCorp repository
 | |
|       lineinfile:
 | |
|         path: /etc/apt/sources.list.d/hashicorp.list
 | |
|         line: "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com {{ ansible_distribution_release }} main"
 | |
|         create: yes
 | |
|         mode: '0644'
 | |
|     
 | |
|     - name: Update apt cache
 | |
|       apt:
 | |
|         update_cache: yes
 | |
|       environment:
 | |
|         TMPDIR: /tmp/apt-temp
 | |
|       ignore_errors: yes
 | |
|     
 | |
|     - name: Install nomad-driver-podman
 | |
|       apt:
 | |
|         name: nomad-driver-podman
 | |
|         state: present
 | |
|       environment:
 | |
|         TMPDIR: /tmp/apt-temp
 | |
|     
 | |
|     - name: Create Nomad plugin directory
 | |
|       file:
 | |
|         path: "{{ nomad_plugin_dir }}"
 | |
|         state: directory
 | |
|         owner: nomad
 | |
|         group: nomad
 | |
|         mode: '0755'
 | |
|     
 | |
|     - name: Create symlink for nomad-driver-podman in plugin directory
 | |
|       file:
 | |
|         src: /usr/bin/nomad-driver-podman
 | |
|         dest: "{{ nomad_plugin_dir }}/nomad-driver-podman"
 | |
|         state: link
 | |
|         owner: nomad
 | |
|         group: nomad
 | |
|     
 | |
|     - name: Get server IP address
 | |
|       shell: |
 | |
|         ip route get 1.1.1.1 | grep -oP 'src \K\S+'        
 | |
|       register: server_ip_result
 | |
|       changed_when: false
 | |
|     
 | |
|     - name: Set server IP fact
 | |
|       set_fact:
 | |
|         server_ip: "{{ server_ip_result.stdout }}"
 | |
|     
 | |
|     - name: Stop Nomad service
 | |
|       systemd:
 | |
|         name: nomad
 | |
|         state: stopped
 | |
|     
 | |
|     - name: Create updated Nomad client configuration
 | |
|       copy:
 | |
|         content: |
 | |
|           datacenter = "{{ nomad_datacenter }}"
 | |
|           data_dir = "/opt/nomad/data"
 | |
|           log_level = "INFO"
 | |
|           bind_addr = "{{ server_ip }}"
 | |
|           
 | |
|           server {
 | |
|             enabled = false
 | |
|           }
 | |
|           
 | |
|           client {
 | |
|             enabled = true
 | |
|             servers = ["100.117.106.136:4647", "100.116.80.94:4647", "100.97.62.111:4647", "100.116.112.45:4647", "100.84.197.26:4647"]
 | |
|           }
 | |
|           
 | |
|           plugin_dir = "{{ nomad_plugin_dir }}"
 | |
|           
 | |
|           plugin "nomad-driver-podman" {
 | |
|             config {
 | |
|               volumes {
 | |
|                 enabled = true
 | |
|               }
 | |
|               recover_stopped = true
 | |
|             }
 | |
|           }
 | |
|           
 | |
|           consul {
 | |
|             address = "127.0.0.1:8500"
 | |
|           }          
 | |
|         dest: /etc/nomad.d/nomad.hcl
 | |
|         owner: nomad
 | |
|         group: nomad
 | |
|         mode: '0640'
 | |
|         backup: yes
 | |
|     
 | |
|     - name: Validate Nomad configuration
 | |
|       shell: nomad config validate /etc/nomad.d/nomad.hcl
 | |
|       register: nomad_validate
 | |
|       failed_when: nomad_validate.rc != 0
 | |
|     
 | |
|     - name: Start Nomad service
 | |
|       systemd:
 | |
|         name: nomad
 | |
|         state: started
 | |
|         enabled: yes
 | |
|     
 | |
|     - name: Wait for Nomad to be ready
 | |
|       wait_for:
 | |
|         port: 4646
 | |
|         host: "{{ server_ip }}"
 | |
|         delay: 5
 | |
|         timeout: 60
 | |
|     
 | |
|     - name: Display backup location
 | |
|       debug:
 | |
|         msg: "Backup created at: {{ backup_dir }}" |