Commit bab403ab authored by Sergio Gimenez's avatar Sergio Gimenez
Browse files

Merge branch 'refactor-playbooks' into 'master'

Refactor playbooks

See merge request areas/software-networks/operator-platform/op-automation!4
parents f73e9d31 d079ba4d
Loading
Loading
Loading
Loading
+0 −172
Original line number Original line Diff line number Diff line
---
# Playbook: Deploy i2edge Application
# Description: Deploys i2edge application to Kind cluster (dependencies must be installed separately)
# Usage: ansible-playbook ansible/playbooks/02-deploy-i2edge.yml

- name: Deploy i2edge using docker
  hosts: kind_cluster
  gather_facts: true
  vars:
    i2edge_path: "/home/{{ ansible_user }}/i2edge"

  pre_tasks:
    - name: Load group variables
      ansible.builtin.include_vars:
        file: "{{ playbook_dir }}/../group_vars/all.yml"

    - name: Update kubeconfig path for remote deployment
      ansible.builtin.set_fact:
        kubeconfig_output_dir: "/home/{{ ansible_user }}/kind-cluster-config"
      when: deployment_mode is defined and deployment_mode == 'remote'

    - name: Set i2edge paths for deployment mode
      ansible.builtin.set_fact:
        local_i2edge_path: "{{ i2edge_base_path }}"
        remote_i2edge_path: "/home/{{ ansible_user }}/i2edge"

    - name: Update i2edge_path for remote deployment
      ansible.builtin.set_fact:
        i2edge_path: "{{ remote_i2edge_path }}"
      when: deployment_mode is defined and deployment_mode == 'remote'

    - name: Display playbook information
      ansible.builtin.debug:
        msg: |
          ==========================================
          Deploying i2edge Application
          ==========================================

          Cluster: {{ kind_cluster_name | default('operator-platform') }}
          Local i2edge path: {{ local_i2edge_path }}
          Remote i2edge path: {{ remote_i2edge_path }}
          Deployment mode: {{ deployment_mode | default('local') }}

          Note: This playbook only deploys i2edge.
          Dependencies (Helm, Prometheus, NFD) must be installed separately.
          ==========================================

    - name: Verify Kind cluster exists
      ansible.builtin.command: kubectl --kubeconfig={{ kubeconfig_output_dir }}/{{ kubeconfig_filename }} cluster-info
      changed_when: false
      register: cluster_check
      failed_when: cluster_check.rc != 0

    - name: Display cluster information
      ansible.builtin.debug:
        msg: " Cluster is accessible: {{ cluster_check.stdout_lines[0] }}"

    - name: Get cluster nodes
      ansible.builtin.command: kubectl --kubeconfig={{ kubeconfig_output_dir }}/{{ kubeconfig_filename }} get nodes
      register: cluster_nodes
      changed_when: false
      changed_when: false

    - name: Display cluster nodes
      ansible.builtin.debug:
        msg: "{{ cluster_nodes.stdout_lines }}"

    - name: (TMP) Check if rsync is installed
      ansible.builtin.command: which rsync
      register: rsync_check
      failed_when: false
      changed_when: false

    - name: (TMP) Install rsync
      ansible.builtin.apt:
        name: rsync
        state: present
      become: true
      when: rsync_check.rc != 0

    - name: (TMP) Ensure i2edge parent directory exists
      ansible.builtin.file:
        path: "{{ remote_i2edge_path | dirname }}"
        state: directory
        mode: "0755"
        owner: "{{ ansible_user }}"
        group: "{{ ansible_user }}"
      become: true

    - name: (TMP) Create archive of i2edge code locally
      delegate_to: localhost
      run_once: true
      ansible.builtin.command: >
        tar -czf /tmp/i2edge.tar.gz -C {{ local_i2edge_path | dirname }} {{ local_i2edge_path | basename }}
      changed_when: false
      # noqa: command-instead-of-module run-once[task]

    - name: (TMP) Unarchive i2edge code on VM
      ansible.builtin.unarchive:
        src: /tmp/i2edge.tar.gz
        dest: "{{ remote_i2edge_path | dirname }}"
        mode: "0755"
        owner: "{{ ansible_user }}"
        group: "{{ ansible_user }}"

  roles:
    - role: i2edge
      vars:
        i2edge_state: present
      tags: ["i2edge", "application"]

  post_tasks:
    - name: Get i2edge NodePort
      ansible.builtin.command: >
        kubectl get svc -n {{ i2edge_namespace | default('i2edge') }} i2edge
        -o jsonpath='{.spec.ports[0].nodePort}'
      register: i2edge_nodeport_final
      changed_when: false
      failed_when: false
      environment:
        KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}"
      tags: ["i2edge", "application"]

    - name: Display deployment summary
      ansible.builtin.debug:
        msg: |
          ==========================================
          ✓ i2edge deployment completed!
          ==========================================

          Deployed components:
            ✓ i2edge Application
              - Namespace: {{ i2edge_namespace | default('i2edge') }}
              - NodePort: {{ i2edge_nodeport_final.stdout if i2edge_nodeport_final.rc == 0 else 'N/A' }}

          Access i2edge:
            API: http://{{ kubeconfig_server_host }}:{{ i2edge_nodeport_final.stdout }}
            Swagger UI: http://{{ kubeconfig_server_host }}:{{ i2edge_nodeport_final.stdout }}/docs

          Access Monitoring (if dependencies installed):
            Prometheus: http://{{ kubeconfig_server_host }}:{{ prometheus_nodeport | default('30090') }}
            Grafana: http://{{ kubeconfig_server_host }}:{{ grafana_nodeport | default('30091') }}
            Alertmanager: http://{{ kubeconfig_server_host }}:{{ alertmanager_nodeport | default('30092') }}

          Useful commands:
            # Check i2edge status
            kubectl get pods -n {{ i2edge_namespace | default('i2edge') }}
            
            # View i2edge logs
            kubectl logs -n {{ i2edge_namespace | default('i2edge') }} deployment/i2edge -f
            
            # Access i2edge shell
            kubectl exec -it -n {{ i2edge_namespace | default('i2edge') }} deployment/i2edge -- /bin/bash

          Configuration files:
            Kubeconfig: {{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}
          ==========================================
      when: i2edge_nodeport_final.rc == 0
      tags: ["always"]

    - name: Display deployment summary (without i2edge port)
      ansible.builtin.debug:
        msg: |
          ==========================================
          ✓ Deployment completed!
          ==========================================

          Note: i2edge NodePort not yet available
          Check status with: kubectl get svc -n {{ i2edge_namespace | default('i2edge') }}
          ==========================================
      when: i2edge_nodeport_final.rc != 0
      tags: ["always"]
+13 −0
Original line number Original line Diff line number Diff line
---
# Playbook: Full Deployment Scenario
# Description: Deploys the complete Operator Platform environment
# Usage: ansible-playbook playbooks/scenarios/full-deployment.yml

- import_playbook: ../tools/kind-cluster/deploy.yml
- import_playbook: ../tools/harbor/deploy.yml
- import_playbook: ../tools/i2edge/install-dependencies.yml
- import_playbook: ../tools/i2edge/deploy.yml
- import_playbook: ../tools/artefact-manager/deploy.yml
- import_playbook: ../tools/federation-manager/deploy.yml
- import_playbook: ../tools/federation-manager/deploy-remote.yml
- import_playbook: ../tools/homer/deploy.yml
+12 −0
Original line number Original line Diff line number Diff line
---
# Playbook: Graceful Full Undeployment Scenario
# Description: Undeploys the complete Operator Platform environment step-by-step
# Usage: ansible-playbook playbooks/scenarios/graceful-full-undeployment.yml

- import_playbook: ../tools/homer/undeploy.yml
- import_playbook: ../tools/federation-manager/undeploy-remote.yml
- import_playbook: ../tools/federation-manager/undeploy.yml
- import_playbook: ../tools/artefact-manager/undeploy.yml
- import_playbook: ../tools/i2edge/undeploy.yml
- import_playbook: ../tools/harbor/undeploy.yml
- import_playbook: ../tools/kind-cluster/undeploy.yml
+6 −0
Original line number Original line Diff line number Diff line
---
# Playbook: Quick Undeployment Scenario
# Description: Quickly destroys the entire environment by deleting the Kind cluster
# Usage: ansible-playbook playbooks/scenarios/quick-undeployment.yml

- import_playbook: ../tools/kind-cluster/undeploy.yml
+2 −2
Original line number Original line Diff line number Diff line
---
---
# Playbook: Deploy Artefact Manager
# Playbook: Deploy Artefact Manager
# Description: Deploys Artefact Manager to the Kind cluster
# Description: Deploys Artefact Manager to the Kind cluster
# Usage: ansible-playbook playbooks/03-deploy-artefact-manager.yml
# Usage: ansible-playbook playbooks/tools/artefact-manager/deploy.yml


- name: Deploy Artefact Manager to Kind Cluster
- name: Deploy Artefact Manager to Kind Cluster
  hosts: kind_cluster
  hosts: kind_cluster
@@ -10,7 +10,7 @@
  pre_tasks:
  pre_tasks:
    - name: Load group variables
    - name: Load group variables
      ansible.builtin.include_vars:
      ansible.builtin.include_vars:
        file: "{{ playbook_dir }}/../group_vars/all.yml"
        file: "{{ playbook_dir }}/../../../group_vars/all.yml"


    - name: Update kubeconfig path for remote deployment
    - name: Update kubeconfig path for remote deployment
      ansible.builtin.set_fact:
      ansible.builtin.set_fact:
Loading