Merge "Remove support for CoreOS images"
This commit is contained in:
commit
03713c5644
Dockerfilebindep.txt
doc/source
imagebuild/coreos
MakefileREADME.rstbuild_coreos_image.shcoreos-oem-inject.pydocker_build.bashdocker_clean.bashfull_trusty_build.shiso-image-create
oem
pin_latest_coreos.shversion.txtplaybooks
ironic-python-agent-buildimage
legacy
releasenotes/notes
zuul.d
59
Dockerfile
59
Dockerfile
@ -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" ]
|
|
@ -14,11 +14,6 @@ gettext [test]
|
|||||||
|
|
||||||
# these are needed to build a deploy ramdisk
|
# 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]
|
gnupg [imagebuild]
|
||||||
squashfs-tools [platform:dpkg platform:redhat imagebuild]
|
squashfs-tools [platform:dpkg platform:redhat imagebuild]
|
||||||
squashfs [platform:suse imagebuild]
|
squashfs [platform:suse imagebuild]
|
||||||
|
@ -28,12 +28,10 @@ in rescue mode.
|
|||||||
The below has information about supported images that may be built to use
|
The below has information about supported images that may be built to use
|
||||||
rescue mode.
|
rescue mode.
|
||||||
|
|
||||||
CoreOS
|
DIB
|
||||||
------
|
---
|
||||||
|
|
||||||
The CoreOS image supports rescue mode when used with DHCP tenant networks. You
|
The DIB image supports rescue mode when used with DHCP tenant networks.
|
||||||
may follow the normal process for `building a CoreOS ironic-python-agent
|
|
||||||
image`_ to create an image that supports rescue mode.
|
|
||||||
|
|
||||||
After the ``finalize_rescue`` command completes, DHCP will be configured on all
|
After the ``finalize_rescue`` command completes, DHCP will be configured on all
|
||||||
network interfaces, and a `rescue` user will be created with the specified
|
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
|
network interfaces, and a `rescue` user will be created with the specified
|
||||||
``rescue_password``.
|
``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
|
.. _`build a TinyIPA image`: https://opendev.org/openstack/ironic-python-agent-builder/src/branch/master/tinyipa/README.rst
|
||||||
|
@ -13,16 +13,6 @@ the image. Below we will cover several ways to do this.
|
|||||||
|
|
||||||
Access via ssh
|
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@<ip-address-of-node>``
|
|
||||||
|
|
||||||
diskimage-builder (DIB)
|
diskimage-builder (DIB)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@ -72,43 +62,6 @@ Access via console
|
|||||||
If you need to use console access, passwords must be enabled there are a
|
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:
|
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... <example password hash>
|
|
||||||
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)
|
diskimage-builder (DIB)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Users wishing to use password access can be add the dynamic-login [0]_ or the
|
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_USERNAME=username
|
||||||
export DIB_DEV_USER_PWDLESS_SUDO=yes
|
export DIB_DEV_USER_PWDLESS_SUDO=yes
|
||||||
export DIB_DEV_USER_PASSWORD=PASSWORD
|
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
|
tinyipa
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
@ -152,20 +105,6 @@ add ``ipa-debug=1`` to the kernel command line. To do this:
|
|||||||
- Restart the ironic-conductor with the command
|
- Restart the ironic-conductor with the command
|
||||||
``service ironic-conductor restart``
|
``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
|
If the system is running and uses systemd then editing the services file
|
||||||
will be required.
|
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.
|
- 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``
|
- logs may be viewed with ``sudo journalctl -u ironic-python-agent``
|
||||||
|
|
||||||
.. note::
|
|
||||||
sudo is not required with the CoreOS images.
|
|
||||||
|
|
||||||
|
|
||||||
Manually restart IPA
|
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
|
.. [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
|
.. [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/
|
|
||||||
|
@ -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
|
use. This is because it's not installed in an operating system, but instead is
|
||||||
run from within a ramdisk.
|
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 <https://tarballs.openstack.org/ironic-python-agent/coreos/files/>`__.
|
|
||||||
|
|
||||||
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
|
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
|
A production ready way to build a ramdisk image for IPA is by using
|
||||||
installs all the required packages and configures services as needed.
|
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
|
tinyipa
|
||||||
-------
|
-------
|
||||||
|
|
||||||
Now, this method is provided
|
Now this method is provided by ironic-python-agent-builder_
|
||||||
by `Ironic Python Agent Builder <https://opendev.org/openstack/ironic-python-agent-builder>`_
|
repository. It provides a set of scripts to build a
|
||||||
repo. It provides a set of scripts to build a
|
|
||||||
Tiny Core Linux-based deployment kernel and ramdisk (code name ``tinyipa``)
|
Tiny Core Linux-based deployment kernel and ramdisk (code name ``tinyipa``)
|
||||||
under ``tinyipa`` folder.
|
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
|
./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
|
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
|
a suitable ISO for booting, and so should work against any IPA ramdisk.
|
||||||
-- both DIB and CoreOS.
|
|
||||||
|
|
||||||
IPA Flags
|
IPA Flags
|
||||||
=========
|
=========
|
||||||
|
|
||||||
You can pass a variety of flags to IPA on start up to change its behavior.
|
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.
|
* ``--standalone``: This disables the initial lookup and heartbeats to Ironic.
|
||||||
Lookup sends some information to Ironic in order to determine Ironic's node
|
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`_.
|
the documentation available at `Hardware Managers`_.
|
||||||
|
|
||||||
.. _Hardware Managers: https://docs.openstack.org/ironic-python-agent/latest/contributor/hardware_managers.html
|
.. _Hardware Managers: https://docs.openstack.org/ironic-python-agent/latest/contributor/hardware_managers.html
|
||||||
|
.. _ironic-python-agent-builder: https://docs.openstack.org/ironic-python-agent-builder
|
||||||
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
|
|
||||||
|
|
||||||
Indices and tables
|
Indices and tables
|
||||||
==================
|
==================
|
||||||
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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()
|
|
@ -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}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
@ -1,37 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
create_rescue_user() {
|
|
||||||
echo "Adding rescue user with root privileges..."
|
|
||||||
crypted_pass=$(</etc/ipa-rescue-config/ipa-rescue-password)
|
|
||||||
sudo useradd -m rescue -G sudo -p $crypted_pass
|
|
||||||
sudo echo "rescue ALL=(ALL) NOPASSWD: ALL" > /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
|
|
@ -1,5 +0,0 @@
|
|||||||
[Match]
|
|
||||||
Name=RESCUE_NETWORK_INTERFACE
|
|
||||||
|
|
||||||
[Network]
|
|
||||||
DHCP=yes
|
|
@ -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"
|
|
@ -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
|
|
@ -48,11 +48,6 @@
|
|||||||
make clean
|
make clean
|
||||||
popd
|
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)
|
dib)
|
||||||
NAME=ipa-{{ image_distro }}-$BRANCH_PATH
|
NAME=ipa-{{ image_distro }}-$BRANCH_PATH
|
||||||
ironic-python-agent-builder -e dhcp-all-interfaces -o $NAME {{ image_distro }}
|
ironic-python-agent-builder -e dhcp-all-interfaces -o $NAME {{ image_distro }}
|
||||||
|
@ -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
|
|
@ -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 }}'
|
|
@ -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
|
|
@ -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 }}'
|
|
@ -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
|
|
@ -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 }}'
|
|
@ -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
|
|
@ -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 }}'
|
|
6
releasenotes/notes/no-coreos-3345cc69009dead9.yaml
Normal file
6
releasenotes/notes/no-coreos-3345cc69009dead9.yaml
Normal file
@ -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.
|
@ -97,15 +97,6 @@
|
|||||||
- openstack/ironic-python-agent
|
- openstack/ironic-python-agent
|
||||||
- openstack/ironic-python-agent-builder
|
- 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:
|
- job:
|
||||||
name: ironic-python-agent-buildimage-tinyipa
|
name: ironic-python-agent-buildimage-tinyipa
|
||||||
parent: ironic-python-agent-buildimage-base
|
parent: ironic-python-agent-buildimage-base
|
||||||
|
@ -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
|
|
@ -18,16 +18,6 @@
|
|||||||
voting: false
|
voting: false
|
||||||
- metalsmith-integration-ipa-src:
|
- metalsmith-integration-ipa-src:
|
||||||
voting: false
|
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:
|
- openstack-tox-functional:
|
||||||
voting: false
|
voting: false
|
||||||
- openstack-tox-lower-constraints
|
- openstack-tox-lower-constraints
|
||||||
@ -48,6 +38,5 @@
|
|||||||
- ipa-tempest-dsvm-partition-ipmi-iscsi-tinyipa-python3
|
- ipa-tempest-dsvm-partition-ipmi-iscsi-tinyipa-python3
|
||||||
post:
|
post:
|
||||||
jobs:
|
jobs:
|
||||||
- ironic-python-agent-buildimage-coreos
|
|
||||||
- ironic-python-agent-buildimage-tinyipa
|
- ironic-python-agent-buildimage-tinyipa
|
||||||
- ironic-python-agent-buildimage-dib
|
- ironic-python-agent-buildimage-dib
|
||||||
|
Loading…
x
Reference in New Issue
Block a user