
# 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:
   - "ifconfig -a"
   - "route -n"
   - "arp -n"
   - "date"
   - "brctl show"
   - "cat /etc/resolv.conf"
   - "cat /etc/lsb-release"
   - "sudo virsh list"
   - "sudo lxc list"
   - "sudo docker ps -a"

- 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 --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-]', '_')}} 2>&1"
  ignore_errors: yes
  args:
    creates: "~/{{ diag_dir }}/docker/{{ item | regex_replace('[^\\w-]', '_')}}"
  with_items: "{{ docker_containers.stdout_lines }}"
  tags:
    - skip_ansible_lint # ansible-lint interprets the \n incorrectly

