Add IPv6 support for the management network
authorMarius Cornea <mcornea@redhat.com>
Mon, 30 May 2016 13:05:47 +0000 (15:05 +0200)
committerMarius Cornea <mcornea@redhat.com>
Mon, 20 Jun 2016 12:02:44 +0000 (14:02 +0200)
This change introduces the ability to use IPv6 addressing for the
management network by passing the network-management-v6.yaml
environment file. It also adjusts the network-management.yaml
environment file to point to the right network config templates.

Change-Id: I7f797c49f03b2623a08e033bdf45772edff0f08f

environments/network-management-v6.yaml [new file with mode: 0644]
environments/network-management.yaml
network/management_v6.yaml [new file with mode: 0644]
network/ports/management_from_pool_v6.yaml [new file with mode: 0644]

diff --git a/environments/network-management-v6.yaml b/environments/network-management-v6.yaml
new file mode 100644 (file)
index 0000000..812e84f
--- /dev/null
@@ -0,0 +1,25 @@
+# Enable the creation of an IPv6 system management network. This
+# creates a Neutron network for isolated Overcloud
+# system management traffic and configures each role to
+# assign a port (related to that role) on that network.
+# Note that the basic sample NIC configuration templates
+# do not include the management network, see the
+# comments in the sample network config templates in
+# network/config/ for an example.
+resource_registry:
+  OS::TripleO::Network::Management: ../network/management_v6.yaml
+
+  # Port assignments for the controller role
+  OS::TripleO::Controller::Ports::ManagementPort: ../network/ports/management_v6.yaml
+
+  # Port assignments for the compute role
+  OS::TripleO::Compute::Ports::ManagementPort: ../network/ports/management_v6.yaml
+
+  # Port assignments for the ceph storage role
+  OS::TripleO::CephStorage::Ports::ManagementPort: ../network/ports/management_v6.yaml
+
+  # Port assignments for the swift storage role
+  OS::TripleO::SwiftStorage::Ports::ManagementPort: ../network/ports/management_v6.yaml
+
+  # Port assignments for the block storage role
+  OS::TripleO::BlockStorage::Ports::ManagementPort: ../network/ports/management_v6.yaml
index 2f0cff8..041617b 100644 (file)
@@ -4,7 +4,8 @@
 # assign a port (related to that role) on that network.
 # Note that the basic sample NIC configuration templates
 # do not include the management network, see the
-# single-nic-vlans-mgmt templates for an example.
+# comments in the sample network config templates in
+# network/config/ for an example.
 resource_registry:
   OS::TripleO::Network::Management: ../network/management.yaml
 
diff --git a/network/management_v6.yaml b/network/management_v6.yaml
new file mode 100644 (file)
index 0000000..a5e7066
--- /dev/null
@@ -0,0 +1,69 @@
+heat_template_version: 2015-04-30
+
+description: >
+  Management network. System administration, SSH, DNS, NTP, etc. This network
+  would usually be the default gateway for the non-controller nodes.
+
+parameters:
+  # the defaults here work for static IP assignment (IPAM) only
+  ManagementNetCidr:
+    default: 'fd00:fd00:fd00:6000::/64'
+    description: Cidr for the management network.
+    type: string
+  ManagementNetValueSpecs:
+    default: {'provider:physical_network': 'management', 'provider:network_type': 'flat'}
+    description: Value specs for the management network.
+    type: json
+  ManagementNetAdminStateUp:
+    default: false
+    description: This admin state of of the network.
+    type: boolean
+  ManagementNetShared:
+    default: false
+    description: Whether this network is shared across all tenants.
+    type: boolean
+  ManagementNetName:
+    default: management
+    description: The name of the management network.
+    type: string
+  ManagementSubnetName:
+    default: management_subnet
+    description: The name of the management subnet in Neutron.
+    type: string
+  ManagementAllocationPools:
+    default: [{'start': 'fd00:fd00:fd00:6000::10', 'end': 'fd00:fd00:fd00:6000:ffff:ffff:ffff:fffe'}]
+    description: Ip allocation pool range for the management network.
+    type: json
+  IPv6AddressMode:
+    default: dhcpv6-stateful
+    description: Neutron subnet IPv6 address mode
+    type: string
+  IPv6RAMode:
+    default: dhcpv6-stateful
+    description: Neutron subnet IPv6 router advertisement mode
+    type: string
+
+resources:
+  ManagementNetwork:
+    type: OS::Neutron::Net
+    properties:
+      admin_state_up: {get_param: ManagementNetAdminStateUp}
+      name: {get_param: ManagementNetName}
+      shared: {get_param: ManagementNetShared}
+      value_specs: {get_param: ManagementNetValueSpecs}
+
+  ManagementSubnet:
+    type: OS::Neutron::Subnet
+    properties:
+      ip_version: 6
+      ipv6_address_mode: {get_param: IPv6AddressMode}
+      ipv6_ra_mode: {get_param: IPv6RAMode}
+      cidr: {get_param: ManagementNetCidr}
+      name: {get_param: ManagementSubnetName}
+      network: {get_resource: ManagementNetwork}
+      allocation_pools: {get_param: ManagementAllocationPools}
+
+outputs:
+  OS::stack_id:
+    description: Neutron management network
+    value: {get_resource: ManagementNetwork}
diff --git a/network/ports/management_from_pool_v6.yaml b/network/ports/management_from_pool_v6.yaml
new file mode 100644 (file)
index 0000000..d9ac604
--- /dev/null
@@ -0,0 +1,52 @@
+heat_template_version: 2015-10-15
+
+description: >
+  Returns an IP from a network mapped list of IPs. This version is for IPv6
+  addresses. The ip_address_uri output will have brackets for use in URLs.
+
+parameters:
+  ManagementNetName:
+    description: Name of the management network
+    default: management
+    type: string
+  PortName:
+    description: Name of the port
+    default: ''
+    type: string
+  ControlPlaneIP: # Here for compatability with noop.yaml
+    description: IP address on the control plane
+    default: ''
+    type: string
+  IPPool:
+    default: {}
+    description: A network mapped list of IPs
+    type: json
+  NodeIndex:
+    default: 0
+    description: Index of the IP to get from Pool
+    type: number
+  ManagementNetCidr:
+    default: 'fd00:fd00:fd00:6000::/64'
+    description: Cidr for the management network.
+    type: string
+
+outputs:
+  ip_address:
+    description: management network IP
+    value: {get_param: [IPPool, {get_param: ManagementNetName}, {get_param: NodeIndex}]}
+  ip_address_uri:
+    description: management network IP (for compatibility with management_v6.yaml)
+    value:
+          list_join:
+          - ''
+          - - '['
+            - {get_param: [IPPool, {get_param: ManagementNetName}, {get_param: NodeIndex}]}
+            - ']'
+  ip_subnet:
+    description: IP/Subnet CIDR for the management network IP
+    value:
+      list_join:
+      - ''
+      - - {get_param: [IPPool, {get_param: ManagementNetName}, {get_param: NodeIndex}]}
+        - '/'
+        - {str_split: ['/', {get_attr: [ManagementPort, subnets, 0, cidr]}, 1]}