blob: a856cb3e04222c1e181817c3e25089aa2f0e302f [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"
# see also the onos-diagnostic script:
# https://github.com/opennetworkinglab/onos/blob/master/tools/package/runtime/bin/onos-diagnostics
- 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"
- "cfg get"
- "cordvtn-networks"
- "cordvtn-node-check compute1"
- "cordvtn-nodes"
- "cordvtn-ports"
- "devices"
- "dhcp-list"
- "dhcp-relay"
- "feature:list"
- "feature:repo-list"
- "flows -s"
- "fpm-connections"
- "groups"
- "hosts"
- "intents"
- "interfaces"
- "links"
- "log:display"
- "masters"
- "mcast-host-routes"
- "mcast-host-show"
- "netcfg"
- "nodes"
- "obj-next-ids"
- "obj-pending-nexts"
- "packet-processors"
- "packet-requests"
- "ports -e"
- "portstats -nz"
- "roles"
- "routes"
- "scr:list"
- "sr-device-subnets"
- "sr-ecmp-spg"
- "sr-link-state"
- "sr-mcast-leader"
- "sr-mcast-next"
- "sr-mcast-tree"
- "sr-next-hops"
- "sr-pw-list"
- "sr-should-program"
- "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"
- "cfg get"
- "devices"
- "dhcp-relay"
- "feature:list"
- "feature:repo-list"
- "flows -s"
- "fpm-connections"
- "groups"
- "hosts"
- "intents"
- "interfaces"
- "links"
- "log:display"
- "masters"
- "mcast-host-routes"
- "mcast-host-show"
- "netcfg"
- "nodes"
- "obj-next-ids"
- "obj-pending-nexts"
- "packet-processors"
- "packet-requests"
- "ports -e"
- "portstats -nz"
- "roles"
- "routes"
- "scr:list"
- "sr-device-subnets"
- "sr-ecmp-spg"
- "sr-link-state"
- "sr-mcast-leader"
- "sr-mcast-next"
- "sr-mcast-tree"
- "sr-next-hops"
- "sr-pw-list"
- "sr-should-program"
- "summary"
- 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"