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

# test-vsg/tasks/main.yml
#
# Run tests to check that the CORD-in-a-Box deployment has worked.

- name: Wait for vSG VM to come up
  shell: bash -c "source /opt/cord_profile/admin-openrc.sh; nova list --all-tenants|grep 'vsg.*ACTIVE' > /dev/null"
  register: result
  until: result | success
  retries: 10
  delay: 60
  tags:
    - skip_ansible_lint # running a sub job

- name: Get ID of VM
  shell: bash -c "source /opt/cord_profile/admin-openrc.sh; nova list --all-tenants|grep mysite_vsg|cut -d '|' -f 2"
  register: nova_id
  tags:
    - skip_ansible_lint # running a sub job

- name: Get mgmt IP of VM
  shell: bash -c "source /opt/cord_profile/admin-openrc.sh; nova interface-list {{ nova_id.stdout }}|grep -o -m 1 '172\.27\.[[:digit:]]*\.[[:digit:]]*'"
  register: mgmt_ip
  tags:
    - skip_ansible_lint # running a sub job

- name: Get name of compute node
  shell: bash -c "source /opt/cord_profile/admin-openrc.sh; nova show {{ nova_id.stdout }}|grep hypervisor_hostname|cut -d '|' -f 3"
  register: node_name
  tags:
    - skip_ansible_lint # running a sub job

- name: Wait for Docker container inside VM to come up
  shell: ssh -o ProxyCommand="ssh -W %h:%p -l ubuntu {{ node_name.stdout }}" ubuntu@{{ mgmt_ip.stdout }} "sudo docker ps|grep vcpe" > /dev/null
  register: result
  until: result | success
  retries: 20
  delay: 60
  tags:
    - skip_ansible_lint # running a sub job

- name: start container
  become: yes
  lxd_container:
    name: testclient
    state: started

- name: Make sure testclient has default route to vSG
  become: yes
  shell: lxc exec testclient -- route | grep default | grep "eth0.222.111"
  register: result
  until: result | success
  retries: 20
  delay: 30
  tags:
    - skip_ansible_lint # running a sub job

- name: Test external connectivity in test client
  become: yes
  command: "lxc exec testclient -- ping -c 3 {{ lookup('dig', vsg_test_ping_target) }}"
  register: pingtest
  tags:
    - skip_ansible_lint # running a sub job

- name: Output from ping test
  debug: var=pingtest.stdout_lines

