add kubespray to the XTesting as it provides newer version of kubenetes and can be...
[it/test.git] / XTesting / kubespray / scripts / collect-info.yaml
1 ---
2 - hosts: all
3   become: true
4   gather_facts: no
5
6   vars:
7     docker_bin_dir: /usr/bin
8     bin_dir: /usr/local/bin
9     ansible_ssh_pipelining: true
10     etcd_cert_dir: /etc/ssl/etcd/ssl
11     kube_network_plugin: calico
12     archive_dirname: collect-info
13     commands:
14       - name: timedate_info
15         cmd: timedatectl status
16       - name: kernel_info
17         cmd: uname -r
18       - name: docker_info
19         cmd: "{{ docker_bin_dir }}/docker info"
20       - name: ip_info
21         cmd: ip -4 -o a
22       - name: route_info
23         cmd: ip ro
24       - name: proc_info
25         cmd: ps auxf | grep -v ]$
26       - name: systemctl_failed_info
27         cmd: systemctl --state=failed --no-pager
28       - name: k8s_info
29         cmd: "{{ bin_dir }}/kubectl get all --all-namespaces -o wide"
30       - name: errors_info
31         cmd: journalctl -p err --no-pager
32       - name: etcd_info
33         cmd: "{{ bin_dir }}/etcdctl endpoint --cluster health"
34       - name: calico_info
35         cmd: "{{ bin_dir }}/calicoctl node status"
36         when: '{{ kube_network_plugin == "calico" }}'
37       - name: calico_workload_info
38         cmd: "{{ bin_dir }}/calicoctl get workloadEndpoint -o wide"
39         when: '{{ kube_network_plugin == "calico" }}'
40       - name: calico_pool_info
41         cmd: "{{ bin_dir }}/calicoctl get ippool -o wide"
42         when: '{{ kube_network_plugin == "calico" }}'
43       - name: weave_info
44         cmd: weave report
45         when: '{{ kube_network_plugin == "weave" }}'
46       - name: weave_logs
47         cmd: "{{ docker_bin_dir }}/docker logs weave"
48         when: '{{ kube_network_plugin == "weave" }}'
49       - name: kube_describe_all
50         cmd: "{{ bin_dir }}/kubectl describe all --all-namespaces"
51       - name: kube_describe_nodes
52         cmd: "{{ bin_dir }}/kubectl describe nodes"
53       - name: kubelet_logs
54         cmd: journalctl -u kubelet --no-pager
55       - name: coredns_logs
56         cmd: "for i in `{{ bin_dir }}/kubectl get pods -n kube-system -l k8s-app=coredns -o jsonpath={.items..metadata.name}`;
57           do {{ bin_dir }}/kubectl logs ${i} -n kube-system; done"
58       - name: apiserver_logs
59         cmd: "for i in `{{ bin_dir }}/kubectl get pods -n kube-system -l component=kube-apiserver -o jsonpath={.items..metadata.name}`;
60           do {{ bin_dir }}/kubectl logs ${i} -n kube-system; done"
61       - name: controller_logs
62         cmd: "for i in `{{ bin_dir }}/kubectl get pods -n kube-system -l component=kube-controller-manager -o jsonpath={.items..metadata.name}`;
63           do {{ bin_dir }}/kubectl logs ${i} -n kube-system; done"
64       - name: scheduler_logs
65         cmd: "for i in `{{ bin_dir }}/kubectl get pods -n kube-system -l component=kube-scheduler -o jsonpath={.items..metadata.name}`;
66           do {{ bin_dir }}/kubectl logs ${i} -n kube-system; done"
67       - name: proxy_logs
68         cmd: "for i in `{{ bin_dir }}/kubectl get pods -n kube-system -l k8s-app=kube-proxy -o jsonpath={.items..metadata.name}`;
69           do {{ bin_dir }}/kubectl logs ${i} -n kube-system; done"
70       - name: nginx_logs
71         cmd: "for i in `{{ bin_dir }}/kubectl get pods -n kube-system -l k8s-app=kube-nginx -o jsonpath={.items..metadata.name}`;
72           do {{ bin_dir }}/kubectl logs ${i} -n kube-system; done"
73       - name: flannel_logs
74         cmd: "for i in `{{ bin_dir }}/kubectl get pods -n kube-system -l app=flannel -o jsonpath={.items..metadata.name}`;
75           do {{ bin_dir }}/kubectl logs ${i} -n kube-system flannel-container; done"
76         when: '{{ kube_network_plugin == "flannel" }}'
77       - name: canal_logs
78         cmd: "for i in `{{ bin_dir }}/kubectl get pods -n kube-system -l k8s-app=canal-node -o jsonpath={.items..metadata.name}`;
79           do {{ bin_dir }}/kubectl logs ${i} -n kube-system flannel; done"
80         when: '{{ kube_network_plugin == "canal" }}'
81       - name: calico_policy_logs
82         cmd: "for i in `{{ bin_dir }}/kubectl get pods -n kube-system -l k8s-app=calico-kube-controllers -o jsonpath={.items..metadata.name}`;
83           do {{ bin_dir }}/kubectl logs ${i} -n kube-system ; done"
84         when: '{{ kube_network_plugin in ["canal", "calico"] }}'
85       - name: helm_show_releases_history
86         cmd: "for i in `{{ bin_dir }}/helm list -q`; do {{ bin_dir }}/helm history ${i} --col-width=0; done"
87         when: "{{ helm_enabled|default(true) }}"
88
89     logs:
90       - /var/log/syslog
91       - /var/log/daemon.log
92       - /var/log/kern.log
93       - /var/log/dpkg.log
94       - /var/log/apt/history.log
95       - /var/log/yum.log
96       - /var/log/messages
97       - /var/log/dmesg
98
99   environment:
100     ETCDCTL_API: 3
101     ETCDCTL_CERT: "{{ etcd_cert_dir }}/admin-{{ inventory_hostname }}.pem"
102     ETCDCTL_KEY: "{{ etcd_cert_dir }}/admin-{{ inventory_hostname }}-key.pem"
103     ETCDCTL_CACERT: "{{ etcd_cert_dir }}/ca.pem"
104     ETCDCTL_ENDPOINTS: "{{ etcd_access_addresses }}"
105
106   tasks:
107     - name: set etcd_access_addresses
108       set_fact:
109         etcd_access_addresses: |-
110           {% for item in groups['etcd'] -%}
111             https://{{ item }}:2379{% if not loop.last %},{% endif %}
112           {%- endfor %}
113       when: "'etcd' in groups"
114
115     - name: Storing commands output
116       shell: "{{ item.cmd }} &> {{ item.name }}"
117       failed_when: false
118       with_items: "{{ commands }}"
119       when: item.when | default(True)
120       no_log: True
121
122     - name: Fetch results
123       fetch: src={{ item.name }} dest=/tmp/{{ archive_dirname }}/commands
124       with_items: "{{ commands }}"
125       when: item.when | default(True)
126       failed_when: false
127
128     - name: Fetch logs
129       fetch: src={{ item }} dest=/tmp/{{ archive_dirname }}/logs
130       with_items: "{{ logs }}"
131       failed_when: false
132
133     - name: Pack results and logs
134       archive:
135         path: "/tmp/{{ archive_dirname }}"
136         dest: "{{ dir|default('.') }}/logs.tar.gz"
137         remove: true
138         mode: 0640
139       delegate_to: localhost
140       connection: local
141       become: false
142       run_once: true
143
144     - name: Clean up collected command outputs
145       file: path={{ item.name }} state=absent
146       with_items: "{{ commands }}"