From 8408baedce1c44648b8f4eafec12cf84933d4c4c Mon Sep 17 00:00:00 2001 From: stephane Date: Wed, 26 Aug 2015 08:49:01 -0700 Subject: [PATCH] Support for fine-grained distro-related defaults Currently, we specify defaults for the RedHat and Ubuntu distribution families, and perform adjustments to these in the playbooks based on checks for OS version, etc. This is awkward. Instead, import defaults files in increasing order of specificity to tune the install for each distribution and version without extra playbook items. Change-Id: I60b5a1f1c1f63fe4c742599a5a8a12a80cd15652 --- .../roles/bifrost-ironic-install/README.md | 23 +++++++++++++ .../defaults/dummy-defaults.yml | 3 ++ ...ml => required_defaults_Debian_family.yml} | 0 .../defaults/required_defaults_Fedora_22.yml | 5 +++ ...ml => required_defaults_RedHat_family.yml} | 0 .../required_defaults_Ubuntu_15.04.yml | 4 +++ .../bifrost-ironic-install/tasks/main.yml | 33 +++++++++---------- 7 files changed, 50 insertions(+), 18 deletions(-) create mode 100644 playbooks/roles/bifrost-ironic-install/defaults/dummy-defaults.yml rename playbooks/roles/bifrost-ironic-install/defaults/{required_defaults_Debian.yml => required_defaults_Debian_family.yml} (100%) create mode 100644 playbooks/roles/bifrost-ironic-install/defaults/required_defaults_Fedora_22.yml rename playbooks/roles/bifrost-ironic-install/defaults/{required_defaults_RedHat.yml => required_defaults_RedHat_family.yml} (100%) create mode 100644 playbooks/roles/bifrost-ironic-install/defaults/required_defaults_Ubuntu_15.04.yml diff --git a/playbooks/roles/bifrost-ironic-install/README.md b/playbooks/roles/bifrost-ironic-install/README.md index 490aa787c..cbac3360a 100644 --- a/playbooks/roles/bifrost-ironic-install/README.md +++ b/playbooks/roles/bifrost-ironic-install/README.md @@ -77,6 +77,29 @@ mainly limited to settings which are unlikely to be modified, unless a user has a custom Ironic Python Agent image, or needs to modify where the httpboot folder is set to. +This role has several variables that can vary between OS families, +distributions, and their specific versions. These are specified in the +required_defaults_* files. They are imported in a particular +order. For example, for Ubuntu 15.04, the role will attempt to import +the following files: + +- required_defaults_Debian.yml +- required_defaults_Ubuntu.yml +- required_defaults_Ubuntu_15.04.yml + +Not all of the possible files for a given distribution/version combination +need to exist. The recommended approach for adding a new variable is: + +- Put the variable in the most generic set of defaults to which it applies: + for example, if a given variable is applicable to all Debian-family OSes, + put it in required_defaults_Debian.yml + +- Variables specified in the more specific files will be used to override + values in the more generic defaults files. + +- If a given default applies to multiple versions of a distribution, that + variable needs to be specified for each version which it affects. + Dependencies ------------ diff --git a/playbooks/roles/bifrost-ironic-install/defaults/dummy-defaults.yml b/playbooks/roles/bifrost-ironic-install/defaults/dummy-defaults.yml new file mode 100644 index 000000000..c1a20659d --- /dev/null +++ b/playbooks/roles/bifrost-ironic-install/defaults/dummy-defaults.yml @@ -0,0 +1,3 @@ +--- +# NOTE(cinerama) This file is intentionally left blank - do not +# add variables here. diff --git a/playbooks/roles/bifrost-ironic-install/defaults/required_defaults_Debian.yml b/playbooks/roles/bifrost-ironic-install/defaults/required_defaults_Debian_family.yml similarity index 100% rename from playbooks/roles/bifrost-ironic-install/defaults/required_defaults_Debian.yml rename to playbooks/roles/bifrost-ironic-install/defaults/required_defaults_Debian_family.yml diff --git a/playbooks/roles/bifrost-ironic-install/defaults/required_defaults_Fedora_22.yml b/playbooks/roles/bifrost-ironic-install/defaults/required_defaults_Fedora_22.yml new file mode 100644 index 000000000..d7f04a71d --- /dev/null +++ b/playbooks/roles/bifrost-ironic-install/defaults/required_defaults_Fedora_22.yml @@ -0,0 +1,5 @@ +--- +# NOTE(cinerama): On Fedora 22, ansible 1.9, ansible_pkg_mgr +# defaults to yum, which may not be installed. This can be safely +# removed when we start using an ansible release which prefers dnf. +ansible_pkg_mgr: "dnf" \ No newline at end of file diff --git a/playbooks/roles/bifrost-ironic-install/defaults/required_defaults_RedHat.yml b/playbooks/roles/bifrost-ironic-install/defaults/required_defaults_RedHat_family.yml similarity index 100% rename from playbooks/roles/bifrost-ironic-install/defaults/required_defaults_RedHat.yml rename to playbooks/roles/bifrost-ironic-install/defaults/required_defaults_RedHat_family.yml diff --git a/playbooks/roles/bifrost-ironic-install/defaults/required_defaults_Ubuntu_15.04.yml b/playbooks/roles/bifrost-ironic-install/defaults/required_defaults_Ubuntu_15.04.yml new file mode 100644 index 000000000..ff67dda1c --- /dev/null +++ b/playbooks/roles/bifrost-ironic-install/defaults/required_defaults_Ubuntu_15.04.yml @@ -0,0 +1,4 @@ +--- +init_template: systemd_template.j2 +init_dest_dir: /lib/systemd/system/ +init_ext: .service diff --git a/playbooks/roles/bifrost-ironic-install/tasks/main.yml b/playbooks/roles/bifrost-ironic-install/tasks/main.yml index ad29e1506..ddadd2478 100644 --- a/playbooks/roles/bifrost-ironic-install/tasks/main.yml +++ b/playbooks/roles/bifrost-ironic-install/tasks/main.yml @@ -13,24 +13,27 @@ # See the License for the specific language governing permissions and # limitations under the License. --- -- name: Include OS-specific packages variables. +# NOTE(cinerama) dummy-defaults.yml is an empty defaults file. We use it +# here to ensure that with_first_found won't fail should we not have +# defaults for a particular distribution, version, etc. +- name: Include OS family-specific defaults + include_vars: "{{ item }}" + with_first_found: + - "../defaults/required_defaults_{{ ansible_os_family }}_family.yml" + - "../defaults/dummy-defaults.yml" +- name: Include OS distribution-specific defaults include_vars: "{{ item }}" with_first_found: - "../defaults/required_defaults_{{ ansible_distribution }}.yml" - - "../defaults/required_defaults_{{ ansible_os_family }}.yml" + - "../defaults/dummy-defaults.yml" +- name: Include OS version-specific defaults + include_vars: "{{ item }}" + with_first_found: + - "../defaults/required_defaults_{{ ansible_distribution }}_{{ ansible_distribution_version }}.yml" + - "../defaults/dummy-defaults.yml" - name: "Update Package Cache" apt: update_cache=yes when: ansible_os_family == 'Debian' -# NOTE(cinerama): On Fedora 22, ansible 1.9, ansible_pkg_mgr -# defaults to yum, which may not be installed. This can be safely -# removed when we start using an ansible release which prefers dnf. -- name: "Check for dnf" - stat: path=/usr/bin/dnf - register: test_dnf -- name: "Adjust ansible_pkg_mgr if dnf exists" - set_fact: - ansible_pkg_mgr: "dnf" - when: ansible_distribution == 'Fedora' and "{{ test_dnf.stat.exists|bool }}" - name: "Install packages" action: "{{ ansible_pkg_mgr }} name={{ item }}" with_items: required_packages @@ -146,12 +149,6 @@ - name: "Creating authorized_keys file for ironic user" command: cp -p /home/ironic/.ssh/id_rsa.pub /home/ironic/.ssh/authorized_keys when: testing == true -- name: "Adjust init vars for Ubuntu >= 15.04, which is systemd" - set_fact: - init_template: systemd_template.j2 - init_dest_dir: /lib/systemd/system/ - init_ext: .service - when: ansible_distribution_version|version_compare('15.04', '>=') and ansible_distribution == 'Ubuntu' - name: "Placing services" template: src={{ init_template }} dest={{ init_dest_dir }}{{item.service_name}}{{ init_ext }} owner=root group=root with_items: