---
# Copyright 2020, VEXXHOST, Inc.
#
# 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.

- name: Installing frr
  hosts: all
  tasks:
    - name: Wait after service restart
      ansible.builtin.pause:
        seconds: 10

    - name: Ping vlans ip address
      ansible.builtin.shell: |
        set -e
        ping -c2 "{{ hostvars[inventory_hostname]['ansible_facts']['eth1']['ipv4']['address'] }}"
      changed_when: false
      register: _ping_vlan
      until: _ping_vlan is success
      retries: 5
      delay: 10
      when: inventory_hostname == 'primary'

    - name: Check service state
      ansible.builtin.service_facts:

    - name: Fail if frr is down
      ansible.builtin.fail:
        msg: frr is not up
      when: ansible_facts.services['frr.service'].state != 'running'

    - name: Get summary
      ansible.builtin.command: "vtysh -c 'show bgp summary'"
      register: _frr_get_summary
      changed_when: false

    - name: Get routes
      ansible.builtin.command: "vtysh -c 'show ip route'"
      register: _frr_get_routes
      changed_when: false

    - name: Fail if we're missing static routes
      ansible.builtin.fail:
        msg: "We can't find route {{ item }}"
      with_items: "{{ frr_staticd_routes }}"
      when:
        - inventory_hostname == 'primary'
        - item.split(' ')[-1] not in _frr_get_routes.stdout

    - name: Fail if we're missing bgp routes
      ansible.builtin.fail:
        msg: "We can't find route 192.168.1.0/24"
      when:
        - inventory_hostname == 'secondary'
        - "'192.168.1.0/24' not in _frr_get_routes.stdout"