--- # 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: Gather utility facts hosts: utility_all gather_facts: "{{ osa_gather_facts | default(True) }}" tags: - always - name: Setup the utility location(s) hosts: utility_all user: root gather_facts: false environment: "{{ deployment_environment_variables | default({}) }}" vars_files: - "defaults/repo_packages/openstack_services.yml" - "defaults/{{ install_method }}_install.yml" vars: utility_upper_constraints_url: "{{ requirements_git_url | default('https://releases.openstack.org/constraints/upper/' ~ requirements_git_install_branch | default('master')) }}" tags: - utility handlers: - name: Create openstack client bash_completion script shell: >- openstack complete > /etc/bash_completion.d/openstack_client args: executable: /bin/bash listen: - "venv changed" pre_tasks: - include_tasks: "common-tasks/os-{{ container_tech | default('lxc') }}-container-setup.yml" when: not is_metal - include_tasks: common-tasks/os-log-dir-setup.yml vars: log_dirs: - src: "/openstack/log/{{ inventory_hostname }}-utility" dest: "/var/log/utility" - include_tasks: common-tasks/unbound-clients.yml when: - hostvars['localhost']['resolvconf_enabled'] | bool - name: Create log directory (not is_metal) file: dest: "/var/log/utility" state: "directory" force: "yes" when: not is_metal | bool roles: - role: "galera_server" vars: galera_install_client: true galera_install_server: false - role: "openstack_openrc" tags: - openrc post_tasks: - name: Add OpenStack client to distro packages set_fact: utility_distro_packages: "{{ (utility_distro_packages | default([])) + _utility_distro_openstack_clients_packages[utility_distro_openstack_clients_python_version|int] }}" when: install_method == "distro" - name: Add EPEL repsitory block: - name: Download EPEL gpg keys get_url: url: "{{ centos_epel_key | default('http://download.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-' ~ ansible_distribution_major_version) }}" dest: /etc/pki/rpm-gpg register: _get_yum_keys until: _get_yum_keys is success retries: 5 delay: 2 - name: Install EPEL gpg keys rpm_key: key: "/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-{{ ansible_distribution_major_version }}" state: present - name: Install the EPEL repository yum_repository: name: epel-utility baseurl: "{{ centos_epel_mirror | default('http://download.fedoraproject.org/pub/epel') ~ '/' ~ ansible_distribution_major_version ~ '/' ~ ansible_architecture }}" description: 'Extra Packages for Enterprise Linux 7 - $basearch' gpgcheck: yes enabled: yes state: present includepkgs: 'python3-PyMySQL python36-PyMySQL' register: install_epel_repo until: install_epel_repo is success retries: 5 delay: 2 when: - install_method == "distro" - ansible_os_family | lower == 'redhat' - ansible_distribution_major_version is version('8', '<') - name: Install distro packages package: name: "{{ utility_distro_packages | default([]) }}" state: "{{ utility_package_state }}" update_cache: "{{ (ansible_pkg_mgr in ['apt', 'zypper']) | ternary('yes', omit) }}" cache_valid_time: "{{ (ansible_pkg_mgr == 'apt') | ternary(cache_timeout, omit) }}" register: install_packages until: install_packages is success retries: 5 delay: 2 - name: Distribute private ssh key copy: content: "{{ utility_ssh_private_key }}" dest: /root/.ssh/id_rsa mode: 0600 owner: root group: root when: utility_ssh_private_key is defined - name: Install openstack clients (source-based install) when: - install_method == "source" block: - name: Get list of repo packages uri: url: "{{ utility_upper_constraints_url }}" return_content: yes register: _abs_reqs run_once: true tags: - always - name: Derive the list of openstack clients set_fact: _openstack_client_list: >- {%- set package_list = [] %} {%- for l in _abs_reqs.content.split('\n') %} {%- if (l is match('^python-.*client==.*$')) or (l is match('^(aodh|gnocchi)client==.*$')) or (l is match('^osc-placement==.*$')) %} {%- set _ = package_list.append(l | regex_replace('==.*$', '')) %} {%- endif %} {%- endfor %} {{- package_list }} run_once: true tags: - always - name: Install the python venv include_role: name: "python_venv_build" vars: venv_python_executable: "{{ utility_venv_python_executable | default(openstack_venv_python_executable) }}" venv_install_destination_path: "{{ utility_venv_bin | dirname }}" venv_build_distro_package_list: "{{ utility_devel_distro_packages }}" venv_pip_install_args: "{{ pip_install_options | default('') }}" venv_build_constraints: - "--constraint {{ utility_upper_constraints_url }}" venv_pip_packages: "{{ _openstack_client_list | union(utility_pip_packages) }}" - name: Create list of binaries to symlink set_fact: _openstack_client_to_symlink: >- {%- set binary_list = [] %} {%- for l in _openstack_client_list %} {%- set _ = binary_list.append(l | regex_replace('^(?:python-)?(\w*)(?:client)$', '\\1')) %} {%- endfor %} {{- binary_list }} run_once: true - name: Create symlinks for openstack clients file: src: "{{ utility_venv_bin }}/{{ item }}" path: "/usr/local/bin/{{ item }}" state: link force: yes follow: false with_items: - "{{ _openstack_client_to_symlink }}" notify: "Create openstack client bash_completion script"