From edff63218619c1d466ebbfbc14fde1774c44ddfc Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Thu, 19 Dec 2019 10:57:03 -0800 Subject: [PATCH] Add containerfile element This is a base element which uses a containerfile (Dockerfile) to build a container image, then the filesystem is extracted from that image and forms the root of the dib image. You can add as little or as much to the dockerfile as desired. Change-Id: I4e821aa2ce7feb8841ef31da56de1a31aa9218b5 --- .zuul.d/jobs.yaml | 1 + .../elements/containerfile/README.rst | 9 ++++ .../elements/containerfile/element-provides | 1 + .../containerfile/root.d/08-containerfile | 42 +++++++++++++++++++ .../focal-build-succeeds/README.rst | 2 + .../focal-build-succeeds/element-deps | 1 + .../environment.d/10-set-distro.bash | 2 + .../environment.d/10-set-file.bash | 3 ++ .../focal-build-succeeds/files/Dockerfile | 2 + .../focal-build-succeeds/test-output-formats | 1 + playbooks/dib-functests/run.yaml | 1 + 11 files changed, 65 insertions(+) create mode 100644 diskimage_builder/elements/containerfile/README.rst create mode 100644 diskimage_builder/elements/containerfile/element-provides create mode 100755 diskimage_builder/elements/containerfile/root.d/08-containerfile create mode 100644 diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/README.rst create mode 100644 diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/element-deps create mode 100644 diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/environment.d/10-set-distro.bash create mode 100644 diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/environment.d/10-set-file.bash create mode 100644 diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/files/Dockerfile create mode 100644 diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/test-output-formats diff --git a/.zuul.d/jobs.yaml b/.zuul.d/jobs.yaml index a8f45e420..4961ad23e 100644 --- a/.zuul.d/jobs.yaml +++ b/.zuul.d/jobs.yaml @@ -29,6 +29,7 @@ - ubuntu-minimal/xenial-build-succeeds - ubuntu-minimal/bionic-build-succeeds - ubuntu-minimal/focal-build-succeeds + - containerfile/focal-build-succeeds - job: name: dib-functests-image diff --git a/diskimage_builder/elements/containerfile/README.rst b/diskimage_builder/elements/containerfile/README.rst new file mode 100644 index 000000000..3ad02729a --- /dev/null +++ b/diskimage_builder/elements/containerfile/README.rst @@ -0,0 +1,9 @@ +============= +containerfile +============= + +Base element for creating images from container files (aka +Dockerfiles). + +To use this element, create a container file (Dockerfile), and supply +the path to that file in the environment variable `DIB_CONTAINER_FILE`. diff --git a/diskimage_builder/elements/containerfile/element-provides b/diskimage_builder/elements/containerfile/element-provides new file mode 100644 index 000000000..a72e04969 --- /dev/null +++ b/diskimage_builder/elements/containerfile/element-provides @@ -0,0 +1 @@ +operating-system diff --git a/diskimage_builder/elements/containerfile/root.d/08-containerfile b/diskimage_builder/elements/containerfile/root.d/08-containerfile new file mode 100755 index 000000000..4ea65728f --- /dev/null +++ b/diskimage_builder/elements/containerfile/root.d/08-containerfile @@ -0,0 +1,42 @@ +#!/bin/bash +# +# Copyright 2015 Hewlett-Packard Development Company, L.P. +# Copyright 2019 Red Hat, INC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then + set -x +fi +set -eu +set -o pipefail + +if [ -f ${TARGET_ROOT}/.extra_settings ] ; then + . ${TARGET_ROOT}/.extra_settings +fi + +[ -n "$DIB_CONTAINER_FILE" ] + +# Use the image cache directory as the default context, so anything +# there is automatically available for COPY commands. +DIB_CONTAINER_CONTEXT=${DIB_CONTAINER_CONTEXT:-${DIB_IMAGE_CACHE}/containerfile} + +mkdir -p $DIB_CONTAINER_CONTEXT + +podman build -t dib-work-image -f $DIB_CONTAINER_FILE $DIB_CONTAINER_CONTEXT +container=$(podman run -d dib-work-image /bin/sh) +podman export $container | sudo tar -C $TARGET_ROOT --numeric-owner -xf - +podman rm $container +podman rmi dib-work-image + +sudo rm -f ${TARGET_ROOT}/.extra_settings diff --git a/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/README.rst b/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/README.rst new file mode 100644 index 000000000..a9b7028e8 --- /dev/null +++ b/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/README.rst @@ -0,0 +1,2 @@ +Verify we can build an image from a containerfile. + diff --git a/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/element-deps b/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/element-deps new file mode 100644 index 000000000..5d58b59ff --- /dev/null +++ b/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/element-deps @@ -0,0 +1 @@ +openstack-ci-mirrors diff --git a/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/environment.d/10-set-distro.bash b/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/environment.d/10-set-distro.bash new file mode 100644 index 000000000..f66bad2df --- /dev/null +++ b/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/environment.d/10-set-distro.bash @@ -0,0 +1,2 @@ +# For the openstack-ci-mirrors element +export DISTRO_NAME=ubuntu diff --git a/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/environment.d/10-set-file.bash b/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/environment.d/10-set-file.bash new file mode 100644 index 000000000..4fc3bdfa0 --- /dev/null +++ b/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/environment.d/10-set-file.bash @@ -0,0 +1,3 @@ +path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +path="$( dirname $path)" +export DIB_CONTAINER_FILE="$path/files/Dockerfile" diff --git a/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/files/Dockerfile b/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/files/Dockerfile new file mode 100644 index 000000000..59f2c33f1 --- /dev/null +++ b/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/files/Dockerfile @@ -0,0 +1,2 @@ +FROM docker.io/library/ubuntu:focal +RUN touch /testfile diff --git a/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/test-output-formats b/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/test-output-formats new file mode 100644 index 000000000..42f2fb726 --- /dev/null +++ b/diskimage_builder/elements/containerfile/test-elements/focal-build-succeeds/test-output-formats @@ -0,0 +1 @@ +tar diff --git a/playbooks/dib-functests/run.yaml b/playbooks/dib-functests/run.yaml index ca624b248..37fbe80a4 100644 --- a/playbooks/dib-functests/run.yaml +++ b/playbooks/dib-functests/run.yaml @@ -4,5 +4,6 @@ - ensure-pip - bindep - dib-setup-gate-mirrors + - ensure-podman - dib-functests