/home/zuul/src/opendev.org/openstack/openstack-ansible-os_neutron/tasks/main.yml
---
# Copyright 2014, Rackspace US, 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.


- import_tasks: neutron_check.yml

- name: Gather variables for each operating system
  include_vars: "{{ item }}"
  with_first_found:
    - "{{ ansible_distribution | lower }}-{{ ansible_distribution_version | lower }}.yml"
    - "{{ ansible_distribution | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
    - "{{ ansible_os_family | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
    - "{{ ansible_distribution | lower }}.yml"
    - "{{ ansible_os_family | lower }}.yml"
  tags:
    - always

- name: Gather variables for installation method
  include_vars: "{{ neutron_install_method }}_install.yml"
  tags:
    - always

- import_tasks: db_setup.yml
  when:
    - "neutron_services['neutron-server']['group'] in group_names"
    - "inventory_hostname == ((groups[neutron_services['neutron-server']['group']] | intersect(ansible_play_hosts)) | list)[0]"
  vars:
    _oslodb_setup_host: "{{ neutron_db_setup_host }}"
    _oslodb_databases:
      - name: "{{ neutron_galera_database }}"
        users:
          - username: "{{ neutron_galera_user }}"
            password: "{{ neutron_container_mysql_password }}"
  tags:
    - common-db
    - neutron-config

- import_tasks: mq_setup.yml
  when:
    - "neutron_services['neutron-server']['group'] in group_names"
    - "inventory_hostname == ((groups[neutron_services['neutron-server']['group']]| intersect(ansible_play_hosts)) | list)[0]"
  vars:
    _oslomsg_rpc_setup_host: "{{ neutron_oslomsg_rpc_setup_host }}"
    _oslomsg_rpc_userid: "{{ neutron_oslomsg_rpc_userid }}"
    _oslomsg_rpc_password: "{{ neutron_oslomsg_rpc_password }}"
    _oslomsg_rpc_vhost: "{{ neutron_oslomsg_rpc_vhost }}"
    _oslomsg_rpc_transport: "{{ neutron_oslomsg_rpc_transport }}"
    _oslomsg_notify_setup_host: "{{ neutron_oslomsg_notify_setup_host }}"
    _oslomsg_notify_userid: "{{ neutron_oslomsg_notify_userid }}"
    _oslomsg_notify_password: "{{ neutron_oslomsg_notify_password }}"
    _oslomsg_notify_vhost: "{{ neutron_oslomsg_notify_vhost }}"
    _oslomsg_notify_transport: "{{ neutron_oslomsg_notify_transport }}"
  tags:
    - common-mq
    - neutron-config

- name: Get CPU info content and store as var
  command: cat /proc/cpuinfo
  register: cpuinfo_contents
  changed_when: false
  failed_when: false
  tags:
    - always

- name: Create the neutron provider networks fact
  provider_networks:
    provider_networks: "{{ provider_networks }}"
    bind_prefix: "{{ provider_network_bind_prefix | default('') }}"
    is_metal: "{{ is_metal }}"
    group_names: "{{ group_names }}"
  register: pndata
  when: neutron_provider_networks is not defined
  tags:
    - always

- name: Set provider network fact(s)
  set_fact:
    neutron_provider_networks: "{{ neutron_provider_networks | default(pndata) }}"
  tags:
    - always

- name: Set neutron target platform type
  set_fact:
    neutron_os_type: "powervm"
  when:
    - cpuinfo_contents.stdout.find('pSeries') != -1
    - ansible_architecture == 'ppc64le'
  tags:
    - always

- import_tasks: dependent_neutron_roles.yml
- import_tasks: neutron_ml2_ovs_powervm.yml
  when:
    - neutron_os_type is defined
    - neutron_os_type == 'powervm'
    - neutron_plugin_type == 'ml2.ovs'
    - "{{ ansible_distribution_version is version('16.04','>') }}"
  tags:
    - neutron-config

- import_tasks: neutron_pre_install.yml
  tags:
    - neutron-install

- import_tasks: neutron_install.yml
  tags:
    - neutron-install

- name: refresh local facts
  setup:
    filter: ansible_local
    gather_subset: "!all"
  tags:
    - neutron-config

# Include provider specific config(s)
- include_tasks: "{{ item }}"
  with_first_found:
    - files:
        - "{{ neutron_plugin_type.split('.')[-1] }}_config.yml"
      skip: true
      paths:
        - "providers/"
  tags:
    - neutron-install

- import_tasks: neutron_post_install.yml
  tags:
    - neutron-config

- name: Run the systemd service role
  import_role:
    name: systemd_service
  vars:
    systemd_user_name: "{{ neutron_system_user_name }}"
    systemd_group_name: "{{ neutron_system_group_name }}"
    systemd_tempd_prefix: openstack
    systemd_slice_name: neutron
    systemd_lock_path: /var/lock/neutron
    systemd_CPUAccounting: true
    systemd_BlockIOAccounting: true
    systemd_MemoryAccounting: true
    systemd_TasksAccounting: true
    systemd_services: |-
      {%- set services = [] -%}
      {%- for service in filtered_neutron_services -%}
      {%-   set _ = service.update(
              {
                'enabled': 'yes',
                'state': 'started',
                'config_overrides': service.init_config_overrides
              }
            )
      -%}
      {%-   set _ = service.pop('init_config_overrides') -%}
      {%-   set _ = services.append(service) -%}
      {%- endfor %}
      {{- services -}}
  tags:
    - neutron-config
    - systemd-service

- import_tasks: neutron_db_setup.yml
  when:
    - "neutron_services['neutron-server']['group'] in group_names"
  tags:
    - neutron-config

- import_tasks: service_setup.yml
  vars:
    _service_adminuri_insecure: "{{ keystone_service_adminuri_insecure }}"
    _service_in_ldap: "{{ neutron_service_in_ldap }}"
    _service_setup_host: "{{ neutron_service_setup_host }}"
    _service_setup_host_python_interpreter: "{{ neutron_service_setup_host_python_interpreter }}"
    _service_project_name: "{{ neutron_service_project_name }}"
    _service_region: "{{ neutron_service_region }}"
    _service_users:
      - name: "{{ neutron_service_user_name }}"
        password: "{{ neutron_service_password }}"
        role: "{{ neutron_service_role_name }}"
    _service_endpoints:
      - service: "{{ neutron_service_name }}"
        interface: "public"
        url: "{{ neutron_service_publicurl }}"
      - service: "{{ neutron_service_name }}"
        interface: "internal"
        url: "{{ neutron_service_internalurl }}"
      - service: "{{ neutron_service_name }}"
        interface: "admin"
        url: "{{ neutron_service_adminurl }}"
    _service_catalog:
      - name: "{{ neutron_service_name }}"
        type: "{{ neutron_service_type }}"
        description: "{{ neutron_service_description }}"
  when:
    - "neutron_services['neutron-server']['group'] in group_names"
    - "inventory_hostname == ((groups[neutron_services['neutron-server']['group']] | intersect(ansible_play_hosts)) | list)[0]"
  tags:
    - neutron-config

- name: Flush handlers
  meta: flush_handlers