Skip to content

Commit

Permalink
Preperations for splitting the webhook to a new image (#973)
Browse files Browse the repository at this point in the history
* Prepare for splitting the webhook to a new image

This will allow changes in CI that will allow to complete the split.

Signed-off-by: Nahshon Unna-Tsameret <nunnatsa@redhat.com>

* allow digester to find a single digest from a single image name

Signed-off-by: Nahshon Unna-Tsameret <nunnatsa@redhat.com>

* Allow overwriting the HCO operator and webhook images in build-manifests.sh

Signed-off-by: Nahshon Unna-Tsameret <nunnatsa@redhat.com>
  • Loading branch information
nunnatsa committed Nov 29, 2020
1 parent a0d478f commit 7909166
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 16 deletions.
6 changes: 3 additions & 3 deletions automation/release-bumper/release-bumper.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ function main {
update_versions

echo INFO: Updating image digest list...
( \
cd ./tools/digester && \
go build . \
(
cd ./tools/digester
go build .
)
./automation/digester/update_images.sh

Expand Down
5 changes: 5 additions & 0 deletions build/Dockerfile.wh.okd
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
FROM centos:7

COPY hyperconverged-cluster-webhook /usr/bin/

ENTRYPOINT /usr/bin/hyperconverged-cluster-webhook
8 changes: 7 additions & 1 deletion deploy/Dockerfile.registry.kubevirt.nightly
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,13 @@ ARG CI_REGISTRY=registry.svc.ci.openshift.org
# ARG CI_REGISTRY=registry.build01.ci.openshift.org

RUN echo "HCO_VERSION: ${HCO_VERSION}"
RUN if [ -n "$KUBEVIRT_PROVIDER" ]; then sed -r -i "s|quay.io/kubevirt/hyperconverged-cluster-operator(@sha256)?:.*$|registry:5000/kubevirt/hyperconverged-cluster-operator:latest|g" /registry/kubevirt-hyperconverged/${HCO_VERSION}/kubevirt-hyperconverged-operator.v${HCO_VERSION}.clusterserviceversion.yaml; else sed -i -r "s|quay.io/kubevirt/hyperconverged-cluster-operator(@sha256)?:.*$|${CI_REGISTRY}/${OPENSHIFT_BUILD_NAMESPACE}/stable:hyperconverged-cluster-operator|g" /registry/kubevirt-hyperconverged/${HCO_VERSION}/kubevirt-hyperconverged-operator.v${HCO_VERSION}.clusterserviceversion.yaml; fi
RUN if [ -n "$KUBEVIRT_PROVIDER" ]; then \
sed -r -i "s|quay.io/kubevirt/hyperconverged-cluster-operator(@sha256)?:.*$|registry:5000/kubevirt/hyperconverged-cluster-operator:latest|g" /registry/kubevirt-hyperconverged/${HCO_VERSION}/kubevirt-hyperconverged-operator.v${HCO_VERSION}.clusterserviceversion.yaml \
sed -r -i "s|quay.io/kubevirt/hyperconverged-cluster-webhook(@sha256)?:.*$|registry:5000/kubevirt/hyperconverged-cluster-webhook:latest|g" /registry/kubevirt-hyperconverged/${HCO_VERSION}/kubevirt-hyperconverged-operator.v${HCO_VERSION}.clusterserviceversion.yaml \
else \
sed -i -r "s|quay.io/kubevirt/hyperconverged-cluster-operator(@sha256)?:.*$|${CI_REGISTRY}/${OPENSHIFT_BUILD_NAMESPACE}/stable:hyperconverged-cluster-operator|g" /registry/kubevirt-hyperconverged/${HCO_VERSION}/kubevirt-hyperconverged-operator.v${HCO_VERSION}.clusterserviceversion.yaml \
sed -i -r "s|quay.io/kubevirt/hyperconverged-cluster-webhook(@sha256)?:.*$|${CI_REGISTRY}/${OPENSHIFT_BUILD_NAMESPACE}/stable:hyperconverged-cluster-webhook|g" /registry/kubevirt-hyperconverged/${HCO_VERSION}/kubevirt-hyperconverged-operator.v${HCO_VERSION}.clusterserviceversion.yaml \
fi
RUN cat /registry/kubevirt-hyperconverged/kubevirt-hyperconverged.package.yaml

# Initialize the database
Expand Down
2 changes: 2 additions & 0 deletions deploy/Dockerfile.registry.upgrade
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,10 @@ ARG CI_REGISTRY=registry.build01.ci.openshift.org

RUN if [ -n "$KUBEVIRT_PROVIDER" ]; then \
sed -r -i "s|quay.io/kubevirt/hyperconverged-cluster-operator(@sha256)?:.*$|registry:5000/kubevirt/hyperconverged-cluster-operator:latest|g" /registry/kubevirt-hyperconverged/${UPGRADE_VERSION}/kubevirt-hyperconverged-operator.v${UPGRADE_VERSION}.clusterserviceversion.yaml; \
sed -r -i "s|quay.io/kubevirt/hyperconverged-cluster-webhook(@sha256)?:.*$|registry:5000/kubevirt/hyperconverged-cluster-webhook:latest|g" /registry/kubevirt-hyperconverged/${UPGRADE_VERSION}/kubevirt-hyperconverged-operator.v${UPGRADE_VERSION}.clusterserviceversion.yaml; \
else \
sed -r -i "s|quay.io/kubevirt/hyperconverged-cluster-operator(@sha256)?:.*$|${CI_REGISTRY}/${OPENSHIFT_BUILD_NAMESPACE}/stable:hyperconverged-cluster-operator|g" /registry/kubevirt-hyperconverged/${UPGRADE_VERSION}/kubevirt-hyperconverged-operator.v${UPGRADE_VERSION}.clusterserviceversion.yaml; \
sed -r -i "s|quay.io/kubevirt/hyperconverged-cluster-webhook(@sha256)?:.*$|${CI_REGISTRY}/${OPENSHIFT_BUILD_NAMESPACE}/stable:hyperconverged-cluster-webhook|g" /registry/kubevirt-hyperconverged/${UPGRADE_VERSION}/kubevirt-hyperconverged-operator.v${UPGRADE_VERSION}.clusterserviceversion.yaml; \
fi
# Initialize the database
RUN initializer --manifests /registry/kubevirt-hyperconverged --output bundles.db
Expand Down
2 changes: 2 additions & 0 deletions deploy/Dockerfile.registry.upgrade-prev
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,10 @@ ARG CI_REGISTRY=registry.build01.ci.openshift.org

RUN if [ -n "$KUBEVIRT_PROVIDER" ]; then \
sed -r -i "s|quay.io/kubevirt/hyperconverged-cluster-operator(@sha256)?:.*$|registry:5000/kubevirt/hyperconverged-cluster-operator:latest|g" /registry/kubevirt-hyperconverged/${UPGRADE_VERSION}/kubevirt-hyperconverged-operator.v${UPGRADE_VERSION}.clusterserviceversion.yaml; \
sed -r -i "s|quay.io/kubevirt/hyperconverged-cluster-webhook(@sha256)?:.*$|registry:5000/kubevirt/hyperconverged-cluster-webhook:latest|g" /registry/kubevirt-hyperconverged/${UPGRADE_VERSION}/kubevirt-hyperconverged-operator.v${UPGRADE_VERSION}.clusterserviceversion.yaml; \
else \
sed -r -i "s|quay.io/kubevirt/hyperconverged-cluster-operator(@sha256)?:.*$|${CI_REGISTRY}/${OPENSHIFT_BUILD_NAMESPACE}/stable:hyperconverged-cluster-operator|g" /registry/kubevirt-hyperconverged/${UPGRADE_VERSION}/kubevirt-hyperconverged-operator.v${UPGRADE_VERSION}.clusterserviceversion.yaml; \
sed -r -i "s|quay.io/kubevirt/hyperconverged-cluster-webhook(@sha256)?:.*$|${CI_REGISTRY}/${OPENSHIFT_BUILD_NAMESPACE}/stable:hyperconverged-cluster-webhook|g" /registry/kubevirt-hyperconverged/${UPGRADE_VERSION}/kubevirt-hyperconverged-operator.v${UPGRADE_VERSION}.clusterserviceversion.yaml; \
fi
# Initialize the database
RUN initializer --manifests /registry/kubevirt-hyperconverged --output bundles.db
Expand Down
41 changes: 38 additions & 3 deletions hack/build-manifests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,19 @@ trap 'catch $? $LINENO' ERR TERM INT
# Lastly, we take give the component CSVs to the csv-merger that combines all
# of the manifests into a single, unified, ClusterServiceVersion.

function get_image_digest() {
if [[ ! -f ./tools/digester/digester ]]; then
(
cd ./tools/digester
go build .
)
fi

local image
image=$(./tools/digester/digester -image "$1")
echo "${image}"
}

PROJECT_ROOT="$(readlink -e $(dirname "${BASH_SOURCE[0]}")/../)"
source "${PROJECT_ROOT}"/hack/config
source "${PROJECT_ROOT}"/deploy/images.env
Expand Down Expand Up @@ -284,6 +297,26 @@ for csv in "${csvs[@]}"; do
grep -E "^ *image: [a-zA-Z0-9/\.:@\-]+$" ${csv}
done

if [[ -n ${OPERATOR_IMAGE} ]]; then
TEMP_IMAGE_NAME=$(get_image_digest "${OPERATOR_IMAGE}")
DIGEST_LIST="${DIGEST_LIST/${HCO_OPERATOR_IMAGE}/${TEMP_IMAGE_NAME}}"
HCO_OPERATOR_IMAGE=${TEMP_IMAGE_NAME}
fi

if [[ -n ${WEBHOOK_IMAGE} ]]; then
TEMP_IMAGE_NAME=$(get_image_digest "${WEBHOOK_IMAGE}")
if [[ -n ${HCO_WEBHOOK_IMAGE} ]]; then
DIGEST_LIST="${DIGEST_LIST/${HCO_WEBHOOK_IMAGE}/${TEMP_IMAGE_NAME}}"
else
DIGEST_LIST="${DIGEST_LIST},${TEMP_IMAGE_NAME}"
fi
HCO_WEBHOOK_IMAGE=${TEMP_IMAGE_NAME}
fi

if [[ -z ${HCO_WEBHOOK_IMAGE} ]]; then
HCO_WEBHOOK_IMAGE="${HCO_OPERATOR_IMAGE}"
fi

# Build and write deploy dir
(cd ${PROJECT_ROOT}/tools/manifest-templator/ && go build)
${PROJECT_ROOT}/tools/manifest-templator/manifest-templator \
Expand All @@ -307,7 +340,8 @@ ${PROJECT_ROOT}/tools/manifest-templator/manifest-templator \
--nmo-version="${NMO_VERSION}" \
--hppo-version="${HPPO_VERSION}" \
--vm-import-version="${VM_IMPORT_VERSION}" \
--operator-image="${HCO_OPERATOR_IMAGE}"
--operator-image="${HCO_OPERATOR_IMAGE}" \
--webhook-image="${HCO_WEBHOOK_IMAGE}"
(cd ${PROJECT_ROOT}/tools/manifest-templator/ && go clean)

# Build and merge CSVs
Expand Down Expand Up @@ -337,7 +371,8 @@ ${PROJECT_ROOT}/tools/csv-merger/csv-merger \
--hppo-version="${HPPO_VERSION}" \
--vm-import-version="${VM_IMPORT_VERSION}" \
--related-images-list="${DIGEST_LIST}" \
--operator-image-name="${HCO_OPERATOR_IMAGE}" > "${CSV_DIR}/${OPERATOR_NAME}.v${CSV_VERSION}.${CSV_EXT}"
--operator-image-name="${HCO_OPERATOR_IMAGE}" \
--webhook-image-name="${HCO_WEBHOOK_IMAGE}" > "${CSV_DIR}/${OPERATOR_NAME}.v${CSV_VERSION}.${CSV_EXT}"

# Copy all CRDs into the CRD and CSV directories
rm -f ${CRD_DIR}/*
Expand All @@ -361,5 +396,5 @@ cp -r "${CSV_DIR}" "${INDEX_IMAGE_DIR:?}/kubevirt-hyperconverged/"
cp "${OLM_DIR}/bundle.Dockerfile" "${INDEX_IMAGE_DIR:?}/"

INDEX_IMAGE_CSV="${INDEX_IMAGE_DIR}/kubevirt-hyperconverged/${CSV_VERSION}/kubevirt-hyperconverged-operator.v${CSV_VERSION}.${CSV_EXT}"
sed -r -i "s|createdAt: \".*\$|createdAt: \"2020-10-23 08:58:25\"|; s|quay.io/kubevirt/hyperconverged-cluster-operator.*$|+IMAGE_TO_REPLACE+|" ${INDEX_IMAGE_CSV}
sed -r -i "s|createdAt: \".*\$|createdAt: \"2020-10-23 08:58:25\"|; s|quay.io/kubevirt/hyperconverged-cluster-operator.*$|+IMAGE_TO_REPLACE+|; s|quay.io/kubevirt/hyperconverged-cluster-webhook.*$|+WEBHOOK_IMAGE_TO_REPLACE+|" ${INDEX_IMAGE_CSV}

44 changes: 35 additions & 9 deletions tools/digester/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"bufio"
"context"
"encoding/csv"
"flag"
"fmt"
"os"
"strings"
Expand Down Expand Up @@ -63,6 +64,40 @@ func (i *Image) setDigest(digest string) {
}

func main() {

imageToDigest := flag.String("image", "", "single image in name:tag format; if exists, returns only one digest fo this image, instead of processing the CSV file.")

flag.Parse()

cli, err := docker.NewEnvClient()
if err != nil {
fmt.Println(err)
os.Exit(1)
}

ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
defer cancel()

// Single image use-case
if imageToDigest != nil && *imageToDigest != "" {
if strings.Contains(*imageToDigest, "@sha256:") {
fmt.Printf("%s is already in a digest format\n", *imageToDigest)
os.Exit(1)
}
inspect, err := cli.DistributionInspect(ctx, *imageToDigest, "")
if err != nil {
fmt.Printf("Error while trying to get digest for %s; %s\n", *imageToDigest, err)
os.Exit(1)
}

digest := inspect.Descriptor.Digest.Hex()
loc := strings.LastIndex(*imageToDigest, ":")
imageName := (*imageToDigest)[:loc] + "@sha256:" + digest

fmt.Println(imageName)
os.Exit(0)
}

fmt.Println("Checking image digests")
f, err := os.Open(csvFile)
if err != nil {
Expand All @@ -88,12 +123,6 @@ func main() {
images = append(images, NewImage(line))
}

cli, err := docker.NewEnvClient()
if err != nil {
fmt.Println(err)
os.Exit(1)
}

wg := &sync.WaitGroup{}
wg.Add(len(images) - 1) // the first "image" is the CSV title

Expand All @@ -110,9 +139,6 @@ func main() {
close(ch)
}()

ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
defer cancel()

start := time.Now()
for i, image := range images[1:] {
go func(image *Image, index int) {
Expand Down

0 comments on commit 7909166

Please sign in to comment.