diff --git a/.zuul.yaml b/.zuul.yaml index 0ae2ac5dd..a296caac0 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -101,6 +101,7 @@ - tools/gate/playbooks/osh-infra-build.yaml - tools/gate/playbooks/osh-infra-deploy-k8s.yaml run: tools/gate/playbooks/osh-infra-deploy-charts.yaml + post-run: tools/gate/playbooks/osh-infra-collect-logs.yaml - job: name: openstack-helm-infra-ubuntu diff --git a/kube-state-metrics/templates/service-controller-manager.yaml b/kube-state-metrics/templates/service-controller-manager.yaml index 47ccd24c7..a3fcecf6a 100644 --- a/kube-state-metrics/templates/service-controller-manager.yaml +++ b/kube-state-metrics/templates/service-controller-manager.yaml @@ -23,7 +23,7 @@ kind: Service metadata: name: kube-controller-manager-discovery labels: - component: kube-controller-manager +{{ tuple $envAll "controller-manager" "metrics" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }} annotations: {{ tuple $endpoint $envAll | include "helm-toolkit.snippets.prometheus_service_annotations" | indent 4 }} spec: diff --git a/kube-state-metrics/templates/service-kube-metrics.yaml b/kube-state-metrics/templates/service-kube-metrics.yaml index 9ea5d9168..c361413e5 100644 --- a/kube-state-metrics/templates/service-kube-metrics.yaml +++ b/kube-state-metrics/templates/service-kube-metrics.yaml @@ -22,6 +22,8 @@ apiVersion: v1 kind: Service metadata: name: {{ tuple "kube_metrics" "internal" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }} + labels: +{{ tuple $envAll "kube-state-metrics" "metrics" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }} annotations: {{ tuple $endpoint $envAll | include "helm-toolkit.snippets.prometheus_service_annotations" | indent 4 }} spec: diff --git a/kube-state-metrics/templates/service-scheduler.yaml b/kube-state-metrics/templates/service-scheduler.yaml index 7b47e9c0d..2b2e6c8d8 100644 --- a/kube-state-metrics/templates/service-scheduler.yaml +++ b/kube-state-metrics/templates/service-scheduler.yaml @@ -23,7 +23,7 @@ kind: Service metadata: name: kube-scheduler-discovery labels: - component: kube-scheduler +{{ tuple $envAll "kube-scheduler" "metrics" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }} annotations: {{ tuple $endpoint $envAll | include "helm-toolkit.snippets.prometheus_service_annotations" | indent 4 }} spec: diff --git a/node-exporter/templates/service.yaml b/node-exporter/templates/service.yaml index 9568c544a..6eeec9012 100644 --- a/node-exporter/templates/service.yaml +++ b/node-exporter/templates/service.yaml @@ -22,7 +22,8 @@ apiVersion: v1 kind: Service metadata: name: {{ tuple "node_metrics" "internal" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }} - namespace: {{ .Values.endpoints.node_metrics.namespace }} + labels: +{{ tuple $envAll "node_exporter" "metrics" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }} annotations: {{ tuple $endpoint $envAll | include "helm-toolkit.snippets.prometheus_service_annotations" | indent 4 }} spec: diff --git a/prometheus/templates/service.yaml b/prometheus/templates/service.yaml index b28de8f95..5caa57713 100644 --- a/prometheus/templates/service.yaml +++ b/prometheus/templates/service.yaml @@ -22,6 +22,8 @@ apiVersion: v1 kind: Service metadata: name: {{ tuple "monitoring" "internal" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }} + labels: +{{ tuple $envAll "prometheus" "metrics" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }} annotations: {{ tuple $endpoint $envAll | include "helm-toolkit.snippets.prometheus_service_annotations" | indent 4 }} spec: diff --git a/tools/gate/chart-deploys/default.yaml b/tools/gate/chart-deploys/default.yaml index 63255391f..3fb79c097 100644 --- a/tools/gate/chart-deploys/default.yaml +++ b/tools/gate/chart-deploys/default.yaml @@ -135,7 +135,7 @@ charts: timeout: 300 test: enabled: true - timeout: 300 + timeout: 600 output: false values: storage: diff --git a/tools/gate/devel/start.sh b/tools/gate/devel/start.sh index 2fc43d204..7e4261aa9 100755 --- a/tools/gate/devel/start.sh +++ b/tools/gate/devel/start.sh @@ -70,7 +70,7 @@ elif [ "x${DEPLOY}" == "xcharts" ]; then PLAYBOOKS="osh-infra-deploy-charts" elif [ "x${DEPLOY}" == "xfull" ]; then ansible_install - PLAYBOOKS="osh-infra-docker osh-infra-build osh-infra-deploy-k8s osh-infra-deploy-charts" + PLAYBOOKS="osh-infra-docker osh-infra-build osh-infra-deploy-k8s osh-infra-deploy-charts osh-infra-collect-logs" else echo "Unknown Deploy Option Selected" exit 1 diff --git a/tools/gate/playbooks/deploy-helm-packages/tasks/main.yaml b/tools/gate/playbooks/deploy-helm-packages/tasks/main.yaml index efa7c4005..779c4008e 100644 --- a/tools/gate/playbooks/deploy-helm-packages/tasks/main.yaml +++ b/tools/gate/playbooks/deploy-helm-packages/tasks/main.yaml @@ -12,6 +12,11 @@ - include: generate-dynamic-over-rides.yaml +- name: "creating directory for helm test logs" + file: + path: "{{ logs_dir }}/helm-tests" + state: directory + - name: "iterating through Helm chart groups" vars: chart_group_name: "{{ helm_chart_group.name }}" diff --git a/tools/gate/playbooks/deploy-helm-packages/tasks/util-common-helm-test.yaml b/tools/gate/playbooks/deploy-helm-packages/tasks/util-common-helm-test.yaml index b6f264da6..a926946b1 100644 --- a/tools/gate/playbooks/deploy-helm-packages/tasks/util-common-helm-test.yaml +++ b/tools/gate/playbooks/deploy-helm-packages/tasks/util-common-helm-test.yaml @@ -39,12 +39,14 @@ debug: var: test_result.stdout_lines - - name: "gathering logs for successful helm tests for {{ release }}" + - name: "gathering logs for helm tests for {{ release }}" when: - test_result | succeeded - - "'output' in test_settings" - - "test_settings.output|bool == true" - command: "kubectl logs {{ release }}-test -n {{ namespace }}" + shell: |- + set -e + kubectl logs {{ release }}-test -n {{ namespace }} >> {{ logs_dir }}/helm-tests/{{ release }}.txt + args: + executable: /bin/bash register: test_logs - name: "displaying logs for successful helm tests for {{ release }}" diff --git a/tools/gate/playbooks/describe-kubernetes-resources/tasks/main.yaml b/tools/gate/playbooks/describe-kubernetes-resources/tasks/main.yaml new file mode 100644 index 000000000..44ca9a9b0 --- /dev/null +++ b/tools/gate/playbooks/describe-kubernetes-resources/tasks/main.yaml @@ -0,0 +1,47 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: "Gather all deployed namespaces" + shell: |- + set -e + kubectl get namespaces -o json | jq -r '.items[].metadata.name' + args: + executable: /bin/bash + register: namespaces + +- name: "Gathering descriptions for namespaced objects" + include: util-namespace-describe.yaml + vars: + namespace: "{{ namespace }}" + loop_control: + loop_var: namespace + with_items: "{{ namespaces.stdout_lines }}" + + +- name: "Gathering descriptions for cluster scoped objects" + include: util-common-cluster-describe.yaml + vars: + cluster_object: "{{ cluster_object }}" + loop_control: + loop_var: cluster_object + with_items: + - node + - clusterrole + - clusterrolebinding + - storageclass + +- name: "Downloads logs to executor" + synchronize: + src: "{{ logs_dir }}/resources" + dest: "{{ zuul.executor.log_root }}/{{ inventory_hostname }}" + mode: pull + ignore_errors: yes diff --git a/tools/gate/playbooks/describe-kubernetes-resources/tasks/util-common-cluster-describe.yaml b/tools/gate/playbooks/describe-kubernetes-resources/tasks/util-common-cluster-describe.yaml new file mode 100644 index 000000000..536c811b0 --- /dev/null +++ b/tools/gate/playbooks/describe-kubernetes-resources/tasks/util-common-cluster-describe.yaml @@ -0,0 +1,37 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: Kubectl describe cluster scoped objects common block + vars: + cluster_object: null + + block: + - name: "creating directory for {{ cluster_object }} descriptions" + file: path="{{ logs_dir }}/resources/{{ cluster_object }}" state=directory + + - name: "gathering names of {{ cluster_object }}s currently deployed" + shell: |- + set -e + kubectl get {{ cluster_object }} -o json | jq -r '.items[].metadata.name' + args: + executable: /bin/bash + register: resource_names + + - name: "getting descriptions of {{ cluster_object }}s deployed" + shell: |- + set -e + kubectl describe {{ cluster_object }} {{ object_name }} > {{ logs_dir }}/resources/{{ cluster_object }}/{{ object_name }}.yaml + args: + executable: /bin/bash + loop_control: + loop_var: object_name + with_items: "{{ resource_names.stdout_lines }}" diff --git a/tools/gate/playbooks/describe-kubernetes-resources/tasks/util-common-namespace-describe.yaml b/tools/gate/playbooks/describe-kubernetes-resources/tasks/util-common-namespace-describe.yaml new file mode 100644 index 000000000..94322fee0 --- /dev/null +++ b/tools/gate/playbooks/describe-kubernetes-resources/tasks/util-common-namespace-describe.yaml @@ -0,0 +1,41 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: Kubectl describe namespaced object common block + vars: + api_object: null + object_namespace: null + + block: + - name: "creating directory for {{ api_object }} descriptions in {{ object_namespace }} namespace" + file: + path: "{{ logs_dir }}/resources/{{ object_namespace }}/{{ api_object }}" + state: directory + + - name: "gathering names of {{ api_object }}s currently deployed in {{ object_namespace }} namespace" + shell: |- + set -e + kubectl get {{ api_object }} --namespace={{ object_namespace }} -o json | jq -r '.items[].metadata.name' + args: + executable: /bin/bash + register: namespaced_resource_names + + - name: "getting descriptions of {{ api_object }}s deployed in {{ object_namespace }} namespace" + when: namespaced_resource_names + shell: |- + set -e + kubectl describe {{ api_object }} {{ resource_name }} --namespace={{ object_namespace }} > {{ logs_dir }}/resources/{{ object_namespace }}/{{ api_object }}/{{ resource_name }}.yaml + args: + executable: /bin/bash + loop_control: + loop_var: resource_name + with_items: "{{ namespaced_resource_names.stdout_lines }}" diff --git a/tools/gate/playbooks/describe-kubernetes-resources/tasks/util-namespace-describe.yaml b/tools/gate/playbooks/describe-kubernetes-resources/tasks/util-namespace-describe.yaml new file mode 100644 index 000000000..911dc52e3 --- /dev/null +++ b/tools/gate/playbooks/describe-kubernetes-resources/tasks/util-namespace-describe.yaml @@ -0,0 +1,34 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: Kubectl describe all namespaced objects common block + vars: + api_objects: + - pod + - service + - pvc + - deployment + - statefulset + - daemonset + - serviceaccount + - endpoints + namespace: null + + block: + - name: "Describe all {{ api_object }} objects in {{ namespace }} namespace" + vars: + object_namespace: "{{ namespace }}" + api_object: "{{ api_object }}" + loop_control: + loop_var: api_object + include: util-common-namespace-describe.yaml + with_items: "{{ api_objects }}" diff --git a/tools/gate/playbooks/gather-pod-logs/tasks/main.yaml b/tools/gate/playbooks/gather-pod-logs/tasks/main.yaml new file mode 100644 index 000000000..3928be0fa --- /dev/null +++ b/tools/gate/playbooks/gather-pod-logs/tasks/main.yaml @@ -0,0 +1,38 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: "creating directory for pod logs" + file: + path: "{{ logs_dir }}/pod-logs" + state: directory + +- name: "retrieve all deployed namespaces" + shell: |- + set -e + kubectl get namespaces -o json | jq -r '.items[].metadata.name' + args: + executable: /bin/bash + register: namespaces + +- include: util-container-logs.yaml + vars: + namespace: "{{ namespace }}" + loop_control: + loop_var: namespace + with_items: "{{ namespaces.stdout_lines }}" + +- name: "Downloads logs to executor" + synchronize: + src: "{{ logs_dir }}/pod-logs" + dest: "{{ zuul.executor.log_root }}/{{ inventory_hostname }}" + mode: pull + ignore_errors: True diff --git a/tools/gate/playbooks/gather-pod-logs/tasks/util-common-gather-logs.yaml b/tools/gate/playbooks/gather-pod-logs/tasks/util-common-gather-logs.yaml new file mode 100644 index 000000000..aeeaca20c --- /dev/null +++ b/tools/gate/playbooks/gather-pod-logs/tasks/util-common-gather-logs.yaml @@ -0,0 +1,56 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: Gather pod container logs common block + vars: + pod: null + + block: + - name: "Gather list of init containers in {{ pod }} pod in {{ namespace }} namespace" + shell: |- + set -e + kubectl get pod {{ pod }} -n {{ namespace }} -o json | jq -r '.spec.initContainers[].name' + args: + executable: /bin/bash + register: init_container_names + ignore_errors: True + + - name: "Gather logs from all init containers in pod {{ pod }}" + shell: |- + set -e + kubectl logs {{ pod }} -n {{ namespace }} -c {{ init_container }} >> {{ logs_dir }}/pod-logs/{{ namespace }}-{{ pod }}-{{ init_container }}.txt + args: + executable: /bin/bash + loop_control: + loop_var: init_container + with_items: "{{ init_container_names.stdout_lines }}" + ignore_errors: True + + - name: "Gather list of containers in {{ pod }} pod in {{ namespace }} namespace" + shell: |- + set -e + kubectl get pod {{ pod }} -n {{ namespace }} -o json | jq -r '.spec.containers[].name' + args: + executable: /bin/bash + register: container_names + ignore_errors: True + + - name: "Gather logs from all containers in pod {{ pod }}" + shell: |- + set -e + kubectl logs {{ pod }} -n {{ namespace }} -c {{ container }} >> {{ logs_dir }}/pod-logs/{{ namespace }}-{{ pod }}-{{ container }}.txt + args: + executable: /bin/bash + loop_control: + loop_var: container + with_items: "{{ container_names.stdout_lines }}" + ignore_errors: True diff --git a/tools/gate/playbooks/gather-pod-logs/tasks/util-container-logs.yaml b/tools/gate/playbooks/gather-pod-logs/tasks/util-container-logs.yaml new file mode 100644 index 000000000..7c1a248e2 --- /dev/null +++ b/tools/gate/playbooks/gather-pod-logs/tasks/util-container-logs.yaml @@ -0,0 +1,44 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: Gather container logs common block + vars: + namespace: null + + block: + - name: "Gather list of pods in {{ namespace }} namespace" + shell: |- + set -e + kubectl get pods -n {{ namespace }} -o json | jq -r '.items[].metadata.name' + args: + executable: /bin/bash + register: pod_names + ignore_errors: True + + - include: util-common-gather-logs.yaml + vars: + pod: "{{ pod_name }}" + loop_control: + loop_var: pod_name + with_items: "{{ pod_names.stdout_lines }}" diff --git a/tools/gate/playbooks/gather-prom-metrics/tasks/main.yaml b/tools/gate/playbooks/gather-prom-metrics/tasks/main.yaml new file mode 100644 index 000000000..90f3a8617 --- /dev/null +++ b/tools/gate/playbooks/gather-prom-metrics/tasks/main.yaml @@ -0,0 +1,57 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: "creating directory for helm release descriptions" + file: + path: "{{ logs_dir }}/prometheus" + state: directory + +- name: "get exporter services in kube-system namespace" + shell: |- + set -e + kubectl get svc -l component=metrics -n kube-system -o json \ + | jq -r '.items[].metadata.name' + args: + executable: /bin/bash + register: kube_system_exporters + +- include: util-common-prom-metrics.yaml + vars: + exporter: "{{ kube_system_exporter }}" + namespace: kube-system + loop_control: + loop_var: kube_system_exporter + with_items: "{{ kube_system_exporters.stdout_lines }}" + +- name: "get exporter services in openstack namespace" + shell: |- + set -e + kubectl get svc -l component=metrics -n openstack -o json \ + | jq -r '.items[].metadata.name' + args: + executable: /bin/bash + register: openstack_exporters + +- include: util-common-prom-metrics.yaml + vars: + exporter: "{{ openstack_exporter }}" + namespace: openstack + loop_control: + loop_var: openstack_exporter + with_items: "{{ openstack_exporters.stdout_lines }}" + +- name: "Downloads logs to executor" + synchronize: + src: "{{ logs_dir }}/prometheus" + dest: "{{ zuul.executor.log_root }}/{{ inventory_hostname }}" + mode: pull + ignore_errors: True diff --git a/tools/gate/playbooks/gather-prom-metrics/tasks/util-common-prom-metrics.yaml b/tools/gate/playbooks/gather-prom-metrics/tasks/util-common-prom-metrics.yaml new file mode 100644 index 000000000..0fb4b50aa --- /dev/null +++ b/tools/gate/playbooks/gather-prom-metrics/tasks/util-common-prom-metrics.yaml @@ -0,0 +1,35 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: Gather prometheus exporter metrics common block + vars: + exporter: null + namespace: null + + block: + - name: "Get {{ exporter }} exporter service port" + shell: |- + set -e + kubectl get svc "{{ exporter }}" -n "{{ namespace }}" -o json \ + | jq -r '.spec.ports[].port' + args: + executable: /bin/bash + register: exporter_port + ignore_errors: True + + - name: "Gather metrics from {{ exporter }} exporter metrics port" + shell: |- + set -e + curl "{{ exporter }}"."{{ namespace }}":"{{ exporter_port.stdout }}"/metrics >> "{{ logs_dir }}"/prometheus/"{{ exporter }}".txt + args: + executable: /bin/bash + ignore_errors: True diff --git a/tools/gate/playbooks/helm-release-status/tasks/main.yaml b/tools/gate/playbooks/helm-release-status/tasks/main.yaml new file mode 100644 index 000000000..00fa514c9 --- /dev/null +++ b/tools/gate/playbooks/helm-release-status/tasks/main.yaml @@ -0,0 +1,38 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: "creating directory for helm release status" + file: + path: "{{ logs_dir }}/helm-releases" + state: directory + +- name: "Gathering release status in chart groups" + vars: + chart_group_name: "{{ helm_chart_group.name }}" + include: util-chart-group-releases.yaml + loop_control: + loop_var: helm_chart_group + with_items: "{{ chart_groups }}" + +- name: "Downloads helm release statuses to executor" + synchronize: + src: "{{ logs_dir }}/helm-releases" + dest: "{{ zuul.executor.log_root }}/{{ inventory_hostname }}" + mode: pull + ignore_errors: yes + +- name: "Download helm release test logs to executor" + synchronize: + src: "{{ logs_dir }}/helm-tests" + dest: "{{ zuul.executor.log_root }}/{{ inventory_hostname }}" + mode: pull + ignore_errors: yes diff --git a/tools/gate/playbooks/helm-release-status/tasks/util-chart-group-releases.yaml b/tools/gate/playbooks/helm-release-status/tasks/util-chart-group-releases.yaml new file mode 100644 index 000000000..7fddb3180 --- /dev/null +++ b/tools/gate/playbooks/helm-release-status/tasks/util-chart-group-releases.yaml @@ -0,0 +1,20 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: "Gathering release status for {{ helm_chart_group.name }} chart group" + vars: + release: "{{ charts[helm_chart].release }}" + namespace: "{{ charts[helm_chart].namespace }}" + loop_control: + loop_var: helm_chart + include: util-common-release-status.yaml + with_items: "{{ helm_chart_group.charts }}" diff --git a/tools/gate/playbooks/helm-release-status/tasks/util-common-release-status.yaml b/tools/gate/playbooks/helm-release-status/tasks/util-common-release-status.yaml new file mode 100644 index 000000000..42fade4b7 --- /dev/null +++ b/tools/gate/playbooks/helm-release-status/tasks/util-common-release-status.yaml @@ -0,0 +1,23 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: Helm release status common block + vars: + release: null + namespace: null + block: + - name: "describing the {{ release }} release" + shell: |- + helm status "{{ release }}" > "{{ logs_dir }}"/helm-releases/"{{ release }}".yaml + args: + executable: /bin/bash + ignore_errors: True diff --git a/tools/gate/playbooks/osh-infra-collect-logs.yaml b/tools/gate/playbooks/osh-infra-collect-logs.yaml new file mode 100644 index 000000000..0744ae3fc --- /dev/null +++ b/tools/gate/playbooks/osh-infra-collect-logs.yaml @@ -0,0 +1,58 @@ +# Copyright 2017 The Openstack-Helm Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- hosts: primary + vars_files: + - vars.yaml + - ../chart-deploys/default.yaml + vars: + work_dir: "{{ zuul.project.src_dir }}/{{ zuul_osh_infra_relative_path | default('') }}" + logs_dir: "/tmp/logs" + roles: + - helm-release-status + tags: + - helm-release-status + +- hosts: primary + vars_files: + - vars.yaml + vars: + work_dir: "{{ zuul.project.src_dir }}/{{ zuul_osh_infra_relative_path | default('') }}" + logs_dir: "/tmp/logs" + roles: + - describe-kubernetes-resources + tags: + - describe-kubernetes-resources + +- hosts: primary + vars_files: + - vars.yaml + vars: + work_dir: "{{ zuul.project.src_dir }}/{{ zuul_osh_infra_relative_path | default('') }}" + logs_dir: "/tmp/logs" + roles: + - gather-pod-logs + tags: + - gather-pod-logs + +- hosts: primary + vars_files: + - vars.yaml + vars: + work_dir: "{{ zuul.project.src_dir }}/{{ zuul_osh_infra_relative_path | default('') }}" + logs_dir: "/tmp/logs" + roles: + - gather-prom-metrics + tags: + - gather-prom-metrics diff --git a/tools/gate/playbooks/osh-infra-deploy-charts.yaml b/tools/gate/playbooks/osh-infra-deploy-charts.yaml index bc66ca0b7..b991e9e46 100644 --- a/tools/gate/playbooks/osh-infra-deploy-charts.yaml +++ b/tools/gate/playbooks/osh-infra-deploy-charts.yaml @@ -29,6 +29,7 @@ - ../chart-deploys/default.yaml vars: work_dir: "{{ zuul.project.src_dir }}/{{ zuul_osh_infra_relative_path | default('') }}" + logs_dir: "/tmp/logs" roles: - deploy-helm-packages tags: