Merge "Allow to define Load Balancer schema (i.e. internal vs internet facing)"
diff --git a/Configuration.md b/Configuration.md
index 57ae5eb..888d3f1 100644
--- a/Configuration.md
+++ b/Configuration.md
@@ -45,6 +45,8 @@
   If not set, create a new VPC.
 * `SUBNET_ID`: Optional. Id of the existing Subnet.
   If not set, create a new Network Stack.
+* LOAD_BALANCER_SCHEME: Optional. The Load Balancer scheme type. `internet-facing` by default.
+  Allowed values: internal, internet-facing
 
 #### LDAP
 
diff --git a/dual-master/Makefile b/dual-master/Makefile
index c606639..203e0f3 100644
--- a/dual-master/Makefile
+++ b/dual-master/Makefile
@@ -27,7 +27,7 @@
 
 cluster: cluster-keys
 ifdef CLUSTER_INSTANCE_TYPE
-		$(eval OPTIONAL_PARAMS := $(OPTIONAL_PARAMS) ParameterKey=InstanceType,ParameterValue=$(CLUSTER_INSTANCE_TYPE))
+		$(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=InstanceType,ParameterValue=$(CLUSTER_INSTANCE_TYPE))
 endif
 
 	$(AWS_FC_COMMAND) create-stack \
@@ -42,7 +42,7 @@
 		ParameterKey=InternetGatewayIdProp,ParameterValue=$(INTERNET_GATEWAY_ID) \
 		ParameterKey=VPCIdProp,ParameterValue=$(VPC_ID) \
 		ParameterKey=SubnetIdProp,ParameterValue=$(SUBNET_ID) \
-		$(OPTIONAL_PARAMS)
+		$(CLUSTER_OPTIONAL_PARAMS)
 
 service-master-1:
 	$(AWS_FC_COMMAND) create-stack \
@@ -82,7 +82,6 @@
 		ParameterKey=GerritHeapLimit,ParameterValue=$(GERRIT_HEAP_LIMIT) \
 		ParameterKey=JgitCacheSize,ParameterValue=$(JGIT_CACHE_SIZE)
 
-
 service-master-2:
 	$(AWS_FC_COMMAND) create-stack \
 		--stack-name $(SERVICE_MASTER2_STACK_NAME) \
@@ -147,6 +146,10 @@
 		ParameterKey=JgitCacheSize,ParameterValue=$(JGIT_CACHE_SIZE)
 
 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  \
@@ -162,7 +165,8 @@
 		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)
+		ParameterKey=SidecarDockerImage,ParameterValue=aws-gerrit/syslog-sidecar:$(SYSLOG_HEAD_SHA1) \
+		$(SERVICE_OPTIONAL_PARAMS)
 
 dns-routing:
 	$(AWS_FC_COMMAND) create-stack \
diff --git a/dual-master/cf-service-lb.yml b/dual-master/cf-service-lb.yml
index c4d8acc..d641851 100644
--- a/dual-master/cf-service-lb.yml
+++ b/dual-master/cf-service-lb.yml
@@ -57,6 +57,11 @@
         Description: The subdomain of the Gerrit cluster
         Type: String
         Default: gerrit-dual-master
+  LoadBalancerScheme:
+        Description: Load Balancer schema, The nodes of an Internet-facing load balancer have public IP addresses.
+        Type: String
+        Default: internet-facing
+        AllowedValues: [internal, internet-facing]
   GerritKeyPrefix:
         Description: Gerrit credentials keys prefix
         Type: String
@@ -145,7 +150,7 @@
         Type: AWS::ElasticLoadBalancingV2::LoadBalancer
         Properties:
             Type: network
-            Scheme: internet-facing
+            Scheme: !Ref 'LoadBalancerScheme'
             Subnets:
               - Fn::ImportValue:
                   !Join [':', [!Ref 'ClusterStackName', 'PublicSubnetOne']]
diff --git a/master-slave/Makefile b/master-slave/Makefile
index 31f0d29..525dd40 100644
--- a/master-slave/Makefile
+++ b/master-slave/Makefile
@@ -24,7 +24,7 @@
 
 cluster: cluster-keys
 ifdef CLUSTER_INSTANCE_TYPE
-		$(eval OPTIONAL_PARAMS := $(OPTIONAL_PARAMS) ParameterKey=InstanceType,ParameterValue=$(CLUSTER_INSTANCE_TYPE))
+		$(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=InstanceType,ParameterValue=$(CLUSTER_INSTANCE_TYPE))
 endif
 
 	$(AWS_FC_COMMAND) create-stack \
@@ -39,9 +39,13 @@
 		ParameterKey=InternetGatewayIdProp,ParameterValue=$(INTERNET_GATEWAY_ID) \
 		ParameterKey=VPCIdProp,ParameterValue=$(VPC_ID) \
 		ParameterKey=SubnetIdProp,ParameterValue=$(SUBNET_ID) \
-		$(OPTIONAL_PARAMS)
+		$(CLUSTER_OPTIONAL_PARAMS)
 
 service-master:
+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 $(SERVICE_MASTER_STACK_NAME) \
 		--capabilities CAPABILITY_IAM  \
@@ -68,9 +72,14 @@
 		ParameterKey=GerritRAM,ParameterValue=$(GERRIT_RAM) \
 		ParameterKey=GerritCPU,ParameterValue=$(GERRIT_CPU) \
 		ParameterKey=GerritHeapLimit,ParameterValue=$(GERRIT_HEAP_LIMIT) \
-		ParameterKey=JgitCacheSize,ParameterValue=$(JGIT_CACHE_SIZE)
+		ParameterKey=JgitCacheSize,ParameterValue=$(JGIT_CACHE_SIZE) \
+		$(SERVICE_OPTIONAL_PARAMS)
 
 service-slave:
+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 $(SERVICE_SLAVE_STACK_NAME) \
 		--capabilities CAPABILITY_IAM  \
@@ -92,7 +101,8 @@
 		ParameterKey=GerritRAM,ParameterValue=$(GERRIT_RAM) \
 		ParameterKey=GerritCPU,ParameterValue=$(GERRIT_CPU) \
 		ParameterKey=GerritHeapLimit,ParameterValue=$(GERRIT_HEAP_LIMIT) \
-		ParameterKey=JgitCacheSize,ParameterValue=$(JGIT_CACHE_SIZE)
+		ParameterKey=JgitCacheSize,ParameterValue=$(JGIT_CACHE_SIZE) \
+		$(SERVICE_OPTIONAL_PARAMS)
 
 dns-routing:
 	$(AWS_FC_COMMAND) create-stack \
diff --git a/master-slave/cf-service-master.yml b/master-slave/cf-service-master.yml
index e07b5a5..fdfb05a 100644
--- a/master-slave/cf-service-master.yml
+++ b/master-slave/cf-service-master.yml
@@ -63,6 +63,11 @@
         Description: The subdomain of the Gerrit cluster
         Type: String
         Default: gerrit-master-demo
+  LoadBalancerScheme:
+        Description: Load Balancer schema, The nodes of an Internet-facing load balancer have public IP addresses.
+        Type: String
+        Default: internet-facing
+        AllowedValues: [internal, internet-facing]
   SlaveSubdomain:
         Description: The subdomain of the Gerrit slave
         Type: String
@@ -276,7 +281,7 @@
         Type: AWS::ElasticLoadBalancingV2::LoadBalancer
         Properties:
             Type: network
-            Scheme: internet-facing
+            Scheme: !Ref 'LoadBalancerScheme'
             Subnets:
               - Fn::ImportValue:
                   !Join [':', [!Ref 'ClusterStackName', 'PublicSubnetOne']]
diff --git a/master-slave/cf-service-slave.yml b/master-slave/cf-service-slave.yml
index f02130d..2778b5f 100644
--- a/master-slave/cf-service-slave.yml
+++ b/master-slave/cf-service-slave.yml
@@ -82,6 +82,11 @@
       Description: The subdomain of the Gerrit cluster
       Type: String
       Default: gerrit-slave-demo
+  LoadBalancerScheme:
+      Description: Load Balancer schema, The nodes of an Internet-facing load balancer have public IP addresses.
+      Type: String
+      Default: internet-facing
+      AllowedValues: [internal, internet-facing]
   GerritGitVolume:
       Description: Gerrit git volume name
       Type: String
@@ -308,7 +313,7 @@
         Type: AWS::ElasticLoadBalancingV2::LoadBalancer
         Properties:
             Type: network
-            Scheme: internet-facing
+            Scheme: !Ref 'LoadBalancerScheme'
             Subnets:
               - Fn::ImportValue:
                   !Join [':', [!Ref 'ClusterStackName', 'PublicSubnetOne']]
diff --git a/single-master/Makefile b/single-master/Makefile
index b2cd8ae..d7b6051 100644
--- a/single-master/Makefile
+++ b/single-master/Makefile
@@ -21,7 +21,7 @@
 
 cluster: cluster-keys
 ifdef CLUSTER_INSTANCE_TYPE
-		$(eval OPTIONAL_PARAMS := $(OPTIONAL_PARAMS) ParameterKey=InstanceType,ParameterValue=$(CLUSTER_INSTANCE_TYPE))
+		$(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=InstanceType,ParameterValue=$(CLUSTER_INSTANCE_TYPE))
 endif
 
 	$(AWS_FC_COMMAND) create-stack \
@@ -35,9 +35,13 @@
 		ParameterKey=InternetGatewayIdProp,ParameterValue=$(INTERNET_GATEWAY_ID) \
 		ParameterKey=VPCIdProp,ParameterValue=$(VPC_ID) \
 		ParameterKey=SubnetIdProp,ParameterValue=$(SUBNET_ID) \
-		$(OPTIONAL_PARAMS)
+		$(CLUSTER_OPTIONAL_PARAMS)
 
 service:
+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 $(SERVICE_STACK_NAME) \
 		--capabilities CAPABILITY_IAM  \
@@ -62,7 +66,8 @@
 		ParameterKey=GerritRAM,ParameterValue=$(GERRIT_RAM) \
 		ParameterKey=GerritCPU,ParameterValue=$(GERRIT_CPU) \
 		ParameterKey=GerritHeapLimit,ParameterValue=$(GERRIT_HEAP_LIMIT) \
-		ParameterKey=JgitCacheSize,ParameterValue=$(JGIT_CACHE_SIZE)
+		ParameterKey=JgitCacheSize,ParameterValue=$(JGIT_CACHE_SIZE) \
+		$(SERVICE_OPTIONAL_PARAMS)
 
 dns-routing:
 	$(AWS_FC_COMMAND) create-stack \
diff --git a/single-master/cf-service.yml b/single-master/cf-service.yml
index 7b1a2ae..cc8530c 100644
--- a/single-master/cf-service.yml
+++ b/single-master/cf-service.yml
@@ -48,6 +48,11 @@
         Description: The subdomain of the Gerrit cluster
         Type: String
         Default: gerrit-master-demo
+  LoadBalancerScheme:
+        Description: Load Balancer schema, The nodes of an Internet-facing load balancer have public IP addresses.
+        Type: String
+        Default: internet-facing
+        AllowedValues: [internal, internet-facing]
   GerritKeyPrefix:
         Description: Gerrit credentials keys prefix
         Type: String
@@ -247,7 +252,7 @@
         Type: AWS::ElasticLoadBalancingV2::LoadBalancer
         Properties:
             Type: network
-            Scheme: internet-facing
+            Scheme: !Ref 'LoadBalancerScheme'
             Subnets:
               - Fn::ImportValue:
                   !Join [':', [!Ref 'ClusterStackName', 'PublicSubnetOne']]