Merge "Enables private and storage networks"
authorDan Radez <dradez@redhat.com>
Wed, 13 Jan 2016 12:59:55 +0000 (12:59 +0000)
committerGerrit Code Review <gerrit@172.30.200.206>
Wed, 13 Jan 2016 12:59:55 +0000 (12:59 +0000)
1  2 
ci/deploy.sh

diff --combined ci/deploy.sh
@@@ -26,7 -26,6 +26,7 @@@ ha_enabled="TRUE
  ping_site="8.8.8.8"
  ntp_server="pool.ntp.org"
  net_isolation_enabled="TRUE"
 +post_config="TRUE"
  
  declare -i CNT
  declare UNDERCLOUD
@@@ -156,14 -155,25 +156,25 @@@ for Auto-detection${reset}
      for setting in ${common_optional_network_settings}; do
        eval "setting_value=\${${enabled_network}_${setting}}"
        if [ -z "${setting_value}" ]; then
-         setting_value=$(eval find_${setting} ${nic_value})
+         if [ -n "$nic_value" ]; then
+           setting_value=$(eval find_${setting} ${nic_value})
+         else
+           setting_value=''
+           echo -e "${blue}INFO: Skipping Auto-detection, NIC not specified for ${enabled_network}.  Attempting Auto-generation...${reset}"
+         fi
          if [ -n "$setting_value" ]; then
            eval "${enabled_network}_${setting}=${setting_value}"
            echo -e "${blue}INFO: Auto-detection: ${enabled_network}_${setting}: ${setting_value}${reset}"
          else
            # if Auto-detection fails we can auto-generate with CIDR
            eval "cidr=\${${enabled_network}_cidr}"
-           setting_value=$(eval generate_${setting} ${cidr})
+           if [ -n "$cidr" ]; then
+             echo -e "${blue}INFO: Auto-generating: ${setting}${reset}"
+             setting_value=$(eval generate_${setting} ${cidr})
+           else
+             setting_value=''
+             echo -e "${red}ERROR: Auto-generation failed: required parameter CIDR missing for network ${enabled_network}${reset}"
+           fi
            if [ -n "$setting_value" ]; then
              eval "${enabled_network}_${setting}=${setting_value}"
              echo -e "${blue}INFO: Auto-generated: ${enabled_network}_${setting}: ${setting_value}${reset}"
        for setting in ${network_specific_settings}; do
          eval "setting_value=\${${enabled_network}_${setting}}"
          if [ -z "${setting_value}" ]; then
-           setting_value=$(eval find_${setting} ${nic_value})
+           if [ -n "$nic_value" ]; then
+             setting_value=$(eval find_${setting} ${nic_value})
+           else
+             setting_value=''
+             echo -e "${blue}INFO: Skipping Auto-detection, NIC not specified for ${enabled_network}.  Attempting Auto-generation...${reset}"
+           fi
            if [ -n "$setting_value" ]; then
              eval "${enabled_network}_${setting}=${setting_value}"
              echo -e "${blue}INFO: Auto-detection: ${enabled_network}_${setting}: ${setting_value}${reset}"
            else
              eval "cidr=\${${enabled_network}_cidr}"
-             setting_value=$(eval generate_${setting} ${cidr})
+             if [ -n "$cidr" ]; then
+               setting_value=$(eval generate_${setting} ${cidr})
+             else
+               setting_value=''
+               echo -e "${red}ERROR: Auto-generation failed: required parameter CIDR missing for network ${enabled_network}${reset}"
+             fi
              if [ -n "$setting_value" ]; then
                eval "${enabled_network}_${setting}=${setting_value}"
                echo -e "${blue}INFO: Auto-generated: ${enabled_network}_${setting}: ${setting_value}${reset}"
@@@ -371,7 -391,7 +392,7 @@@ function configure_deps 
    elif [ "$virtual" == "FALSE" ]; then
      virsh_enabled_networks="admin_network public_network"
    else
 -    virsh_enabled_neworks=$enabled_network_list
 +    virsh_enabled_networks=$enabled_network_list
    fi
  
    for network in ${OPNFV_NETWORK_TYPES}; do
@@@ -587,12 -607,48 +608,48 @@@ function setup_virtual_baremetal 
  ##Set network-environment settings
  ##params: network-environment file to edit
  function configure_network_environment {
+   local tht_dir nic_ext
+   tht_dir=/usr/share/openstack-tripleo-heat-templates/network
+   nic_ext=''
    sed -i '/ControlPlaneSubnetCidr/c\\  ControlPlaneSubnetCidr: "'${admin_network_cidr##*/}'"' $1
    sed -i '/ControlPlaneDefaultRoute/c\\  ControlPlaneDefaultRoute: '${admin_network_provisioner_ip}'' $1
    sed -i '/ExternalNetCidr/c\\  ExternalNetCidr: '${public_network_cidr}'' $1
    sed -i "/ExternalAllocationPools/c\\  ExternalAllocationPools: [{'start': '${public_network_usable_ip_range%%,*}', 'end': '${public_network_usable_ip_range##*,}'}]" $1
    sed -i '/ExternalInterfaceDefaultRoute/c\\  ExternalInterfaceDefaultRoute: '${public_network_gateway}'' $1
    sed -i '/EC2MetadataIp/c\\  EC2MetadataIp: '${admin_network_provisioner_ip}'' $1
+   # check for private network
+   if [[ ! -z "$private_network_enabled" && "$private_network_enabled" == "true" ]]; then
+       sed -i 's#^.*Network::Tenant.*$#  OS::TripleO::Network::Tenant: '${tht_dir}'/tenant.yaml#' $1
+       sed -i 's#^.*Controller::Ports::TenantPort:.*$#  OS::TripleO::Controller::Ports::TenantPort: '${tht_dir}'/ports/tenant.yaml#' $1
+       sed -i 's#^.*Compute::Ports::TenantPort:.*$#  OS::TripleO::Compute::Ports::TenantPort: '${tht_dir}'/ports/tenant.yaml#' $1
+       sed -i "/TenantAllocationPools/c\\  TenantAllocationPools: [{'start': '${private_network_usable_ip_range%%,*}', 'end': '${private_network_usable_ip_range##*,}'}]" $1
+       sed -i '/TenantNetCidr/c\\  TenantNetCidr: '${private_network_cidr}'' $1
+       nic_ext+=_private
+   else
+       sed -i 's#^.*Network::Tenant.*$#  OS::TripleO::Network::Tenant: '${tht_dir}'/noop.yaml#' $1
+       sed -i 's#^.*Controller::Ports::TenantPort:.*$#  OS::TripleO::Controller::Ports::TenantPort: '${tht_dir}'/ports/noop.yaml#' $1
+       sed -i 's#^.*Compute::Ports::TenantPort:.*$#  OS::TripleO::Compute::Ports::TenantPort: '${tht_dir}'/ports/noop.yaml#' $1
+   fi
+   # check for storage network
+   if [[ ! -z "$storage_network_enabled" && "$storage_network_enabled" == "true" ]]; then
+       sed -i 's#^.*Network::Storage.*$#  OS::TripleO::Network::Storage: '${tht_dir}'/storage.yaml#' $1
+       sed -i 's#^.*Controller::Ports::StoragePort:.*$#  OS::TripleO::Controller::Ports::StoragePort: '${tht_dir}'/ports/storage.yaml#' $1
+       sed -i 's#^.*Compute::Ports::StoragePort:.*$#  OS::TripleO::Compute::Ports::StoragePort: '${tht_dir}'/ports/storage.yaml#' $1
+       sed -i "/StorageAllocationPools/c\\  StorageAllocationPools: [{'start': '${storage_network_usable_ip_range%%,*}', 'end': '${storage_network_usable_ip_range##*,}'}]" $1
+       sed -i '/StorageNetCidr/c\\  StorageNetCidr: '${storage_network_cidr}'' $1
+       nic_ext+=_storage
+   else
+       sed -i 's#^.*Network::Storage.*$#  OS::TripleO::Network::Storage: '${tht_dir}'/noop.yaml#' $1
+       sed -i 's#^.*Controller::Ports::StoragePort:.*$#  OS::TripleO::Controller::Ports::StoragePort: '${tht_dir}'/ports/noop.yaml#' $1
+       sed -i 's#^.*Compute::Ports::StoragePort:.*$#  OS::TripleO::Compute::Ports::StoragePort: '${tht_dir}'/ports/noop.yaml#' $1
+   fi
+   # set nics appropriately
+   sed -i 's#^.*Compute::Net::SoftwareConfig:.*$#  OS::TripleO::Compute::Net::SoftwareConfig: nics/compute'${nic_ext}'.yaml#' $1
+   sed -i 's#^.*Controller::Net::SoftwareConfig:.*$#  OS::TripleO::Controller::Net::SoftwareConfig: nics/controller'${nic_ext}'.yaml#' $1
  }
  ##Copy over the glance images and instack json file
  ##params: none
@@@ -679,13 -735,8 +736,13 @@@ if [[ "$net_isolation_enabled" == "TRUE
    openstack-config --set undercloud.conf DEFAULT dhcp_end ${admin_network_dhcp_range##*,}
    openstack-config --set undercloud.conf DEFAULT inspection_iprange ${admin_network_introspection_range}
    openstack-config --set undercloud.conf DEFAULT undercloud_debug false
 +
  fi
  
 +sudo sed -i '/CephClusterFSID:/c\\  CephClusterFSID: \\x27$(cat /proc/sys/kernel/random/uuid)\\x27' /usr/share/openstack-tripleo-heat-templates/environments/storage-environment.yaml
 +sudo sed -i '/CephMonKey:/c\\  CephMonKey: \\x27'"\$(ceph-authtool --gen-print-key)"'\\x27' /usr/share/openstack-tripleo-heat-templates/environments/storage-environment.yaml
 +sudo sed -i '/CephAdminKey:/c\\  CephAdminKey: \\x27'"\$(ceph-authtool --gen-print-key)"'\\x27' /usr/share/openstack-tripleo-heat-templates/environments/storage-environment.yaml
 +
  openstack undercloud install &> apex-undercloud-install.log
  sleep 30
  sudo systemctl restart openstack-glance-api
@@@ -697,7 -748,6 +754,6 @@@ EO
  # as well as glance api problem
  echo -e "${blue}INFO: Sleeping 15 seconds while services come back from restart${reset}"
  sleep 15
- #TODO Fill in the rest of the network-environment values for other networks
  
  }
  
@@@ -716,9 -766,6 +772,9 @@@ function undercloud_prep_overcloud_depl
      exit 1
    fi
  
 +  # make sure ceph is installed
 +  DEPLOY_OPTIONS+=" -e /usr/share/openstack-tripleo-heat-templates/environments/storage-environment.yaml"
 +
    # check if HA is enabled
    if [[ "$ha_enabled" == "TRUE" ]]; then
       DEPLOY_OPTIONS+=" --control-scale 3 --compute-scale 2"
@@@ -765,56 -812,11 +821,56 @@@ echo "Configuring nameserver on ctlplan
  neutron subnet-update \$(neutron subnet-list | grep -v id | grep -v \\\\-\\\\- | awk {'print \$2'}) --dns-nameserver 8.8.8.8
  echo "Executing overcloud deployment, this should run for an extended period without output."
  sleep 60 #wait for Hypervisor stats to check-in to nova
 +# save deploy command so it can be used for debugging
 +cat > deploy_command << EOF
 +openstack overcloud deploy --templates $DEPLOY_OPTIONS
 +EOF
  openstack overcloud deploy --templates $DEPLOY_OPTIONS
  EOI
  
  }
  
 +##Post configuration after install
 +##params: none
 +function configure_post_install {
 +  local opnfv_attach_networks ovs_ip ip_range net_cidr tmp_ip
 +  opnfv_attach_networks="admin_network public_network"
 +
 +  echo -e "${blue}INFO: Post Install Configuration Running...${reset}"
 +
 +  ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI
 +source overcloudrc
 +set -o errexit
 +echo "Configuring Neutron external network"
 +neutron net-create external --router:external=True
 +neutron subnet-create --name external-net --disable-dhcp external --gateway ${public_network_gateway} --allocation-pool start=${public_network_floating_ip_range%%,*},end=${public_network_floating_ip_range##*,} ${public_network_cidr}
 +EOI
 +
 +  echo -e "${blue}INFO: Checking if OVS bridges have IP addresses...${reset}"
 +  for network in ${opnfv_attach_networks}; do
 +    ovs_ip=$(find_ip ${NET_MAP[$network]})
 +    tmp_ip=''
 +    if [ -n "$ovs_ip" ]; then
 +      echo -e "${blue}INFO: OVS Bridge ${NET_MAP[$network]} has IP address ${ovs_ip}${reset}"
 +    else
 +      echo -e "${blue}INFO: OVS Bridge ${NET_MAP[$network]} missing IP, will configure${reset}"
 +      # use last IP of allocation pool
 +      eval "ip_range=\${${network}_usable_ip_range}"
 +      ovs_ip=${ip_range##*,}
 +      eval "net_cidr=\${${network}_cidr}"
 +      sudo ip addr add ${ovs_ip}/${net_cidr##*/} dev ${NET_MAP[$network]}
 +      tmp_ip=$(find_ip ${NET_MAP[$network]})
 +      if [ -n "$tmp_ip" ]; then
 +        echo -e "${blue}INFO: OVS Bridge ${NET_MAP[$network]} IP set: ${tmp_ip}${reset}"
 +        continue
 +      else
 +        echo -e "${red}ERROR: Unable to set OVS Bridge ${NET_MAP[$network]} with IP: ${ovs_ip}${reset}"
 +        return 1
 +      fi
 +    fi
 +  done
 +}
 +
  display_usage() {
    echo -e "Usage:\n$0 [arguments] \n"
    echo -e "   -c|--config : Directory to configuration files. Optional.  Defaults to /var/opt/opnfv/ \n"
    echo -e "   -r|--resources : Directory to deployment resources. Optional.  Defaults to /var/opt/opnfv/stack \n"
    echo -e "   -v|--virtual : Virtualize overcloud nodes instead of using baremetal. \n"
    echo -e "   --no-ha : disable High Availability deployment scheme, this assumes a single controller and single compute node \n"
 -  echo -e "   --flat : disable Network Isolation and use a single flat network for the underlay network."
 +  echo -e "   --flat : disable Network Isolation and use a single flat network for the underlay network.\n"
 +  echo -e "   --no-post-config : disable Post Install configuration."
  }
  
  ##translates the command line parameters into variables
@@@ -888,11 -889,6 +944,11 @@@ parse_cmdline() 
                  echo "Underlay Network Isolation Disabled: using flat configuration"
                  shift 1
              ;;
 +        --no-post-config )
 +                post_config="FALSE"
 +                echo "Post install configuration disabled"
 +                shift 1
 +            ;;
          *)
                  display_usage
                  exit 1
@@@ -955,14 -951,6 +1011,14 @@@ main() 
    fi
    configure_undercloud
    undercloud_prep_overcloud_deploy
 +  if [ "$post_config" == "TRUE" ]; then
 +    if ! configure_post_install; then
 +      echo -e "${red}ERROR:Post Install Configuration Failed, Exiting.${reset}"
 +      exit 1
 +    else
 +      echo -e "${blue}INFO: Post Install Configuration Complete${reset}"
 +    fi
 +  fi
  }
  
  main "$@"