From e53f52549a564c6993ccbde27c3e16d0f4ba2507 Mon Sep 17 00:00:00 2001 From: Andrii Ostapenko Date: Tue, 23 Feb 2021 18:22:47 -0600 Subject: [PATCH] Optimize pod logs and cluster object description gathering Don't gather logs for unavailable cluster that is always the case for ephemeral cluster in successful deployments. Cheap ~5 mins on each deployment. Change-Id: I32f84e9dadbad11fe92337cd0dc04870d1a0ff3e Signed-off-by: Andrii Ostapenko --- .../tasks/filter-contexts.yaml | 28 +++++++++++++++++++ .../tasks/get-contexts.yaml | 18 +++++++----- .../tasks/filter-contexts.yaml | 28 +++++++++++++++++++ .../tasks/get-contexts.yaml | 8 ++++-- 4 files changed, 72 insertions(+), 10 deletions(-) create mode 100644 roles/airship-gather-pod-logs/tasks/filter-contexts.yaml create mode 100644 roles/describe-kubernetes-objects/tasks/filter-contexts.yaml diff --git a/roles/airship-gather-pod-logs/tasks/filter-contexts.yaml b/roles/airship-gather-pod-logs/tasks/filter-contexts.yaml new file mode 100644 index 000000000..1cd7b174d --- /dev/null +++ b/roles/airship-gather-pod-logs/tasks/filter-contexts.yaml @@ -0,0 +1,28 @@ +# 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: "Try to reach {{ ctx_name }} cluster" + shell: |- + kubectl --kubeconfig {{ kubeconfig }} --context {{ ctx_name }} get ns + register: reachable + ignore_errors: true + +- debug: + msg: "{{ ctx_name }} is not reachable and won't be used for pod logs gathering" + when: reachable.rc != 0 + +- name: "Add {{ ctx_name }} to context list" + when: reachable.rc == 0 + set_fact: + kctl_context_list: "{{ kctl_context_list | default([]) + [ ctx_name ] }}" +... diff --git a/roles/airship-gather-pod-logs/tasks/get-contexts.yaml b/roles/airship-gather-pod-logs/tasks/get-contexts.yaml index 60886d83f..45ce5b360 100644 --- a/roles/airship-gather-pod-logs/tasks/get-contexts.yaml +++ b/roles/airship-gather-pod-logs/tasks/get-contexts.yaml @@ -10,11 +10,15 @@ # See the License for the specific language governing permissions and # limitations under the License. - - name: "Save kubeconfig contexts" - shell: |- - kubectl --kubeconfig {{ kubeconfig }} config get-contexts -o name - register: kctl_context_command +--- +- name: "Save kubeconfig contexts" + shell: |- + kubectl --kubeconfig {{ kubeconfig }} config get-contexts -o name + register: kctl_context_command - - name: "Save kubeconfig contexts to list" - set_fact: - kctl_context_list: "{{ kctl_context_command.stdout.split('\n') }}" +- name: "Save contexts for reachable clusters" + with_items: "{{ kctl_context_command.stdout.split('\n') }}" + loop_control: + loop_var: ctx_name + include_tasks: filter-contexts.yaml +... diff --git a/roles/describe-kubernetes-objects/tasks/filter-contexts.yaml b/roles/describe-kubernetes-objects/tasks/filter-contexts.yaml new file mode 100644 index 000000000..e19b4e9d3 --- /dev/null +++ b/roles/describe-kubernetes-objects/tasks/filter-contexts.yaml @@ -0,0 +1,28 @@ +# 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: "Try to reach {{ ctx_name }} cluster" + shell: |- + kubectl --kubeconfig {{ kubeconfig }} --context {{ ctx_name }} get ns + register: reachable + ignore_errors: true + +- debug: + msg: "{{ ctx_name }} is not reachable and won't be used for object desctiption gathering" + when: reachable.rc != 0 + +- name: "Add {{ ctx_name }} to context list" + when: reachable.rc == 0 + set_fact: + kctl_context_list: "{{ kctl_context_list | default([]) + [ ctx_name ] }}" +... diff --git a/roles/describe-kubernetes-objects/tasks/get-contexts.yaml b/roles/describe-kubernetes-objects/tasks/get-contexts.yaml index 45321a771..45ce5b360 100644 --- a/roles/describe-kubernetes-objects/tasks/get-contexts.yaml +++ b/roles/describe-kubernetes-objects/tasks/get-contexts.yaml @@ -16,7 +16,9 @@ kubectl --kubeconfig {{ kubeconfig }} config get-contexts -o name register: kctl_context_command -- name: "Save kubeconfig contexts to list" - set_fact: - kctl_context_list: "{{ kctl_context_command.stdout.split('\n') }}" +- name: "Save contexts for reachable clusters" + with_items: "{{ kctl_context_command.stdout.split('\n') }}" + loop_control: + loop_var: ctx_name + include_tasks: filter-contexts.yaml ...