X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=scripts%2Fhost-add-develop.sh;fp=scripts%2Fhost-add-develop.sh;h=dce4bdede09838a1e6bfecd68e4c4233a50060ff;hb=f7aa8c4db7a57d5865d3b7767d5957fda6867198;hp=0000000000000000000000000000000000000000;hpb=de6d6e77ff7bb93136a01ca8d3b90be9bc4be013;p=osm%2Fopenvim.git diff --git a/scripts/host-add-develop.sh b/scripts/host-add-develop.sh new file mode 100755 index 0000000..dce4bde --- /dev/null +++ b/scripts/host-add-develop.sh @@ -0,0 +1,151 @@ +#!/bin/bash + +## +# Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U. +# This file is part of openmano +# All Rights Reserved. +# +# Licensed 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. +# +# For those usages not covered by the Apache License, Version 2.0 please +# contact with: nfvlabs@tid.es +## + +#Get configuration of a host for using it as a compute node + +function usage(){ + echo -e "usage: $0 user ip_name nb_cores GiB_memory nb_10GB_interfaces [hostname] [>> host.yaml]\n Get host parameters and generated a yaml file to be used for openvim host-add" + echo -e " - In case hostname is not specified it will be used the name of the machine where the script is run" + echo -e " - nb_cores must be an odd number and bigger or equal to 4." + echo -e " - GiB_memory must be an odd number and bigger or equal to 16. 4GiB of memory will be reserved for the host OS, the rest will be used by VM." + echo -e " - nb_10GB_interfaces must be an odd number and bigger or equal to 4." + echo -e " - The output will be a server descriptor with two numas and resources (memory, cores and interfaces) equally distributed between them." + echo -e " - Each interface (physical funtion) will have defined 8 SR-IOV (virtual functions)." + exit 1 +} + +function get_hash_value() { echo `eval echo $\{\`echo $1[$2]\`\}`; } + +function get_mac(){ + seed=$1 + b1=$((seed%16)); seed=$((seed/16)) + b2=$((seed%16)); seed=$((seed/16)) + b3=$((seed%16)); seed=$((seed/16)) + b4=$((seed%16)); seed=$((seed/16)) + b5=$((seed%16)); seed=$((seed/16)) + mac=`printf "%02X:%02X:%02X:%02X:%02X:%02X" 2 $b5 $b4 $b3 $b2 $b1` + echo $mac +} + + +#check root privileges and non a root user behind + +[ "$#" -lt "5" ] && echo "Missing parameters" && usage +[ "$#" -gt "6" ] && echo "Too many parameters" && usage +HOST_NAME=`cat /etc/hostname` +[ "$#" -eq "6" ] && HOST_NAME=$6 +FEATURES_LIST="lps,dioc,hwsv,tlbps,ht,lps,64b,iommu" +NUMAS=2 +CORES=$3 +MEMORY=$4 +INTERFACES=$5 + +#Ensure the user input is big enough +([ $((CORES%2)) -ne 0 ] || [ $CORES -lt 4 ] ) && echo -e "ERROR: Wrong number of cores\n" && usage +([ $((MEMORY%2)) -ne 0 ] || [ $MEMORY -lt 16 ] ) && echo -e "ERROR: Wrong number of memory\n" && usage +([ $((INTERFACES%2)) -ne 0 ] || [ $INTERFACES -lt 4 ] ) && echo -e "ERROR: Wrong number of interfaces\n" && usage + +#Generate a cpu topology for 4 numas with hyperthreading +CPUS=`pairs_gap=$((CORES/NUMAS));numa=0;inc=0;sibling=0;for((thread=0;thread<=$((pairs_gap-1));thread++)); do printf " ${numa}-${sibling}-${thread} ${numa}-${sibling}-$((thread+pairs_gap))";numa=$(((numa+1)%$NUMAS)); sibling=$((sibling+inc)); inc=$(((inc+1)%2)); done` + +#in this developing/fake server all cores can be used + +echo "#This file was created by $0" +echo "#for adding this compute node to openvim" +echo "#copy this file to openvim controller and run" +echo "#openvim host-add " +echo +echo "host:" +echo " name: $HOST_NAME" +echo " user: $1" +echo " ip_name: $2" +echo "host-data:" +echo " name: $HOST_NAME" +echo " user: $1" +echo " ip_name: $2" +echo " ranking: 100" +echo " description: $HOST_NAME" +echo " features: $FEATURES_LIST" +echo " numas:" + +numa=0 +last_iface=0 +iface_counter=0 +while [ $numa -lt $NUMAS ] +do + echo " - numa_socket: $numa" +#MEMORY + echo " hugepages: $((MEMORY/2-2))" + echo " memory: $((MEMORY/2))" + +#CORES + echo " cores:" + for cpu in $CPUS + do + PHYSICAL=`echo $cpu | cut -f 1 -d"-"` + CORE=`echo $cpu | cut -f 2 -d"-"` + THREAD=`echo $cpu | cut -f 3 -d"-"` + [ $PHYSICAL != $numa ] && continue #skip non physical + echo " - core_id: $CORE" + echo " thread_id: $THREAD" + [ $CORE -eq 0 ] && echo " status: noteligible" + done + + + #GENERATE INTERFACES INFORMATION AND PRINT IT + seed=$RANDOM + echo " interfaces:" + for ((iface=0;iface<$INTERFACES;iface+=2)) + do + name="iface$iface_counter" + bus=$((iface+last_iface)) + pci=`printf "0000:%02X:00.0" $bus` + mac=`get_mac $seed` + seed=$((seed+1)) + + echo " - source_name: $name" + echo " Mbps: 10000" + echo " pci: \"$pci\"" + echo " mac: \"$mac\"" + echo " switch_dpid: \"01:02:03:04:05:06\"" + echo " switch_port: fake0/$iface_counter" + echo " sriovs:" + + for((nb_sriov=0;nb_sriov<8;nb_sriov++)) + do + pci=`printf "0000:%02X:10.%i" $bus $nb_sriov` + mac=`get_mac $seed` + seed=$((seed+1)) + echo " - mac: \"$mac\"" + echo " pci: \"$pci\"" + echo " source_name: $nb_sriov" + done + + iface_counter=$((iface_counter+1)) + done + last_iface=$(((numa+1)*127/NUMAS+5)) #made-up formula for more realistic pci numbers + + + numa=$((numa+1)) +done +