blob: 85de91e1569d8ebf9f81a529367614ec4da3f1a9 [file] [log] [blame]
include ../common.env # Must be included before setup.env because the latter depends on it
include setup.env
include ../Makefile.common
CLUSTER_TEMPLATE:=cf-cluster.yml
SERVICE_MASTER_TEMPLATE:=cf-service-master.yml
SERVICE_SLAVE_TEMPLATE:=cf-service-slave.yml
DNS_ROUTING_TEMPLATE:=cf-dns-route.yml
LOAD_BALANCER_TEMPLATE:=cf-service-lb.yml
AWS_FC_COMMAND=export AWS_PAGER=;aws cloudformation
.PHONY: create-all delete-all \
cluster cluster-keys service-master-1 service-master-2 service-slave dns-routing \
wait-for-cluster-creation wait-for-service-master-1-creation wait-for-service-master-2-creation wait-for-service-slave-creation wait-for-dns-routing-creation \
wait-for-cluster-deletion wait-for-service-master-1-deletion wait-for-service-master-2-deletion wait-for-service-slave-deletion wait-for-dns-routing-deletion \
service-lb wait-for-service-lb-deletion wait-for-service-lb-creation \
gerrit-build gerrit-publish haproxy-publish syslog-sidecar-publish
create-all: upload-common-templates \
gerrit-publish haproxy-publish syslog-sidecar-publish \
cluster wait-for-cluster-creation \
service-slave service-master-1 \
wait-for-service-master-1-creation wait-for-service-slave-creation \
service-master-2 wait-for-service-master-2-creation \
service-lb wait-for-service-lb-creation \
dns-routing wait-for-dns-routing-creation
cluster: cluster-keys
ifdef CLUSTER_INSTANCE_TYPE
$(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=InstanceType,ParameterValue=$(CLUSTER_INSTANCE_TYPE))
endif
ifdef FILESYSTEM_THROUGHPUT_MODE
$(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=FileSystemThroughputMode,ParameterValue=$(FILESYSTEM_THROUGHPUT_MODE))
endif
ifdef FILESYSTEM_PROVISIONED_THROUGHPUT_IN_MIBPS
$(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=ProvisionedThroughputInMibps,ParameterValue=$(FILESYSTEM_PROVISIONED_THROUGHPUT_IN_MIBPS))
endif
$(AWS_FC_COMMAND) create-stack \
--stack-name $(CLUSTER_STACK_NAME) \
--capabilities CAPABILITY_IAM \
--template-body file://`pwd`/$(CLUSTER_TEMPLATE) \
--region $(AWS_REGION) \
--parameters \
ParameterKey=DesiredCapacity,ParameterValue=$(CLUSTER_DESIRED_CAPACITY) \
ParameterKey=ECSKeyName,ParameterValue=$(CLUSTER_KEYS) \
ParameterKey=TemplateBucketName,ParameterValue=$(TEMPLATE_BUCKET_NAME) \
ParameterKey=InternetGatewayIdProp,ParameterValue=$(INTERNET_GATEWAY_ID) \
ParameterKey=VPCIdProp,ParameterValue=$(VPC_ID) \
ParameterKey=SubnetIdProp,ParameterValue=$(SUBNET_ID) \
$(CLUSTER_OPTIONAL_PARAMS)
service-master-1: set-optional-params-metrics-cloudwatch set-optional-params-smtp
ifdef GERRIT_MASTER1_INSTANCE_ID
$(eval MASTER1_SERVICE_OPTIONAL_PARAMS := $(MASTER1_SERVICE_OPTIONAL_PARAMS) ParameterKey=InstanceId,ParameterValue=$(GERRIT_MASTER1_INSTANCE_ID))
endif
ifdef LDAP_ACCOUNT_PATTERN
$(eval MASTER1_SERVICE_OPTIONAL_PARAMS := $(MASTER1_SERVICE_OPTIONAL_PARAMS) ParameterKey=LDAPAccountPattern,ParameterValue=\"$(LDAP_ACCOUNT_PATTERN)\")
endif
$(AWS_FC_COMMAND) create-stack \
--stack-name $(SERVICE_MASTER1_STACK_NAME) \
--capabilities CAPABILITY_IAM \
--template-body file://`pwd`/$(SERVICE_MASTER_TEMPLATE) \
--region $(AWS_REGION) \
--parameters \
ParameterKey=LDAPServer,ParameterValue=$(LDAP_SERVER) \
ParameterKey=LDAPUsername,ParameterValue=\"$(LDAP_USERNAME)\" \
ParameterKey=LDAPAccountBase,ParameterValue=\"$(LDAP_ACCOUNT_BASE)\" \
ParameterKey=LDAPGroupBase,ParameterValue=\"$(LDAP_GROUP_BASE)\" \
ParameterKey=SMTPServer,ParameterValue=$(SMTP_SERVER) \
ParameterKey=SMTPUser,ParameterValue=$(SMTP_USER) \
ParameterKey=SMTPDomain,ParameterValue=$(SMTP_DOMAIN) \
ParameterKey=ClusterStackName,ParameterValue=$(CLUSTER_STACK_NAME) \
ParameterKey=TemplateBucketName,ParameterValue=$(TEMPLATE_BUCKET_NAME) \
ParameterKey=HostedZoneName,ParameterValue=$(HOSTED_ZONE_NAME) \
ParameterKey=Subdomain,ParameterValue=$(MASTER1_SUBDOMAIN) \
ParameterKey=SlaveSubdomain,ParameterValue=$(SLAVE_SUBDOMAIN) \
ParameterKey=DockerRegistryUrl,ParameterValue=$(DOCKER_REGISTRY_URI) \
ParameterKey=CertificateArn,ParameterValue=$(SSL_CERTIFICATE_ARN) \
ParameterKey=HTTPHostPort,ParameterValue=$(HTTP_HOST_PORT_MASTER1) \
ParameterKey=SSHHostPort,ParameterValue=$(SSH_HOST_PORT_MASTER1) \
ParameterKey=GerritKeyPrefix,ParameterValue=$(GERRIT_KEY_PREFIX)\
ParameterKey=DockerImage,ParameterValue=aws-gerrit/gerrit:$(IMAGE_TAG) \
ParameterKey=GerritDataVolume,ParameterValue=gerrit-data-master-1 \
ParameterKey=GerritIndexVolume,ParameterValue=gerrit-index-master-1 \
ParameterKey=GerritCacheVolume,ParameterValue=gerrit-cache-master-1 \
ParameterKey=GerritDbVolume,ParameterValue=gerrit-db-master-1 \
ParameterKey=GerritLogsVolume,ParameterValue=gerrit-logs-master-1 \
ParameterKey=PeerSubdomain,ParameterValue=$(MASTER2_SUBDOMAIN) \
ParameterKey=LBSubdomain,ParameterValue=$(LB_SUBDOMAIN) \
ParameterKey=SlaveServiceStackName,ParameterValue=$(SERVICE_SLAVE_STACK_NAME) \
ParameterKey=GerritRAM,ParameterValue=$(GERRIT_RAM) \
ParameterKey=GerritCPU,ParameterValue=$(GERRIT_CPU) \
ParameterKey=GerritHeapLimit,ParameterValue=$(GERRIT_HEAP_LIMIT) \
ParameterKey=JgitCacheSize,ParameterValue=$(JGIT_CACHE_SIZE) \
$(MASTER1_SERVICE_OPTIONAL_PARAMS) \
$(METRICS_CW_OPTIONAL_PARAMS) \
$(SMTP_OPTIONAL_PARAMS)
service-master-2: set-optional-params-metrics-cloudwatch set-optional-params-smtp
ifdef GERRIT_MASTER2_INSTANCE_ID
$(eval MASTER2_SERVICE_OPTIONAL_PARAMS := $(MASTER2_SERVICE_OPTIONAL_PARAMS) ParameterKey=InstanceId,ParameterValue=$(GERRIT_MASTER2_INSTANCE_ID))
endif
ifdef LDAP_ACCOUNT_PATTERN
$(eval MASTER2_SERVICE_OPTIONAL_PARAMS := $(MASTER2_SERVICE_OPTIONAL_PARAMS) ParameterKey=LDAPAccountPattern,ParameterValue=\"$(LDAP_ACCOUNT_PATTERN)\")
endif
$(AWS_FC_COMMAND) create-stack \
--stack-name $(SERVICE_MASTER2_STACK_NAME) \
--capabilities CAPABILITY_IAM \
--template-body file://`pwd`/$(SERVICE_MASTER_TEMPLATE) \
--region $(AWS_REGION) \
--parameters \
ParameterKey=LDAPServer,ParameterValue=$(LDAP_SERVER) \
ParameterKey=LDAPUsername,ParameterValue=\"$(LDAP_USERNAME)\" \
ParameterKey=LDAPAccountBase,ParameterValue=\"$(LDAP_ACCOUNT_BASE)\" \
ParameterKey=LDAPGroupBase,ParameterValue=\"$(LDAP_GROUP_BASE)\" \
ParameterKey=SMTPServer,ParameterValue=$(SMTP_SERVER) \
ParameterKey=SMTPUser,ParameterValue=$(SMTP_USER) \
ParameterKey=SMTPDomain,ParameterValue=$(SMTP_DOMAIN) \
ParameterKey=ClusterStackName,ParameterValue=$(CLUSTER_STACK_NAME) \
ParameterKey=TemplateBucketName,ParameterValue=$(TEMPLATE_BUCKET_NAME) \
ParameterKey=HostedZoneName,ParameterValue=$(HOSTED_ZONE_NAME) \
ParameterKey=Subdomain,ParameterValue=$(MASTER2_SUBDOMAIN) \
ParameterKey=SlaveSubdomain,ParameterValue=$(SLAVE_SUBDOMAIN) \
ParameterKey=DockerRegistryUrl,ParameterValue=$(DOCKER_REGISTRY_URI) \
ParameterKey=CertificateArn,ParameterValue=$(SSL_CERTIFICATE_ARN) \
ParameterKey=HTTPHostPort,ParameterValue=$(HTTP_HOST_PORT_MASTER2) \
ParameterKey=SSHHostPort,ParameterValue=$(SSH_HOST_PORT_MASTER2) \
ParameterKey=GerritKeyPrefix,ParameterValue=$(GERRIT_KEY_PREFIX)\
ParameterKey=DockerImage,ParameterValue=aws-gerrit/gerrit:$(IMAGE_TAG) \
ParameterKey=GerritDataVolume,ParameterValue=gerrit-data-master-2 \
ParameterKey=GerritIndexVolume,ParameterValue=gerrit-index-master-2 \
ParameterKey=GerritCacheVolume,ParameterValue=gerrit-cache-master-2 \
ParameterKey=GerritDbVolume,ParameterValue=gerrit-db-master-2 \
ParameterKey=GerritLogsVolume,ParameterValue=gerrit-logs-master-2 \
ParameterKey=PeerSubdomain,ParameterValue=$(MASTER1_SUBDOMAIN) \
ParameterKey=LBSubdomain,ParameterValue=$(LB_SUBDOMAIN) \
ParameterKey=SlaveServiceStackName,ParameterValue=$(SERVICE_SLAVE_STACK_NAME) \
ParameterKey=ReindexAtSartup,ParameterValue=true \
ParameterKey=GerritRAM,ParameterValue=$(GERRIT_RAM) \
ParameterKey=GerritCPU,ParameterValue=$(GERRIT_CPU) \
ParameterKey=GerritHeapLimit,ParameterValue=$(GERRIT_HEAP_LIMIT) \
ParameterKey=JgitCacheSize,ParameterValue=$(JGIT_CACHE_SIZE) \
$(MASTER2_SERVICE_OPTIONAL_PARAMS) \
$(METRICS_CW_OPTIONAL_PARAMS) \
$(SMTP_OPTIONAL_PARAMS)
service-slave: set-optional-params-metrics-cloudwatch
ifdef GERRIT_SLAVE_INSTANCE_ID
$(eval SLAVE_SERVICE_OPTIONAL_PARAMS := $(SLAVE_SERVICE_OPTIONAL_PARAMS) ParameterKey=InstanceId,ParameterValue=$(GERRIT_SLAVE_INSTANCE_ID))
endif
ifdef LDAP_ACCOUNT_PATTERN
$(eval SLAVE_SERVICE_OPTIONAL_PARAMS := $(SLAVE_SERVICE_OPTIONAL_PARAMS) ParameterKey=LDAPAccountPattern,ParameterValue=\"$(LDAP_ACCOUNT_PATTERN)\")
endif
$(AWS_FC_COMMAND) create-stack \
--stack-name $(SERVICE_SLAVE_STACK_NAME) \
--capabilities CAPABILITY_IAM \
--template-body file://`pwd`/$(SERVICE_SLAVE_TEMPLATE) \
--region $(AWS_REGION) \
--parameters \
ParameterKey=LDAPServer,ParameterValue=$(LDAP_SERVER) \
ParameterKey=LDAPUsername,ParameterValue=\"$(LDAP_USERNAME)\" \
ParameterKey=LDAPAccountBase,ParameterValue=\"$(LDAP_ACCOUNT_BASE)\" \
ParameterKey=LDAPGroupBase,ParameterValue=\"$(LDAP_GROUP_BASE)\" \
ParameterKey=ClusterStackName,ParameterValue=$(CLUSTER_STACK_NAME) \
ParameterKey=TemplateBucketName,ParameterValue=$(TEMPLATE_BUCKET_NAME) \
ParameterKey=HostedZoneName,ParameterValue=$(HOSTED_ZONE_NAME) \
ParameterKey=Subdomain,ParameterValue=$(SLAVE_SUBDOMAIN) \
ParameterKey=DockerRegistryUrl,ParameterValue=$(DOCKER_REGISTRY_URI) \
ParameterKey=CertificateArn,ParameterValue=$(SSL_CERTIFICATE_ARN) \
ParameterKey=GerritKeyPrefix,ParameterValue=$(GERRIT_KEY_PREFIX)\
ParameterKey=GerritDockerImage,ParameterValue=aws-gerrit/gerrit:$(IMAGE_TAG) \
ParameterKey=GerritRAM,ParameterValue=$(GERRIT_RAM) \
ParameterKey=GerritCPU,ParameterValue=$(GERRIT_CPU) \
ParameterKey=GerritHeapLimit,ParameterValue=$(GERRIT_HEAP_LIMIT) \
ParameterKey=JgitCacheSize,ParameterValue=$(JGIT_CACHE_SIZE) \
$(SLAVE_SERVICE_OPTIONAL_PARAMS) \
$(METRICS_CW_OPTIONAL_PARAMS)
service-lb:
ifdef LOAD_BALANCER_SCHEME
$(eval SERVICE_OPTIONAL_PARAMS := $(SERVICE_OPTIONAL_PARAMS) ParameterKey=LoadBalancerScheme,ParameterValue=$(LOAD_BALANCER_SCHEME))
endif
$(AWS_FC_COMMAND) create-stack \
--stack-name $(LOAD_BALANCER_STACK_NAME) \
--capabilities CAPABILITY_IAM \
--template-body file://`pwd`/$(LOAD_BALANCER_TEMPLATE) \
--region $(AWS_REGION) \
--parameters \
ParameterKey=ClusterStackName,ParameterValue=$(CLUSTER_STACK_NAME) \
ParameterKey=Master1ServiceStackName,ParameterValue=$(SERVICE_MASTER1_STACK_NAME) \
ParameterKey=Master2ServiceStackName,ParameterValue=$(SERVICE_MASTER2_STACK_NAME) \
ParameterKey=HostedZoneName,ParameterValue=$(HOSTED_ZONE_NAME) \
ParameterKey=DockerRegistryUrl,ParameterValue=$(DOCKER_REGISTRY_URI) \
ParameterKey=GerritKeyPrefix,ParameterValue=$(GERRIT_KEY_PREFIX)\
ParameterKey=CertificateArn,ParameterValue=$(SSL_CERTIFICATE_ARN) \
ParameterKey=Subdomain,ParameterValue=$(LB_SUBDOMAIN) \
ParameterKey=HAProxyDockerImage,ParameterValue=aws-gerrit/haproxy:$(HAPROXY_HEAD_SHA1) \
ParameterKey=SidecarDockerImage,ParameterValue=aws-gerrit/syslog-sidecar:$(SYSLOG_HEAD_SHA1) \
$(SERVICE_OPTIONAL_PARAMS)
dns-routing:
$(AWS_FC_COMMAND) create-stack \
--stack-name $(DNS_ROUTING_STACK_NAME) \
--capabilities CAPABILITY_IAM \
--template-body file://`pwd`/$(DNS_ROUTING_TEMPLATE) \
--region $(AWS_REGION) \
--parameters \
ParameterKey=Master1ServiceStackName,ParameterValue=$(SERVICE_MASTER1_STACK_NAME) \
ParameterKey=Master2ServiceStackName,ParameterValue=$(SERVICE_MASTER2_STACK_NAME) \
ParameterKey=LBServiceStackName,ParameterValue=$(LOAD_BALANCER_STACK_NAME)
wait-for-cluster-creation:
@echo "*** Wait for cluster stack '$(CLUSTER_STACK_NAME)' creation"
$(AWS_FC_COMMAND) wait stack-create-complete \
--stack-name $(CLUSTER_STACK_NAME) \
--region $(AWS_REGION)
@echo "*** Cluster stack '$(CLUSTER_STACK_NAME)' created"
wait-for-service-master-1-creation:
@echo "*** Wait for service master stack '$(SERVICE_MASTER1_STACK_NAME)' creation"
$(AWS_FC_COMMAND) wait stack-create-complete \
--stack-name $(SERVICE_MASTER1_STACK_NAME) \
--region $(AWS_REGION)
@echo "*** Service stack '$(SERVICE_MASTER1_STACK_NAME)' created"
wait-for-service-master-2-creation:
@echo "*** Wait for service master stack '$(SERVICE_MASTER2_STACK_NAME)' creation"
$(AWS_FC_COMMAND) wait stack-create-complete \
--stack-name $(SERVICE_MASTER2_STACK_NAME) \
--region $(AWS_REGION)
@echo "*** Service stack '$(SERVICE_MASTER2_STACK_NAME)' created"
wait-for-service-slave-creation:
@echo "*** Wait for service slave stack '$(SERVICE_SLAVE_STACK_NAME)' creation"
$(AWS_FC_COMMAND) wait stack-create-complete \
--stack-name $(SERVICE_SLAVE_STACK_NAME) \
--region $(AWS_REGION)
@echo "*** Service stack '$(SERVICE_SLAVE_STACK_NAME)' created"
wait-for-service-lb-creation:
@echo "*** Wait for service lb stack '$(LOAD_BALANCER_STACK_NAME)' creation"
$(AWS_FC_COMMAND) wait stack-create-complete \
--stack-name $(LOAD_BALANCER_STACK_NAME) \
--region $(AWS_REGION)
@echo "*** Service stack '$(LOAD_BALANCER_STACK_NAME)' created"
wait-for-dns-routing-creation:
@echo "*** Wait for DNS routing stack '$(DNS_ROUTING_STACK_NAME)' creation"
$(AWS_FC_COMMAND) wait stack-create-complete \
--stack-name $(DNS_ROUTING_STACK_NAME) \
--region $(AWS_REGION)
@echo "*** DNS Routing stack '$(DNS_ROUTING_STACK_NAME)' created"
wait-for-cluster-deletion:
@echo "*** Wait for cluster stack '$(CLUSTER_STACK_NAME)' deletion"
$(AWS_FC_COMMAND) wait stack-delete-complete \
--stack-name $(CLUSTER_STACK_NAME) \
--region $(AWS_REGION)
@echo "*** Cluster stack '$(CLUSTER_STACK_NAME)' deleted"
wait-for-service-master-1-deletion:
@echo "*** Wait for service master stack '$(SERVICE_MASTER1_STACK_NAME)' deletion"
$(AWS_FC_COMMAND) wait stack-delete-complete \
--stack-name $(SERVICE_MASTER1_STACK_NAME) \
--region $(AWS_REGION)
@echo "*** Service stack master '$(SERVICE_MASTER1_STACK_NAME)' deleted"
wait-for-service-master-2-deletion:
@echo "*** Wait for service master stack '$(SERVICE_MASTER2_STACK_NAME)' deletion"
$(AWS_FC_COMMAND) wait stack-delete-complete \
--stack-name $(SERVICE_MASTER2_STACK_NAME) \
--region $(AWS_REGION)
@echo "*** Service stack master '$(SERVICE_MASTER2_STACK_NAME)' deleted"
wait-for-service-slave-deletion:
@echo "*** Wait for service slave stack '$(SERVICE_SLAVE_STACK_NAME)' deletion"
$(AWS_FC_COMMAND) wait stack-delete-complete \
--stack-name $(SERVICE_SLAVE_STACK_NAME) \
--region $(AWS_REGION)
@echo "*** Service stack slave '$(SERVICE_SLAVE_STACK_NAME)' deleted"
wait-for-service-lb-deletion:
@echo "*** Wait for service lb stack '$(LOAD_BALANCER_STACK_NAME)' deletion"
$(AWS_FC_COMMAND) wait stack-delete-complete \
--stack-name $(LOAD_BALANCER_STACK_NAME) \
--region $(AWS_REGION)
@echo "*** Service stack '$(LOAD_BALANCER_STACK_NAME)' deleted"
wait-for-dns-routing-deletion:
@echo "*** Wait for DNS routing stack '$(DNS_ROUTING_STACK_NAME)' deletion"
$(AWS_FC_COMMAND) wait stack-delete-complete \
--stack-name $(DNS_ROUTING_STACK_NAME) \
--region $(AWS_REGION)
@echo "*** DNS routing stack '$(DNS_ROUTING_STACK_NAME)' deleted"
delete-cluster:
$(AWS_FC_COMMAND) delete-stack \
--stack-name $(CLUSTER_STACK_NAME) \
--region $(AWS_REGION)
delete-service-master-1:
$(AWS_FC_COMMAND) delete-stack \
--stack-name $(SERVICE_MASTER1_STACK_NAME) \
--region $(AWS_REGION)
delete-service-master-2:
$(AWS_FC_COMMAND) delete-stack \
--stack-name $(SERVICE_MASTER2_STACK_NAME) \
--region $(AWS_REGION)
delete-service-slave:
$(AWS_FC_COMMAND) delete-stack \
--stack-name $(SERVICE_SLAVE_STACK_NAME) \
--region $(AWS_REGION)
delete-service-lb:
$(AWS_FC_COMMAND) delete-stack \
--stack-name $(LOAD_BALANCER_STACK_NAME) \
--region $(AWS_REGION)
delete-dns-routing:
$(AWS_FC_COMMAND) delete-stack \
--stack-name $(DNS_ROUTING_STACK_NAME) \
--region $(AWS_REGION)
delete-all: delete-dns-routing wait-for-dns-routing-deletion \
delete-service-lb wait-for-service-lb-deletion \
delete-service-master-1 delete-service-master-2 delete-service-slave \
wait-for-service-master-1-deletion wait-for-service-master-2-deletion wait-for-service-slave-deletion \
delete-cluster wait-for-cluster-deletion
gerrit-publish:
$(MAKE) -C ../gerrit gerrit-publish RECIPE=dual-master
haproxy-publish:
$(MAKE) -C haproxy haproxy-publish
syslog-sidecar-publish:
$(MAKE) -C syslog-sidecar syslog-sidecar-publish
git-daemon-publish:
$(MAKE) -C ../master-slave/git-daemon git-daemon-publish
git-ssh-publish:
$(MAKE) -C ../master-slave/git-ssh git-ssh-publish