X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=ci%2F03-maasdeploy.sh;h=7ccb72d7afd77f1038b1737960a525e2bfc518ff;hb=ff57b174656b762b465d745d5f462484409e147b;hp=992be83a6036a316c5482a7966c784376832e549;hpb=3fc00ffcdfe163ab1a8994cde14e4811fe7eb55e;p=joid.git diff --git a/ci/03-maasdeploy.sh b/ci/03-maasdeploy.sh index 992be83a..7ccb72d7 100755 --- a/ci/03-maasdeploy.sh +++ b/ci/03-maasdeploy.sh @@ -21,9 +21,16 @@ then usage; fi - virtinstall=0 labname=$1 +snapinstall=0 + +opnfvdistro=`cat /etc/lsb-release | grep CODENAME | cut -d "=" -f 2` + +if [ "bionic" == "$opnfvdistro" ]; then + snapinstall=1 +fi + if [ ! -e $HOME/.ssh/id_rsa ]; then ssh-keygen -N '' -f $HOME/.ssh/id_rsa @@ -46,20 +53,43 @@ NODE_ARC="$NODE_ARCHES/generic" # Install the packages needed echo_info "Installing and upgrading required packages" #sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5EDB1B62EC4926EA -sudo apt-get update -y +sudo apt-get update -y || true sudo apt-get install software-properties-common -y -sudo apt-add-repository ppa:juju/stable -y -sudo apt-add-repository ppa:maas/stable -y -sudo apt-add-repository cloud-archive:ocata -y -sudo apt-get update -y + +if [ "$snapinstall" -eq "0" ]; then + sudo apt-add-repository ppa:juju/stable -y + sudo apt-add-repository ppa:maas/stable -y +fi +if [ "bionic" != "$opnfvdistro" ]; then + sudo apt-add-repository cloud-archive:queens -y + if [ "aarch64" == "$NODE_ARCTYPE" ]; then + sudo add-apt-repository ppa:ubuntu-cloud-archive/queens-staging -y + fi +fi + +sudo apt-get update -y || true #sudo apt-get dist-upgrade -y -sudo apt-get install bridge-utils openssh-server bzr git virtinst qemu-kvm libvirt-bin \ + +if [ "$snapinstall" -eq "1" ]; then + sudo apt-get install bridge-utils openssh-server bzr git virtinst qemu-kvm libvirt-bin \ + maas maas-region-controller juju python-pip python-psutil python-openstackclient \ + python-congressclient gsutil pastebinit python-jinja2 sshpass \ + openssh-server vlan ipmitool jq expect snap -y --allow-unauthenticated + sudo service ntp stop + sudo snap install charm + sudo snap install --devmode --stable maas +else + sudo apt-get install bridge-utils openssh-server bzr git virtinst qemu-kvm libvirt-bin \ maas maas-region-controller juju python-pip python-psutil python-openstackclient \ python-congressclient gsutil charm-tools pastebinit python-jinja2 sshpass \ - openssh-server vlan ipmitool jq expect snap -y + openssh-server vlan ipmitool jq expect snap -y --allow-unauthenticated +fi -sudo -H pip install --upgrade pip +if [ "aarch64" == "$NODE_ARCTYPE" ]; then + sudo apt-get install qemu qemu-efi qemu-system-aarch64 -y --allow-unauthenticated +fi +sudo -H pip install --upgrade pip # # Config preparation @@ -133,9 +163,7 @@ PRIMARY_RACK_CONTROLLER="$MAAS_IP" VLAN_UNTTAGED="untagged" # In the case of a virtual deployment get deployconfig.yaml -if [ "$virtinstall" -eq 1 ]; then - ./cleanvm.sh || true -fi +./cleanvm.sh || true #create backup directory mkdir ~/joid_config/ || true @@ -181,16 +209,13 @@ sudo virsh pool-define-as default --type dir --target /var/lib/libvirt/images/ | sudo virsh pool-start default || true sudo virsh pool-autostart default || true -# In case of virtual install set network -if [ "$virtinstall" -eq 1 ]; then - sudo virsh net-dumpxml default > default-net-org.xml - sed -i '/dhcp/d' default-net-org.xml - sed -i '/range/d' default-net-org.xml - sudo virsh net-destroy default - sudo virsh net-define default-net-org.xml - sudo virsh net-start default - rm -f default-net-org.xml -fi +# As we use kvm so setup network on admin network +ADMIN_BR=`cat labconfig.json | jq '.opnfv.spaces[] | select(.type=="admin")'.bridge | cut -d \" -f 2 ` +sed -i "s@brAdm@$ADMIN_BR@" net.xml +sudo virsh net-destroy default || true +sudo virsh net-undefine default || true +sudo virsh net-define net.xml || true +sudo virsh net-start default || true # # Cleanup, juju init and config backup @@ -202,23 +227,46 @@ if [ $(pip list --format=columns | grep google-api-python-client | wc -l) == 1 ] sudo pip uninstall google-api-python-client fi - -if [ ! -e ~maas/.ssh/id_rsa.pub ]; then - if [ ! -e $HOME/id_rsa_maas.pub ]; then - [ -e $HOME/id_rsa_maas ] && rm -f $HOME/id_rsa_maas - sudo su - $USER -c "echo |ssh-keygen -t rsa -f $HOME/id_rsa_maas" +if [ "$snapinstall" -eq "0" ]; then + if [ ! -e ~maas/.ssh/id_rsa.pub ]; then + if [ ! -e $HOME/id_rsa_maas.pub ]; then + [ -e $HOME/id_rsa_maas ] && rm -f $HOME/id_rsa_maas + sudo su - $USER -c "echo |ssh-keygen -t rsa -f $HOME/id_rsa_maas" + fi + sudo -u maas mkdir ~maas/.ssh/ || true + sudo cp $HOME/id_rsa_maas ~maas/.ssh/id_rsa + sudo cp $HOME/id_rsa_maas.pub ~maas/.ssh/id_rsa.pub + sudo chown maas:maas ~maas/.ssh/id_rsa + sudo chown maas:maas ~maas/.ssh/id_rsa.pub + sudo cat ~maas/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys + fi +else + if [ ! -e /root/.ssh/id_rsa.pub ]; then + if [ ! -e $HOME/id_rsa_maas.pub ]; then + [ -e $HOME/id_rsa_maas ] && rm -f $HOME/id_rsa_maas + sudo su - $USER -c "echo |ssh-keygen -t rsa -f $HOME/id_rsa_maas" + fi + sudo -u root mkdir /root/.ssh/ || true + sudo cp $HOME/id_rsa_maas /root/.ssh/id_rsa + sudo cp $HOME/id_rsa_maas.pub /root/.ssh/id_rsa.pub + sudo chown root:root /root/.ssh/id_rsa + sudo chown root:root /root/.ssh/id_rsa.pub + sudo cat /root/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys fi - sudo -u maas mkdir ~maas/.ssh/ || true - sudo cp $HOME/id_rsa_maas ~maas/.ssh/id_rsa - sudo cp $HOME/id_rsa_maas.pub ~maas/.ssh/id_rsa.pub - sudo chown maas:maas ~maas/.ssh/id_rsa - sudo chown maas:maas ~maas/.ssh/id_rsa.pub fi # Ensure virsh can connect without ssh auth -sudo cat ~maas/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys sudo cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys +if [ "$snapinstall" -eq "1" ]; then + sudo maas init --mode all --maas-url http://$MAAS_IP:5240/MAAS --admin-username $PROFILE \ + --admin-password $PROFILE --admin-email ubuntu@ubuntu.com || true + API_KEY=`sudo maas apikey --username=$PROFILE` +else + sudo maas-rack config --region-url http://$MAAS_IP:5240/MAAS + sudo maas createadmin --username=$PROFILE --email=ubuntu@ubuntu.com --password=$PROFILE || true + API_KEY=`sudo maas-region apikey --username=$PROFILE` +fi # # MAAS config # https://insights.ubuntu.com/2016/01/23/maas-setup-deploying-openstack-on-maas-1-9-with-juju/ @@ -226,13 +274,6 @@ sudo cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys # configuremaas(){ #reconfigure maas with correct MAAS address. - #Below code is needed as MAAS have issue in commissioning without restart. - #sudo ./maas-reconfigure-region.sh $MAAS_IP - sleep 30 - sudo maas-rack config --region-url http://$MAAS_IP:5240/MAAS - - sudo maas createadmin --username=ubuntu --email=ubuntu@ubuntu.com --password=ubuntu || true - API_KEY=`sudo maas-region apikey --username=ubuntu` maas login $PROFILE $API_SERVERMAAS $API_KEY maas $PROFILE maas set-config name='main_archive' value=$MAIN_ARCHIVE || true maas $PROFILE maas set-config name=upstream_dns value=$MY_UPSTREAM_DNS || true @@ -245,6 +286,14 @@ configuremaas(){ maas $PROFILE tags create name=$tag || true done + #below tag would be used to enable huge pages for DPDK and SRIOV enablement in Ubuntu kernel via MAAS + maas $PROFILE tags create name='opnfv-dpdk' comment='OPNFV DPDK enablement' \ + kernel_opts='hugepagesz=2M hugepages=1024 hugepagesz=1G hugepages=20 default_hugepagesz=1G intel_iommu=on' || true + + maas $PROFILE package-repositories create name="Ubuntu Proposed new" \ + url="http://archive.ubuntu.com/ubuntu" components="main" \ + distributions="xenial-proposed" arches=amd64,i386 + #create the required spaces. maas $PROFILE space update 0 name=default || true for space in admin-api internal-api public-api \ @@ -262,7 +311,9 @@ configuremaas(){ maas $PROFILE boot-source-selection update 1 1 arches="$NODE_ARCHES" fi - maas $PROFILE boot-resources import || true + if [ "$snapinstall" -eq "0" ]; then + maas $PROFILE boot-resources import || true + fi while [ "$(maas $PROFILE boot-resources is-importing)" == "true" ]; do @@ -271,7 +322,6 @@ configuremaas(){ } setupspacenetwork(){ - #get space, subnet and vlan and create accordingly. #for type in admin osapi data storage external floating public; do nettypes=`cat labconfig.json | jq '.opnfv.spaces[]'.type | cut -d \" -f 2` @@ -290,7 +340,7 @@ setupspacenetwork(){ NET_VLAN_ID=$(maas $PROFILE vlans read $NET_FABRIC_ID | jq -r ".[] | select(.vid==\"$SPACE_VLAN\")".id) NET_VLAN_VID=$(maas $PROFILE vlans read $NET_FABRIC_ID | jq -r ".[] | select(.vid==\"$SPACE_VLAN\")".vid) if ([ $SPACE_GWAY ] && [ "$SPACE_GWAY" != "null" ]); then - maas $PROFILE subnet update $SPACE_CIDR gateway_ip=$SPACE_GWAY + maas $PROFILE subnet update $SPACE_CIDR gateway_ip=$SPACE_GWAY || true fi if ([ $NET_VLAN_VID ] && [ $NET_VLAN_VID == "0" ]); then config_done=1 @@ -299,7 +349,7 @@ setupspacenetwork(){ else NET_VLAN_ID=$(maas $PROFILE vlans create $NET_FABRIC_ID vid=$SPACE_VLAN | jq --raw-output ".id") if ([ $NET_VLAN_ID ] && [ $NET_VLAN_ID != "null" ]); then - maas $PROFILE subnet update $SPACE_CIDR vlan=$NET_VLAN_ID + maas $PROFILE subnet update $SPACE_CIDR vlan=$NET_VLAN_ID || true NET_FABRIC_VID=$SPACE_VLAN fi fi @@ -311,16 +361,16 @@ setupspacenetwork(){ if ([ $SPACE_VLAN ] && [ "$SPACE_VLAN" != "null" ]); then NET_VLAN_ID=$(maas $PROFILE vlans create $FABRIC_ID vid=$SPACE_VLAN | jq --raw-output ".id") if ([ $SPACE_GWAY ] && [ "$SPACE_GWAY" != "null" ]); then - maas $PROFILE subnets create fabric=$FABRIC_ID cidr=$SPACE_CIDR vid=$VID_ID gateway_ip=$SPACE_GWAY + maas $PROFILE subnets create fabric=$FABRIC_ID cidr=$SPACE_CIDR vid=$VID_ID gateway_ip=$SPACE_GWAY || true else - maas $PROFILE subnets create fabric=$FABRIC_ID cidr=$SPACE_CIDR vid=$VID_ID + maas $PROFILE subnets create fabric=$FABRIC_ID cidr=$SPACE_CIDR vid=$VID_ID || true fi NET_FABRIC_VID=$VLAN_ID else if ([ $SPACE_GWAY ] && [ "$SPACE_GWAY" != "null" ]); then - maas $PROFILE subnets create fabric=$FABRIC_ID cidr=$SPACE_CIDR vid="0" gateway_ip=$SPACE_GWAY + maas $PROFILE subnets create fabric=$FABRIC_ID cidr=$SPACE_CIDR vid="0" gateway_ip=$SPACE_GWAY || true else - maas $PROFILE subnets create fabric=$FABRIC_ID cidr=$SPACE_CIDR vid="0" + maas $PROFILE subnets create fabric=$FABRIC_ID cidr=$SPACE_CIDR vid="0" || true fi fi NET_FABRIC_NAME=$(maas $PROFILE subnets read | jq -r ".[] | select(.cidr==\"$SPACE_CIDR\")".vlan.fabric) @@ -341,7 +391,7 @@ setupspacenetwork(){ NET_FABRIC_ID=$(maas $PROFILE fabric read $NET_FABRIC_NAME | jq -r ".id") if ([ $NET_FABRIC_ID ] && [ $NET_FABRIC_ID != "null" ]); then if ([ $JUJU_VLAN_VID ] && [ $JUJU_VLAN_VID != "null" ]); then - maas $PROFILE vlan update $NET_FABRIC_ID $JUJU_VLAN_VID space=$JUJU_SPACE_ID + maas $PROFILE vlan update $NET_FABRIC_ID $JUJU_VLAN_VID space=$JUJU_SPACE_ID || true fi fi if ([ $type == "admin" ]); then @@ -363,14 +413,36 @@ setupspacenetwork(){ PRIMARY_RACK_CONTROLLER=$(maas $PROFILE rack-controllers read | jq -r '.[0].system_id') maas $PROFILE vlan update $NET_FABRIC_ID $NET_FABRIC_VID dhcp_on=True primary_rack=$PRIMARY_RACK_CONTROLLER || true fi + elif ([ $type == "public" ] || [ $type == "osapi" ]); then + # If we have a network, we create reserve IPS for public IP range + if ([ $NET_FABRIC_ID ]); then + # Set ranges + SUBNET_PREFIX=${SPACE_CIDR::-5} + IP_RES_RANGE_LOW="$SUBNET_PREFIX.1" + IP_RES_RANGE_HIGH="$SUBNET_PREFIX.39" + maas $PROFILE ipranges create type=reserved \ + start_ip=$IP_RES_RANGE_LOW end_ip=$IP_RES_RANGE_HIGH \ + comment='This is a reserved range' || true + fi + else + if ([ $NET_FABRIC_ID ]); then + # Set ranges + SUBNET_PREFIX=${SPACE_CIDR::-5} + IP_RES_RANGE_LOW="$SUBNET_PREFIX.1" + IP_RES_RANGE_HIGH="$SUBNET_PREFIX.5" + maas $PROFILE ipranges create type=reserved \ + start_ip=$IP_RES_RANGE_LOW end_ip=$IP_RES_RANGE_HIGH \ + comment='This is a reserved range' || true + fi fi done } addnodes(){ - API_KEY=`sudo maas-region apikey --username=ubuntu` maas login $PROFILE $API_SERVERMAAS $API_KEY + maas $PROFILE maas set-config name=default_min_hwe_kernel value=hwe-16.04-edge || true + # make sure there is no machine entry in maas for m in $(maas $PROFILE machines read | jq -r '.[].system_id') do @@ -390,9 +462,7 @@ addnodes(){ VIRSHIP="" # TODO: parse from $VIRSHURL if needed fi - if [ "$virtinstall" -eq 1 ]; then - netw=" --network bridge=virbr0,model=virtio" - elif ([ "$VIRSHHOST" != "" ]); then + if ([ "$VIRSHHOST" != "" ]); then # Get the bridge hosting the remote virsh brid=$(ssh $VIRSHHOST "ip a l | grep $VIRSHHOST | perl -pe 's/.* (.*)\$/\$1/g'") netw=" --network bridge=$brid,model=virtio" @@ -401,7 +471,7 @@ addnodes(){ else netw="" - brid=`brctl show | grep 8000 | cut -d "8" -f 1 | tr "\n" " " | tr " " " " | tr -s " "` + brid=`sudo brctl show | grep 8000 | cut -d "8" -f 1 | tr "\n" " " | tr " " " " | tr -s " "` ADMIN_BR=`cat labconfig.json | jq '.opnfv.spaces[] | select(.type=="admin")'.bridge | cut -d \" -f 2 ` for feature in $brid; do @@ -427,8 +497,8 @@ addnodes(){ virt-install --connect $VIRSHURL --name bootstrap --ram 4098 --cpu $CPU_MODEL --vcpus 2 \ --disk size=20,format=qcow2,bus=virtio,cache=directsync,io=native,pool=default \ - $netw --boot network,hd,menu=off --noautoconsole \ - --print-xml | tee bootstrap + $netw --boot network,hd,menu=off --video virtio --noautoconsole --autostart \ + --accelerate --print-xml | tee bootstrap if [ "$virtinstall" -eq 1 ]; then bootstrapmac=`grep "mac address" bootstrap | head -1 | cut -d '"' -f 2` @@ -440,7 +510,6 @@ addnodes(){ done fi virsh -c $VIRSHURL define --file bootstrap - virsh -c $VIRSHURL autostart bootstrap rm -f bootstrap @@ -464,11 +533,11 @@ addnodes(){ virt-install --connect $VIRSHURL --name $NODE_NAME --ram 8192 --cpu $CPU_MODEL --vcpus 4 \ --disk size=120,format=qcow2,bus=virtio,cache=directsync,io=native,pool=default \ - $netw $netw --boot network,hd,menu=off --noautoconsole --print-xml | tee $NODE_NAME + $netw $netw --boot network,hd,menu=off --video virtio --noautoconsole --autostart \ + --accelerate --print-xml | tee $NODE_NAME nodemac=`grep "mac address" $NODE_NAME | head -1 | cut -d '"' -f 2` virsh -c $VIRSHURL define --file $NODE_NAME - virsh -c $VIRSHURL autostart $NODE_NAME rm -f $NODE_NAME maas $PROFILE machines create autodetect_nodegroup='yes' name=$NODE_NAME \ @@ -510,7 +579,20 @@ addnodes(){ done fi - maas $PROFILE pods create type=virsh power_address="$VIRSHURL" power_user=$USER + # Iterate to avoid "Conflict error" issue + for ii in 1 2 3 4 5 6 7 8 9 10 + do + echo "Try $ii" + maas $PROFILE pods create type=virsh power_address="$VIRSHURL" power_user=$USER > /tmp/deploy.out 2>&1 || true + cat /tmp/deploy.out + if ! fgrep -q 'Conflict' /tmp/deploy.out + then + break + else + continue + fi + done + # Make sure nodes are added into MAAS and none of them is in commissioning state i=0 @@ -540,10 +622,12 @@ sleep 30 setupspacenetwork -#just make sure rack controller has been synced and import only -# just whether images have been imported or not. -sudo ./maas-reconfigure-region.sh $MAAS_IP -sleep 120 +if [ "$snapinstall" -eq 0 ]; then + sudo sed -i 's/localhost/'$MAAS_IP'/g' /etc/maas/rackd.conf + sudo service maas-rackd restart + sudo service maas-regiond restart + sleep 120 +fi # Let's add the nodes now. Currently works only for virtual deployment. addnodes @@ -555,7 +639,6 @@ echo_info "Initial deployment of MAAS finished" #maas $PROFILE sshkeys new key="`cat ./maas/sshkeys/DominoKey.pub`" addcredential() { - API_KEY=`sudo maas-region apikey --username=ubuntu` controllername=`awk 'NR==1{print substr($1, 1, length($1)-1)}' deployconfig.yaml` cloudname=`awk 'NR==1{print substr($1, 1, length($1)-1)}' deployconfig.yaml` @@ -585,7 +668,6 @@ addcloud() { # # Enable MAAS nodes interfaces # -API_KEY=`sudo maas-region apikey --username=ubuntu` maas login $PROFILE $API_SERVERMAAS $API_KEY if [ -e ./labconfig.json ]; then