|
| 1 | +--- |
| 2 | +- name: Manage SRE and FinOps Incident Environment Tool Stack |
| 3 | + hosts: |
| 4 | + - environment |
| 5 | + pre_tasks: |
| 6 | + - name: Import system role |
| 7 | + ansible.builtin.import_role: |
| 8 | + name: system |
| 9 | + tags: |
| 10 | + - always |
| 11 | + vars: |
| 12 | + system_cluster: |
| 13 | + kubeconfig: "{{ cluster.kubeconfig }}" |
| 14 | + |
| 15 | + - name: Validate that storage is configured |
| 16 | + ansible.builtin.assert: |
| 17 | + that: "storage.local is defined or storage.s3 is defined" |
| 18 | + fail_msg: Storage has not been configured. Please assign either local or s3 bucket storage. |
| 19 | + success_msg: Storage is configured. |
| 20 | + tasks: |
| 21 | + - name: Include Helm Release variables from tools role |
| 22 | + ansible.builtin.include_vars: |
| 23 | + file: ../roles/tools/defaults/main/helm_releases.yaml |
| 24 | + |
| 25 | + - name: Get Service object for the Ingress controller |
| 26 | + kubernetes.core.k8s_info: |
| 27 | + api_version: v1 |
| 28 | + kind: Service |
| 29 | + name: "{{ tools_helm_releases.ingress.name }}" |
| 30 | + namespace: "{{ tools_helm_releases.ingress.namespace }}" |
| 31 | + kubeconfig: "{{ cluster.kubeconfig }}" |
| 32 | + wait: true |
| 33 | + register: service_info |
| 34 | + until: |
| 35 | + - service_info.resources[0].status.loadBalancer.ingress is defined |
| 36 | + delay: 15 |
| 37 | + retries: 12 |
| 38 | + |
| 39 | + - name: Extract the Ingress hostname information |
| 40 | + ansible.builtin.set_fact: |
| 41 | + ingress_hostname: "{{ service_info.resources[0].status.loadBalancer.ingress[0].hostname }}" |
| 42 | + when: |
| 43 | + - service_info.resources[0].status.loadBalancer.ingress | length > 0 |
| 44 | + - service_info.resources[0].status.loadBalancer.ingress[0].hostname is defined |
| 45 | + |
| 46 | + - name: Copy restricted kubeconfig into temporary directory from S3 bucket |
| 47 | + amazon.aws.s3_object: |
| 48 | + endpoint_url: "{{ storage.s3.endpoint }}" |
| 49 | + bucket: "{{ storage.s3.bucket }}" |
| 50 | + object: "/{{ storage.s3.directory }}/kubeconfig" |
| 51 | + dest: /tmp/kubeconfig |
| 52 | + mode: get |
| 53 | + register: bucket_retrieval_result |
| 54 | + until: |
| 55 | + - bucket_retrieval_result.contents != "" |
| 56 | + retries: 3 |
| 57 | + delay: 60 |
| 58 | + when: |
| 59 | + - storage.s3 is defined |
| 60 | + |
| 61 | + - name: Copy restricted kubeconfig into temporary directory from local directory |
| 62 | + ansible.builtin.copy: |
| 63 | + dest: /tmp/kubeconfig |
| 64 | + mode: "0644" |
| 65 | + src: "{{ storage.local.directory }}/kubeconfig" |
| 66 | + when: |
| 67 | + - storage.local is defined |
| 68 | + |
| 69 | + - name: Print agent bundle |
| 70 | + ansible.builtin.debug: |
| 71 | + msg: | |
| 72 | + {{ |
| 73 | + { |
| 74 | + "prometheus_url": "http://" + ingress_hostname + "/prometheus", |
| 75 | + "kubeconfig": lookup("ansible.builtin.file", "/tmp/kubeconfig") |
| 76 | + } |
| 77 | + }} |
| 78 | + vars: |
| 79 | + restricted_kubeconfig_exists: "{{ '/tmp/kubeconfig' is exists }}" |
| 80 | + when: |
| 81 | + - ingress_hostname is defined |
| 82 | + - restricted_kubeconfig_exists |
0 commit comments