diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 74833d714..000000000 --- a/Dockerfile +++ /dev/null @@ -1,59 +0,0 @@ -FROM debian:stretch - -# The add is before the RUN to ensure we get the latest version of packages -# Docker will cache RUN commands, but because the SHA1 of the dir will be -# different it will not cache this layer -ADD . /tmp/ironic-python-agent - -# Copy the proxy.sh script which copies the proxy settings from the host -# environment (if they are set). This file will be dynamically created by -# imagebuild/coreos/docker_build.bash -# TODO(jlvilla): Once Docker 1.9 is widely deployed, switch to using the 'ARG' -# command which was added in Docker 1.9. Currently Ubuntu 14.04 uses Docker -# 1.6. Using the ARG command will be a much cleaner solution. -COPY proxy.sh /usr/bin/proxy.sh - -# Ensure we hit a single mirror for builds, since httpredir is flakey -RUN sed -i 's/httpredir/http.us/g' /etc/apt/sources.list - -# Install requirements: Python for ironic-python-agent, others for putting an -# image on disk -RUN proxy.sh apt-get update && \ - proxy.sh apt-get -y upgrade && \ - proxy.sh apt-get install -y --no-install-recommends netbase gdisk \ - python2.7 python2.7-dev python-pip qemu-utils parted hdparm \ - util-linux genisoimage git gcc bash coreutils tgt dmidecode \ - ipmitool psmisc dosfstools bsdmainutils open-iscsi udev \ - smartmontools iptables lshw mdadm - -# Some cleanup -RUN proxy.sh apt-get -y autoremove && \ - proxy.sh apt-get clean - -# Before cleaning mark packages that are required so they are not removed -RUN apt-mark manual python-setuptools -RUN apt-mark manual python-minimal - -# Install requirements separately, because pip understands a git+https url -# while setuptools doesn't -RUN proxy.sh pip install --upgrade pip setuptools -RUN proxy.sh pip install -c /tmp/ironic-python-agent/upper-constraints.txt --no-cache-dir -r /tmp/ironic-python-agent/requirements.txt - -# This will succeed because all the dependencies were installed previously -RUN proxy.sh pip install -c /tmp/ironic-python-agent/upper-constraints.txt --no-cache-dir /tmp/ironic-python-agent - -# Remove no longer needed packages -# NOTE(jroll) leave git to avoid strange apt issues in downstream Dockerfiles -# that may inherit from this one. -RUN proxy.sh apt-get -y purge gcc-4.6 gcc python2.7-dev && \ - proxy.sh apt-get -y autoremove && \ - proxy.sh apt-get clean -RUN rm -rf /tmp/ironic-python-agent -RUN rm -rf /var/lib/apt/lists/* - -# Remove metadata_csum option when creating filesystems -# since cirros doesn't support it. -# This option was added in Debian stretch as default. -RUN sed -i 's/,metadata_csum//g' /etc/mke2fs.conf - -CMD [ "/usr/local/bin/ironic-python-agent" ] diff --git a/bindep.txt b/bindep.txt index 616b206ab..a1e6deab5 100644 --- a/bindep.txt +++ b/bindep.txt @@ -14,11 +14,6 @@ gettext [test] # these are needed to build a deploy ramdisk -# NOTE apparmor is an undeclared dependency for docker on ubuntu, -# see https://github.com/docker/docker/issues/9745 -apparmor [platform:dpkg imagebuild] -docker.io [platform:dpkg imagebuild] -docker-io [platform:rpm imagebuild] gnupg [imagebuild] squashfs-tools [platform:dpkg platform:redhat imagebuild] squashfs [platform:suse imagebuild] diff --git a/doc/source/admin/rescue.rst b/doc/source/admin/rescue.rst index 136581741..f4e351f05 100644 --- a/doc/source/admin/rescue.rst +++ b/doc/source/admin/rescue.rst @@ -28,12 +28,10 @@ in rescue mode. The below has information about supported images that may be built to use rescue mode. -CoreOS ------- +DIB +--- -The CoreOS image supports rescue mode when used with DHCP tenant networks. You -may follow the normal process for `building a CoreOS ironic-python-agent -image`_ to create an image that supports rescue mode. +The DIB image supports rescue mode when used with DHCP tenant networks. After the ``finalize_rescue`` command completes, DHCP will be configured on all network interfaces, and a `rescue` user will be created with the specified @@ -49,5 +47,4 @@ After the ``finalize_rescue`` command completes, DHCP will be configured on all network interfaces, and a `rescue` user will be created with the specified ``rescue_password``. -.. _`building a CoreOS ironic-python-agent image`: https://opendev.org/openstack/ironic-python-agent/src/branch/master/imagebuild/coreos/README.rst .. _`build a TinyIPA image`: https://opendev.org/openstack/ironic-python-agent-builder/src/branch/master/tinyipa/README.rst diff --git a/doc/source/admin/troubleshooting.rst b/doc/source/admin/troubleshooting.rst index 46eccfdd1..d7437d560 100644 --- a/doc/source/admin/troubleshooting.rst +++ b/doc/source/admin/troubleshooting.rst @@ -13,16 +13,6 @@ the image. Below we will cover several ways to do this. Access via ssh -------------- -CoreOS -~~~~~~ -To enable the ``core`` user on pre-built or CoreOS images a ssh public key -will need to added. To do this you will need to: - -- Add ``sshkey="ssh-rsa AAAA..."`` to pxe_append_params setting in ironic.conf - file -- Restart the ironic-conductor with the command - ``service ironic-conductor restart`` -- ``ssh core@`` diskimage-builder (DIB) ~~~~~~~~~~~~~~~~~~~~~~~ @@ -72,43 +62,6 @@ Access via console If you need to use console access, passwords must be enabled there are a couple ways to enable this depending on how the IPA image was created: -CoreOS -~~~~~~ -CoreOS has support for auto login on the console [4]_. This can be enabled by: - -- Adding ``coreos.autologin`` to pxe_append_params setting - in the ``ironic.conf`` file. See [4]_ for more information on using - autologin. - -If you do not wish to enable auto login users can be added to CoreOS by editing -the cloud-config.yml file and adding the following [2]_:: - - users: - - name: username - passwd: $6$5s2u6/jR$un0AvWnqilcgaNB3Mkxd5... - groups: - - sudo - -If using a pre-built image the cloud-config.yml must first be extracted:: - - mkdir tmp_folder - cd tmp_folder - zcat ../coreos_production_pxe_image-oem-stable-mitaka.cpio | cpio --extract --make-directories - -To create a password hash the mkpasswd command can be used:: - - mkpasswd --method=SHA-512 --rounds=4096 - -After adding the user block with your favorite editor recompress the image:: - - find . | cpio --create --format='newc' |gzip -c -9 > ../coreos_production_pxe_image-oem-stable-mitaka.cpio.NEW.gz - -An alternative to editing the embedded cloud-config.yml [4]_ file is to pass a -new one on the kernel command line by: - -- adding ``cloud-config-url=http://example.com/cloud-config.yml`` - to pxe_append_params setting in the ``ironic.conf`` file - diskimage-builder (DIB) ~~~~~~~~~~~~~~~~~~~~~~~ Users wishing to use password access can be add the dynamic-login [0]_ or the @@ -131,7 +84,7 @@ Example:: export DIB_DEV_USER_USERNAME=username export DIB_DEV_USER_PWDLESS_SUDO=yes export DIB_DEV_USER_PASSWORD=PASSWORD - disk-image-create -o /path/to/custom-ipa debian ironic-agent devuser + ironic-python-agent-builder -o /path/to/custom-ipa -e devuser debian tinyipa ~~~~~~~ @@ -152,20 +105,6 @@ add ``ipa-debug=1`` to the kernel command line. To do this: - Restart the ironic-conductor with the command ``service ironic-conductor restart`` -Another method is to edit the cloud-config.yml file. IPA's instructions on -building a custom image can be found at [3]_. - -This essentially boils down to the following steps: - -#. ``git clone https://opendev.org/openstack/ironic-python-agent`` -#. ``cd ironic-python-agent`` -#. ``pip install -r ./requirements.txt`` -#. If not installed, please install the docker container engine. [5]_ -#. ``cd imagebuild/coreos`` -#. Edit ``oem/cloud-config.yml`` and add ``--debug`` to the end of the - ExecStart setting for the ironic-python-agent.service unit. -#. Execute ``make`` to complete the build process. - If the system is running and uses systemd then editing the services file will be required. @@ -183,14 +122,10 @@ Retrieving the IPA logs will differ depending on which base image was used. - logs will be found in the /var/log/ folder. -* Operating system that do use ``systemd`` (ie Fedora 22, CoreOS) +* Operating system that do use ``systemd`` (ie Fedora, CentOS, RHEL) - logs may be viewed with ``sudo journalctl -u ironic-python-agent`` - .. note:: - sudo is not required with the CoreOS images. - - Manually restart IPA ==================== @@ -208,7 +143,3 @@ References ========== .. [0] `Dynamic-login DIB element`: https://github.com/openstack/diskimage-builder/tree/master/diskimage_builder/elements/dynamic-login .. [1] `DevUser DIB element`: https://github.com/openstack/diskimage-builder/tree/master/diskimage_builder/elements/devuser -.. [2] `Add User to CoreOS`: https://coreos.com/os/docs/latest/adding-users.html -.. [3] `IPA image build reference`: https://github.com/openstack/ironic-python-agent/tree/master/imagebuild/coreos/README.rst -.. [4] `Booting CoreOS via PXE`: https://coreos.com/os/docs/latest/booting-with-pxe.html -.. [5] `Install docker engine`: https://docs.docker.com/engine/installation/ diff --git a/doc/source/install/index.rst b/doc/source/install/index.rst index 434551499..29b5b625b 100644 --- a/doc/source/install/index.rst +++ b/doc/source/install/index.rst @@ -8,46 +8,19 @@ Unlike most other python software, you must build an IPA ramdisk image before use. This is because it's not installed in an operating system, but instead is run from within a ramdisk. -CoreOS ------- -One way to build a ramdisk image for IPA is with the CoreOS image [0]_. -Prebuilt copies of the CoreOS image, suitable for pxe, are available on -`tarballs.openstack.org `__. - -Build process -~~~~~~~~~~~~~ -On a high level, the build steps are as follows: - -1) A docker build is performed using the ``Dockerfile`` in the root of the - ironic-python-agent project. -2) The resulting docker image is exported to a filesystem image. -3) The filesystem image, along with a cloud-config.yml [1]_, are embedded into - the CoreOS PXE image at /usr/share/oem/. -4) On boot, the ironic-python-agent filesystem image is extracted and run - inside a systemd-nspawn container. /usr/share/oem is mounted into this - container as /mnt. - -Customizing the image -~~~~~~~~~~~~~~~~~~~~~ -There are several methods you can use to customize the IPA ramdisk: - -* Embed SSH keys by putting an authorized_keys file in /usr/share/oem/ -* Add your own hardware managers by modifying the Dockerfile to install - additional python packages. -* Modify the cloud-config.yml [1]_ to perform additional tasks at boot time. - diskimage-builder ----------------- -Another way to build a ramdisk image for IPA is by using diskimage-builder -[2]_. The ironic-agent diskimage-builder element builds the IPA ramdisk, which -installs all the required packages and configures services as needed. + +A production ready way to build a ramdisk image for IPA is by using +ironic-python-agent-builder_. The ``ironic-python-agent-ramdisk`` +diskimage-builder element builds the IPA ramdisk, which installs all the +required packages and configures services as needed. tinyipa ------- -Now, this method is provided -by `Ironic Python Agent Builder `_ -repo. It provides a set of scripts to build a +Now this method is provided by ironic-python-agent-builder_ +repository. It provides a set of scripts to build a Tiny Core Linux-based deployment kernel and ramdisk (code name ``tinyipa``) under ``tinyipa`` folder. @@ -74,15 +47,12 @@ packaged with IPA, pass it an initrd and kernel. e.g.:: ./iso-image-create -o /path/to/output.iso -i /path/to/ipa.initrd -k /path/to/ipa.kernel This is a generic tool that can be used to combine any initrd and kernel into -a suitable ISO for booting, and so should work against any IPA ramdisk created --- both DIB and CoreOS. +a suitable ISO for booting, and so should work against any IPA ramdisk. IPA Flags ========= You can pass a variety of flags to IPA on start up to change its behavior. -If you're using the CoreOS image, you can modify the -ironic-python-agent.service unit in cloud-config.yaml [3]_. * ``--standalone``: This disables the initial lookup and heartbeats to Ironic. Lookup sends some information to Ironic in order to determine Ironic's node @@ -186,13 +156,7 @@ Operators wishing to build their own hardware managers should reference the documentation available at `Hardware Managers`_. .. _Hardware Managers: https://docs.openstack.org/ironic-python-agent/latest/contributor/hardware_managers.html - -References -========== -.. [0] CoreOS PXE Images - https://coreos.com/docs/running-coreos/bare-metal/booting-with-pxe/ -.. [1] CoreOS Cloud Init - https://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/ -.. [2] DIB Element for IPA - https://docs.openstack.org/diskimage-builder/latest/elements/ironic-agent/README.html -.. [3] cloud-config.yaml - https://opendev.org/openstack/ironic-python-agent/src/branch/master/imagebuild/coreos/oem/cloud-config.yml +.. _ironic-python-agent-builder: https://docs.openstack.org/ironic-python-agent-builder Indices and tables ================== diff --git a/imagebuild/coreos/Makefile b/imagebuild/coreos/Makefile deleted file mode 100644 index 10e3ec269..000000000 --- a/imagebuild/coreos/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -BUILD_DIR=UPLOAD -KERNEL=$(BUILD_DIR)/coreos_production_pxe.vmlinuz -INITRD=$(BUILD_DIR)/coreos_production_pxe_image-oem.cpio.gz - -default: docker coreos - -docker: - ./docker_build.bash - -coreos: - mkdir -p $(BUILD_DIR) - ./coreos-oem-inject.py oem $(BUILD_DIR) - -clean: - rm -rf ironic-python-agent - rm -f oem/container.tar.gz - rm -f $(INITRD) - rm -f $(KERNEL) - rm -rf ../.image_cache - -docker_clean: - ./docker_clean.bash - -iso: docker coreos - ./iso-image-create -o $(BUILD_DIR)/ipa-coreos.iso -i $(INITRD) -k $(KERNEL) - -pin_latest: - ./pin_latest_coreos.sh diff --git a/imagebuild/coreos/README.rst b/imagebuild/coreos/README.rst deleted file mode 100644 index 09867854b..000000000 --- a/imagebuild/coreos/README.rst +++ /dev/null @@ -1,102 +0,0 @@ -ironic-python-agent CoreOS Image builder. -========================================= - -Builds a CoreOS image suitable for running the ironic-python-agent on a -server. - -Requirements -============ - -Must be run from a linux machine with a working docker installation and -python-pip - -Run the following locally or from a virtualenv to install the python -requirements - -:: - - pip install -r requirements.txt - -Booting the agent with this image -================================= - -PXE ---- - -The image is typically booted via PXE. Here's an example ipxe -configuration (replace my-web-server with the IP/hostname of the http -server hosting your image): - -:: - - #!ipxe - - dhcp - kernel http://my-web-server/coreos_production_pxe.vmlinuz - initrd http://my-web-server/coreos_production_pxe_image-oem.cpio.gz - boot - -You can either embed a configuration file into the image, or set -configuration options via the kernel command line. The only value most -people will need is: - -- ``ipa-api-url=http://ironic-api-server:6385`` - -But any config value supported in the agent can be given to the agent -via the kernel command line, which allows the use of the same agent -image across environments because it contains no state. - -Virtual Media -------------- - -Openstack Ironic supports booting IPA via virtual media in the form of -an ISO image. Please see Ironic documentation for details on running in -this configuration. - -Getting the agent -================= - -Download --------- - -If you don't want to build your own image, you can download a copy of -ironic-python-agent ramdisk and kernel, built using CoreOS, at: -https://tarballs.openstack.org/ironic-python-agent/coreos/files/coreos_production_pxe-master.vmlinuz -and -https://tarballs.openstack.org/ironic-python-agent/coreos/files/coreos_production_pxe_image-oem-master.cpio.gz - -"master" may be replaced with "stable-$branch" (e.g. "stable-mitaka") to -download an image built from the stable/$branch (e.g. stable/mitaka) version -of ironic-python-agent. - -Build instructions ------------------- - -To create a docker repository and embed it into a CoreOS pxe image: - -:: - - make - -To just create the docker repository in oem/container.tar.gz: - -:: - - make docker - -To embed the oem/ directory into a CoreOS pxe image: - -Note: In order to have the ability to ssh into the created image, you -need to pass ssh keys in via the kernel command line for CoreOS, or -create oem/authorized\_keys with the keys you need added before building -the image. - -:: - - make coreos - -To create a CoreOS ISO image to boot with virtual media: - -:: - - make iso diff --git a/imagebuild/coreos/build_coreos_image.sh b/imagebuild/coreos/build_coreos_image.sh deleted file mode 100755 index e7d45044a..000000000 --- a/imagebuild/coreos/build_coreos_image.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -xe -# -# This builds a CoreOS IPA image, assuming dependencies are installed -# -# The system this runs on needs these binaries available, most of which -# are installed by default on Ubuntu Trusty: -# - docker -# - gzip / gunzip -# - uuidgen -# - cpio -# - find (gnu) -# - grep -# - gpg (to validate key of downloaded CoreOS image) -# -# Alternatively, run full_trusty_build.bash which will install -# all requirements then perform the build. - -if [[ -x /usr/bin/docker.io ]]; then - sudo -E ln -sf /usr/bin/docker.io /usr/local/bin/docker -fi -sudo -E pip install -r requirements.txt -cd imagebuild/coreos -sudo -E make clean -sudo -E make - -# Output of make is owned by root, so convert owner to user who started the script -me=`whoami` -sudo chown -R $me: UPLOAD diff --git a/imagebuild/coreos/coreos-oem-inject.py b/imagebuild/coreos/coreos-oem-inject.py deleted file mode 100755 index 5c4c7a4ff..000000000 --- a/imagebuild/coreos/coreos-oem-inject.py +++ /dev/null @@ -1,472 +0,0 @@ -#!/usr/bin/env python - -# 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. - -import os -import shutil -import subprocess -import sys -import tempfile -import time - -import requests - - -def get_coreos_version(version_file, key='COREOS_VERSION_ID'): - with open(version_file) as f: - for line in f: - if line.startswith("%s=" % key): - return line.strip().split("=")[1] - raise ValueError('Could not read CoreOS version number from file') - - -COREOS_VERSION_FILE = os.path.join(os.path.dirname(__file__), 'version.txt') -COREOS_VERSION = os.environ.get('COREOS_VERSION', - get_coreos_version(COREOS_VERSION_FILE)) - -COREOS_ARCH = "amd64-usr" -COREOS_BASE_URL = ("http://stable.release.core-os.net/{arch}/{ver}" - .format(arch=COREOS_ARCH, ver=COREOS_VERSION)) -COREOS_PXE_DIGESTS = "coreos_production_pxe_image.cpio.gz.DIGESTS.asc" -COREOS_PXE_KERNEL = "coreos_production_pxe.vmlinuz" -COREOS_PXE_IMAGE = "coreos_production_pxe_image.cpio.gz" -COREOS_PXE_IMAGE_URL = "{url}/{img}".format(url=COREOS_BASE_URL, - img=COREOS_PXE_IMAGE) -COREOS_PXE_KERNEL_URL = "{url}/{kernel}".format(url=COREOS_BASE_URL, - kernel=COREOS_PXE_KERNEL) -COREOS_PXE_DIGESTS_URL = "{url}/{digests}".format(url=COREOS_BASE_URL, - digests=COREOS_PXE_DIGESTS) - - -def get_etag(cache_name): - etag_file = "{}.etag".format(cache_name) - if not os.path.exists(etag_file): - return None - with open(etag_file, 'rb') as fp: - etag = fp.read() - etag.strip() - return etag - - -def save_etag(cache_name, etag): - etag_file = "{}.etag".format(cache_name) - with open(etag_file, 'w+b') as fp: - fp.write(etag) - - -def cache_file(cache_name, remote_url): - print("{cname} <- {url}".format(cname=cache_name, url=remote_url)) - etag = get_etag(cache_name) - headers = {} - if etag: - headers['If-None-Match'] = etag - - start = time.time() - r = requests.get(remote_url, headers=headers) - - if r.status_code == 304: - print("[etag-match]") - return - - if r.status_code != 200: - raise RuntimeError('Failed to download {url}, got HTTP {code} Status ' - 'Code.'.format(url=remote_url, code=r.status_code)) - - with open(cache_name, 'w+b') as fp: - fp.write(r.content) - - print("{length} bytes in {timespan} seconds" - .format(length=len(r.content), timespan=time.time() - start)) - save_etag(cache_name, r.headers['etag']) - - -def inject_oem(archive, oem_dir, output_file): - d = tempfile.mkdtemp(prefix="oem-inject") - try: - dest_oem_dir = os.path.join(d, 'usr', 'share', 'oem') - cmd_chain = 'gunzip -c {} | cpio -iv'.format(archive) - execute(cmd_chain, shell=True, cwd=d) - - shutil.copytree(oem_dir, dest_oem_dir) - - cmd_chain = 'find . -depth -print | sort | cpio -o -H newc | ' \ - 'gzip > {}'.format(output_file) - execute(cmd_chain, shell=True, cwd=d) - finally: - shutil.rmtree(d) - return output_file - - -def validate_digests(digests, target, hash_type='sha1'): - cmd_chain = 'grep -i -A1 "^# {htype} HASH$" {digests} | grep {tgt} | ' \ - '{htype}sum -c /dev/stdin'.format(htype=hash_type, - digests=digests, - tgt=os.path.basename(target)) - execute(cmd_chain, shell=True, cwd=os.path.dirname(digests)) - - -def main(): - if len(sys.argv) != 3: - print("usage: {} [oem-directory-to-inject] [output-directory]" - .format(os.path.basename(__file__))) - return - - oem_dir = os.path.abspath(os.path.expanduser(sys.argv[1])) - output_dir = os.path.abspath(os.path.expanduser(sys.argv[2])) - - if not os.path.exists(oem_dir): - print("Error: {} doesn't exist.".format(oem_dir)) - return - - if not os.path.exists(os.path.join(oem_dir, 'cloud-config.yml')): - print("Error: {} is missing cloud-config.yml".format(oem_dir)) - return - - here = os.path.abspath(os.path.dirname(__file__)) - - top_cache_dir = os.path.join(os.path.dirname(here), ".image_cache") - cache_dir = os.path.join(top_cache_dir, COREOS_ARCH, COREOS_VERSION) - - if not os.path.exists(cache_dir): - os.makedirs(cache_dir) - - orig_cpio = os.path.join(cache_dir, COREOS_PXE_IMAGE) - digests = os.path.join(cache_dir, COREOS_PXE_DIGESTS) - kernel = os.path.join(cache_dir, COREOS_PXE_KERNEL) - - cache_file(digests, COREOS_PXE_DIGESTS_URL) - gpg_verify_file(digests) - cache_file(kernel, COREOS_PXE_KERNEL_URL) - validate_digests(digests, kernel) - cache_file(orig_cpio, COREOS_PXE_IMAGE_URL) - validate_digests(digests, orig_cpio) - - if not os.path.exists(output_dir): - os.makedirs(output_dir) - - output_kernel = os.path.join(output_dir, os.path.basename(kernel)) - output_cpio = os.path.join( - output_dir, - os.path.basename(orig_cpio).replace('.cpio.gz', '-oem.cpio.gz')) - inject_oem(orig_cpio, oem_dir, output_cpio) - shutil.copy(kernel, output_kernel) - - -def gpg_verify_file(ascfile): - d = tempfile.mkdtemp(prefix="oem-gpg-validate") - try: - tmpring = os.path.join(d, 'tmp.gpg') - key = os.path.join(d, 'coreos.key') - with open(key, 'w+b') as fp: - fp.write(GPG_KEY) - - execute(['gpg', '--batch', '--no-default-keyring', - '--keyring', tmpring, '--import', key]) - - execute(['gpg', '--batch', '--no-default-keyring', - '--keyring', tmpring, '--verify', ascfile]) - - finally: - shutil.rmtree(d) - - -def execute(cmd, shell=False, cwd=None): - popen_obj = subprocess.Popen(cmd, shell=shell, cwd=cwd) - popen_obj.communicate() - if popen_obj.returncode != 0: - raise subprocess.CalledProcessError(returncode=popen_obj.returncode, - cmd=cmd) - - -GPG_KEY = """-----BEGIN PGP PUBLIC KEY BLOCK----- - -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 -2jibQQI= -=KhYl ------END PGP PUBLIC KEY BLOCK----- -""" - -if __name__ == "__main__": - main() diff --git a/imagebuild/coreos/docker_build.bash b/imagebuild/coreos/docker_build.bash deleted file mode 100755 index 5f503d37a..000000000 --- a/imagebuild/coreos/docker_build.bash +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -# -# docker_build.bash - Prepares and outputs a tarball'd docker repository -# suitable for injection into a coreos pxe image -# - -set -e - -OUTPUT_FILE="oem/container.tar.gz" -IPA_ROOT=$(readlink -f $(dirname $0)/../../) - -# If there's already a container.tar.gz, don't overwrite it -- instead, bail -if [[ -e "${OUTPUT_FILE}" ]]; then - echo "${OUTPUT_FILE} already exists. Will not overwrite. Exiting." - exit 1 -fi - -# Build the docker image -# Everything from ${IPA_ROOT} will be available under /tmp/ironic-python-agent in Docker -cd ${IPA_ROOT} - -imagebuild/common/generate_upper_constraints.sh ${IPA_ROOT}/upper-constraints.txt - -# TODO(jlvilla): Once Docker 1.9 is widely deployed, switch to using the 'ARG' -# command which was added in Docker 1.9. Currently Ubuntu 14.04 uses Docker -# 1.6. Using the ARG command will be a much cleaner solution. -mv proxy.sh .proxy.sh.save || true -# Create a temporary proxy.sh script, that will be used by the Dockerfile. -# Since we are calling 'docker build' we can not use --env-file/--env as those -# are arguments to 'docker run' -echo '#!/bin/sh' > proxy.sh -echo 'echo Running: $*' >> proxy.sh -echo "http_proxy=${http_proxy:-} https_proxy=${https_proxy:-} no_proxy=${no_proxy:-} "'$*' >> proxy.sh -chmod 0755 proxy.sh - -docker build -t oemdocker . - -# Restore saved copy -mv .proxy.sh.save proxy.sh || true - -cd - - -# Create a UUID to identify the build -CONTAINER_UUID=`uuidgen` - -# Export the oemdocker repository to a tarball so it can be embedded in CoreOS -# TODO: Investigate running a container and using "export" to flatten the -# image to shrink the CoreOS fs size. This will also require run.sh to -# use docker import instead of docker load as well. -docker run oemdocker echo $CONTAINER_UUID -CONTAINER=`docker ps -a --no-trunc |grep $CONTAINER_UUID|awk '{print $1}'|head -n1` -echo $CONTAINER -docker export $CONTAINER | gzip > ${OUTPUT_FILE} diff --git a/imagebuild/coreos/docker_clean.bash b/imagebuild/coreos/docker_clean.bash deleted file mode 100755 index 8b33850c9..000000000 --- a/imagebuild/coreos/docker_clean.bash +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -# -# Cleans up docker images and containers - -containers=$(docker ps -a -q) -images=$(docker images -q) - -# All the docker commands followed by || true because occasionally docker -# will fail to remove an image or container, & I want make to keep going anyway -if [[ ! -z "$containers" ]]; then - docker rm $containers || true -fi - -if [[ ! -z "$images" ]]; then - docker rmi $images || true -fi diff --git a/imagebuild/coreos/full_trusty_build.sh b/imagebuild/coreos/full_trusty_build.sh deleted file mode 100755 index 14f6abff5..000000000 --- a/imagebuild/coreos/full_trusty_build.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash -xe -# -# From a base-trusty node, this should build a CoreOS IPA image -# suitable for use in testing or production. -# - -BRANCH_PATH=${BRANCH_PATH:-master} -# NOTE(lucasagomes): List of dependencies for Red Hat systems -REDHAT_PACKAGES="docker-io gpg" - -if [ -x "/usr/bin/apt-get" ]; then - sudo -E apt-get update - # apparmor is an undeclared dependency for docker on ubuntu - # https://github.com/docker/docker/issues/9745 - sudo -E apt-get install -y docker.io apparmor cgroup-lite -elif [ -x "/usr/bin/dnf" ]; then - sudo -E dnf install -y $REDHAT_PACKAGES -elif [ -x "/usr/bin/yum" ]; then - sudo -E yum install -y $REDHAT_PACKAGES -else - echo "No supported package manager installed on system. Supported: apt, yum, dnf" - exit 1 -fi - -imagebuild/coreos/build_coreos_image.sh - -BUILD_DIR=imagebuild/coreos/UPLOAD -if [ "$BRANCH_PATH" != "master" ]; then - # add the branch name - mv $BUILD_DIR/coreos_production_pxe_image-oem.cpio.gz $BUILD_DIR/coreos_production_pxe_image-oem-$BRANCH_PATH.cpio.gz - mv $BUILD_DIR/coreos_production_pxe.vmlinuz $BUILD_DIR/coreos_production_pxe-$BRANCH_PATH.vmlinuz -else - # in the past, we published master without branch name - # copy the files in this case such that both are published - cp $BUILD_DIR/coreos_production_pxe_image-oem.cpio.gz $BUILD_DIR/coreos_production_pxe_image-oem-$BRANCH_PATH.cpio.gz - cp $BUILD_DIR/coreos_production_pxe.vmlinuz $BUILD_DIR/coreos_production_pxe-$BRANCH_PATH.vmlinuz -fi - -# Generate checksum files -pushd $BUILD_DIR > /dev/null -for x in *.vmlinuz *.cpio.gz; do - sha256sum $x > $x.sha256 -done -popd > /dev/null - -tar czf ipa-coreos-$BRANCH_PATH.tar.gz $BUILD_DIR/coreos_production_pxe_image-oem-$BRANCH_PATH.cpio.gz $BUILD_DIR/coreos_production_pxe-$BRANCH_PATH.vmlinuz -if [ "$BRANCH_PATH" = "master" ]; then - # again, publish with and without the branch on master for historical reasons - cp ipa-coreos-$BRANCH_PATH.tar.gz ipa-coreos.tar.gz -fi - -# Generate checksum files -for x in *.tar.gz; do - sha256sum $x > $x.sha256 -done diff --git a/imagebuild/coreos/iso-image-create b/imagebuild/coreos/iso-image-create deleted file mode 100755 index 53b52465e..000000000 --- a/imagebuild/coreos/iso-image-create +++ /dev/null @@ -1,168 +0,0 @@ -#!/bin/bash -# -# Copyright 2012 Hewlett-Packard Development Company, L.P. -# All Rights Reserved. -# -# 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 script generates iso image from the given kernel and ramdisk - -SCRIPTNAME=`basename $0` -TMP_BUILD_DIR="/tmp/$SCRIPTNAME.$$" -QEMU_IMG="/usr/bin/qemu-img" -MKISOFS="/usr/bin/mkisofs" - - -function show_options() { - - echo "Usage: ${SCRIPTNAME} [options]" - echo - echo "Options:" - - echo " -o output filename " - echo " -i initrd " - echo " -k kernel " -} - -function cleanup() { - - v_print "Cleaning up.." - rm -rf $TMP_BUILD_DIR -} - -function err_print() { - echo "ERROR: $@" 1>&2; -} - -function v_print() { - - echo "$*" -} - - -# Parse command line options -ARGS=`getopt -o "o:i:k:" -l "output,initrd,kernel:" \ - -n "$SCRIPTNAME" -- "$@"` -if [ $? -ne 0 ]; -then - exit 1 -fi - -eval set -- "$ARGS" - -while true ; do - case "$1" in - -o) OUTPUT_FILENAME=$2; shift 2 ;; - -i) INITRD=$2; shift 2 ;; - -k) KERNEL=$2; shift 2 ;; - # *) show_options ; exit 1 ;; - --) shift; break ;; - esac -done - -# Verify whether kernel, initrd, and the image file is present -if [ -z "$OUTPUT_FILENAME" ]; then - err_print "Output filename not provided." - show_options - exit 1 -fi - -if [ -z "$INITRD" ]; then - err_print "Initrd not provided." - show_options - exit 1 -fi - -if [ -z "$KERNEL" ]; then - err_print "Kernel not provided." - show_options - exit 1 -fi - -# Create a temporary build directory for holiding the contents of iso -TMP_IMAGE_DIR="$TMP_BUILD_DIR/image" -v_print "Creating temporary directory $TMP_IMAGE_DIR" -mkdir -p "$TMP_IMAGE_DIR" - -# Copy isolinux bin to the isolinux directory -mkdir -p "$TMP_IMAGE_DIR/isolinux" -v_print "Copying isolinux.bin" -if [ -f /usr/share/syslinux/isolinux.bin ] -then - cp /usr/share/syslinux/isolinux.bin "$TMP_IMAGE_DIR/isolinux" - -elif [ -f /usr/lib/syslinux/isolinux.bin ] -then - cp /usr/lib/syslinux/isolinux.bin "$TMP_IMAGE_DIR/isolinux" - -elif [ -f /usr/lib/ISOLINUX/isolinux.bin ] -then - cp /usr/lib/ISOLINUX/isolinux.bin "$TMP_IMAGE_DIR/isolinux" - -else - err_print "Could not find isolinux.bin. Install syslinux or isolinux?" - cleanup - exit 1 -fi - -# Copy ldlinux.c32 to the isolinux directory -v_print "Copying ldlinux.c32" -if [ -f /usr/share/syslinux/ldlinux.c32 ] -then - cp /usr/share/syslinux/ldlinux.c32 "$TMP_IMAGE_DIR/isolinux" -elif [ -f /usr/lib/syslinux/modules/bios/ldlinux.c32 ] -then - cp /usr/lib/syslinux/modules/bios/ldlinux.c32 "$TMP_IMAGE_DIR/isolinux" -fi - -# Copy initrd, kernel -v_print "Copying kernel to $TMP_IMAGE_DIR/vmlinuz" -cp $KERNEL "$TMP_IMAGE_DIR/vmlinuz" -if [ $? -ne 0 ]; then - err_print "Failed to copy $KERNEL to $TMP_IMAGE_DIR" - cleanup - exit 1 -fi - -v_print "Copying initrd to $TMP_IMAGE_DIR/initrd" -cp $INITRD "$TMP_IMAGE_DIR/initrd" -if [ $? -ne 0 ]; then - err_print "Failed to copy $INITRD to $TMP_IMAGE_DIR" - cleanup - exit 1 -fi - -# Generate isolinux.cfg for default booting -v_print "Generating isolinux.cfg" -echo "\ -DEFAULT install -LABEL install - menu label "Install image" - kernel /vmlinuz - append initrd=/initrd boot_method=vmedia -- -TIMEOUT 5 -PROMPT 0 " > "$TMP_IMAGE_DIR/isolinux/isolinux.cfg" - -# Convert relative path output filename to absolute path -echo $OUTPUT_FILENAME | grep -q '^/' -if [ $? -ne 0 ]; then - OUTPUT_FILENAME="$PWD/$OUTPUT_FILENAME" -fi - -# Create the ISO -v_print "Generating the ISO" -cd $TMP_IMAGE_DIR && $MKISOFS -r -V "INSTALL_IMAGE" -cache-inodes -J -l -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -o $OUTPUT_FILENAME . - -# Cleanup -cleanup - diff --git a/imagebuild/coreos/oem/cloud-config.yml b/imagebuild/coreos/oem/cloud-config.yml deleted file mode 100644 index 670d2486d..000000000 --- a/imagebuild/coreos/oem/cloud-config.yml +++ /dev/null @@ -1,265 +0,0 @@ -#cloud-config - -coreos: - units: - - name: user-configdrive.service - mask: true - - - name: user-configvirtfs.service - mask: true - - - name: user-configdrive.path - mask: true - - - name: media-configdrive.mount - mask: true - - - name: media-configvirtfs.mount - mask: true - - - name: update-engine.service - mask: true - - - name: update-engine-stub.service - mask: true - - - name: resize-btrfs.service - mask: true - - - name: locksmithd.service - mask: true - - - name: fleet.service - mask: true - - - name: etcd.service - mask: true - - - name: usr-share-oem.mount - mask: true - - - name: ironic-python-agent-embed-ssh-keys.service - command: start - content: | - [Unit] - Description=Migrate embedded SSH keys into core user - ConditionFileNotEmpty=/usr/share/oem/authorized_keys - - [Service] - Type=oneshot - RemainAfterExit=yes - ExecStart=/usr/bin/update-ssh-keys -a oem /usr/share/oem/authorized_keys - - - name: ironic-python-agent-container-creation.service - command: start - content: | - [Unit] - Description=Untar Provided IPA Container - - [Service] - Type=oneshot - RemainAfterExit=yes - ExecStart=/usr/bin/mkdir -p /opt/ironic-python-agent - ExecStart=/usr/bin/tar -x --no-xattrs \ - -C /opt/ironic-python-agent \ - -f /usr/share/oem/container.tar.gz - - - name: opt-ironic\x2dpython\x2dagent-proc.mount - command: start - content: | - [Unit] - DefaultDependencies=no - Conflicts=umount.target - Before=umount.target - After=ironic-python-agent-container-creation.service - Requires=ironic-python-agent-container-creation.service - - [Mount] - What=/proc - Where=/opt/ironic-python-agent/proc - Type=none - Options=bind - - - name: opt-ironic\x2dpython\x2dagent-dev.mount - command: start - content: | - [Unit] - DefaultDependencies=no - Conflicts=umount.target - Before=umount.target - After=ironic-python-agent-container-creation.service - Requires=ironic-python-agent-container-creation.service - - [Mount] - What=/dev - Where=/opt/ironic-python-agent/dev - Type=none - Options=bind - - - name: opt-ironic\x2dpython\x2dagent-dev-pts.mount - command: start - content: | - [Unit] - DefaultDependencies=no - Conflicts=umount.target - Before=umount.target - After=ironic-python-agent-container-creation.service - Requires=ironic-python-agent-container-creation.service - - [Mount] - What=/dev/pts - Where=/opt/ironic-python-agent/dev/pts - Type=none - Options=bind - - - name: opt-ironic\x2dpython\x2dagent-sys.mount - command: start - content: | - [Unit] - DefaultDependencies=no - Conflicts=umount.target - Before=umount.target - After=ironic-python-agent-container-creation.service - Requires=ironic-python-agent-container-creation.service - - [Mount] - What=/sys - Where=/opt/ironic-python-agent/sys - Type=none - Options=bind - - - name: opt-ironic\x2dpython\x2dagent-run.mount - command: start - content: | - [Unit] - DefaultDependencies=no - Conflicts=umount.target - Before=umount.target - After=ironic-python-agent-container-creation.service - Requires=ironic-python-agent-container-creation.service - - [Mount] - What=/run - Where=/opt/ironic-python-agent/run - Type=none - Options=bind - - - name: opt-ironic\x2dpython\x2dagent-mnt.mount - command: start - content: | - [Unit] - DefaultDependencies=no - Conflicts=umount.target - Before=umount.target - After=ironic-python-agent-container-creation.service - Requires=ironic-python-agent-container-creation.service - - [Mount] - What=/usr/share/oem - Where=/opt/ironic-python-agent/mnt - Type=none - Options=bind - - - name: opt-ironic\x2dpython\x2dagent-etc-resolvconf.service - command: start - content: | - [Unit] - Description="Provide host resolv.conf to chroot" - After=ironic-python-agent-container-creation.service - Requires=ironic-python-agent-container-creation.service - - [Service] - Type=oneshot - RemainAfterExit=yes - ExecStart=/bin/ln -f /etc/resolv.conf /opt/ironic-python-agent/etc/resolv.conf - - - name: opt-ironic\x2dpython\x2dagent-run-log.mount - command: start - content: | - [Unit] - DefaultDependencies=no - Conflicts=umount.target - Before=umount.target - After=ironic-python-agent-container-creation.service - Requires=ironic-python-agent-container-creation.service - - [Mount] - What=/run/log - Where=/opt/ironic-python-agent/run/log - Type=none - Options=bind - - - name: setup-rescue-directories.service - command: start - content: | - [Unit] - Description=Create directories for rescue mode configuration - After=ironic-python-agent-container-creation.service - Requires=ironic-python-agent-container-creation.service - - [Service] - Type=oneshot - RemainAfterExit=yes - ExecStart=/usr/bin/mkdir /etc/ipa-rescue-config - ExecStart=/usr/bin/mkdir /opt/ironic-python-agent/etc/ipa-rescue-config - - - name: opt-ironic\x2dpython\x2dagent-etc-ipa\x2drescue\x2dconfig.mount - command: start - content: | - [Unit] - DefaultDependencies=no - - Conflicts=umount.target - Before=umount.target - - After=ironic-python-agent-container-creation.service - After=setup-rescue-directories.service - - Requires=ironic-python-agent-container-creation.service - Requires=setup-rescue-directories.service - - [Mount] - What=/etc/ipa-rescue-config - Where=/opt/ironic-python-agent/etc/ipa-rescue-config - Type=none - Options=bind - - - name: ironic-python-agent.service - command: start - content: | - [Unit] - Description=Ironic Python Agent - After=ironic-python-agent-container-creation.service - After=opt-ironic\x2dpython\x2dagent-proc.mount - After=opt-ironic\x2dpython\x2dagent-dev.mount - After=opt-ironic\x2dpython\x2dagent-dev-pts.mount - After=opt-ironic\x2dpython\x2dagent-sys.mount - After=opt-ironic\x2dpython\x2dagent-run.mount - After=opt-ironic\x2dpython\x2dagent-mnt.mount - After=opt-ironic\x2dpython\x2dagent-etc-resolvconf.service - After=opt-ironic\x2dpython\x2dagent-run-log.mount - After=setup-rescue-directories.service - After=opt-ironic\x2dpython\x2dagent-etc-ipa\x2drescue\x2dconfig.mount - - Requires=ironic-python-agent-container-creation.service - Requires=opt-ironic\x2dpython\x2dagent-proc.mount - Requires=opt-ironic\x2dpython\x2dagent-dev.mount - Requires=opt-ironic\x2dpython\x2dagent-dev-pts.mount - Requires=opt-ironic\x2dpython\x2dagent-sys.mount - Requires=opt-ironic\x2dpython\x2dagent-run.mount - Requires=opt-ironic\x2dpython\x2dagent-mnt.mount - Requires=opt-ironic\x2dpython\x2dagent-etc-resolvconf.service - Requires=opt-ironic\x2dpython\x2dagent-run-log.mount - Requires=setup-rescue-directories.service - Requires=opt-ironic\x2dpython\x2dagent-etc-ipa\x2drescue\x2dconfig.mount - - [Service] - ExecStartPre=-/usr/sbin/modprobe ipmi_msghandler - ExecStartPre=-/usr/sbin/modprobe ipmi_devintf - ExecStartPre=-/usr/sbin/modprobe ipmi_si - ExecStart=/usr/bin/chroot /opt/ironic-python-agent \ - env PATH=/sbin:/usr/sbin:/bin:/usr/bin:$PATH \ - /usr/local/bin/ironic-python-agent - ExecStopPost=/usr/share/oem/finalize_rescue.sh - Restart=on-failure - RestartSec=30s diff --git a/imagebuild/coreos/oem/finalize_rescue.sh b/imagebuild/coreos/oem/finalize_rescue.sh deleted file mode 100755 index e8e5b744a..000000000 --- a/imagebuild/coreos/oem/finalize_rescue.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash - -create_rescue_user() { - echo "Adding rescue user with root privileges..." - crypted_pass=$( /etc/sudoers.d/rescue -} - -setup_dhcp_network() { - DHCP_CONFIG_TEMPLATE=/usr/share/oem/rescue-dhcp-config.network - - echo "Configuring DHCP networks on all interfaces..." - echo "Removing all existing network configuration..." - sudo rm /etc/systemd/network/* - - echo "Configuring all interfaces except loopback to DHCP..." - for interface in $(ls /sys/class/net) ; do - if [ $interface != "lo" ]; then - sudo sed "s/RESCUE_NETWORK_INTERFACE/$interface/" $DHCP_CONFIG_TEMPLATE > /etc/systemd/network/50-$interface.network || true - fi - done - - sudo systemctl restart systemd-networkd -} - -echo "Attempting to start rescue mode configuration..." -if [ -f /etc/ipa-rescue-config/ipa-rescue-password ]; then - # NOTE(mariojv) An exit code of 0 is always forced here to avoid making IPA - # restart after something fails. IPA should not restart when this script - # executes to avoid exposing its API to a tenant network. - create_rescue_user || exit 0 - setup_dhcp_network || exit 0 - # TODO(mariojv) Add support for configdrive and static networks -else - echo "One or more of the files needed for rescue mode does not exist, not rescuing." -fi diff --git a/imagebuild/coreos/oem/rescue-dhcp-config.network b/imagebuild/coreos/oem/rescue-dhcp-config.network deleted file mode 100644 index 0f7ded347..000000000 --- a/imagebuild/coreos/oem/rescue-dhcp-config.network +++ /dev/null @@ -1,5 +0,0 @@ -[Match] -Name=RESCUE_NETWORK_INTERFACE - -[Network] -DHCP=yes diff --git a/imagebuild/coreos/pin_latest_coreos.sh b/imagebuild/coreos/pin_latest_coreos.sh deleted file mode 100755 index 486973d3a..000000000 --- a/imagebuild/coreos/pin_latest_coreos.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -xe - -HERE=$(dirname $0) - -CHANNEL="stable" -ARCH="amd64-usr" -VERSION="current" - -URL="https://${CHANNEL}.release.core-os.net/${ARCH}/${VERSION}/version.txt" - -wget $URL -O "${HERE}/version.txt" diff --git a/imagebuild/coreos/version.txt b/imagebuild/coreos/version.txt deleted file mode 100644 index 46479cff2..000000000 --- a/imagebuild/coreos/version.txt +++ /dev/null @@ -1,7 +0,0 @@ -COREOS_BUILD=1688 -COREOS_BRANCH=5 -COREOS_PATCH=3 -COREOS_VERSION=1688.5.3 -COREOS_VERSION_ID=1688.5.3 -COREOS_BUILD_ID="2018-04-03-0540" -COREOS_SDK_VERSION=1688.5.2 diff --git a/playbooks/ironic-python-agent-buildimage/run.yaml b/playbooks/ironic-python-agent-buildimage/run.yaml index 3d4f81c16..3ffcab6ad 100644 --- a/playbooks/ironic-python-agent-buildimage/run.yaml +++ b/playbooks/ironic-python-agent-buildimage/run.yaml @@ -48,11 +48,6 @@ make clean popd ;; - coreos) - imagebuild/coreos/full_trusty_build.sh - mv imagebuild/coreos/UPLOAD/coreos_production_pxe* UPLOAD_RAW - mv ipa-coreos*.tar.gz* UPLOAD_TAR - ;; dib) NAME=ipa-{{ image_distro }}-$BRANCH_PATH ironic-python-agent-builder -e dhcp-all-interfaces -o $NAME {{ image_distro }} diff --git a/playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-direct-coreos-src/post.yaml b/playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-direct-coreos-src/post.yaml deleted file mode 100644 index e07f5510a..000000000 --- a/playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-direct-coreos-src/post.yaml +++ /dev/null @@ -1,15 +0,0 @@ -- hosts: primary - tasks: - - - name: Copy files from {{ ansible_user_dir }}/workspace/ on node - synchronize: - src: '{{ ansible_user_dir }}/workspace/' - dest: '{{ zuul.executor.log_root }}' - mode: pull - copy_links: true - verify_host: true - rsync_opts: - - --include=/logs/** - - --include=*/ - - --exclude=* - - --prune-empty-dirs diff --git a/playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-direct-coreos-src/run.yaml b/playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-direct-coreos-src/run.yaml deleted file mode 100644 index 37c0f34b5..000000000 --- a/playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-direct-coreos-src/run.yaml +++ /dev/null @@ -1,111 +0,0 @@ -- hosts: all - name: Autoconverted job legacy-tempest-dsvm-ironic-ipa-partition-bios-agent_ipmitool-coreos-src - from old job gate-tempest-dsvm-ironic-ipa-partition-bios-agent_ipmitool-coreos-src-ubuntu-xenial - tasks: - - - name: Ensure legacy workspace directory - file: - path: '{{ ansible_user_dir }}/workspace' - state: directory - - - shell: - cmd: | - set -e - set -x - cat > clonemap.yaml << EOF - clonemap: - - name: openstack/devstack-gate - dest: devstack-gate - EOF - /usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \ - https://opendev.org \ - openstack/devstack-gate - executable: /bin/bash - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - # NOTE(TheJulia): The CoreOS ramdisk is generally slow to startup, - # on the order of 300-500 seconds. - - shell: - cmd: | - cat << 'EOF' >> ironic-extra-vars - export DEVSTACK_GATE_OS_TEST_TIMEOUT=2400 - export DEVSTACK_GATE_TEMPEST_BAREMETAL_BUILD_TIMEOUT=1800 - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_ENGINE=auto" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_SPECS_CPU=1" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_SPECS_RAM=2048" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_RAMDISK_TYPE=coreos" - EOF - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - - shell: - cmd: | - cat << 'EOF' >> ironic-extra-vars - export DEVSTACK_GATE_TEMPEST_REGEX="ironic_tempest_plugin.tests.scenario" - EOF - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - - shell: - cmd: | - cat << 'EOF' >> ironic-vars-early - # use tempest plugin - export DEVSTACK_LOCAL_CONFIG+=$'\n'"TEMPEST_PLUGINS+=' /opt/stack/new/ironic-tempest-plugin'" - export TEMPEST_CONCURRENCY=1 - EOF - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - - shell: - cmd: | - set -e - set -x - export PROJECTS="openstack/ironic $PROJECTS" - export PROJECTS="openstack/ironic-lib $PROJECTS" - export PROJECTS="openstack/ironic-python-agent $PROJECTS" - export PROJECTS="openstack/ironic-tempest-plugin $PROJECTS" - export PROJECTS="openstack/python-ironicclient $PROJECTS" - export PROJECTS="openstack/virtualbmc $PROJECTS" - export PYTHONUNBUFFERED=true - export DEVSTACK_GATE_TEMPEST=1 - export DEVSTACK_GATE_IRONIC=1 - export DEVSTACK_GATE_NEUTRON=1 - export DEVSTACK_GATE_VIRT_DRIVER=ironic - export DEVSTACK_GATE_CONFIGDRIVE=1 - export DEVSTACK_GATE_IRONIC_DRIVER=ipmi - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_DEFAULT_DEPLOY_INTERFACE=direct" - # direct deploy requires Swift temporary URLs - export DEVSTACK_LOCAL_CONFIG+=$'\n'"SWIFT_ENABLE_TEMPURLS=True" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"SWIFT_TEMPURL_KEY=secretkey" - - if [[ ! "stable/newton stable/ocata stable/pike" =~ $ZUUL_BRANCH ]] ; then - export DEVSTACK_GATE_TLSPROXY=1 - fi - - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_TEMPEST_WHOLE_DISK_IMAGE=False" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_EPHEMERAL_DISK=1" - - export DEVSTACK_GATE_IRONIC_BUILD_RAMDISK=1 - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_INSPECTOR_BUILD_RAMDISK=True" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"USE_SUBNETPOOL=False" - - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_COUNT=1" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"LIBVIRT_NIC_DRIVER=e1000" - # Ensure the ironic-vars-EARLY file exists - touch ironic-vars-early - # Pull in the EARLY variables injected by the optional builders - source ironic-vars-early - - export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin ironic https://opendev.org/openstack/ironic" - - # Ensure the ironic-EXTRA-vars file exists - touch ironic-extra-vars - # Pull in the EXTRA variables injected by the optional builders - source ironic-extra-vars - - cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh - ./safe-devstack-vm-gate-wrap.sh - executable: /bin/bash - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' diff --git a/playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-iscsi-coreos-src/post.yaml b/playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-iscsi-coreos-src/post.yaml deleted file mode 100644 index e07f5510a..000000000 --- a/playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-iscsi-coreos-src/post.yaml +++ /dev/null @@ -1,15 +0,0 @@ -- hosts: primary - tasks: - - - name: Copy files from {{ ansible_user_dir }}/workspace/ on node - synchronize: - src: '{{ ansible_user_dir }}/workspace/' - dest: '{{ zuul.executor.log_root }}' - mode: pull - copy_links: true - verify_host: true - rsync_opts: - - --include=/logs/** - - --include=*/ - - --exclude=* - - --prune-empty-dirs diff --git a/playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-iscsi-coreos-src/run.yaml b/playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-iscsi-coreos-src/run.yaml deleted file mode 100644 index 7a085a401..000000000 --- a/playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-iscsi-coreos-src/run.yaml +++ /dev/null @@ -1,108 +0,0 @@ -- hosts: all - name: Autoconverted job legacy-tempest-dsvm-ironic-ipa-partition-bios-pxe_ipmitool-coreos-src - from old job gate-tempest-dsvm-ironic-ipa-partition-bios-pxe_ipmitool-coreos-src-ubuntu-xenial - tasks: - - - name: Ensure legacy workspace directory - file: - path: '{{ ansible_user_dir }}/workspace' - state: directory - - - shell: - cmd: | - set -e - set -x - cat > clonemap.yaml << EOF - clonemap: - - name: openstack/devstack-gate - dest: devstack-gate - EOF - /usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \ - https://opendev.org \ - openstack/devstack-gate - executable: /bin/bash - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - # NOTE(TheJulia): The CoreOS ramdisk is generally slow to startup, - # on the order of 300-500 seconds. - - shell: - cmd: | - cat << 'EOF' >> ironic-extra-vars - export DEVSTACK_GATE_OS_TEST_TIMEOUT=2400 - export DEVSTACK_GATE_TEMPEST_BAREMETAL_BUILD_TIMEOUT=1800 - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_ENGINE=auto" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_SPECS_CPU=1" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_SPECS_RAM=2048" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_RAMDISK_TYPE=coreos" - EOF - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - - shell: - cmd: | - cat << 'EOF' >> ironic-extra-vars - export DEVSTACK_GATE_TEMPEST_REGEX="ironic_tempest_plugin.tests.scenario" - - EOF - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - - shell: - cmd: | - cat << 'EOF' >> ironic-vars-early - # use tempest plugin - export DEVSTACK_LOCAL_CONFIG+=$'\n'"TEMPEST_PLUGINS+=' /opt/stack/new/ironic-tempest-plugin'" - export TEMPEST_CONCURRENCY=1 - EOF - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - - shell: - cmd: | - set -e - set -x - export PROJECTS="openstack/ironic $PROJECTS" - export PROJECTS="openstack/ironic-lib $PROJECTS" - export PROJECTS="openstack/ironic-python-agent $PROJECTS" - export PROJECTS="openstack/ironic-tempest-plugin $PROJECTS" - export PROJECTS="openstack/python-ironicclient $PROJECTS" - export PROJECTS="openstack/virtualbmc $PROJECTS" - export PYTHONUNBUFFERED=true - export DEVSTACK_GATE_TEMPEST=1 - export DEVSTACK_GATE_IRONIC=1 - export DEVSTACK_GATE_NEUTRON=1 - export DEVSTACK_GATE_VIRT_DRIVER=ironic - export DEVSTACK_GATE_CONFIGDRIVE=1 - export DEVSTACK_GATE_IRONIC_DRIVER=ipmi - - if [[ ! "stable/newton stable/ocata stable/pike" =~ $ZUUL_BRANCH ]] ; then - export DEVSTACK_GATE_TLSPROXY=1 - fi - - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_TEMPEST_WHOLE_DISK_IMAGE=False" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_EPHEMERAL_DISK=1" - - export DEVSTACK_GATE_IRONIC_BUILD_RAMDISK=1 - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_INSPECTOR_BUILD_RAMDISK=True" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"USE_SUBNETPOOL=False" - - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_COUNT=1" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"LIBVIRT_NIC_DRIVER=e1000" - # Ensure the ironic-vars-EARLY file exists - touch ironic-vars-early - # Pull in the EARLY variables injected by the optional builders - source ironic-vars-early - - export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin ironic https://opendev.org/openstack/ironic" - - # Ensure the ironic-EXTRA-vars file exists - touch ironic-extra-vars - # Pull in the EXTRA variables injected by the optional builders - source ironic-extra-vars - - cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh - ./safe-devstack-vm-gate-wrap.sh - executable: /bin/bash - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' diff --git a/playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-direct-coreos-src/post.yaml b/playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-direct-coreos-src/post.yaml deleted file mode 100644 index e07f5510a..000000000 --- a/playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-direct-coreos-src/post.yaml +++ /dev/null @@ -1,15 +0,0 @@ -- hosts: primary - tasks: - - - name: Copy files from {{ ansible_user_dir }}/workspace/ on node - synchronize: - src: '{{ ansible_user_dir }}/workspace/' - dest: '{{ zuul.executor.log_root }}' - mode: pull - copy_links: true - verify_host: true - rsync_opts: - - --include=/logs/** - - --include=*/ - - --exclude=* - - --prune-empty-dirs diff --git a/playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-direct-coreos-src/run.yaml b/playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-direct-coreos-src/run.yaml deleted file mode 100644 index 30abbd49c..000000000 --- a/playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-direct-coreos-src/run.yaml +++ /dev/null @@ -1,112 +0,0 @@ -- hosts: all - name: Autoconverted job legacy-tempest-dsvm-ironic-ipa-wholedisk-bios-agent_ipmitool-coreos-src - from old job gate-tempest-dsvm-ironic-ipa-wholedisk-bios-agent_ipmitool-coreos-src-ubuntu-xenial - tasks: - - - name: Ensure legacy workspace directory - file: - path: '{{ ansible_user_dir }}/workspace' - state: directory - - - shell: - cmd: | - set -e - set -x - cat > clonemap.yaml << EOF - clonemap: - - name: openstack/devstack-gate - dest: devstack-gate - EOF - /usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \ - https://opendev.org \ - openstack/devstack-gate - executable: /bin/bash - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - # NOTE(TheJulia): The CoreOS ramdisk is generally slow to startup, - # on the order of 300-500 seconds. - - shell: - cmd: | - cat << 'EOF' >> ironic-extra-vars - export DEVSTACK_GATE_OS_TEST_TIMEOUT=2400 - export DEVSTACK_GATE_TEMPEST_BAREMETAL_BUILD_TIMEOUT=1800 - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_ENGINE=auto" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_SPECS_CPU=1" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_SPECS_RAM=2048" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_RAMDISK_TYPE=coreos" - EOF - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - - shell: - cmd: | - cat << 'EOF' >> ironic-extra-vars - export DEVSTACK_GATE_TEMPEST_REGEX="ironic_tempest_plugin.tests.scenario" - - EOF - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - - shell: - cmd: | - cat << 'EOF' >> ironic-vars-early - # use tempest plugin - export DEVSTACK_LOCAL_CONFIG+=$'\n'"TEMPEST_PLUGINS+=' /opt/stack/new/ironic-tempest-plugin'" - export TEMPEST_CONCURRENCY=1 - EOF - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - - shell: - cmd: | - set -e - set -x - export PROJECTS="openstack/ironic $PROJECTS" - export PROJECTS="openstack/ironic-lib $PROJECTS" - export PROJECTS="openstack/ironic-python-agent $PROJECTS" - export PROJECTS="openstack/ironic-tempest-plugin $PROJECTS" - export PROJECTS="openstack/python-ironicclient $PROJECTS" - export PROJECTS="openstack/virtualbmc $PROJECTS" - export PYTHONUNBUFFERED=true - export DEVSTACK_GATE_TEMPEST=1 - export DEVSTACK_GATE_IRONIC=1 - export DEVSTACK_GATE_NEUTRON=1 - export DEVSTACK_GATE_VIRT_DRIVER=ironic - export DEVSTACK_GATE_CONFIGDRIVE=1 - export DEVSTACK_GATE_IRONIC_DRIVER=ipmi - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_DEFAULT_DEPLOY_INTERFACE=direct" - # direct deploy requires Swift temporary URLs - export DEVSTACK_LOCAL_CONFIG+=$'\n'"SWIFT_ENABLE_TEMPURLS=True" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"SWIFT_TEMPURL_KEY=secretkey" - - if [[ ! "stable/newton stable/ocata stable/pike" =~ $ZUUL_BRANCH ]] ; then - export DEVSTACK_GATE_TLSPROXY=1 - fi - - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_TEMPEST_WHOLE_DISK_IMAGE=True" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_EPHEMERAL_DISK=0" - - export DEVSTACK_GATE_IRONIC_BUILD_RAMDISK=1 - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_INSPECTOR_BUILD_RAMDISK=True" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"USE_SUBNETPOOL=False" - - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_COUNT=1" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"LIBVIRT_NIC_DRIVER=e1000" - # Ensure the ironic-vars-EARLY file exists - touch ironic-vars-early - # Pull in the EARLY variables injected by the optional builders - source ironic-vars-early - - export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin ironic https://opendev.org/openstack/ironic" - - # Ensure the ironic-EXTRA-vars file exists - touch ironic-extra-vars - # Pull in the EXTRA variables injected by the optional builders - source ironic-extra-vars - - cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh - ./safe-devstack-vm-gate-wrap.sh - executable: /bin/bash - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' diff --git a/playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-iscsi-coreos-src/post.yaml b/playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-iscsi-coreos-src/post.yaml deleted file mode 100644 index e07f5510a..000000000 --- a/playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-iscsi-coreos-src/post.yaml +++ /dev/null @@ -1,15 +0,0 @@ -- hosts: primary - tasks: - - - name: Copy files from {{ ansible_user_dir }}/workspace/ on node - synchronize: - src: '{{ ansible_user_dir }}/workspace/' - dest: '{{ zuul.executor.log_root }}' - mode: pull - copy_links: true - verify_host: true - rsync_opts: - - --include=/logs/** - - --include=*/ - - --exclude=* - - --prune-empty-dirs diff --git a/playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-iscsi-coreos-src/run.yaml b/playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-iscsi-coreos-src/run.yaml deleted file mode 100644 index 4551f9100..000000000 --- a/playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-iscsi-coreos-src/run.yaml +++ /dev/null @@ -1,108 +0,0 @@ -- hosts: all - name: Autoconverted job legacy-tempest-dsvm-ironic-ipa-wholedisk-bios-pxe_ipmitool-coreos-src - from old job gate-tempest-dsvm-ironic-ipa-wholedisk-bios-pxe_ipmitool-coreos-src-ubuntu-xenial - tasks: - - - name: Ensure legacy workspace directory - file: - path: '{{ ansible_user_dir }}/workspace' - state: directory - - - shell: - cmd: | - set -e - set -x - cat > clonemap.yaml << EOF - clonemap: - - name: openstack/devstack-gate - dest: devstack-gate - EOF - /usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \ - https://opendev.org \ - openstack/devstack-gate - executable: /bin/bash - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - # NOTE(TheJulia): The CoreOS ramdisk is generally slow to startup, - # on the order of 300-500 seconds. - - shell: - cmd: | - cat << 'EOF' >> ironic-extra-vars - export DEVSTACK_GATE_OS_TEST_TIMEOUT=2400 - export DEVSTACK_GATE_TEMPEST_BAREMETAL_BUILD_TIMEOUT=1800 - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_ENGINE=auto" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_SPECS_CPU=1" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_SPECS_RAM=2048" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_RAMDISK_TYPE=coreos" - EOF - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - - shell: - cmd: | - cat << 'EOF' >> ironic-extra-vars - export DEVSTACK_GATE_TEMPEST_REGEX="ironic_tempest_plugin.tests.scenario" - - EOF - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - - shell: - cmd: | - cat << 'EOF' >> ironic-vars-early - # use tempest plugin - export DEVSTACK_LOCAL_CONFIG+=$'\n'"TEMPEST_PLUGINS+=' /opt/stack/new/ironic-tempest-plugin'" - export TEMPEST_CONCURRENCY=1 - EOF - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' - - - shell: - cmd: | - set -e - set -x - export PROJECTS="openstack/ironic $PROJECTS" - export PROJECTS="openstack/ironic-lib $PROJECTS" - export PROJECTS="openstack/ironic-python-agent $PROJECTS" - export PROJECTS="openstack/ironic-tempest-plugin $PROJECTS" - export PROJECTS="openstack/python-ironicclient $PROJECTS" - export PROJECTS="openstack/virtualbmc $PROJECTS" - export PYTHONUNBUFFERED=true - export DEVSTACK_GATE_TEMPEST=1 - export DEVSTACK_GATE_IRONIC=1 - export DEVSTACK_GATE_NEUTRON=1 - export DEVSTACK_GATE_VIRT_DRIVER=ironic - export DEVSTACK_GATE_CONFIGDRIVE=1 - export DEVSTACK_GATE_IRONIC_DRIVER=ipmi - - if [[ ! "stable/newton stable/ocata stable/pike" =~ $ZUUL_BRANCH ]] ; then - export DEVSTACK_GATE_TLSPROXY=1 - fi - - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_TEMPEST_WHOLE_DISK_IMAGE=True" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_EPHEMERAL_DISK=0" - - export DEVSTACK_GATE_IRONIC_BUILD_RAMDISK=1 - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_INSPECTOR_BUILD_RAMDISK=True" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"USE_SUBNETPOOL=False" - - export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_COUNT=1" - export DEVSTACK_LOCAL_CONFIG+=$'\n'"LIBVIRT_NIC_DRIVER=e1000" - # Ensure the ironic-vars-EARLY file exists - touch ironic-vars-early - # Pull in the EARLY variables injected by the optional builders - source ironic-vars-early - - export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin ironic https://opendev.org/openstack/ironic" - - # Ensure the ironic-EXTRA-vars file exists - touch ironic-extra-vars - # Pull in the EXTRA variables injected by the optional builders - source ironic-extra-vars - - cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh - ./safe-devstack-vm-gate-wrap.sh - executable: /bin/bash - chdir: '{{ ansible_user_dir }}/workspace' - environment: '{{ zuul | zuul_legacy_vars }}' diff --git a/releasenotes/notes/no-coreos-3345cc69009dead9.yaml b/releasenotes/notes/no-coreos-3345cc69009dead9.yaml new file mode 100644 index 000000000..d626b267c --- /dev/null +++ b/releasenotes/notes/no-coreos-3345cc69009dead9.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - | + Images based on CoreOS are no longer supported and built. They were + deprecated in the Stein cycle and an alternative based on diskimage-builder + is being developed. diff --git a/zuul.d/ironic-python-agent-jobs.yaml b/zuul.d/ironic-python-agent-jobs.yaml index dce8b5de6..7c7c6b72c 100644 --- a/zuul.d/ironic-python-agent-jobs.yaml +++ b/zuul.d/ironic-python-agent-jobs.yaml @@ -97,15 +97,6 @@ - openstack/ironic-python-agent - openstack/ironic-python-agent-builder -- job: - name: ironic-python-agent-buildimage-coreos - parent: ironic-python-agent-buildimage-base - vars: - image_name: 'coreos' - # TODO(dtantsur): refactor run.yaml, so that this variable is only - # required for DIB jobs. - image_distro: '' - - job: name: ironic-python-agent-buildimage-tinyipa parent: ironic-python-agent-buildimage-base diff --git a/zuul.d/legacy-ironic-jobs.yaml b/zuul.d/legacy-ironic-jobs.yaml deleted file mode 100644 index 865344757..000000000 --- a/zuul.d/legacy-ironic-jobs.yaml +++ /dev/null @@ -1,51 +0,0 @@ -- job: - name: legacy-ipa-dsvm-base - # NOTE: We do not use 'legacy-ironic-dsvm-base' as simpler and less - # confusing to define it all here and then use 'legacy-dsvm-base' - parent: legacy-dsvm-base - irrelevant-files: - - ^test-requirements.txt$ - - ^.*\.rst$ - - ^doc/.*$ - - ^ironic_python_agent/tests/.*$ - - ^releasenotes/.*$ - - ^setup.cfg$ - - ^tools/.*$ - - ^tox.ini$ - required-projects: - - openstack/devstack-gate - - openstack/ironic - - openstack/ironic-lib - - openstack/ironic-python-agent - - openstack/ironic-tempest-plugin - - openstack/python-ironicclient - - openstack/tempest - - openstack/virtualbmc - -- job: - name: ipa-tempest-dsvm-wholedisk-bios-ipmi-direct-coreos-src - parent: legacy-ipa-dsvm-base - run: playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-direct-coreos-src/run.yaml - post-run: playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-direct-coreos-src/post.yaml - timeout: 7200 - -- job: - name: ipa-tempest-dsvm-partition-bios-ipmi-direct-coreos-src - parent: legacy-ipa-dsvm-base - run: playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-direct-coreos-src/run.yaml - post-run: playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-direct-coreos-src/post.yaml - timeout: 5400 - -- job: - name: ipa-tempest-dsvm-partition-bios-ipmi-iscsi-coreos-src - parent: legacy-ipa-dsvm-base - run: playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-iscsi-coreos-src/run.yaml - post-run: playbooks/legacy/ipa-tempest-dsvm-partition-bios-ipmi-iscsi-coreos-src/post.yaml - timeout: 7200 - -- job: - name: ipa-tempest-dsvm-wholedisk-bios-ipmi-iscsi-coreos-src - parent: legacy-ipa-dsvm-base - run: playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-iscsi-coreos-src/run.yaml - post-run: playbooks/legacy/ipa-tempest-dsvm-wholedisk-bios-ipmi-iscsi-coreos-src/post.yaml - timeout: 7200 diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml index d92fc4963..e3df215fc 100644 --- a/zuul.d/project.yaml +++ b/zuul.d/project.yaml @@ -18,16 +18,6 @@ voting: false - metalsmith-integration-ipa-src: voting: false - # NOTE(TheJulia): CoreOS jobs have a high failure rate. - # In order to reduce the odds of things like nested virt - # being detected but not available, we should treat them - # as non-voting. This is in order to reduce the need to - # recheck. If we non-voting tem on the gate, they are - # pointless, and the odds seem to enable them to pass - # more often than not. - # https://storyboard.openstack.org/#!/story/2003985 - - ipa-tempest-dsvm-wholedisk-bios-ipmi-direct-coreos-src: - voting: false - openstack-tox-functional: voting: false - openstack-tox-lower-constraints @@ -48,6 +38,5 @@ - ipa-tempest-dsvm-partition-ipmi-iscsi-tinyipa-python3 post: jobs: - - ironic-python-agent-buildimage-coreos - ironic-python-agent-buildimage-tinyipa - ironic-python-agent-buildimage-dib