fuel-main/docker/module.mk

91 lines
4.4 KiB
Makefile

.PHONY: docker
containers:=astute cobbler mcollective nailgun keystone nginx ostf rsync rsyslog rabbitmq postgres
REPO_CONTAINER:=fuel-repo-container
docker: $(ARTS_DIR)/$(DOCKER_ART_NAME)
$(ARTS_DIR)/$(DOCKER_ART_NAME): \
$(BUILD_DIR)/docker/build.done
mkdir -p $(@D)
cp $(BUILD_DIR)/docker/$(DOCKER_ART_NAME) $@
DOCKER_DEP_FILE:=$(call find-files,$(DEPS_DIR_CURRENT)/$(DOCKER_ART_NAME))
ifdef DOCKER_DEP_FILE
$(BUILD_DIR)/docker/build.done: \
$(DOCKER_DEP_FILE) \
$(BUILD_DIR)/docker/sources.done
mkdir -p $(@D)
cp $(DOCKER_DEP_FILE) $(BUILD_DIR)/docker/$(DOCKER_ART_NAME)
$(ACTION.TOUCH)
else
# Lrzip all containers into single archive
$(BUILD_DIR)/docker/build.done: \
$(BUILD_DIR)/docker/fuel-centos.done \
$(BUILD_DIR)/docker/sources.done
sudo docker save fuel/centos busybox $(foreach cnt,$(containers), fuel/$(cnt)_$(PRODUCT_VERSION)) > $(BUILD_DIR)/docker/fuel-images.tar
lrzip -L2 -U -D -f $(BUILD_DIR)/docker/fuel-images.tar -o $(BUILD_DIR)/docker/$(DOCKER_ART_NAME)
rm -f $(BUILD_DIR)/docker/fuel-images.tar
sudo docker rm -f "$(REPO_CONTAINER)" || true
$(ACTION.TOUCH)
endif
define build_container
ifndef DOCKER_DEP_FILE
$(BUILD_DIR)/docker/build.done: $(BUILD_DIR)/docker/$1.done
endif
$(BUILD_DIR)/docker/$1.done: \
$(BUILD_DIR)/mirror/centos/build.done \
$(BUILD_DIR)/repos/repos.done \
$(BUILD_DIR)/packages/rpm/build.done \
$(BUILD_DIR)/docker/fuel-centos.done \
$(BUILD_DIR)/iso/isoroot/$(VERSION_YAML_ART_NAME) \
$(BUILD_DIR)/docker/repo-container-up.done
mkdir -p "$(BUILD_DIR)/docker/containers" && \
rm -rf $(BUILD_DIR)/docker/$1 && \
cp -a $(SOURCE_DIR)/docker/$1 $(BUILD_DIR)/docker/$1 && \
REPO_PORT=`sudo docker port $(REPO_CONTAINER) 80 | cut -d':' -f2` && \
sed -e "s/_PORT_/$$$${REPO_PORT}/" -i $(BUILD_DIR)/docker/$1/Dockerfile && \
mkdir -p $(BUILD_DIR)/docker/$1/etc/fuel && \
cp $(BUILD_DIR)/iso/isoroot/version.yaml $(BUILD_DIR)/docker/$1/etc/fuel/version.yaml && \
sed -e 's/production:.*/production: "docker-build"/' -i $(BUILD_DIR)/docker/$1/etc/fuel/version.yaml && \
cp $(SOURCE_DIR)/docker/docker-astute.yaml $(BUILD_DIR)/docker/$1/etc/fuel/astute.yaml && \
sudo docker build --force-rm -t fuel/$1_$(PRODUCT_VERSION) $(BUILD_DIR)/docker/$1
$$(ACTION.TOUCH)
endef
$(BUILD_DIR)/docker/base-images.done: \
$(BUILD_DIR)/mirror/docker/build.done
for container in $(LOCAL_MIRROR_DOCKER_BASEURL)/*.xz; do xz -dkc -T0 $$container | sudo docker load; done
$(ACTION.TOUCH)
$(BUILD_DIR)/docker/fuel-centos.done: \
$(BUILD_DIR)/docker/base-images.done \
$(BUILD_DIR)/mirror/centos/build.done \
$(BUILD_DIR)/packages/rpm/build.done
rm -rf $(BUILD_DIR)/docker/fuel-centos-build && \
cp -a $(SOURCE_DIR)/docker/fuel-centos-build $(BUILD_DIR)/docker/fuel-centos-build && \
sudo docker build -t fuel/fuel-centos-build $(BUILD_DIR)/docker/fuel-centos-build && \
mkdir -p $(BUILD_DIR)/docker/fuel-centos/ && \
echo "Generating fuel/centos base image. Refer to $(BUILD_DIR)/docker/fuel-centos-build.log if it fails." && \
sudo docker -D run --net=bridge --rm -a stdout -a stderr -i -t --privileged -v $(LOCAL_MIRROR_CENTOS):/repo:ro -v $(LOCAL_MIRROR_MOS_CENTOS):/mos-repo:ro -v $(BUILD_DIR)/docker/fuel-centos:/export fuel/fuel-centos-build 2>&1 > $(BUILD_DIR)/docker/fuel-centos-build.log && \
sudo $(SOURCE_DIR)/docker/fuel-centos-build/img2docker.sh $(BUILD_DIR)/docker/fuel-centos/fuel-centos.img fuel/centos
$(ACTION.TOUCH)
$(BUILD_DIR)/docker/repo-container-up.done: \
$(BUILD_DIR)/docker/fuel-centos.done
-sudo docker rm -f "$(REPO_CONTAINER)"
sudo docker -D run -d -p 80 -v $(LOCAL_MIRROR_CENTOS):/var/www/html/repo -v $(LOCAL_MIRROR_MOS_CENTOS):/var/www/html/mos-repo --name "$(REPO_CONTAINER)" fuel/centos /usr/sbin/apachectl -DFOREGROUND
REPO_PORT=`sudo docker port $(REPO_CONTAINER) 80 | cut -d':' -f2` && \
wget -t10 -T1 -O /dev/null --waitretry 1 --retry-connrefused --no-proxy http://127.0.0.1:$${REPO_PORT}/repo/os/x86_64/repodata/repomd.xml && \
wget -t10 -T1 -O /dev/null --waitretry 1 --retry-connrefused --no-proxy http://127.0.0.1:$${REPO_PORT}/mos-repo/repodata/repomd.xml
$(ACTION.TOUCH)
$(BUILD_DIR)/docker/sources.done: \
$(find-files $(SOURCE_DIR)/docker)
mkdir -p $(BUILD_DIR)/docker/sources $(BUILD_DIR)/docker/utils
find $(SOURCE_DIR)/docker -mindepth 1 -type d -not -name '*fuel-centos-build*' | xargs cp -r --target-directory=$(BUILD_DIR)/docker/sources
$(ACTION.TOUCH)
$(foreach cnt,$(containers),$(eval $(call build_container,$(cnt))))