CORD-1551 - updated maas makefiles and multi-stage dockerfile
Change-Id: I0bab86e0207edb12f553ddcfe040882f04f34f25
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..bc05a80
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,63 @@
+SUBDIRS := automation config-generator harvester ip-allocator provisioner switchq
+TARGETS := build publish clean test
+PUBLIC_IMAGES := consul@sha256:0dc990ff3c44d5b5395475bcc5ebdae4fc8b67f69e17942a8b9793b3df74d290
+I2 := consul:latest
+I3 := consul
+
+ANSIBLE_ARGS?=
+MAKE_CONFIG?=config.mk
+
+# [EXPERIMENTAL] Deployment via make is currently experimental
+DEPLOY_INVENTORY=deploy-inv
+DEPLOY_CONFIG=deploy-vars
+
+# expands to lists of of the form:
+# <target>_TARGETS := <subdir1>_<target> <subdir2>_<target>
+$(foreach TARGET, $(TARGETS), $(eval $(TARGET)_TARGETS := $(addsuffix _$(TARGET), $(SUBDIRS))))
+
+ifeq ($(realpath $(MAKE_CONFIG)),)
+$(info Makefile configuration not found, defaults will be used.)
+else
+$(info Using makefile configuration "$(MAKE_CONFIG)")
+endif
+
+define recursive_rule
+$1_$2:
+ $$(MAKE) MAKE_CONFIG=$(realpath $(MAKE_CONFIG)) CONFIG=$(realpath $(CONFIG)) -C $1 $2
+endef
+
+$(foreach SUBDIR, $(SUBDIRS), $(foreach TARGET, $(TARGETS), $(eval $(call recursive_rule,$(SUBDIR),$(TARGET)))))
+
+$(foreach TARGET, $(TARGETS), $(eval $(TARGET): $($(TARGET)_TARGETS)))
+
+include help.mk
+
+ifneq ($(realpath $(MAKE_CONFIG)),)
+include $(MAKE_CONFIG)
+endif
+
+define public_image_rules
+$2.image:
+ docker pull $1
+ @touch $$@
+
+$2.publish: $2.image
+ docker tag $1 $(DOCKER_REGISTRY)/$2:$(DEPLOY_DOCKER_TAG)
+ docker push $(DOCKER_REGISTRY)/$2:$(DEPLOY_DOCKER_TAG)
+ @touch $$@
+
+publish: $2.publish
+endef
+
+$(foreach PUBLIC_IMAGE, $(PUBLIC_IMAGES), $(eval $(call public_image_rules,$(PUBLIC_IMAGE),$(word 1,$(subst @, ,$(subst :, ,$(PUBLIC_IMAGE)))))))
+
+prime:
+ ansible-playbook -i $(DEPLOY_INVENTORY) --extra-vars=@$(DEPLOY_CONFIG) $(ANSIBLE_ARGS) prime-node.yml
+
+deploy: publish
+ ansible-playbook -i $(DEPLOY_INVENTORY) --extra-vars=@$(DEPLOY_CONFIG) $(ANSIBLE_ARGS) head-node.yml
+
+config:
+ @echo "hello"
+
+clean: