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

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

