.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))))