Loading ansible/automation/1-kind-cluster/kind-config.yaml +10 −0 Original line number Diff line number Diff line Loading @@ -13,26 +13,36 @@ nodes: - "127.0.0.1" - "10.69.222.3" extraPortMappings: # API Server - containerPort: 6443 hostPort: 6443 listenAddress: "0.0.0.0" protocol: TCP # Prometheus - containerPort: 30090 hostPort: 30090 listenAddress: "0.0.0.0" protocol: TCP # Grafana - containerPort: 30091 hostPort: 30091 listenAddress: "0.0.0.0" protocol: TCP # Alertmanager - containerPort: 30092 hostPort: 30092 listenAddress: "0.0.0.0" protocol: TCP # i2edge - containerPort: 30769 hostPort: 30769 listenAddress: "0.0.0.0" protocol: TCP # Federation Manager - containerPort: 30081 hostPort: 30081 listenAddress: "0.0.0.0" protocol: TCP - role: worker - role: worker containerdConfigPatches: Loading ansible/group_vars/all.yml +34 −8 Original line number Diff line number Diff line Loading @@ -27,41 +27,67 @@ harbor_http_nodeport: 30002 harbor_https_nodeport: 30003 i2edge_nodeport: 30769 artefact_manager_nodeport: 30080 federation_manager_nodeport: 30081 keycloak_nodeport: 30082 mongodb_nodeport: 30017 # Port mappings - using parameterized NodePorts to avoid duplication port_mappings: - container_port: "{{ api_server_port }}" - name: "API Server" container_port: "{{ api_server_port }}" host_port: "{{ api_server_port }}" listen_address: "{{ api_server_address }}" protocol: TCP - container_port: "{{ prometheus_nodeport }}" - name: "Prometheus" container_port: "{{ prometheus_nodeport }}" host_port: "{{ prometheus_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - container_port: "{{ grafana_nodeport }}" - name: "Grafana" container_port: "{{ grafana_nodeport }}" host_port: "{{ grafana_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - container_port: "{{ alertmanager_nodeport }}" - name: "Alertmanager" container_port: "{{ alertmanager_nodeport }}" host_port: "{{ alertmanager_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - container_port: "{{ harbor_http_nodeport }}" - name: "Harbor HTTP" container_port: "{{ harbor_http_nodeport }}" host_port: "{{ harbor_http_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - container_port: "{{ harbor_https_nodeport }}" - name: "Harbor HTTPS" container_port: "{{ harbor_https_nodeport }}" host_port: "{{ harbor_https_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - container_port: "{{ i2edge_nodeport }}" - name: "i2edge" container_port: "{{ i2edge_nodeport }}" host_port: "{{ i2edge_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - container_port: "{{ artefact_manager_nodeport }}" - name: "Artefact Manager" container_port: "{{ artefact_manager_nodeport }}" host_port: "{{ artefact_manager_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - name: "Federation Manager" container_port: "{{ federation_manager_nodeport }}" host_port: "{{ federation_manager_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - name: "Keycloak" container_port: "{{ keycloak_nodeport }}" host_port: "{{ keycloak_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - name: "MongoDB" container_port: "{{ mongodb_nodeport }}" host_port: "{{ mongodb_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP # Cluster nodes configuration control_plane_nodes: 1 Loading ansible/playbooks/04-deploy-federation-manager.yml 0 → 100644 +21 −0 Original line number Diff line number Diff line --- # Playbook: Deploy Federation Manager # Description: Deploys Federation Manager to the Kind cluster # Usage: ansible-playbook playbooks/04-deploy-federation-manager.yml - name: Deploy Federation Manager to Kind Cluster hosts: kind_cluster gather_facts: true 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' roles: - role: federation-manager ansible/roles/federation-manager/defaults/main.yml 0 → 100644 +48 −0 Original line number Diff line number Diff line --- federation_manager_image: "labs.etsi.org:5050/oop/code/federation-manager/federation-manager" federation_manager_tag: "latest" federation_manager_namespace: "federation-manager" federation_manager_replicas: 1 federation_manager_container_port: 8989 federation_manager_nodeport: 30081 # Keycloak Configuration keycloak_image: "quay.io/keycloak/keycloak" keycloak_tag: "26.1.4" keycloak_nodeport: 30082 federation_manager_keycloak_host: "keycloak" federation_manager_keycloak_port: 8080 federation_manager_keycloak_client1_id: "originating-op-1" federation_manager_keycloak_client1_secret: "dd7vNwFqjNpYwaghlEwMbw10g0klWDHb" federation_manager_keycloak_client2_id: "originating-op-2" federation_manager_keycloak_client2_secret: "2mhznERfWclLDuVojY77Lp4Qd2r4e8Ms" federation_manager_keycloak_scope: "fed-mgmt" keycloak_admin_user: "admin" keycloak_admin_password: "admin" # MongoDB Configuration mongodb_image: "mongo" mongodb_tag: "6.0" mongodb_nodeport: 30017 federation_manager_mongodb_host: "mongodb" federation_manager_mongodb_port: 27017 mongodb_data_dir: "/tmp/db" # Operator Platform Data federation_manager_op_id: "i2cat" federation_manager_op_country_code: "ES" federation_manager_op_mcc: "001" federation_manager_op_mnc: "01" federation_manager_op_fixed_network_code: "34" federation_manager_op_platform_caps: "homeRouting" # Edge Cloud Platform (i2edge) federation_manager_ecp_host: "i2edge" federation_manager_ecp_port: 30769 federation_manager_ecp_client_name: "i2edge" federation_manager_ecp_flavour_id: "default-flavour" # Artefact Manager federation_manager_am_host: "artefact-manager" federation_manager_am_port: 8000 federation_manager_am_enabled: "true" ansible/roles/federation-manager/tasks/main.yml 0 → 100644 +107 −0 Original line number Diff line number Diff line --- - name: Pull Federation Manager Docker image ansible.builtin.command: "docker pull --platform linux/amd64 {{ federation_manager_image }}:{{ federation_manager_tag }}" register: docker_pull changed_when: "'Downloaded newer image' in docker_pull.stdout" - name: Load Federation Manager image into Kind cluster ansible.builtin.command: "kind load docker-image {{ federation_manager_image }}:{{ federation_manager_tag }} --name {{ kind_cluster_name }}" register: kind_load changed_when: "'Image loaded' in kind_load.stdout" # - name: Pull MongoDB Docker image # ansible.builtin.command: "docker pull --platform linux/amd64 {{ mongodb_image }}:{{ mongodb_tag }}" # register: docker_pull_mongo # changed_when: "'Downloaded newer image' in docker_pull_mongo.stdout" # - name: Save MongoDB image to archive # ansible.builtin.command: "docker save -o /tmp/mongo.tar {{ mongodb_image }}:{{ mongodb_tag }}" # changed_when: false # - name: Load MongoDB image into Kind cluster # ansible.builtin.command: "kind load image-archive /tmp/mongo.tar --name {{ kind_cluster_name }}" # register: kind_load_mongo # changed_when: "'Image loaded' in kind_load_mongo.stdout" # - name: Remove MongoDB archive # ansible.builtin.file: # path: /tmp/mongo.tar # state: absent # - name: Pull Keycloak Docker image # ansible.builtin.command: "docker pull --platform linux/amd64 {{ keycloak_image }}:{{ keycloak_tag }}" # register: docker_pull_keycloak # changed_when: "'Downloaded newer image' in docker_pull_keycloak.stdout" # - name: Load Keycloak image into Kind cluster # ansible.builtin.command: "kind load docker-image {{ keycloak_image }}:{{ keycloak_tag }} --name {{ kind_cluster_name }}" # register: kind_load_keycloak # changed_when: "'Image loaded' in kind_load_keycloak.stdout" - name: Create Federation Manager namespace ansible.builtin.command: "kubectl create namespace {{ federation_manager_namespace }} --dry-run=client -o yaml" register: ns_manifest environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}" - name: Apply Federation Manager namespace ansible.builtin.command: "kubectl apply -f -" args: stdin: "{{ ns_manifest.stdout }}" changed_when: "'created' in ns_manifest.stdout" environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}" - name: Generate MongoDB manifest ansible.builtin.template: src: mongo-db.yaml.j2 dest: "/tmp/mongo-db.yaml" - name: Apply MongoDB manifest ansible.builtin.command: "kubectl apply -f /tmp/mongo-db.yaml" register: apply_mongo changed_when: "'created' in apply_mongo.stdout or 'configured' in apply_mongo.stdout" environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}" - name: Generate Keycloak manifest ansible.builtin.template: src: keycloak.yaml.j2 dest: "/tmp/keycloak.yaml" - name: Apply Keycloak manifest ansible.builtin.command: "kubectl apply -f /tmp/keycloak.yaml" register: apply_keycloak changed_when: "'created' in apply_keycloak.stdout or 'configured' in apply_keycloak.stdout" environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}" - name: Generate Federation Manager manifest ansible.builtin.template: src: federation-manager.yaml.j2 dest: "/tmp/federation-manager.yaml" - name: Apply Federation Manager manifest ansible.builtin.command: "kubectl apply -f /tmp/federation-manager.yaml" register: apply_manifest changed_when: "'created' in apply_manifest.stdout or 'configured' in apply_manifest.stdout" environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}" - name: Wait for MongoDB to be ready ansible.builtin.command: "kubectl wait --namespace {{ federation_manager_namespace }} --for=condition=ready pod --selector=app=mongodb --timeout=300s" changed_when: false environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}" - name: Wait for Keycloak to be ready ansible.builtin.command: "kubectl wait --namespace {{ federation_manager_namespace }} --for=condition=ready pod --selector=app=keycloak --timeout=300s" changed_when: false environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}" - name: Wait for Federation Manager to be ready ansible.builtin.command: "kubectl wait --namespace {{ federation_manager_namespace }} --for=condition=ready pod --selector=app=federation-manager --timeout=300s" changed_when: false environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}" Loading
ansible/automation/1-kind-cluster/kind-config.yaml +10 −0 Original line number Diff line number Diff line Loading @@ -13,26 +13,36 @@ nodes: - "127.0.0.1" - "10.69.222.3" extraPortMappings: # API Server - containerPort: 6443 hostPort: 6443 listenAddress: "0.0.0.0" protocol: TCP # Prometheus - containerPort: 30090 hostPort: 30090 listenAddress: "0.0.0.0" protocol: TCP # Grafana - containerPort: 30091 hostPort: 30091 listenAddress: "0.0.0.0" protocol: TCP # Alertmanager - containerPort: 30092 hostPort: 30092 listenAddress: "0.0.0.0" protocol: TCP # i2edge - containerPort: 30769 hostPort: 30769 listenAddress: "0.0.0.0" protocol: TCP # Federation Manager - containerPort: 30081 hostPort: 30081 listenAddress: "0.0.0.0" protocol: TCP - role: worker - role: worker containerdConfigPatches: Loading
ansible/group_vars/all.yml +34 −8 Original line number Diff line number Diff line Loading @@ -27,41 +27,67 @@ harbor_http_nodeport: 30002 harbor_https_nodeport: 30003 i2edge_nodeport: 30769 artefact_manager_nodeport: 30080 federation_manager_nodeport: 30081 keycloak_nodeport: 30082 mongodb_nodeport: 30017 # Port mappings - using parameterized NodePorts to avoid duplication port_mappings: - container_port: "{{ api_server_port }}" - name: "API Server" container_port: "{{ api_server_port }}" host_port: "{{ api_server_port }}" listen_address: "{{ api_server_address }}" protocol: TCP - container_port: "{{ prometheus_nodeport }}" - name: "Prometheus" container_port: "{{ prometheus_nodeport }}" host_port: "{{ prometheus_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - container_port: "{{ grafana_nodeport }}" - name: "Grafana" container_port: "{{ grafana_nodeport }}" host_port: "{{ grafana_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - container_port: "{{ alertmanager_nodeport }}" - name: "Alertmanager" container_port: "{{ alertmanager_nodeport }}" host_port: "{{ alertmanager_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - container_port: "{{ harbor_http_nodeport }}" - name: "Harbor HTTP" container_port: "{{ harbor_http_nodeport }}" host_port: "{{ harbor_http_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - container_port: "{{ harbor_https_nodeport }}" - name: "Harbor HTTPS" container_port: "{{ harbor_https_nodeport }}" host_port: "{{ harbor_https_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - container_port: "{{ i2edge_nodeport }}" - name: "i2edge" container_port: "{{ i2edge_nodeport }}" host_port: "{{ i2edge_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - container_port: "{{ artefact_manager_nodeport }}" - name: "Artefact Manager" container_port: "{{ artefact_manager_nodeport }}" host_port: "{{ artefact_manager_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - name: "Federation Manager" container_port: "{{ federation_manager_nodeport }}" host_port: "{{ federation_manager_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - name: "Keycloak" container_port: "{{ keycloak_nodeport }}" host_port: "{{ keycloak_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP - name: "MongoDB" container_port: "{{ mongodb_nodeport }}" host_port: "{{ mongodb_nodeport }}" listen_address: "{{ api_server_address }}" protocol: TCP # Cluster nodes configuration control_plane_nodes: 1 Loading
ansible/playbooks/04-deploy-federation-manager.yml 0 → 100644 +21 −0 Original line number Diff line number Diff line --- # Playbook: Deploy Federation Manager # Description: Deploys Federation Manager to the Kind cluster # Usage: ansible-playbook playbooks/04-deploy-federation-manager.yml - name: Deploy Federation Manager to Kind Cluster hosts: kind_cluster gather_facts: true 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' roles: - role: federation-manager
ansible/roles/federation-manager/defaults/main.yml 0 → 100644 +48 −0 Original line number Diff line number Diff line --- federation_manager_image: "labs.etsi.org:5050/oop/code/federation-manager/federation-manager" federation_manager_tag: "latest" federation_manager_namespace: "federation-manager" federation_manager_replicas: 1 federation_manager_container_port: 8989 federation_manager_nodeport: 30081 # Keycloak Configuration keycloak_image: "quay.io/keycloak/keycloak" keycloak_tag: "26.1.4" keycloak_nodeport: 30082 federation_manager_keycloak_host: "keycloak" federation_manager_keycloak_port: 8080 federation_manager_keycloak_client1_id: "originating-op-1" federation_manager_keycloak_client1_secret: "dd7vNwFqjNpYwaghlEwMbw10g0klWDHb" federation_manager_keycloak_client2_id: "originating-op-2" federation_manager_keycloak_client2_secret: "2mhznERfWclLDuVojY77Lp4Qd2r4e8Ms" federation_manager_keycloak_scope: "fed-mgmt" keycloak_admin_user: "admin" keycloak_admin_password: "admin" # MongoDB Configuration mongodb_image: "mongo" mongodb_tag: "6.0" mongodb_nodeport: 30017 federation_manager_mongodb_host: "mongodb" federation_manager_mongodb_port: 27017 mongodb_data_dir: "/tmp/db" # Operator Platform Data federation_manager_op_id: "i2cat" federation_manager_op_country_code: "ES" federation_manager_op_mcc: "001" federation_manager_op_mnc: "01" federation_manager_op_fixed_network_code: "34" federation_manager_op_platform_caps: "homeRouting" # Edge Cloud Platform (i2edge) federation_manager_ecp_host: "i2edge" federation_manager_ecp_port: 30769 federation_manager_ecp_client_name: "i2edge" federation_manager_ecp_flavour_id: "default-flavour" # Artefact Manager federation_manager_am_host: "artefact-manager" federation_manager_am_port: 8000 federation_manager_am_enabled: "true"
ansible/roles/federation-manager/tasks/main.yml 0 → 100644 +107 −0 Original line number Diff line number Diff line --- - name: Pull Federation Manager Docker image ansible.builtin.command: "docker pull --platform linux/amd64 {{ federation_manager_image }}:{{ federation_manager_tag }}" register: docker_pull changed_when: "'Downloaded newer image' in docker_pull.stdout" - name: Load Federation Manager image into Kind cluster ansible.builtin.command: "kind load docker-image {{ federation_manager_image }}:{{ federation_manager_tag }} --name {{ kind_cluster_name }}" register: kind_load changed_when: "'Image loaded' in kind_load.stdout" # - name: Pull MongoDB Docker image # ansible.builtin.command: "docker pull --platform linux/amd64 {{ mongodb_image }}:{{ mongodb_tag }}" # register: docker_pull_mongo # changed_when: "'Downloaded newer image' in docker_pull_mongo.stdout" # - name: Save MongoDB image to archive # ansible.builtin.command: "docker save -o /tmp/mongo.tar {{ mongodb_image }}:{{ mongodb_tag }}" # changed_when: false # - name: Load MongoDB image into Kind cluster # ansible.builtin.command: "kind load image-archive /tmp/mongo.tar --name {{ kind_cluster_name }}" # register: kind_load_mongo # changed_when: "'Image loaded' in kind_load_mongo.stdout" # - name: Remove MongoDB archive # ansible.builtin.file: # path: /tmp/mongo.tar # state: absent # - name: Pull Keycloak Docker image # ansible.builtin.command: "docker pull --platform linux/amd64 {{ keycloak_image }}:{{ keycloak_tag }}" # register: docker_pull_keycloak # changed_when: "'Downloaded newer image' in docker_pull_keycloak.stdout" # - name: Load Keycloak image into Kind cluster # ansible.builtin.command: "kind load docker-image {{ keycloak_image }}:{{ keycloak_tag }} --name {{ kind_cluster_name }}" # register: kind_load_keycloak # changed_when: "'Image loaded' in kind_load_keycloak.stdout" - name: Create Federation Manager namespace ansible.builtin.command: "kubectl create namespace {{ federation_manager_namespace }} --dry-run=client -o yaml" register: ns_manifest environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}" - name: Apply Federation Manager namespace ansible.builtin.command: "kubectl apply -f -" args: stdin: "{{ ns_manifest.stdout }}" changed_when: "'created' in ns_manifest.stdout" environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}" - name: Generate MongoDB manifest ansible.builtin.template: src: mongo-db.yaml.j2 dest: "/tmp/mongo-db.yaml" - name: Apply MongoDB manifest ansible.builtin.command: "kubectl apply -f /tmp/mongo-db.yaml" register: apply_mongo changed_when: "'created' in apply_mongo.stdout or 'configured' in apply_mongo.stdout" environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}" - name: Generate Keycloak manifest ansible.builtin.template: src: keycloak.yaml.j2 dest: "/tmp/keycloak.yaml" - name: Apply Keycloak manifest ansible.builtin.command: "kubectl apply -f /tmp/keycloak.yaml" register: apply_keycloak changed_when: "'created' in apply_keycloak.stdout or 'configured' in apply_keycloak.stdout" environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}" - name: Generate Federation Manager manifest ansible.builtin.template: src: federation-manager.yaml.j2 dest: "/tmp/federation-manager.yaml" - name: Apply Federation Manager manifest ansible.builtin.command: "kubectl apply -f /tmp/federation-manager.yaml" register: apply_manifest changed_when: "'created' in apply_manifest.stdout or 'configured' in apply_manifest.stdout" environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}" - name: Wait for MongoDB to be ready ansible.builtin.command: "kubectl wait --namespace {{ federation_manager_namespace }} --for=condition=ready pod --selector=app=mongodb --timeout=300s" changed_when: false environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}" - name: Wait for Keycloak to be ready ansible.builtin.command: "kubectl wait --namespace {{ federation_manager_namespace }} --for=condition=ready pod --selector=app=keycloak --timeout=300s" changed_when: false environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}" - name: Wait for Federation Manager to be ready ansible.builtin.command: "kubectl wait --namespace {{ federation_manager_namespace }} --for=condition=ready pod --selector=app=federation-manager --timeout=300s" changed_when: false environment: KUBECONFIG: "{{ kubeconfig_output_dir }}/{{ kubeconfig_filename }}"