IPv6 fixes for network settings and post deploy 59/17859/1
authorFeng Pan <fpan@redhat.com>
Sun, 31 Jul 2016 14:10:19 +0000 (10:10 -0400)
committerFeng Pan <fpan@redhat.com>
Sun, 31 Jul 2016 14:10:19 +0000 (10:10 -0400)
This patch contains the following:
- Add dns and nic information in network settings file
- Add ipv6 option for find_ip function in common-functions.sh
- Change neutron commands to handle IPv6 during post deploy,
  skip NAT configuration if IPv6 is configured.
- Fix an error in python library when generating floating ip
  range.

JIRA: APEX-130

Change-Id: I27da7f7a714f42ee827be7091fcb1a6d89a0aae8
Signed-off-by: Feng Pan <fpan@redhat.com>
config/network/network_settings_v6.yaml
lib/common-functions.sh
lib/post-install-functions.sh
lib/python/apex/network_settings.py

index 8ca5eac..dd2d066 100644 (file)
@@ -30,12 +30,15 @@ dns_servers: ["8.8.8.8", "8.8.4.4"]
 # network is used as the OpenStack management network which
 # carries e.g. communication between its internal components.
 # This network must be IPv4 currently.
+domain_name: 'opnfvapex.com'
 
 admin_network:
   enabled: true
   network_type: bridged
   bridged_interface: ''
   bond_interfaces: ''
+  compute_interface: nic1
+  controller_interface: nic1
   vlan: native
   usable_ip_range: 192.0.2.11,192.0.2.99
   gateway: 192.0.2.1
@@ -53,6 +56,11 @@ admin_network:
 private_network:
   enabled: true
   cidr: 11.0.0.0/24
+  vlan: native
+  cidr: 11.0.0.0/24
+  compute_interface: nic2
+  controller_interface: nic2
+
 
 # "public" network is used for external connectivity.
 # The external network provides Internet access for virtual
@@ -65,6 +73,9 @@ public_network:
   enabled: true
   network_type: ''
   bridged_interface: ''
+  compute_interface: nic3
+  controller_interface: nic3
+  vlan: native
   cidr: 2001:db8::/64
   gateway: 2001:db8::1
   provisioner_ip: 2001:db8::1
@@ -76,11 +87,18 @@ public_network:
 storage_network:
   enabled: true
   cidr: fd00:fd00:fd00:2000::/64
+  vlan: native
+  compute_interface: nic4
+  controller_interface: nic4
+
 
 # "api" is an optional network used by internal openstack api services.
 api_network:
   enabled: true
   cidr: fd00:fd00:fd00:4000::/64
+  vlan: native
+  compute_interface: nic5
+  controller_interface: nic5
 
 #public_network:
 #  enabled: true                                     #If disabled, public_network traffic will collapse to admin network
index 2ace997..391d940 100644 (file)
@@ -21,13 +21,19 @@ function prefix2mask {
 }
 
 ##find ip of interface
-##params: interface name
+##params: interface name, address family
 function find_ip {
+  local af
   if [[ -z "$1" ]]; then
     return 1
   fi
+  if [[ -z "$2" ]]; then
+    af=4
+  else
+    af=$2
+  fi
 
-  python3.4 -B $LIB/python/apex_python_utils.py find-ip -i $1
+  python3.4 -B $LIB/python/apex_python_utils.py find-ip -i $1 -af $af
 }
 
 ##attach interface to OVS and set the network config correctly
index 1d18b95..bf0b444 100755 (executable)
@@ -11,7 +11,8 @@
 ##Post configuration after install
 ##params: none
 function configure_post_install {
-  local opnfv_attach_networks ovs_ip ip_range net_cidr tmp_ip
+  local opnfv_attach_networks ovs_ip ip_range net_cidr tmp_ip af public_network_ipv6
+  public_network_ipv6=False
   opnfv_attach_networks="admin_network public_network"
 
   echo -e "${blue}INFO: Post Install Configuration Running...${reset}"
@@ -41,9 +42,19 @@ EOI
       eval "ip_range=\${${network}_usable_ip_range}"
       ovs_ip=${ip_range##*,}
       eval "net_cidr=\${${network}_cidr}"
+      if [[ $ovs_ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
+        af=4
+      else
+        af=6
+        if [ "$network" == "public_network" ]; then
+          public_network_ipv6=True
+        fi
+        #enable ipv6 on bridge interface
+        echo 0 > /proc/sys/net/ipv6/conf/${NET_MAP[$network]}/disable_ipv6
+      fi
       sudo ip addr add ${ovs_ip}/${net_cidr##*/} dev ${NET_MAP[$network]}
       sudo ip link set up ${NET_MAP[$network]}
-      tmp_ip=$(find_ip ${NET_MAP[$network]})
+      tmp_ip=$(find_ip ${NET_MAP[$network]} $af)
       if [ -n "$tmp_ip" ]; then
         echo -e "${blue}INFO: OVS Bridge ${NET_MAP[$network]} IP set: ${tmp_ip}${reset}"
         continue
@@ -81,7 +92,11 @@ if [[ -n "$public_network_vlan" && "$public_network_vlan" != 'native' ]]; then
 else
   neutron net-create external --router:external=True --tenant-id \$(openstack project show service | grep id | awk '{ print \$4 }')
 fi
-neutron subnet-create --name external-net --tenant-id \$(openstack project show service | grep id | awk '{ print \$4 }') --disable-dhcp external --gateway ${public_network_gateway} --allocation-pool start=${public_network_floating_ip_range%%,*},end=${public_network_floating_ip_range##*,} ${public_network_cidr}
+if [ "$public_network_ipv6" == "True" ]; then
+  neutron subnet-create --name external-net --tenant-id \$(openstack project show service | grep id | awk '{ print \$4 }') external --ip_version 6 --ipv6_ra_mode slaac --ipv6_address_mode slaac --gateway ${public_network_gateway} --allocation-pool start=${public_network_floating_ip_range%%,*},end=${public_network_floating_ip_range##*,} ${public_network_cidr}
+else
+  neutron subnet-create --name external-net --tenant-id \$(openstack project show service | grep id | awk '{ print \$4 }') --disable-dhcp external --gateway ${public_network_gateway} --allocation-pool start=${public_network_floating_ip_range%%,*},end=${public_network_floating_ip_range##*,} ${public_network_cidr}
+fi
 
 echo "Removing sahara endpoint and service"
 sahara_service_id=\$(openstack service list | grep sahara | cut -d ' ' -f 2)
@@ -108,7 +123,7 @@ fi
 EOI
 
   # for virtual, we NAT public network through Undercloud
-  if [ "$virtual" == "TRUE" ]; then
+  if [ "$virtual" == "TRUE" ] && [ "$public_network_ipv6" != "True" ]; then
     if ! configure_undercloud_nat ${public_network_cidr}; then
       echo -e "${red}ERROR: Unable to NAT undercloud with external net: ${public_network_cidr}${reset}"
       exit 1
index f280766..c81256e 100644 (file)
@@ -223,7 +223,7 @@ class NetworkSettings:
             - introspection_range
         - public_network:
             - provisioner_ip
-            - floating_ip
+            - floating_ip_range
             - gateway
         """
         if network == constants.ADMIN_NETWORK:
@@ -236,7 +236,7 @@ class NetworkSettings:
         elif network == constants.PUBLIC_NETWORK:
             self._config_ip(network, 'provisioner_ip', 1)
             self._config_ip_range(network=network,
-                                  setting='floating_ip',
+                                  setting='floating_ip_range',
                                   end_offset=2, count=20)
             self._config_gateway(network)