---
- name: Restart ovsdpdk-db container
  vars:
    service_name: "ovsdpdk-db"
    service: "{{ ovsdpdk_services[service_name] }}"
  become: true
  kolla_container:
    action: "recreate_or_restart_container"
    common_options: "{{ docker_common_options }}"
    name: "{{ service.container_name }}"
    image: "{{ service.image }}"
    volumes: "{{ service.volumes }}"
    dimensions: "{{ service.dimensions }}"
  when:
    - kolla_action != "config"
  notify:
    - Waiting the ovs db service to be ready
    - Ensuring ovsdpdk bridges are properly setup indexed
    - Restart ovsdpdk-vswitchd container
    - Ensuring ovsdpdk bridges are properly setup named
    - Wait for dpdk tunnel ip
    - OVS-DPDK gather facts

- name: Waiting the ovs db service to be ready
  vars:
    service_name: "ovsdpdk-db"
    service: "{{ ovsdpdk_services[service_name] }}"
  become: true
  command: "{{ kolla_container_engine }} exec {{ service.container_name }} ovs-vsctl --no-wait show"
  register: check_result
  until: check_result is success
  changed_when: False
  retries: 30
  delay: 2

- name: Ensuring ovsdpdk bridges are properly setup indexed
  vars:
    service_name: "ovsdpdk-db"
    service: "{{ ovsdpdk_services[service_name] }}"
  become: true
  command: >
    {{ kolla_container_engine }} exec {{ service.container_name }} /bin/sh -c
    'CONFIG_FILE={{ container_config_directory }}/ovs-dpdkctl.conf {{ container_config_directory }}/ovs-dpdkctl.sh init'
  register: status
  changed_when: status.stdout.find('changed') != -1
  when:
    - (inventory_hostname in groups['compute']
       or (enable_manila | bool and inventory_hostname in groups['manila-share'])
       or inventory_hostname in groups['neutron-dhcp-agent']
       or inventory_hostname in groups['neutron-l3-agent']
       or inventory_hostname in groups['neutron-metadata-agent'])
    - ovs_physical_port_policy == 'indexed'

- name: Restart ovsdpdk-vswitchd container
  vars:
    service_name: "ovsdpdk-vswitchd"
    service: "{{ ovsdpdk_services[service_name] }}"
  become: true
  kolla_container:
    action: "recreate_or_restart_container"
    common_options: "{{ docker_common_options }}"
    name: "{{ service.container_name }}"
    image: "{{ service.image }}"
    volumes: "{{ service.volumes }}"
    privileged: "{{ service.privileged | default(True) }}"
    dimensions: "{{ service.dimensions }}"
  when:
    - kolla_action != "config"

- name: Ensuring ovsdpdk bridges are properly setup named
  vars:
    service_name: "ovsdpdk-db"
    service: "{{ ovsdpdk_services[service_name] }}"
  become: true
  command: >
    {{ kolla_container_engine }} exec {{ service.container_name }} /bin/sh -c
    'CONFIG_FILE={{ container_config_directory }}/ovs-dpdkctl.conf {{ container_config_directory }}/ovs-dpdkctl.sh init'
  register: status
  changed_when: status.stdout.find('changed') != -1
  when:
    - (inventory_hostname in groups['compute']
       or (enable_manila | bool and inventory_hostname in groups['manila-share'])
       or inventory_hostname in groups['neutron-dhcp-agent']
       or inventory_hostname in groups['neutron-l3-agent']
       or inventory_hostname in groups['neutron-metadata-agent'])
    - ovs_physical_port_policy == 'named'

- name: Wait for dpdk tunnel ip
  wait_for:
    host: "{{ dpdk_tunnel_interface_address }}"
    timeout: 300
    sleep: 5

- name: OVS-DPDK gather facts
  setup:
    filter: ansible_*
  when:
    - (inventory_hostname in groups['compute']
       or (enable_manila | bool and inventory_hostname in groups['manila-share'])
       or inventory_hostname in groups['neutron-dhcp-agent']
       or inventory_hostname in groups['neutron-l3-agent']
       or inventory_hostname in groups['neutron-metadata-agent'])
