-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
 
 description: >
   Creates a port for a VIP on the undercloud ctlplane network.
     description: Virtual IP network IP
     value: {get_attr: [VipPort, fixed_ips, 0, ip_address]}
   ip_subnet:
-    # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
     description: IP/Subnet CIDR for the ctlplane network.
     value:
           list_join:
             - ''
             - - {get_attr: [VipPort, fixed_ips, 0, ip_address]}
               - '/'
-              - {get_attr: [VipPort, subnets, 0, cidr, -2]}
-              - {get_attr: [VipPort, subnets, 0, cidr, -1]}
+              - {str_split: ['/', {get_attr: [VipPort, subnets, 0, cidr]}, 1]}
 
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
 
 description: >
   Creates a port on the external network. The IP address will be chosen
     description: external network IP
     value: {get_attr: [ExternalPort, fixed_ips, 0, ip_address]}
   ip_subnet:
-    # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
     description: IP/Subnet CIDR for the external network IP
     value:
           list_join:
             - ''
             - - {get_attr: [ExternalPort, fixed_ips, 0, ip_address]}
               - '/'
-              - {get_attr: [ExternalPort, subnets, 0, cidr, -2]}
-              - {get_attr: [ExternalPort, subnets, 0, cidr, -1]}
+              - {str_split: ['/', {get_attr: [ExternalPort, subnets, 0, cidr]}, 1]}
 
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
 
 description: >
   Returns an IP from a network mapped list of IPs
     description: external network IP
     value: {get_param: [IPPool, {get_param: ExternalNetName}, {get_param: NodeIndex}]}
   ip_subnet:
-    # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
     description: IP/Subnet CIDR for the external network IP
     value:
       list_join:
       - ''
       - - {get_param: [IPPool, {get_param: ExternalNetName}, {get_param: NodeIndex}]}
         - '/'
-        - {get_param: [ExternalNetCidr, -2]}
-        - {get_param: [ExternalNetCidr, -1]}
+        - {str_split: ['/', {get_param: ExternalNetCidr}, 1]}
 
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
 
 description: >
   Creates a port on the internal_api network.
     description: internal API network IP
     value: {get_attr: [InternalApiPort, fixed_ips, 0, ip_address]}
   ip_subnet:
-    # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
     description: IP/Subnet CIDR for the internal API network IP
     value:
           list_join:
             - ''
             - - {get_attr: [InternalApiPort, fixed_ips, 0, ip_address]}
               - '/'
-              - {get_attr: [InternalApiPort, subnets, 0, cidr, -2]}
-              - {get_attr: [InternalApiPort, subnets, 0, cidr, -1]}
+              - {str_split: ['/', {get_attr: [InternalApiPort, subnets, 0, cidr]}, 1]}
 
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
 
 description: >
   Returns an IP from a network mapped list of IPs
     description: internal API network IP
     value: {get_param: [IPPool, {get_param: InternalApiNetName}, {get_param: NodeIndex}]}
   ip_subnet:
-    # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
     description: IP/Subnet CIDR for the internal API network IP
     value:
       list_join:
       - ''
       - - {get_param: [IPPool, {get_param: InternalApiNetName}, {get_param: NodeIndex}]}
         - '/'
-        - {get_param: [InternalApiNetCidr, -2]}
-        - {get_param: [InternalApiNetCidr, -1]}
+        - {str_split: ['/', {get_param: InternalApiNetCidr}, 1]}
 
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
 
 description: >
   Creates a port on the management network. The IP address will be chosen
     description: management network IP
     value: {get_attr: [ManagementPort, fixed_ips, 0, ip_address]}
   ip_subnet:
-    # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
     description: IP/Subnet CIDR for the management network IP
     value:
           list_join:
             - ''
             - - {get_attr: [ManagementPort, fixed_ips, 0, ip_address]}
               - '/'
-              - {get_attr: [ManagementPort, subnets, 0, cidr, -2]}
-              - {get_attr: [ManagementPort, subnets, 0, cidr, -1]}
+              - {str_split: ['/', {get_attr: [ManagementPort, subnets, 0, cidr]}, 1]}
 
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
 
 description: >
   Creates a port on the storage network.
     description: storage network IP
     value: {get_attr: [StoragePort, fixed_ips, 0, ip_address]}
   ip_subnet:
-    # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
     description: IP/Subnet CIDR for the storage network IP
     value:
           list_join:
             - ''
             - - {get_attr: [StoragePort, fixed_ips, 0, ip_address]}
               - '/'
-              - {get_attr: [StoragePort, subnets, 0, cidr, -2]}
-              - {get_attr: [StoragePort, subnets, 0, cidr, -1]}
+              - {str_split: ['/', {get_attr: [StoragePort, subnets, 0, cidr]}, 1]}
 
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
 
 description: >
   Returns an IP from a network mapped list of IPs
     description: storage network IP
     value: {get_param: [IPPool, {get_param: StorageNetName}, {get_param: NodeIndex}]}
   ip_subnet:
-    # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
     description: IP/Subnet CIDR for the storage network IP
     value:
       list_join:
       - ''
       - - {get_param: [IPPool, {get_param: StorageNetName}, {get_param: NodeIndex}]}
         - '/'
-        - {get_param: [StorageNetCidr, -2]}
-        - {get_param: [StorageNetCidr, -1]}
+        - {str_split: ['/', {get_param: StorageNetCidr}, 1]}
 
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
 
 description: >
   Creates a port on the storage_mgmt API network.
     description: storage_mgmt network IP
     value: {get_attr: [StorageMgmtPort, fixed_ips, 0, ip_address]}
   ip_subnet:
-    # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
     description: IP/Subnet CIDR for the storage_mgmt network IP
     value:
           list_join:
             - ''
             - - {get_attr: [StorageMgmtPort, fixed_ips, 0, ip_address]}
               - '/'
-              - {get_attr: [StorageMgmtPort, subnets, 0, cidr, -2]}
-              - {get_attr: [StorageMgmtPort, subnets, 0, cidr, -1]}
+              - {str_split: ['/', {get_attr: [StorageMgmtPort, subnets, 0, cidr]}, 1]}
 
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
 
 description: >
   Returns an IP from a network mapped list of IPs
     description: storage MGMT network IP
     value: {get_param: [IPPool, {get_param: StorageMgmtNetName}, {get_param: NodeIndex}]}
   ip_subnet:
-    # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
     description: IP/Subnet CIDR for the storage MGMT network IP
     value:
       list_join:
       - ''
       - - {get_param: [IPPool, {get_param: StorageMgmtNetName}, {get_param: NodeIndex}]}
         - '/'
-        - {get_param: [StorageMgmtNetCidr, -2]}
-        - {get_param: [StorageMgmtNetCidr, -1]}
+        - {str_split: ['/', {get_param: StorageMgmtNetCidr}, 1]}
 
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
 
 description: >
   Creates a port on the tenant network.
     description: tenant network IP
     value: {get_attr: [TenantPort, fixed_ips, 0, ip_address]}
   ip_subnet:
-    # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
     description: IP/Subnet CIDR for the tenant network IP
     value:
           list_join:
             - ''
             - - {get_attr: [TenantPort, fixed_ips, 0, ip_address]}
               - '/'
-              - {get_attr: [TenantPort, subnets, 0, cidr, -2]}
-              - {get_attr: [TenantPort, subnets, 0, cidr, -1]}
+              - {str_split: ['/', {get_attr: [TenantPort, subnets, 0, cidr]}, 1]}
 
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
 
 description: >
   Returns an IP from a network mapped list of IPs
     description: tenant network IP
     value: {get_param: [IPPool, {get_param: TenantNetName}, {get_param: NodeIndex}]}
   ip_subnet:
-    # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
     description: IP/Subnet CIDR for the tenant network IP
     value:
       list_join:
       - ''
       - - {get_param: [IPPool, {get_param: TenantNetName}, {get_param: NodeIndex}]}
         - '/'
-        - {get_param: [TenantNetCidr, -2]}
-        - {get_param: [TenantNetCidr, -1]}
+        - {str_split: ['/', {get_param: TenantNetCidr}, 1]}
 
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
 
 description: >
   Creates a port for a VIP on the isolated network NetworkName.
     description: Virtual IP network IP
     value: {get_attr: [VipPort, fixed_ips, 0, ip_address]}
   ip_subnet:
-    # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
     description: IP/Subnet CIDR for the network associated with this IP
     value:
           list_join:
             - ''
             - - {get_attr: [VipPort, fixed_ips, 0, ip_address]}
               - '/'
-              - {get_attr: [VipPort, subnets, 0, cidr, -2]}
-              - {get_attr: [VipPort, subnets, 0, cidr, -1]}
+              - {str_split: ['/', {get_attr: [VipPort, subnets, 0, cidr]}, 1]}