--- # ============================================================================= # APPLY PLAYBOOK # Purpose: Deploy files from deploy-config.yml to target servers # Usage: ansible-playbook apply.yml # Note: Uses Ansible's register mechanism to capture deployed files # ============================================================================= - name: Deploy files to servers hosts: all become: true vars_files: - ../deploy-config.yml tasks: # ───────────────────────────────────────────────────────────────────── # TASK 1: Deploy each configured file/folder # Loops through deploy_items and copies each to destination # Registers which files were successfully deployed # ───────────────────────────────────────────────────────────────────── - name: Deploy configured files copy: src: "{{ playbook_dir }}/{{ '../../' + item.src }}" dest: "{{ item.dest }}" owner: "{{ item.owner | default('root') }}" group: "{{ item.group | default('root') }}" mode: "{{ item.mode | default('0644') }}" backup: yes register: deploy_results loop: "{{ deploy_items }}" loop_control: loop_var: item label: "{{ item.name }}" # ───────────────────────────────────────────────────────────────────── # TASK 2: Extract deployed file information # Builds a list of deployed files from the copy task results # ───────────────────────────────────────────────────────────────────── - name: Extract deployed file information set_fact: deployed_file_list: | [ {%- for result in deploy_results.results -%} { "name": "{{ result.item.name }}", "src": "{{ result.item.src }}", "dest": "{{ result.item.dest }}", "changed": {{ result.changed | lower }} }{{ "," if not loop.last else "" }} {%- endfor -%} ] # ───────────────────────────────────────────────────────────────────── # TASK 3: Save deployed files list to a temporary file # This file will be read by the GitOps status script # ───────────────────────────────────────────────────────────────────── - name: Save deployed files list copy: content: "{{ deployed_file_list }}" dest: "/tmp/deployed_files_{{ inventory_hostname }}.json" owner: root group: root mode: "0644" # ───────────────────────────────────────────────────────────────────── # TASK 4: Confirm deployment success # Displays summary of deployed files # ───────────────────────────────────────────────────────────────────── - name: Display deployment summary debug: msg: "✅ Deployed {{ deploy_results.results | length }} file(s) to {{ inventory_hostname }}" - name: Display deployed files debug: msg: " - {{ item.item.name }} → {{ item.item.dest }} ({{ 'changed' if item.changed else 'unchanged' }})" loop: "{{ deploy_results.results }}" loop_control: label: "{{ item.item.name }}"