X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=foreman%2Fci%2Fdeploy.sh;h=a05b3dee33437d85bad209b5f345bc568a3564d2;hb=1a9d2532a3cf8bf01fbe829d38bc8988d43aca44;hp=720dc758fcba2c223a6d7600e02b06cc1b9da7f6;hpb=ebbc5db9c4758d714d71fd240c447052ee01abd2;p=genesis.git diff --git a/foreman/ci/deploy.sh b/foreman/ci/deploy.sh index 720dc75..a05b3de 100755 --- a/foreman/ci/deploy.sh +++ b/foreman/ci/deploy.sh @@ -78,6 +78,31 @@ function find_subnet { printf "%d.%d.%d.%d\n" "$((i1 & m1))" "$((i2 & m2))" "$((i3 & m3))" "$((i4 & m4))" } +##verify subnet has at least n IPs +##params: subnet mask, n IPs +function verify_subnet_size { + IFS=. read -r i1 i2 i3 i4 <<< "$1" + num_ips_required=$2 + + ##this function assumes you would never need more than 254 + ##we check here to make sure + if [ "$num_ips_required" -ge 254 ]; then + echo -e "\n\n${red}ERROR: allocating more than 254 IPs is unsupported...Exiting${reset}\n\n" + return 1 + fi + + ##we just return if 3rd octet is not 255 + ##because we know the subnet is big enough + if [ "$i3" -ne 255 ]; then + return 0 + elif [ $((254-$i4)) -ge "$num_ips_required" ]; then + return 0 + else + echo -e "\n\n${red}ERROR: Subnet is too small${reset}\n\n" + return 1 + fi +} + ##finds last usable ip (broadcast minus 1) of a subnet from an IP and netmask ## Warning: This function only works for IPv4 at the moment. ##params: ip, netmask @@ -124,6 +149,19 @@ function next_ip { echo $baseaddr.$lsv } +##subtracts a value from an IP address +##params: last ip, ip_count +##assumes ip_count is less than the last octect of the address +subtract_ip() { + IFS=. read -r i1 i2 i3 i4 <<< "$1" + ip_count=$2 + if [ $i4 -lt $ip_count ]; then + echo -e "\n\n${red}ERROR: Can't subtract $ip_count from IP address $1 Exiting${reset}\n\n" + exit 1 + fi + printf "%d.%d.%d.%d\n" "$i1" "$i2" "$i3" "$((i4 - $ip_count ))" +} + ##removes the network interface config from Vagrantfile ##params: interface ##assumes you are in the directory of Vagrantfile @@ -384,7 +422,7 @@ clone_bgs() { rm -rf /tmp/genesis/ ##clone artifacts and move into foreman_vm dir - if ! git clone https://gerrit.opnfv.org/gerrit/genesis.git; then + if ! GIT_SSL_NO_VERIFY=true git clone https://gerrit.opnfv.org/gerrit/genesis.git; then printf '%s\n' 'deploy.sh: Unable to clone genesis repo' >&2 exit 1 fi @@ -441,6 +479,11 @@ configure_network() { public_subnet_mask=$subnet_mask public_short_subnet_mask=$(find_short_netmask $interface) + if ! verify_subnet_size $public_subnet_mask 25; then + echo "${red} Not enough IPs in public subnet: $interface_ip_arr[2] ${public_subnet_mask}. Need at least 25 IPs. Please resize subnet! Exiting ${reset}" + exit 1 + fi + ##set that interface to be public sed -i 's/^.*eth_replace2.*$/ config.vm.network "public_network", ip: '\""$new_ip"\"', bridge: '\'"$interface"\'', netmask: '\""$subnet_mask"\"'/' Vagrantfile if_counter=1 @@ -465,14 +508,34 @@ configure_network() { subnet_mask=$(find_netmask $interface) if [ "$if_counter" -eq 0 ]; then admin_subnet_mask=$subnet_mask + if ! verify_subnet_size $admin_subnet_mask 5; then + echo "${red} Not enough IPs in admin subnet: ${interface_ip_arr[$if_counter]} ${admin_subnet_mask}. Need at least 5 IPs. Please resize subnet! Exiting ${reset}" + exit 1 + fi + elif [ "$if_counter" -eq 1 ]; then private_subnet_mask=$subnet_mask private_short_subnet_mask=$(find_short_netmask $interface) + + if ! verify_subnet_size $private_subnet_mask 15; then + echo "${red} Not enough IPs in private subnet: ${interface_ip_arr[$if_counter]} ${private_subnet_mask}. Need at least 15 IPs. Please resize subnet! Exiting ${reset}" + exit 1 + fi elif [ "$if_counter" -eq 2 ]; then public_subnet_mask=$subnet_mask public_short_subnet_mask=$(find_short_netmask $interface) + + if ! verify_subnet_size $public_subnet_mask 25; then + echo "${red} Not enough IPs in public subnet: ${interface_ip_arr[$if_counter]} ${public_subnet_mask}. Need at least 25 IPs. Please resize subnet! Exiting ${reset}" + exit 1 + fi elif [ "$if_counter" -eq 3 ]; then storage_subnet_mask=$subnet_mask + + if ! verify_subnet_size $storage_subnet_mask 10; then + echo "${red} Not enough IPs in storage subnet: ${interface_ip_arr[$if_counter]} ${storage_subnet_mask}. Need at least 10 IPs. Please resize subnet! Exiting ${reset}" + exit 1 + fi else echo "${red}ERROR: interface counter outside valid range of 0 to 3: $if_counter ! ${reset}" exit 1 @@ -703,11 +766,11 @@ configure_network() { ##replace foreman site sed -i 's/^.*foreman_url:.*$/ foreman_url:'" https:\/\/$foreman_ip"'\/api\/v2\//' opnfv_ksgen_settings.yml ##replace public vips - ##no need to do this if virtual and no dhcp - if [ ! -z "$enable_virtual_dhcp" ]; then - next_public_ip=$(increment_ip $next_public_ip 10) - else + ##no need to do this if no dhcp + if [[ -z "$enable_virtual_dhcp" && ! -z "$virtual" ]]; then next_public_ip=$(next_usable_ip $next_public_ip) + else + next_public_ip=$(increment_ip $next_public_ip 10) fi public_output=$(grep -E '*public_vip' opnfv_ksgen_settings.yml) @@ -775,15 +838,13 @@ configure_network() { else public_allocation_start=$(next_ip $next_public_ip) public_allocation_end=$static_ip_range_end - echo "${blue}Neutron Floating IP range: $public_allocation_start to $public_allocation_end ${reset}" fi else last_ip_subnet=$(find_last_ip_subnet $next_public_ip $public_subnet_mask) - public_allocation_start=$(increment_subnet $public_subnet $(( $last_ip_subnet - $floating_ip_count )) ) - public_allocation_end=$(increment_subnet $public_subnet $(( $last_ip_subnet )) ) - echo "${blue}Neutron Floating IP range: $public_allocation_start to $public_allocation_end ${reset}" - echo "${blue}Foreman VM is up! ${reset}" + public_allocation_start=$(subtract_ip $last_ip_subnet $floating_ip_count ) + public_allocation_end=${last_ip_subnet} fi + echo "${blue}Neutron Floating IP range: $public_allocation_start to $public_allocation_end ${reset}" sed -i 's/^.*public_allocation_start:.*$/ public_allocation_start:'" $public_allocation_start"'/' opnfv_ksgen_settings.yml sed -i 's/^.*public_allocation_end:.*$/ public_allocation_end:'" $public_allocation_end"'/' opnfv_ksgen_settings.yml @@ -850,7 +911,7 @@ start_virtual_nodes() { rm -rf /tmp/genesis/ ##clone genesis and move into node folder - if ! git clone https://gerrit.opnfv.org/gerrit/genesis.git; then + if ! GIT_SSL_NO_VERIFY=true git clone https://gerrit.opnfv.org/gerrit/genesis.git; then printf '%s\n' 'deploy.sh: Unable to clone vagrant repo' >&2 exit 1 fi