From 5f0f01c355972a3c4ef87abf2aa5302ef33ceb1c Mon Sep 17 00:00:00 2001 From: Markos Chandras Date: Tue, 5 Jun 2018 09:23:15 +0100 Subject: [PATCH] SUSE: Add support for openSUSE Leap 15 This also ensures that the OBS Virtualization repository is only created for Leap 42.X since Leap 15.X already contains the necessary LXC packages in the standard repos. Finally, we don't use the major version for the Leap 15 files since there is a currently a bug in Ansible[1] which returns 'NA' as major version for Leap 15. This patch does not add any jobs since there is a circular dependency with the lxc_container_create role. Once Leap 15 is supported in that role, we will add jobs in this role as well. [1]: https://github.com/ansible/ansible/issues/41410 Change-Id: I64e38ac7b7e8dec81b5f637301df8a112aa03d9b --- meta/main.yml | 1 + tasks/lxc_install_zypper.yml | 30 +++++++--- ...42_prep.sh.j2 => opensuse_leap_prep.sh.j2} | 0 vars/suse-42.yml | 5 +- vars/suse-host.yml | 54 ++++++++++++++++++ vars/suse.yml | 56 +++++++++++++++++++ 6 files changed, 135 insertions(+), 11 deletions(-) rename templates/prep-scripts/{opensuse_leap_42_prep.sh.j2 => opensuse_leap_prep.sh.j2} (100%) create mode 100644 vars/suse-host.yml create mode 100644 vars/suse.yml diff --git a/meta/main.yml b/meta/main.yml index 653ba14b..eda378b9 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -32,6 +32,7 @@ galaxy_info: - 42.1 - 42.2 - 42.3 + - 15.0 categories: - cloud - lxc diff --git a/tasks/lxc_install_zypper.yml b/tasks/lxc_install_zypper.yml index bc2d5388..0fcaa87e 100644 --- a/tasks/lxc_install_zypper.yml +++ b/tasks/lxc_install_zypper.yml @@ -21,6 +21,7 @@ repo: "{{ item.uri }}" runrefresh: yes with_items: "{{ lxc_hosts_external_repo }}" + when: lxc_hosts_external_repo is defined tags: - lxc_hosts-config @@ -62,12 +63,25 @@ tags: - lxc_hosts-config -- name: Determine latest openSUSE container build information - uri: - url: "{{ _lxc_hosts_container_image_url_base }}/Dockerfile" - return_content: true - register: _lxc_opensuse_image_build_info +- name: Determine latest openSUSE container build information (Leap 15) + # Leap 15.0 + block: + # NOTE(hwoarang) The build ID changes all the time so we need to have a hack to determine the latest one + # TODO: Talk to openSUSE people to improve that and possibly use the same location for 42.3 as well. + - shell: | + curl -s {{ _lxc_hosts_container_image_url_base }} | grep -P -o '{{ ansible_architecture }}.*?lxc.*?Buildlp.*?xz' | head -n 1 + register: _lxc_opensuse_image_build_info + - set_fact: + opensuse_image_build_info: "{{ _lxc_opensuse_image_build_info.stdout }}" + when: ansible_distribution_version is version ('42', '<') -- name: Set fact for openSUSE container build information - set_fact: - opensuse_image_build_info: "{{ _lxc_opensuse_image_build_info.content|regex_search('Version: (.*)', '\\1')|join(' ') }}" +- name: Determine latest openSUSE container build information (Leap 42) + # Leap 42 + block: + - uri: + url: "{{ _lxc_hosts_container_image_url_base }}/Dockerfile" + return_content: true + register: _lxc_opensuse_image_build_info + - set_fact: + opensuse_image_build_info: "{{ _lxc_opensuse_image_build_info.content|regex_search('Version: (.*)', '\\1')|join(' ') }}" + when: ansible_distribution_version is version ('42', '>=') diff --git a/templates/prep-scripts/opensuse_leap_42_prep.sh.j2 b/templates/prep-scripts/opensuse_leap_prep.sh.j2 similarity index 100% rename from templates/prep-scripts/opensuse_leap_42_prep.sh.j2 rename to templates/prep-scripts/opensuse_leap_prep.sh.j2 diff --git a/vars/suse-42.yml b/vars/suse-42.yml index 24d333a3..4b1bbe11 100644 --- a/vars/suse-42.yml +++ b/vars/suse-42.yml @@ -15,13 +15,12 @@ # limitations under the License. _lxc_hosts_container_image_url_base: "https://github.com/openSUSE/docker-containers-build/raw/openSUSE-Leap-{{ ansible_distribution_version }}/{{ ansible_architecture }}" - _lxc_hosts_container_image_url: "{{ _lxc_hosts_container_image_url_base }}/openSUSE-Leap-{{ ansible_distribution_version}}-{{ ansible_architecture }}-{{ opensuse_image_build_info }}.tar.xz" _lxc_cache_map: distro: opensuse arch: "{{ lxc_architecture_mapping.get( ansible_architecture ) }}" - release: "42.3" + release: "{{ ansible_distribution_version }}" copy_from_host: - /etc/default/locale - /etc/environment @@ -31,7 +30,7 @@ _lxc_cache_map: - /etc/zypp/repos.d/repo-oss.repo - /etc/zypp/repos.d/repo-update.repo -_lxc_cache_prep_template: "prep-scripts/opensuse_leap_42_prep.sh.j2" +_lxc_cache_prep_template: "prep-scripts/opensuse_leap_prep.sh.j2" _lxc_cache_distro_packages: - ca-certificates-mozilla diff --git a/vars/suse-host.yml b/vars/suse-host.yml new file mode 100644 index 00000000..2d10939e --- /dev/null +++ b/vars/suse-host.yml @@ -0,0 +1,54 @@ +--- +# Copyright 2016, Rackspace US, Inc. +# Copyright 2017, SUSE LINUX GmbH. +# +# 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. + +lxc_hosts_external_repo: + - name: "OBS:Virtualization:containers" + uri: "{{ lxc_hosts_opensuse_mirror_obs_url }}/repositories/Virtualization:/containers/openSUSE_Leap_{{ ansible_distribution_version }}/" + # NOTE(hwoarang) Leap 15.X is newer than 42.X and it has all the necessary LXC packages so we don't need + # to use the OBS repository. As such we only add it if version is >= 42 so we can capture all the old Leap + # releases. Using the external repo can be removed once we drop support for 42.X + state: "{{ (ansible_distribution_version is version ('42', '>=')) | ternary ('present', 'absent') }}" + +system_config_dir: "/etc/sysconfig" +systemd_utils_prefix: "/usr/lib/systemd" + +# Required rpm packages. +lxc_hosts_distro_packages: + - apparmor-parser + - apparmor-profiles + - apparmor-utils + - aria2 + - bridge-utils + - btrfsprogs + - dbus-1 + - dnsmasq + - git-core + - libseccomp2 + - lxc + - liblxc-devel + - python-lxc-python2 + - systemd-container + - xz + +lxc_xz_bin: xz + +lxc_cached_network_interfaces: + - src: "lxc-net-suse-bridge.cfg.j2" + dest: "/etc/sysconfig/network/ifcfg-{{ lxc_net_bridge }}" + - src: "lxc-net-suseredhat-postdown.cfg.j2" + dest: "/etc/sysconfig/network/scripts/ifdown-post-{{ lxc_net_bridge }}" + mode: "0755" + interface: "${1}" diff --git a/vars/suse.yml b/vars/suse.yml new file mode 100644 index 00000000..06ecb52e --- /dev/null +++ b/vars/suse.yml @@ -0,0 +1,56 @@ +--- +# Copyright 2016, Rackspace US, Inc. +# Copyright 2017, SUSE LINUX GmbH. +# +# 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. + +_lxc_hosts_container_image_url_base: "https://download.opensuse.org/repositories/Virtualization:/containers:/images:/openSUSE-Leap-{{ ansible_distribution_version }}/containers/" +_lxc_hosts_container_image_url: "{{ _lxc_hosts_container_image_url_base }}/opensuse-leap-{{ ansible_distribution_version }}-image.{{ opensuse_image_build_info }}" + +_lxc_cache_map: + distro: opensuse + arch: "{{ lxc_architecture_mapping.get( ansible_architecture ) }}" + release: "{{ ansible_distribution_version }}" + copy_from_host: + - /etc/default/locale + - /etc/environment + - /etc/localtime + - /etc/locale.conf + - /etc/protocols + - /etc/zypp/repos.d/repo-oss.repo + - /etc/zypp/repos.d/repo-update.repo + +_lxc_cache_prep_template: "prep-scripts/opensuse_leap_prep.sh.j2" + +_lxc_cache_distro_packages: + - ca-certificates-mozilla + - cronie + - dbus-1 + - gcc + - iproute2 + - iputils + - libffi-devel + - libopenssl-devel + - netcfg + - openssh + - openssl + - python + - python-devel + - python-xml + - rsync + - sudo + - systemd + - systemd-sysvinit + - tar + - wget + - which