Allow configure Subnet CIDR mask

Some organisations already have predefined Network Stack and different
CIDR subnet mask than the default one.

Feature: Issue 13327
Change-Id: Ia7d32a7a5aacf4c96202151f8600bdb1c3b0ecb0
diff --git a/Configuration.md b/Configuration.md
index 3e5f89b..0e98ad7 100644
--- a/Configuration.md
+++ b/Configuration.md
@@ -47,8 +47,12 @@
   If not set, create a new Internet Gateway
 * `VPC_ID`: Optional. Id of the existing VPC.
   If not set, create a new VPC.
+* `VPC_CIDR`: Optional. CIDR mask for the VPC.
+  `10.0.0.0/16` by default.
 * `SUBNET_ID`: Optional. Id of the existing Subnet.
   If not set, create a new Network Stack.
+* `SUBNET_CIDR`: Optional. CIDR mask of the Subnet.
+  `10.0.0.0/24` by default.
 * LOAD_BALANCER_SCHEME: Optional. The Load Balancer scheme type. `internet-facing` by default.
   Allowed values: internal, internet-facing
 
diff --git a/common-templates/cf-gerrit-network-stack.yml b/common-templates/cf-gerrit-network-stack.yml
index 8017fb2..8a779be 100644
--- a/common-templates/cf-gerrit-network-stack.yml
+++ b/common-templates/cf-gerrit-network-stack.yml
@@ -14,18 +14,14 @@
     Type: String
     Default: ""
     Description: Subnet id. If empty Network Stack will be created
-Mappings:
-  # Hard values for the subnet masks. These masks define
-  # the range of internal IP addresses that can be assigned.
-  # The VPC can have all IP's from 10.0.0.0 to 10.0.255.255
-  # There is the subnet which cover the ranges:
-  #
-  # 10.0.0.0 - 10.0.0.255
-  SubnetConfig:
-    VPC:
-      CIDR: '10.0.0.0/16'
-    PublicOne:
-      CIDR: '10.0.0.0/24'
+  SubnetCIDR:
+    Type: String
+    Default: 10.0.0.0/24
+    Description: Subnet CIDR.
+  VPCCIDR:
+    Type: String
+    Default: 10.0.0.0/16
+    Description: VPC CIDR.
 
 Conditions:
   CreateVPC: !Equals [!Ref VPCIdProp, ""]
@@ -40,7 +36,7 @@
     Properties:
       EnableDnsSupport: true
       EnableDnsHostnames: true
-      CidrBlock: !FindInMap ['SubnetConfig', 'VPC', 'CIDR']
+      CidrBlock: !Ref VPCCIDR
 
   # Public subnets, where containers can have public IP addresses
   PublicSubnetOne:
@@ -52,7 +48,7 @@
          - 0
          - Fn::GetAZs: {Ref: 'AWS::Region'}
       VpcId: !If [CreateVPC, !Ref 'VPC', !Ref 'VPCIdProp' ]
-      CidrBlock: !FindInMap ['SubnetConfig', 'PublicOne', 'CIDR']
+      CidrBlock: !Ref 'SubnetCIDR'
       MapPublicIpOnLaunch: true
 
   # Setup networking resources for the public subnets. Containers
@@ -92,4 +88,4 @@
   PublicSubnetOneRef:
     Value: !If [CreateNetworkStack, !Ref 'PublicSubnetOne', !Ref 'SubnetIdProp' ]
   PublicOneCIDR:
-    Value: !FindInMap ['SubnetConfig', 'PublicOne', 'CIDR']
+    Value: !Ref 'SubnetCIDR'
diff --git a/dual-master/Makefile b/dual-master/Makefile
index d7ec7f7..47c639f 100644
--- a/dual-master/Makefile
+++ b/dual-master/Makefile
@@ -49,6 +49,12 @@
 ifdef FILESYSTEM_PROVISIONED_THROUGHPUT_IN_MIBPS
 		$(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=ProvisionedThroughputInMibps,ParameterValue=$(FILESYSTEM_PROVISIONED_THROUGHPUT_IN_MIBPS))
 endif
+ifdef SUBNET_CIDR
+		$(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=SubnetCIDR,ParameterValue=$(SUBNET_CIDR))
+endif
+ifdef VPC_CIDR
+		$(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=VPCCIDR,ParameterValue=$(VPC_CIDR))
+endif
 
 	$(AWS_FC_COMMAND) create-stack \
 		--stack-name $(CLUSTER_STACK_NAME) \
diff --git a/dual-master/cf-cluster.yml b/dual-master/cf-cluster.yml
index f682041..f2bb08c 100644
--- a/dual-master/cf-cluster.yml
+++ b/dual-master/cf-cluster.yml
@@ -40,6 +40,14 @@
     Type: String
     Default: ""
     Description: Subnet id. If empty Network Stack will be created
+  SubnetCIDR:
+    Type: String
+    Default: 10.0.0.0/24
+    Description: Subnet CIDR.
+  VPCCIDR:
+    Type: String
+    Default: 10.0.0.0/16
+    Description: VPC CIDR.
   ECSKeyName:
     Type: String
     Default: gerrit-cluster-keys
@@ -281,7 +289,9 @@
       Parameters:
         InternetGatewayIdProp: !Ref 'InternetGatewayIdProp'
         VPCIdProp: !Ref 'VPCIdProp'
+        VPCCIDR: !Ref 'VPCCIDR'
         SubnetIdProp: !Ref 'SubnetIdProp'
+        SubnetCIDR: !Ref 'SubnetCIDR'
 
 Outputs:
   ClusterName:
diff --git a/master-slave/Makefile b/master-slave/Makefile
index a32fd37..8f42df1 100644
--- a/master-slave/Makefile
+++ b/master-slave/Makefile
@@ -32,6 +32,12 @@
 ifdef CLUSTER_INSTANCE_TYPE
 		$(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=InstanceType,ParameterValue=$(CLUSTER_INSTANCE_TYPE))
 endif
+ifdef SUBNET_CIDR
+		$(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=SubnetCIDR,ParameterValue=$(SUBNET_CIDR))
+endif
+ifdef VPC_CIDR
+		$(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=VPCCIDR,ParameterValue=$(VPC_CIDR))
+endif
 
 	$(AWS_FC_COMMAND) create-stack \
 		--stack-name $(CLUSTER_STACK_NAME) \
diff --git a/master-slave/cf-cluster.yml b/master-slave/cf-cluster.yml
index 4eaf788..f2668a2 100644
--- a/master-slave/cf-cluster.yml
+++ b/master-slave/cf-cluster.yml
@@ -40,6 +40,14 @@
     Type: String
     Default: ""
     Description: Subnet id. If empty Network Stack will be created
+  SubnetCIDR:
+    Type: String
+    Default: 10.0.0.0/24
+    Description: Subnet CIDR.
+  VPCCIDR:
+    Type: String
+    Default: 10.0.0.0/16
+    Description: VPC CIDR.
   ECSKeyName:
     Type: String
     Default: gerrit-cluster-keys
@@ -212,7 +220,10 @@
       Parameters:
         InternetGatewayIdProp: !Ref 'InternetGatewayIdProp'
         VPCIdProp: !Ref 'VPCIdProp'
+        VPCCIDR: !Ref 'VPCCIDR'
         SubnetIdProp: !Ref 'SubnetIdProp'
+        SubnetCIDR: !Ref 'SubnetCIDR'
+
 
 Outputs:
   ClusterName:
diff --git a/single-master/Makefile b/single-master/Makefile
index e939129..1a1ac52 100644
--- a/single-master/Makefile
+++ b/single-master/Makefile
@@ -23,6 +23,12 @@
 ifdef CLUSTER_INSTANCE_TYPE
 		$(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=InstanceType,ParameterValue=$(CLUSTER_INSTANCE_TYPE))
 endif
+ifdef SUBNET_CIDR
+		$(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=SubnetCIDR,ParameterValue=$(SUBNET_CIDR))
+endif
+ifdef VPC_CIDR
+		$(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=VPCCIDR,ParameterValue=$(VPC_CIDR))
+endif
 
 	$(AWS_FC_COMMAND) create-stack \
 		--stack-name $(CLUSTER_STACK_NAME) \
diff --git a/single-master/cf-cluster.yml b/single-master/cf-cluster.yml
index 81e922a..41327df 100644
--- a/single-master/cf-cluster.yml
+++ b/single-master/cf-cluster.yml
@@ -40,6 +40,14 @@
     Type: String
     Default: ""
     Description: Subnet id. If empty Network Stack will be created
+  SubnetCIDR:
+    Type: String
+    Default: 10.0.0.0/24
+    Description: Subnet CIDR.
+  VPCCIDR:
+    Type: String
+    Default: 10.0.0.0/16
+    Description: VPC CIDR.
   ECSKeyName:
     Type: String
     Default: gerrit-cluster-keys
@@ -188,7 +196,9 @@
       Parameters:
         InternetGatewayIdProp: !Ref 'InternetGatewayIdProp'
         VPCIdProp: !Ref 'VPCIdProp'
+        VPCCIDR: !Ref 'VPCCIDR'
         SubnetIdProp: !Ref 'SubnetIdProp'
+        SubnetCIDR: !Ref 'SubnetCIDR'
 
 Outputs:
   ClusterName: