blob: 093686670a75337cff7d41bf1cf7848f69552b81 [file] [log] [blame]
---
# Copyright 2017-present Open Networking Foundation
#
# 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.
# head-diag/tasks/main.yml
- name: Create diag_dir subdirs
file:
dest: "~/{{ diag_dir }}/{{ item }}"
state: directory
with_items:
- head
- juju
- openstack
- onos-cord
- onos-fabric
- docker
- name: Head node diag collection
shell: "{{ item }} > ~/{{ diag_dir }}/head/{{ item | regex_replace('[^\\w-]', '_')}}"
ignore_errors: yes
args:
creates: "~/{{ diag_dir }}/head/{{ item | regex_replace('[^\\w-]', '_')}}"
with_items:
- "arp -n"
- "brctl show"
- "cat /etc/lsb-release"
- "cat /etc/resolv.conf"
- "date -u"
- "df -k"
- "free"
- "ifconfig -a"
- "ip addr list"
- "ip link list"
- "ip neighbor"
- "ip route"
- "ps aux"
- "route -n"
- "sudo docker ps -a"
- "sudo iptables -S"
- "sudo iptables -t nat -S"
- "sudo lxc list"
- "sudo virsh list"
- name: Juju diag collection
shell: "{{ item }} > ~/{{ diag_dir }}/juju/{{ item | regex_replace('[^\\w-]', '_')}}"
ignore_errors: yes
args:
creates: "~/{{ diag_dir }}/juju/{{ item | regex_replace('[^\\w-]', '_')}}"
with_items:
- "juju status --format=summary"
- "juju status --format=tabular"
- "juju status --format=json"
- name: OpenStack diag collection
shell: "source /opt/cord_profile/admin-openrc.sh && {{ item }} > ~/{{ diag_dir }}/openstack/{{ item | regex_replace('[^\\w-]', '_')}}"
ignore_errors: yes
args:
executable: "/bin/bash"
creates: "~/{{ diag_dir }}/openstack/{{ item | regex_replace('[^\\w-]', '_')}}"
with_items:
- "glance image-list"
- "nova list --all-tenants"
- "nova host-list"
- "nova hypervisor-list"
- "keystone tenant-list"
- "keystone user-list"
- "neutron net-list"
- "neutron subnet-list"
- "neutron port-list"
- name: ONOS-CORD diag collection - REST API
shell: "curl -X GET -u karaf:karaf http://onos-cord:8182/onos/v1/{{ item }} | python -m json.tool > ~/{{ diag_dir }}/onos-cord/rest_{{ item | regex_replace('[^\\w-]', '_') }}"
ignore_errors: yes
args:
creates: "~/{{ diag_dir }}/onos-cord/rest_{{ item | regex_replace('[^\\w-]', '_')}}"
warn: False # get_url or uri can't easily redirect to a file
with_items:
- "hosts"
- name: ONOS-CORD diag collection - ONOS CLI
shell: "sshpass -p 'karaf' ssh -p 8102 karaf@onos-cord {{ item }} > ~/{{ diag_dir }}/onos-cord/{{ item | regex_replace('[^\\w-]', '_') }}"
ignore_errors: yes
args:
creates: "~/{{ diag_dir }}/onos-cord/{{ item | regex_replace('[^\\w-]', '_')}}"
with_items:
- "apps -s -a"
- "bundle:list"
- "cordvtn-node-check compute1"
- "cordvtn-nodes"
- "cordvtn-networks"
- "cordvtn-ports"
- "dhcp-list"
- "devices"
- "flows"
- "hosts"
- "log:display"
- "nodes"
- "netcfg"
- "ports"
- "summary"
- name: ONOS-FABRIC diag collection - REST API
shell: "curl -X GET -u karaf:karaf http://onos-fabric:8182/onos/v1/{{ item }} | python -m json.tool > ~/{{ diag_dir }}/onos-fabric/rest_{{ item | regex_replace('[^\\w-]', '_') }}"
ignore_errors: yes
args:
creates: "~/{{ diag_dir }}/onos-fabric/rest_{{ item | regex_replace('[^\\w-]', '_')}}"
warn: False # get_url or uri can't easily redirect to a file
with_items:
- "hosts"
- name: ONOS-FABRIC diag collection - ONOS CLI
shell: "sshpass -p 'karaf' ssh -p 8101 karaf@onos-fabric {{ item }} > ~/{{ diag_dir }}/onos-fabric/{{ item | regex_replace('[^\\w-]', '_') }}"
ignore_errors: yes
args:
creates: "~/{{ diag_dir }}/onos-fabric/{{ item | regex_replace('[^\\w-]', '_')}}"
with_items:
- "apps -s -a"
- "bundle:list"
- "devices"
- "flows"
- "hosts"
- "log:display"
- "nodes"
- "netcfg"
- "ports"
- "summary"
- "links"
- "sr-ecmp-spg"
- "sr-next-hops"
- name: Docker diag collection - Find names for all running Docker containers
command: sudo docker ps -a --format '{{'{{'}} .Names {{'}}'}}'
ignore_errors: yes
register: docker_containers
tags:
- skip_ansible_lint # collecting docker container names
- name: Docker diag collection - Collect logs from Docker containers
shell: "sudo docker logs {{ item }} > ~/{{ diag_dir }}/docker/{{ item | regex_replace('[^\\w-]', '_')}}.logs 2>&1"
ignore_errors: yes
args:
creates: "~/{{ diag_dir }}/docker/{{ item | regex_replace('[^\\w-]', '_')}}.logs"
with_items: "{{ docker_containers.stdout_lines }}"
tags:
- skip_ansible_lint # ansible-lint interprets the \n incorrectly
- name: Docker diag collection - inspect Docker containers
shell: "sudo docker inspect {{ item }} > ~/{{ diag_dir }}/docker/{{ item | regex_replace('[^\\w-]', '_')}}.inspect 2>&1"
ignore_errors: yes
args:
creates: "~/{{ diag_dir }}/docker/{{ item | regex_replace('[^\\w-]', '_')}}.inspect"
with_items: "{{ docker_containers.stdout_lines }}"
tags:
- skip_ansible_lint # ansible-lint interprets the \n incorrectly
# much cleaner to use !unsafe to avoid j2 parsing of golang {{ and }} templates
# but ansible-lint doesn't support it: https://github.com/willthames/ansible-lint/issues/291
- name: Docker diag collection - Collect memory and CPU stats from docker containers
shell: "sudo docker stats --no-stream --format \"table {{'{{'}}.Name{{'}}'}}\t{{'{{'}}.Container{{'}}'}}\t{{'{{'}}.CPUPerc{{'}}'}}\t{{'{{'}}.MemUsage{{'}}'}}\t{{'{{'}}.MemPerc{{'}}'}}\" > ~/{{ diag_dir }}/docker/stats 2>&1"
ignore_errors: yes
args:
creates: "~/{{ diag_dir }}/docker/stats"