---
# 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"

