1
1
KUBECONFIG ?= $(HOME)/.kube/config
2
2
KUBECTL = kubectl --kubeconfig=$(KUBECONFIG) --insecure-skip-tls-verify=true
3
REGISTRY_CONFIG = deployment/registry.yaml
4
DOCKER_REGISTRY ?= localhost:5000
5
REGISTRY_CONFIG = deployment/registry.yml
6
5
IMAGE_NAME ?= isitdeployable
7
6
IMAGE_TAG ?= $(shell bzr version-info --custom --template={branch_nick}-{revno})
8
NAMESPACE ?= isitdeployable
9
DB_EXTERNAL_NAME ?= db.default.svc.cluster.local
10
AMQP_EXTERNAL_NAME ?= amqp.default.svc.cluster.local
13
TLS_CRT ?= $(shell cat deployment/$(DOMAIN).crt | base64 -w0)
14
TLS_KEY ?= $(shell cat deployment/$(DOMAIN).key | base64 -w0)
16
8
HTTP_PROXY ?= $(http_proxy)
17
9
HTTPS_PROXY ?= $(https_proxy)
18
10
NO_PROXY ?= $(no_proxy)
12
# automatically source environment variables
22
17
k8s-bootstrap: $(ENV) fetch-sourcedeps ## Bootstrap k8s environment
58
58
$(MAKE) k8s-deploy-app
59
59
$(MAKE) k8s-deploy-firewall
61
k8s-deploy-namespace: k8s-render-templates ## Deploy namespace for isitdeployable (PRODUCTION)
62
$(KUBECTL) create -f tmp/namespace.yml || true
61
k8s-deploy-namespace: k8s-render-config ## Deploy namespace for isitdeployable (PRODUCTION)
62
$(KUBECTL) create -f tmp/namespace.yaml || true
64
k8s-deploy-config: k8s-render-templates ## Deploy configuration for isitdeployable (PRODUCTION)
65
$(KUBECTL) create -f tmp/configmaps.yml || true
64
k8s-deploy-config: k8s-render-config ## Deploy configuration for isitdeployable (PRODUCTION)
65
$(KUBECTL) create -f tmp/configmaps.yaml || true
67
67
k8s-deploy-registry-secret: k8s-deploy-namespace ## Deploy secret for registry access into isitdeployable namespace (PRODUCTION)
68
69
$(KUBECTL) get secret registry-access -o yaml | sed 's/default/$(NAMESPACE)/g' | kubectl -n $(NAMESPACE) create -f - || true
70
k8s-deploy-services: k8s-render-templates ## Deploy isitdeployable supporting services (PRODUCTION)
71
$(KUBECTL) create -f tmp/services.yml || true
71
k8s-deploy-services: k8s-render-config ## Deploy isitdeployable supporting services (PRODUCTION)
72
$(KUBECTL) create -f tmp/services.yaml || true
73
k8s-deploy-app: k8s-render-templates ## Deploy isitdeployable app
74
$(KUBECTL) create --record -f tmp/secrets.yml -f tmp/deployments.yml || true
74
k8s-deploy-app: k8s-render-config ## Deploy isitdeployable app
76
$(KUBECTL) create --record -f tmp/secrets.yaml -f tmp/deployments.yaml || true
75
77
$(KUBECTL) --namespace $(NAMESPACE) rollout status deployment/app
77
k8s-deploy-firewall: k8s-render-templates ## Deploy ingress rules
78
$(KUBECTL) create -f tmp/ingress.yml || true
79
k8s-deploy-firewall: k8s-render-config ## Deploy ingress rules
80
$(KUBECTL) create -f tmp/ingress.yaml || true
80
82
k8s-update-app: ## Update isitdeployable app
81
84
$(KUBECTL) --namespace $(NAMESPACE) set image deployment/app app=$(DOCKER_REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG) worker=$(DOCKER_REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG)
82
85
$(KUBECTL) --namespace $(NAMESPACE) rollout status deployment/app
84
k8s-deploy-all-dev: k8s-render-templates ## Deploy isitdeployable full stack for development
87
k8s-deploy-all-dev: k8s-render-config ## Deploy isitdeployable full stack for development
88
$(MAKE) k8s-deploy-namespace
85
89
$(MAKE) k8s-deploy-services-dev
86
90
$(MAKE) k8s-deploy-all
88
k8s-deploy-services-dev: k8s-render-templates ## Deploy isitdeployable supporting services for development
89
$(KUBECTL) create -f deployment/services-dev.yml || true
90
$(KUBECTL) rollout status deployment/db
91
$(KUBECTL) rollout status deployment/amqp
92
k8s-deploy-services-dev: k8s-render-config ## Deploy isitdeployable supporting services for development
94
$(KUBECTL) create -f tmp/services-dev.yaml || true
95
$(KUBECTL) --namespace $(NAMESPACE) rollout status deployment/db
96
$(KUBECTL) --namespace $(NAMESPACE) rollout status deployment/amqp
95
tmp/%.yml: deployment/%.yml.j2
96
$(MAKE) generate-config K8S_CONFIG=$@ K8S_CONFIG_TEMPLATE=$<
99
IMAGE_NAME="$(IMAGE_NAME)" IMAGE_TAG="$(IMAGE_TAG)" \
100
DOCKER_REGISTRY="$(DOCKER_REGISTRY)" \
101
BUILD_REVISION="$(shell docker inspect -f '{{ .Config.Labels.revision }}' $(DOCKER_REGISTRY):$(IMAGE_NAME):$(IMAGE_TAG))" \
102
NAMESPACE=$(NAMESPACE) \
103
DB_EXTERNAL_NAME=$(DB_EXTERNAL_NAME) \
104
AMQP_EXTERNAL_NAME=$(AMQP_EXTERNAL_NAME) \
105
DOMAIN="$(DOMAIN)" TLS_CRT="$(TLS_CRT)" TLS_KEY="$(TLS_KEY)" \
106
LP_BOT="$(shell bzr lp-login)" \
107
python scripts/generate-config $(K8S_CONFIG_TEMPLATE) > $(K8S_CONFIG)
100
tmp/%.yaml: deployment/%.yaml.tpl
101
$(MAKE) render-template SRC=$< DST=$@
105
@$(eval REVISION=$(shell docker inspect -f '{{.Config.Labels.revision}}' $(DOCKER_REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG)))
106
@REVISION=$(REVISION) IMAGE_NAME=$(IMAGE_NAME) IMAGE_TAG=$(IMAGE_TAG) envsubst < $(SRC) > $(DST)
110
define check-env-vars
111
if test -z "$(NAMESPACE)"; then \
112
echo "NAMESPACE variable not defined; aborting."; \
114
elif test -z "$(DOMAIN)"; then \
115
echo "DOMAIN variable not defined; aborting."; \
117
elif test -z "$(DB_EXTERNAL_NAME)"; then \
118
echo "DB_EXTERNAL_NAME variable not defined; aborting."; \
120
elif test -z "$(AMQP_EXTERNAL_NAME)"; then \
121
echo "AMQP_EXTERNAL_NAME variable not defined; aborting."; \
123
elif test -z "$(DOCKER_REGISTRY)"; then \
124
echo "DOCKER_REGISTRY variable not defined; aborting."; \
126
elif test -z "$(IMAGE_NAME)"; then \
127
echo "IMAGE_NAME variable not defined; aborting."; \
129
elif test -z "$(IMAGE_TAG)"; then \
130
echo "IMAGE_TAG variable not defined; aborting."; \
132
elif test -z "$(LP_BOT)"; then \
133
echo "LP_BOT variable not defined; aborting."; \