Region readiness probe: Replace maas login exec probe with a lightweight Python HTTP check of /MAAS/api/2.0/version/ on 127.0.0.1, avoiding the ~10s login overhead that caused probe timeouts. Handles TLS, insecure TLS, and plain HTTP variants. Boot resource import: Redesign configure_boot_sources to guarantee only the desired distro appears in boot-source-selections before start_import is called. If the desired selection is missing, update the first existing selection in-place rather than deleting it — MAAS blocks deletion when the selection matches commissioning_distro_series. Remaining stale selections are also updated in-place if delete is blocked. A final assertion aborts the job if any stale entry survives, preventing import from hanging indefinitely waiting for a distro the local sstream does not carry. Add stall detection to start_import: if is-importing stops changing for stall_threshold seconds, stop-import is issued, the region statefulset is restarted via the Kubernetes API, and the import is re-issued with a clean slate. Wrap start_import + configure_images as a single retriable unit so the outer timer re-triggers the import on configure failure, rather than spinning on set-config against an empty boot-resource DB. Post-import, configure_images switches commissioning_distro_series and default_distro_series; cleanup_old_boot_source_selections then removes duplicate selections left from in-place updates. Add maas_cli wrapper with exponential backoff for transient HTTP errors (502/503) to improve resilience during region restarts. Chart and images: - Bump chart 0.1.8 -> 0.2.0, appVersion 3.6.2 -> 3.6.4 - Switch all image tags to ubuntu_noble variants; postgres 14.5 -> 17.4 - Expose ADMIN_USERNAME from admin secret in region StatefulSet - Add maas-rack pod readiness as import_resources job dependency - Generalise Makefile push condition to any non-quay.io registry - Update HTK_COMMIT to d89bc42b57f8c2898520181550b5019dcf31c06f - Helm update to v4.1.4 - MAAS version in Jammy up to 1:3.5.12-16413-g.7fb94f378-0ubuntu1~22.04.1 - excluded snakeoil test keys from images CI: - Add maas-airskiff-deployment-noble-kubeadm-maas-upgrade job - Switch all airskiff deployment jobs to 5-node nodeset with USE_ARMADA_GO=true - Disable jammy/focal deployment jobs to reduce opendev infra load - Drop ubuntu-bionic (airship-maas-single-node) nodeset Change-Id: Icfb9315dc3eb9a83cb6d2606852e8e86ac3fc629 Signed-off-by: Sergiy Markin <smarkin@mirantis.com> Change-Id: Icfb9315dc3eb9a83cb6d2606852e8e86ac3fc629 Signed-off-by: Sergiy Markin <smarkin@mirantis.com>
129 lines
4.2 KiB
Makefile
129 lines
4.2 KiB
Makefile
# Copyright 2017 AT&T Intellectual Property. All other 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.
|
|
|
|
DOCKER_REGISTRY ?= quay.io
|
|
REGION_SUFFIX ?= maas-region
|
|
IMG_COMMON_DIR ?= images
|
|
RACK_SUFFIX ?= maas-rack
|
|
CACHE_SUFFIX ?= maas-cache
|
|
IMAGE_PREFIX ?= airshipit
|
|
IMAGE_TAG ?= latest
|
|
PROXY ?= http://proxy.foo.com:8000
|
|
NO_PROXY ?= localhost,127.0.0.1,.svc.cluster.local
|
|
USE_PROXY ?= false
|
|
PUSH_IMAGE ?= false
|
|
# use this variable for image labels added in internal build process
|
|
LABEL ?= org.airshipit.build=community
|
|
COMMIT ?= $(shell git rev-parse HEAD)
|
|
DISTRO ?= ubuntu_noble
|
|
DISTRO_ALIAS ?= ubuntu_noble
|
|
STRIPPED_DISTRO := $(shell echo $(DISTRO) | sed 's/^ubuntu_//')
|
|
STRIPPED_DISTRO_ALIAS := $(shell echo $(DISTRO_ALIAS) | sed 's/^ubuntu_//')
|
|
IMAGE_NAME := maas-rack-controller maas-region-controller sstream-cache
|
|
BUILD_DIR := $(shell mktemp -d)
|
|
HELM := $(BUILD_DIR)/helm
|
|
SSTREAM_IMAGE := "https://images.maas.io/ephemeral-v3/stable/"
|
|
SSTREAM_RELEASE := $(STRIPPED_DISTRO)
|
|
UBUNTU_BASE_IMAGE ?= quay.io/airshipit/ubuntu:$(STRIPPED_DISTRO)
|
|
USE_CACHED_IMG ?= false
|
|
DOCKER_EXTRA_ARGS ?=
|
|
|
|
IMAGE := ${DOCKER_REGISTRY}/${IMAGE_PREFIX}/$(IMAGE_NAME):${IMAGE_TAG}
|
|
IMAGE_ALIAS := ${DOCKER_REGISTRY}/${IMAGE_PREFIX}/${IMAGE_NAME_ALIAS}:${IMAGE_TAG}
|
|
|
|
|
|
ifeq ($(USE_CACHED_IMG), true)
|
|
DOCKER_EXTRA_ARGS += --build-arg BUILDKIT_INLINE_CACHE=1
|
|
else
|
|
DOCKER_EXTRA_ARGS += --pull --no-cache --build-arg BUILDKIT_INLINE_CACHE=0
|
|
endif
|
|
|
|
ifeq ($(USE_PROXY), true)
|
|
DOCKER_EXTRA_ARGS += --build-arg "http_proxy=$(PROXY)" --build-arg "https_proxy=$(PROXY)"
|
|
DOCKER_EXTRA_ARGS += --build-arg "HTTP_PROXY=$(PROXY)" --build-arg "HTTPS_PROXY=$(PROXY)"
|
|
DOCKER_EXTRA_ARGS += --build-arg "no_proxy=$(NO_PROXY)" --build-arg "NO_PROXY=$(NO_PROXY)"
|
|
endif
|
|
|
|
.PHONY: images
|
|
# Build all images in the list
|
|
images: $(IMAGE_NAME)
|
|
|
|
$(IMAGE_NAME):
|
|
@echo
|
|
@echo "===== Processing [$@-$(STRIPPED_DISTRO)] image ====="
|
|
@make build \
|
|
IMAGE=${DOCKER_REGISTRY}/${IMAGE_PREFIX}/$@-$(STRIPPED_DISTRO):${IMAGE_TAG} \
|
|
IMAGE_ALIAS=${DOCKER_REGISTRY}/${IMAGE_PREFIX}/$@-$(STRIPPED_DISTRO_ALIAS):${IMAGE_TAG} \
|
|
IMAGE_NAME_FULL=$@-$(STRIPPED_DISTRO) \
|
|
IMAGE_DIR=images/$@-$(STRIPPED_DISTRO)
|
|
|
|
# Create tgz of the chart
|
|
.PHONY: charts
|
|
charts: helm_lint
|
|
$(HELM) package build/charts/maas
|
|
|
|
# Perform Linting
|
|
.PHONY: lint
|
|
lint: helm_lint
|
|
|
|
# Dry run templating of chart
|
|
.PHONY: dry-run
|
|
dry-run: helm_lint
|
|
tools/helm_tk.sh $(HELM)
|
|
$(HELM) template build/charts/maas
|
|
|
|
# Make targets intended for use by the primary targets above.
|
|
|
|
# Install helm binary
|
|
.PHONY: helm-install
|
|
helm-install:
|
|
tools/helm_install.sh $(HELM)
|
|
|
|
.PHONY: build
|
|
build:
|
|
docker build -t $(IMAGE) --label $(LABEL) --network=host \
|
|
--label "org.opencontainers.image.revision=$(COMMIT)" \
|
|
--label "org.opencontainers.image.created=$(shell date --rfc-3339=seconds --utc)" \
|
|
--label "org.opencontainers.image.title=$(IMAGE_NAME_FULL)" \
|
|
-f $(IMAGE_DIR)/Dockerfile \
|
|
$(DOCKER_EXTRA_ARGS) \
|
|
--build-arg FROM=$(UBUNTU_BASE_IMAGE) \
|
|
--build-arg SSTREAM_IMAGE=$(SSTREAM_IMAGE) \
|
|
--build-arg SSTREAM_RELEASE=$(SSTREAM_RELEASE) \
|
|
$(IMAGE_DIR)
|
|
ifneq ($(DISTRO), $(DISTRO_ALIAS))
|
|
docker tag $(IMAGE) $(IMAGE_ALIAS)
|
|
ifeq (,$(findstring quay.io,$(DOCKER_REGISTRY)))
|
|
docker push $(IMAGE_ALIAS)
|
|
endif
|
|
endif
|
|
ifeq (,$(findstring quay.io,$(DOCKER_REGISTRY)))
|
|
docker push $(IMAGE)
|
|
endif
|
|
ifeq ($(PUSH_IMAGE), true)
|
|
docker push $(IMAGE)
|
|
endif
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf build
|
|
|
|
.PHONY: helm_lint
|
|
helm_lint: clean helm-install
|
|
tools/helm_tk.sh $(HELM)
|
|
mkdir -p build/charts/
|
|
cp -R charts/* build/charts/
|
|
$(HELM) dep up build/charts/maas
|
|
$(HELM) lint build/charts/maas
|