--- # 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. - name: Create plugins neutron dir file: path: "{{ item.path | default(omit) }}" state: "directory" owner: "{{ item.owner|default(neutron_system_user_name) }}" group: "{{ item.group|default(neutron_system_group_name) }}" mode: "{{ item.mode | default(omit) }}" with_items: - path: "{{ neutron_conf_version_dir }}/plugins" mode: "0750" - path: "{{ neutron_conf_version_dir }}/plugins/{{ neutron_plugin_type.split('.')[0] }}" mode: "0750" - path: "{{ neutron_conf_version_dir }}/rootwrap.d" owner: "root" group: "root" # NOTE(cloudnull): This task is required to copy rootwrap filters that we need # and neutron does not provide by default. - name: Copy extra neutron rootwrap filters copy: src: "{{ item }}" dest: "{{ neutron_conf_version_dir }}/rootwrap.d/" owner: "root" group: "root" with_fileglob: - rootwrap.d/* notify: - Restart neutron services - name: Copy common neutron config config_template: src: "{{ item.src }}" dest: "{{ item.dest }}" owner: "root" group: "{{ item.group|default(neutron_system_group_name) }}" mode: "0640" config_overrides: "{{ item.config_overrides }}" config_type: "{{ item.config_type }}" with_items: - src: "neutron.conf.j2" dest: "{{ neutron_conf_version_dir }}/neutron.conf" config_overrides: "{{ neutron_neutron_conf_overrides }}" config_type: "ini" - src: "{{ neutron_plugins[neutron_plugin_type].plugin_ini }}.j2" dest: "{{ neutron_conf_version_dir }}/{{ neutron_plugins[neutron_plugin_type].plugin_ini }}" config_overrides: "{{ neutron_plugins[neutron_plugin_type].plugin_conf_ini_overrides }}" config_type: "ini" notify: - Restart neutron services - name: Implement policy.yaml if there are overrides configured config_template: content: "{{ neutron_policy_overrides }}" dest: "{{ neutron_conf_version_dir }}/policy.yaml" owner: "root" group: "{{ neutron_system_group_name }}" mode: "0640" config_type: yaml when: - neutron_policy_overrides | length > 0 tags: - neutron-policy-overrides - name: Remove legacy policy.yaml file file: path: "{{ neutron_conf_dir }}/policy.yaml" state: absent when: - neutron_policy_overrides | length == 0 tags: - neutron-policy-override - name: Place api-paste.ini to the correct path in RedHat file: src: "/usr/share/neutron/api-paste.ini" dest: "{{ neutron_conf_version_dir }}/api-paste.ini" owner: "root" group: "{{ neutron_system_group_name }}" mode: "0640" state: link when: neutron_install_method == 'distro' and ansible_facts['os_family'] == 'RedHat' - name: Create symlink to neutron-keepalived-state-change file: src: "{{ neutron_bin }}/neutron-keepalived-state-change" dest: "/usr/local/bin/neutron-keepalived-state-change" state: link when: neutron_install_method == 'source' - name: Preserve original configuration file(s) command: "cp {{ item.target_f }} {{ item.target_f }}.original" args: creates: "{{ item.target_f }}.original" with_items: "{{ neutron_core_files }}" - name: Fetch override files fetch: src: "{{ item.target_f }}.original" dest: "{{ item.tmp_f }}" flat: yes changed_when: false with_items: "{{ neutron_core_files }}" run_once: true - name: Copy common neutron config config_template: src: "{{ item.tmp_f }}" dest: "{{ item.target_f }}" owner: "{{ item.owner | default('root') }}" group: "{{ item.group | default(neutron_system_group_name) }}" mode: "{{ item.mode | default('0640') }}" config_overrides: "{{ item.config_overrides }}" config_type: "{{ item.config_type }}" with_items: "{{ neutron_core_files }}" notify: - Restart neutron services - name: Cleanup fetched temp files file: path: "{{ item.tmp_f }}" state: absent changed_when: false delegate_to: localhost with_items: "{{ neutron_core_files }}" # NOTE(cloudnull): This will ensure strong permissions on all rootwrap files. - name: Set rootwrap.d permissions file: path: "{{ neutron_conf_version_dir }}/rootwrap.d" owner: "root" group: "root" mode: "0640" recurse: true - name: Copy neutron ml2 plugin config config_template: src: "{{ ('plugin_conf_bare' not in neutron_plugins[item]) | ternary(neutron_plugins[item].plugin_ini ~ '.j2', omit) }}" dest: "{{ neutron_conf_version_dir }}/{{ neutron_plugins[item].plugin_ini }}" owner: "root" group: "{{ neutron_system_group_name }}" mode: "0640" config_overrides: "{{ neutron_plugins[item].plugin_conf_ini_overrides }}" config_type: "ini" with_items: "{{ neutron_plugin_types }}" - name: Generate neutron dnsmasq Config template: src: "dnsmasq-neutron.conf.j2" dest: "{{ neutron_conf_version_dir }}/dnsmasq-neutron.conf" owner: "root" group: "{{ neutron_system_group_name }}" mode: "0640" notify: - Restart neutron services when: - neutron_services['neutron-dhcp-agent']['group'] in group_names - name: Generate neutron agent only Config config_template: src: "{{ item.service_conf }}.j2" dest: "{{ item.service_conf_path }}/{{ item.service_conf }}" owner: "root" group: "{{ neutron_system_group_name }}" mode: "0640" config_overrides: "{{ item.config_overrides }}" config_type: "{{ item.config_type }}" with_items: "{{ filtered_neutron_services }}" notify: - Restart neutron services when: - "'service_conf_path' in item" - "'service_conf' in item" - name: Generate neutron bgpvpn networking configuration template: src: "networking_bgpvpn.conf.j2" dest: "{{ neutron_conf_version_dir }}/networking_bgpvpn.conf" owner: "root" group: "{{ neutron_system_group_name }}" mode: "0640" notify: - Restart neutron services when: - "'bgpvpn' in neutron_plugin_base" - name: Stop haproxy service on debian derivatives with standalone network nodes service: name: haproxy state: stopped enabled: false when: - ansible_facts['pkg_mgr'] == 'apt' - ansible_facts['hostname'] in groups['neutron_metadata_agent'] - groups['haproxy_all'] is defined - ansible_facts['hostname'] not in groups['haproxy_all']