Enable scheduled GC for master-slave

Allow master-slave recipe to be configured so that a scheduled GC task
can run and perform garbage collection on a list of specified
repositories.

Feature: Issue 13620
Change-Id: Ic62d7715d27c92d3f2937a19277284d3a6d9a737
diff --git a/master-slave/Makefile b/master-slave/Makefile
index 6e2b3d0..8e8e93f 100644
--- a/master-slave/Makefile
+++ b/master-slave/Makefile
@@ -1,6 +1,7 @@
 include ../common.env # Must be included before setup.env because the latter depends on it
 include setup.env
 include ../Makefile.common
+include ../maintenance/git-gc/Makefile
 
 CLUSTER_TEMPLATE:=cf-cluster.yml
 SERVICE_MASTER_TEMPLATE:=cf-service-master.yml
@@ -8,6 +9,7 @@
 DNS_ROUTING_TEMPLATE:=cf-dns-route.yml
 CLOUDWATCH_DASHBOARD_TEMPLATE:=cf-dashboard.yml
 AWS_FC_COMMAND=export AWS_PAGER=;aws cloudformation
+GIT_GC_SOURCE_PATH=/gerrit-mount-point/gerrit-git
 
 .PHONY: create-all delete-all \
 				cluster cluster-keys service-master service-slave dns-routing dashboard \
@@ -26,6 +28,7 @@
 						service-slave service-master \
 						wait-for-service-master-creation wait-for-service-slave-creation \
 						$(optional_dashboard_targets) \
+						$(optional_git_gc_targets_creation) \
 						dns-routing wait-for-dns-routing-creation
 
 cluster: cluster-keys set-optional-gerrit-master-volume
@@ -269,6 +272,7 @@
 						delete-service-slave wait-for-service-slave-deletion \
 						delete-service-master wait-for-service-master-deletion \
 						delete-cluster wait-for-cluster-deletion \
+						$(optional_git_gc_targets_deletion) \
 						delete-dashboard wait-for-dashboard-deletion
 
 gerrit-publish:
diff --git a/master-slave/cf-cluster.yml b/master-slave/cf-cluster.yml
index 674727f..1775c63 100644
--- a/master-slave/cf-cluster.yml
+++ b/master-slave/cf-cluster.yml
@@ -366,3 +366,8 @@
     Value: !GetAtt ECSTaskNetworkStack.Outputs.PublicSubnetOneRef
     Export:
       Name: !Join [ ':', [ !Ref 'AWS::StackName', 'PublicSubnetOne' ] ]
+  ClusterArn:
+    Description: The ARN of the ECS cluster
+    Value: !GetAtt ECSCluster.Arn
+    Export:
+      Name: !Join [ ':', [ !Ref 'AWS::StackName', 'ClusterArn' ] ]
diff --git a/master-slave/setup.env.template b/master-slave/setup.env.template
index c14f6a8..eb860f6 100644
--- a/master-slave/setup.env.template
+++ b/master-slave/setup.env.template
@@ -43,3 +43,8 @@
 
 GERRIT_CONTAINER_FDS_SOFT_LIMIT:=32768
 GERRIT_CONTAINER_FDS_HARD_LIMIT:=32768
+
+GIT_GC_ENABLED=false
+SERVICE_GIT_GC_STACK_NAME=$(AWS_PREFIX)-scheduled-gc
+GIT_GC_CRON_EXPRESSION="0 2 ? * SAT *"
+GIT_GC_PROJECT_LIST="All-Users"
\ No newline at end of file