From 3cd2cf50692aa3d1afe58d3dab6634828d587760 Mon Sep 17 00:00:00 2001 From: Jesse Pretorius Date: Tue, 2 May 2017 12:01:33 +0100 Subject: [PATCH] Use package module to install distro packages Consolidate distro package install tasks into a single task using the package module and pass the package list into the name instead of using a with_items loop. The minimum Ansible version is raised to 2.2 due to a known bug [1] in Ansible's apt module which does not update the cache properly if the cache update and the install are combined in a single task. [1] https://github.com/ansible/ansible-modules-core/issues/1497 Change-Id: I4fb65f7a03364bac696e63f325c936e730deba7e --- meta/main.yml | 3 ++- tasks/ironic_api_install.yml | 21 ------------------ tasks/ironic_conductor_install.yml | 29 ------------------------- tasks/ironic_install.yml | 19 ++++++++++------- tasks/ironic_install_apt.yml | 34 ------------------------------ tasks/main.yml | 10 --------- vars/main.yml | 32 ++++++++++++++++++++++++++++ 7 files changed, 45 insertions(+), 103 deletions(-) delete mode 100644 tasks/ironic_api_install.yml delete mode 100644 tasks/ironic_conductor_install.yml delete mode 100644 tasks/ironic_install_apt.yml create mode 100644 vars/main.yml diff --git a/meta/main.yml b/meta/main.yml index e7700b3f..4c78816e 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -12,12 +12,13 @@ # 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. + galaxy_info: author: OpenStack description: Baremetal provisioning for Openstack company: OpenStack license: Apache - min_ansible_version: 2.0 + min_ansible_version: 2.2 platforms: - name: Ubuntu versions: diff --git a/tasks/ironic_api_install.yml b/tasks/ironic_api_install.yml deleted file mode 100644 index f1fee844..00000000 --- a/tasks/ironic_api_install.yml +++ /dev/null @@ -1,21 +0,0 @@ ---- -# Copyright 2015, 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. - -- include: ironic_install_apt.yml - static: no - when: - - ansible_pkg_mgr == 'apt' - vars: - apt_pkgs: "{{ ironic_api_distro_packages }}" diff --git a/tasks/ironic_conductor_install.yml b/tasks/ironic_conductor_install.yml deleted file mode 100644 index 36e16e6e..00000000 --- a/tasks/ironic_conductor_install.yml +++ /dev/null @@ -1,29 +0,0 @@ ---- -# Copyright 2015, 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. - -- include: ironic_install_apt.yml - static: no - when: - - ansible_pkg_mgr == 'apt' - vars: - apt_pkgs: "{{ ironic_conductor_distro_packages }}" - -- include: ironic_install_apt.yml - static: no - when: - - ansible_pkg_mgr == 'apt' - - ironic_standalone - vars: - apt_pkgs: "{{ ironic_conductor_standalone_distro_packages }}" diff --git a/tasks/ironic_install.yml b/tasks/ironic_install.yml index d533de61..4061b837 100644 --- a/tasks/ironic_install.yml +++ b/tasks/ironic_install.yml @@ -13,6 +13,17 @@ # See the License for the specific language governing permissions and # limitations under the License. +- name: Install distro packages + package: + name: "{{ ironic_packages_list }}" + state: "{{ ironic_package_state }}" + update_cache: "{{ (ansible_pkg_mgr == 'apt') | ternary('yes', omit) }}" + cache_valid_time: "{{ (ansible_pkg_mgr == 'apt') | ternary(cache_timeout, omit) }}" + register: install_packages + until: install_packages|success + retries: 5 + delay: 2 + - name: Create developer mode constraint file copy: dest: "/opt/developer-pip-constraints.txt" @@ -22,14 +33,6 @@ {% endfor %} when: ironic_developer_mode | bool -- include: ironic_install_apt.yml - static: no - when: - - ansible_pkg_mgr == 'apt' - - ironic_developer_mode | bool - vars: - apt_pkgs: "{{ ironic_developer_mode_distro_packages }}" - - name: Install requires pip packages pip: name: "{{ ironic_requires_pip_packages }}" diff --git a/tasks/ironic_install_apt.yml b/tasks/ironic_install_apt.yml deleted file mode 100644 index fb6669fb..00000000 --- a/tasks/ironic_install_apt.yml +++ /dev/null @@ -1,34 +0,0 @@ ---- -# Copyright 2016, 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: Update apt sources - apt: - update_cache: yes - cache_valid_time: "{{ cache_timeout }}" - register: apt_update - until: apt_update|success - retries: 5 - delay: 2 - -- name: Install apt packages - apt: - pkg: "{{ item }}" - state: "{{ ironic_package_state }}" - register: install_packages - until: install_packages|success - retries: 5 - delay: 2 - with_items: - - "{{ apt_pkgs }}" diff --git a/tasks/main.yml b/tasks/main.yml index c7c50517..19e7bd3b 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -32,16 +32,6 @@ tags: - ironic-install -- include: ironic_api_install.yml - when: inventory_hostname in groups['ironic_api'] - tags: - - ironic-install - -- include: ironic_conductor_install.yml - when: inventory_hostname in groups['ironic_conductor'] - tags: - - ironic-install - - include: ironic_oneview_setup.yml when: - ironic_oneview_enabled | bool diff --git a/vars/main.yml b/vars/main.yml new file mode 100644 index 00000000..23f02279 --- /dev/null +++ b/vars/main.yml @@ -0,0 +1,32 @@ +--- +# Copyright 2017, 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. + +# This special list brings together all of the package installations into one +# task to save time. +ironic_packages_list: > + {%- set package_list = [] %} + {%- if ironic_developer_mode | bool %} + {%- set package_list = package_list + ironic_developer_mode_distro_packages %} + {%- endif %} + {%- if inventory_hostname in groups['ironic_api'] %} + {%- set package_list = package_list + ironic_api_distro_packages %} + {%- endif %} + {%- if inventory_hostname in groups['ironic_conductor'] %} + {%- set package_list = package_list + ironic_conductor_distro_packages %} + {%- if ironic_standalone | bool %} + {%- set package_list = package_list + ironic_conductor_standalone_distro_packages %} + {%- endif %} + {%- endif %} + {{- package_list -}}