Skip to content

Commit

Permalink
data/bootstrap: extract ironic images from release image
Browse files Browse the repository at this point in the history
startironic.sh now uses the ironic images specified in the release. In
order to do that, this change pulls out the code from bootkube to
get the images to it's own script, and adds a service that downloads the
release image so it only happens once.
  • Loading branch information
stbenjam committed Aug 21, 2019
1 parent c6f5ce3 commit f6122a9
Show file tree
Hide file tree
Showing 7 changed files with 43 additions and 31 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
#!/bin/bash

set -ex

# We should switch to openshift builds of these images when ready ref
# https://github.com/openshift/installer/issues/2090
IRONIC_IMAGE=${IRONIC_IMAGE:-"quay.io/metal3-io/ironic:master"}
IRONIC_INSPECTOR_IMAGE=${IRONIC_INSPECTOR_IMAGE:-"quay.io/metal3-io/ironic-inspector:master"}
IPA_DOWNLOADER_IMAGE=${IPA_DOWNLOADER_IMAGE:-"quay.io/metal3-io/ironic-ipa-downloader:master"}
COREOS_DOWNLOADER_IMAGE=${COREOS_DOWNLOADER_IMAGE:-"quay.io/openshift-metal3/rhcos-downloader:master"}
. /usr/local/bin/release-image.sh

IRONIC_IMAGE=$(image_for ironic)
IRONIC_INSPECTOR_IMAGE=$(image_for ironic-inspector)
IPA_DOWNLOADER_IMAGE=$(image_for ironic-ipa-downloader)
COREOS_DOWNLOADER_IMAGE=$(image_for ironic-rhcos-downloader)

# This image is templated in via the installer pkg/asset/ignition/bootstrap/bootstrap.go
RHCOS_BOOT_IMAGE_URL="{{.BootImage}}"
Expand Down Expand Up @@ -87,7 +86,6 @@ podman wait -i 1000 ipa-downloader
podman wait -i 1000 coreos-downloader
while ! curl --fail http://localhost/images/rhcos-ootpa-latest.qcow2.md5sum ; do sleep 1; done
while ! curl --fail --head http://localhost/images/ironic-python-agent.initramfs ; do sleep 1; done
while ! curl --fail --head http://localhost/images/ironic-python-agent.tar.headers ; do sleep 1; done
while ! curl --fail --head http://localhost/images/ironic-python-agent.kernel ; do sleep 1; done

sudo podman run -d --net host --privileged --name ironic-conductor \
Expand Down
4 changes: 2 additions & 2 deletions data/data/bootstrap/baremetal/systemd/units/ironic.service
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[Unit]
Description=Baremetal Deployment Ironic Services
Wants=network-online.target crio.service
After=network-online.target crio.service
Wants=network-online.target crio.service release-image.service
After=network-online.target crio.service release-image.service

[Service]
Type=exec
Expand Down
23 changes: 4 additions & 19 deletions data/data/bootstrap/files/usr/local/bin/bootkube.sh.template
Original file line number Diff line number Diff line change
@@ -1,31 +1,16 @@
#!/usr/bin/env bash
set -e

mkdir --parents /etc/kubernetes/{manifests,bootstrap-configs,bootstrap-manifests}

if ! podman inspect {{.ReleaseImage}} &>/dev/null; then
echo "Pulling release image..."
podman pull --quiet {{.ReleaseImage}}
fi
. /usr/local/bin/release-image.sh

# convert the release image pull spec to an "absolute" form if a digest is available - this is
# safe to resolve after the actions above because podman will not pull the image once it is
# locally available
if ! release=$( podman inspect {{.ReleaseImage}} --format '{{"{{"}} index .RepoDigests 0 {{"}}"}}' ) || [[ -z "${release}" ]]; then
echo "Warning: Could not resolve release image to pull by digest" 2>&1
release="{{.ReleaseImage}}"
fi
mkdir --parents /etc/kubernetes/{manifests,bootstrap-configs,bootstrap-manifests}

bootkube_podman_run() {
# we run all commands in the host-network to prevent IP conflicts with
# end-user infrastructure.
podman run --quiet --net=host "${@}"
}

image_for() {
podman run --quiet --rm --net=none "${release}" image "${1}"
}

MACHINE_CONFIG_OPERATOR_IMAGE=$(image_for machine-config-operator)
MACHINE_CONFIG_OSCONTENT=$(image_for machine-os-content)
MACHINE_CONFIG_ETCD_IMAGE=$(image_for etcd)
Expand Down Expand Up @@ -71,10 +56,10 @@ then

bootkube_podman_run \
--volume "$PWD:/assets:z" \
"${release}" \
"${RELEASE_IMAGE_DIGEST}" \
render \
--output-dir=/assets/cvo-bootstrap \
--release-image="${release}"
--release-image="${RELEASE_IMAGE_DIGEST}"

cp cvo-bootstrap/bootstrap/* bootstrap-manifests/
cp cvo-bootstrap/manifests/* manifests/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -e

/usr/bin/podman pull "{{.ReleaseImage}}"
touch /opt/openshift/.release-image.done
13 changes: 13 additions & 0 deletions data/data/bootstrap/files/usr/local/bin/release-image.sh.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/usr/bin/env bash
# This library provides an `image_for` helper function which can get the
# pull spec for a specific image in a release.

# Convert the release image pull spec to an "absolute" form if a digest is available
if ! RELEASE_IMAGE_DIGEST=$( podman inspect {{.ReleaseImage}} --format '{{"{{"}} index .RepoDigests 0 {{"}}"}}' ) || [[ -z "${RELEASE_IMAGE_DIGEST}" ]]; then
echo "Warning: Could not resolve release image to pull by digest" 2>&1
RELEASE_IMAGE_DIGEST="{{.ReleaseImage}}"
fi

image_for() {
podman run --quiet --rm --net=none "${RELEASE_IMAGE_DIGEST}" image "${1}"
}
4 changes: 2 additions & 2 deletions data/data/bootstrap/systemd/units/bootkube.service
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[Unit]
Description=Bootstrap a Kubernetes cluster
Wants=kubelet.service
After=kubelet.service
Wants=kubelet.service release-image.service
After=kubelet.service release-image.service
ConditionPathExists=!/opt/openshift/.bootkube.done

[Service]
Expand Down
11 changes: 11 additions & 0 deletions data/data/bootstrap/systemd/units/release-image.service.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[Unit]
Description=Download the OpenShift Release Image
Wants=network-online.target
After=network-online.target
ConditionPathExists=!/opt/openshift/.release-image.done

[Service]
ExecStart=/usr/local/bin/release-image-download.sh

Restart=on-failure
RestartSec=5s

0 comments on commit f6122a9

Please sign in to comment.