#!/usr/bin/env bash # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # zucchini uses local storage, before setting up make sure # * xen.public.network.device is set # * use.local.storage and systemvm.use.local.storage are true # * optionally turn off stats collectors # * expunge.delay and expunge.interval are 60s # * ping.interval is around 3m # * turn off dns updates to entire zone, network.dns.basiczone.update=pod # * capacity.skipcounting.hours=0 # * direct.agent.load.size=1000 # This script will only setup an approximate number of hosts. To achieve the ratio # by 13. So if 4000 hosts are added, you might see only 3900 come up # 10 hosts per pod @ 1 host per cluster in a single zone # Each pod has a /25, so 128 addresses. I think we reserved 5 IP addresses for system VMs in each pod. # Then we had something like 60 addresses for hosts and 60 addresses for VMs. #Environment #1. Approximately 10 hosts per pod. #2. Only 3 host tags. #3. With in each pod, the host tags are the same. Homogenous Pods #5. In simulator.properties, workers=1 usage() { printf "Setup Zucchini Like Environment\nUsage: %s: -h management-server -z zoneid [-d delay] -n numberofhosts\n" $(basename $0) >&2 } a=1 #CIDR - 16bytes b=2 #CIDR - 8 bytes #options hflag=1 zflag= dflag=1 nflag=1 host="127.0.0.1" #default localhost zoneid= delay=300 #default 5 minutes numberofhosts=1300 #default 1300 hosts tag1="TAG1" tag2="TAG2" tag3="TAG3" while getopts 'h:z:d:n:' OPTION do case $OPTION in h) hflag=1 host="$OPTARG" ;; z) zflag=1 zoneid="$OPTARG" ;; d) dflag=1 delay="$OPTARG" ;; n) nflag=1 numberofhosts="$OPTARG" ;; ?) usage exit 2 ;; esac done if [ $zflag$nflag != "11" ] then usage exit 2 fi numberofpods=$(($numberofhosts/10)) #10 hosts per pod tag_one_range=$(($numberofpods*5/13)) tag_two_range=$(($numberofpods*2/13)) tag_three_range=$(($numberofpods-$tag_one_range-$tag_two_range)) clusters_per_pod=10 #each cluster has one host hosts_per_pod=10 declare -a pod_array declare -a cluster_array echo "Split Ratio :: " $tag_one_range":"$tag_two_range":"$tag_three_range #create the zone zone_query="GET http://$host/client/?command=createZone&networktype=Basic&securitygroupenabled=false&name=Zucchini&dns1=4.2.2.2&internaldns1=4.2.2.2 HTTP/1.0\n\n" echo -e $zone_query | nc -v -w $delay $host 8096 #Add Secondary Storage sstor_query="GET http://$host/client/?command=addSecondaryStorage&zoneid=$zoneid&url=nfs://172.16.15.32/export/share/secondary HTTP/1.0\n\n" echo -e $sstor_query | nc -v -w $delay $host 8096 let x=a let y=b echo "[DEBUG] $(date) Starting Creation of $numberofpods Pods" for ((name=1;name<=$numberofpods;name++)) do echo "[DEBUG] $(date) Creating pod[POD$name]" pod_query="GET http://$host/client/?command=createPod&zoneId=$zoneid&name=POD$name&netmask=255.255.255.128&startIp=172.$x.$y.130&endIp=172.$x.$y.189&gateway=172.$x.$y.129 HTTP/1.0\n\n" pod_out=$(echo -e $pod_query | nc -v -w $delay $host 8096) pod_id=$(echo $pod_out | sed 's/\(.*\)\([0-9]*\)\(.*\)/\2/g') if ! [[ "$pod_id" =~ ^[0-9]+$ ]] ; then exec >&2; echo "[ERROR] $(date) pod [POD$name] creation failed"; continue fi echo "[DEBUG] $(date) Created pod["$pod_id":POD"$name"]" pod_array[$name]=$pod_id echo "[DEBUG] $(date) Creating vlan for pod[POD$name]" vlan_query="GET http://$host/client/?command=createVlanIpRange&vlan=untagged&zoneid=$zoneid&podId=$pod_id&forVirtualNetwork=false&gateway=172.$x.$y.129&netmask=255.255.255.128&startip=172.$x.$y.190&endip=172.$x.$y.249 HTTP/1.0\n\n" vlan_out=$(echo -e $vlan_query | nc -v -w $delay $host 8096) vlan_id=$(echo $vlan_out | sed 's/\(.*\)\([0-9]*\)\(.*\)/\2/g') if ! [[ "$vlan_id" =~ ^[0-9]+$ ]] ; then let y+=1 if [ "$y" -eq 256 ] then let x+=1 y=1 fi exec >&2; echo "[ERROR] $(date) vlan creation for pod[POD$name] failed"; continue fi echo "[DEBUG] $(date) Created vlan for pod[POD$name]" #add clusters echo "[DEBUG] $(date) Starting Creation of $clusters_per_pod clusters for pod[POD$name]" for ((cluster=1;cluster<=$clusters_per_pod;cluster++)) do echo "[DEBUG] $(date) Creating cluster[POD$name-CLUSTER$cluster] for pod[POD$name]" cluster_query="GET http://$host/client/?command=addCluster&hypervisor=Simulator&clustertype=CloudManaged&zoneId=$zoneid&podId=$pod_id&clustername=POD$name-CLUSTER$cluster HTTP/1.0\n\n" cluster_out=$(echo -e $cluster_query | nc -v -w $delay $host 8096) cluster_id=$(echo $cluster_out | sed 's/\(.*\)\([0-9]*\)\(.*\)/\2/g') if ! [[ "$cluster_id" =~ ^[0-9]+$ ]] ; then exec >&2; echo "[ERROR] $(date) cluster[POD$name-CLUSTER$cluster] creation for pod[POD$name] failed"; continue fi echo "[DEBUG] $(date) Created cluster["$cluster_id":POD"$name"-CLUSTER"$cluster"]" cluster_array[$(($name*$clusters_per_pod + $cluster))]=$cluster_id done echo "[DEBUG] $(date) Finished Creating clusters for pod[POD$name]" let y+=1 if [ "$y" -eq 256 ] then let x+=1 y=1 fi done echo "[DEBUG] $(date) Finished Creating $numberofpods Pods" #echo "DEBUG:Pods and Clusters" #echo "PODS:("${#pod_array[@]}")" ${pod_array[@]} #echo "CLUSTERS:("${#cluster_array[@]}")" ${cluster_array[@]} echo echo #Add hosts #TAG1 for ((i=1;i<=$tag_one_range;i++)) do podid=${pod_array[$i]} for ((j=1;j<=$hosts_per_pod;j++)) do clusterid=${cluster_array[$(($i*$clusters_per_pod + $j))]} host_query="GET http://$host/client/?command=addHost&zoneId=$zoneid&podId=$podid&username=sim&password=sim&clusterid=$clusterid&url=http%3A%2F%2Fsim&hypervisor=Simulator&clustertype=CloudManaged&hosttags=$tag1 HTTP/1.0\n\n" host_out=$(echo -e $host_query | nc -v -w $delay $host 8096) host_id=$(echo $host_out | sed 's/\(.*\)\([0-9]*\)\(.*\)/\2/g') if ! [[ "$host_id" =~ ^[0-9]+$ ]] ; then exec >&2; echo "[ERROR] $(date) host addition failed in [pod:$podid,cluster:$clusterid]"; continue fi host_name=$(echo $host_out | sed 's/\(.*\)\(SimulatedAgent.[-0-9a-zA-Z]*\)\(.*\)/\2/g') echo "[DEBUG] $date added host [$host_id:$host_name] to [pod:$podid,cluster:$clusterid] for TAG1" done done #TAG2 for ((i=$(($tag_one_range + 1));i<=$(($tag_one_range + $tag_two_range));i++)) do podid=${pod_array[$i]} for ((j=1;j<=$hosts_per_pod;j++)) do clusterid=${cluster_array[$(($i*$clusters_per_pod + $j))]} host_query="GET http://$host/client/?command=addHost&zoneId=$zoneid&podId=$podid&username=sim&password=sim&clusterid=$clusterid&url=http%3A%2F%2Fsim&hypervisor=Simulator&clustertype=CloudManaged&hosttags=$tag2 HTTP/1.0\n\n" host_out=$(echo -e $host_query | nc -v -w $delay $host 8096) host_id=$(echo $host_out | sed 's/\(.*\)\([0-9]*\)\(.*\)/\2/g') if ! [[ "$host_id" =~ ^[0-9]+$ ]] ; then exec >&2; echo "[ERROR] $(date) host addition failed in [pod:$podid,cluster:$clusterid]"; continue fi host_name=$(echo $host_out | sed 's/\(.*\)\(SimulatedAgent.[-0-9a-zA-Z]*\)\(.*\)/\2/g') echo "[DEBUG] $date added host [$host_id:$host_name] to [pod:$podid,cluster:$clusterid] for TAG2" done done #TAG3 for ((i=$(($tag_two_range + $tag_one_range + 1));i<=$(($tag_three_range + $tag_two_range + $tag_one_range));i++)) do podid=${pod_array[$i]} for ((j=1;j<=$hosts_per_pod;j++)) do clusterid=${cluster_array[$(($i*$clusters_per_pod + $j))]} host_query="GET http://$host/client/?command=addHost&zoneId=$zoneid&podId=$podid&username=sim&password=sim&clusterid=$clusterid&url=http%3A%2F%2Fsim&hypervisor=Simulator&clustertype=CloudManaged&hosttags=$tag3 HTTP/1.0\n\n" host_out=$(echo -e $host_query | nc -v -w $delay $host 8096) host_id=$(echo $host_out | sed 's/\(.*\)\([0-9]*\)\(.*\)/\2/g') if ! [[ "$host_id" =~ ^[0-9]+$ ]] ; then exec >&2; echo "[ERROR] $(date) host addition failed in [pod:$podid,cluster:$clusterid]"; continue fi host_name=$(echo $host_out | sed 's/\(.*\)\(SimulatedAgent.[-0-9a-zA-Z]*\)\(.*\)/\2/g') echo "[DEBUG] $date added host [$host_id:$host_name] to [pod:$podid,cluster:$clusterid] for TAG3" done done echo "Setup complete" exit 0