mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-04 00:02:37 +01:00 
			
		
		
		
	CKS Enhancements: * Ability to specify different compute or service offerings for different types of CKS cluster nodes – worker, master or etcd * Ability to use CKS ready custom templates for CKS cluster nodes * Add and Remove external nodes to and from a kubernetes cluster Co-authored-by: nvazquez <nicovazquez90@gmail.com> * Update remove node timeout global setting * CKS/NSX : Missing variables in worker nodes * CKS: Fix ISO attach logic * CKS: Fix ISO attach logic * address comment * Fix Port - Node mapping when cluster is scaled in the presence of external node(s) * CKS: Externalize control and worker node setup wait time and installation attempts * Fix logger * Add missing headers and fix end of line on files * CKS Mark Nodes for Manual Upgrade and Filter Nodes to add to CKS cluster from the same network * Add support to deploy CKS cluster nodes on hosts dedicated to a domain --------- Co-authored-by: Pearl Dsilva <pearl1594@gmail.com> * Support unstacked ETCD --------- Co-authored-by: nvazquez <nicovazquez90@gmail.com> * Fix CKS cluster scaling and minor UI improvement * Reuse k8s cluster public IP for etcd nodes and rename etcd nodes * Fix DNS resolver issue * Update UDP active monitor to ICMP * Add hypervisor type to CKS cluster creation to fix CKS cluster creation when External hosts added * Fix build * Fix logger * Modify hypervisor param description in the create CKS cluster API * CKS delete fails when external nodes are present * CKS delete fails when external nodes are present * address comment * Improve network rules cleanup on failure adding external nodes to CKS cluster * UI: Fix etcd template was not honoured * UI: Fix etcd template was not honoured * Refactor * CKS: Exclude etcd nodes when calculating port numbers * Fix network cleanup in case of CKS cluster failure * Externalize retries and inverval for NSX segment deletion * Fix CKS scaling when external node(s) present in the cluster * CKS: Fix port numbers displayed against ETCD nodes * Add node version details to every node of k8s cluster - as we now support manual upgrade * Add node version details to every node of k8s cluster - as we now support manual upgrade * update column name * CKS: Exclude etcd nodes when calculating port numbers * update param name * update param * UI: Fix CKS cluster creation templates listing for non admins * CKS: Prevent etcd node start port number to coincide with k8s cluster start port numbers * CKS: Set default kubernetes cluster node version to the kubernetes cluster version on upgrade * CKS: Set default kubernetes cluster node version to the kubernetes cluster version on upgrade * consolidate query * Fix upgrade logic --------- Co-authored-by: nvazquez <nicovazquez90@gmail.com> * Fix CKS cluster version upgrade * CKS: Fix etcd port numbers being skipped * Fix CKS cluster with etcd nodes on VPC * Move schema and upgrade for 4.20 * Fix logger * Fix after rebasing * Add support for using different CNI plugins with CKS * Add support for using different CNI plugins with CKS * remove unused import * Add UI support and list cni config API * necessary UI changes * add license * changes to support external cni * UI changes * Fix NPE on restarting VPC with additional public IPs * fix merge conflict * add asnumber to create k8s svc layer * support cni framework to use as-numbers * update code * condition to ignore undefined jinja template variables * CKS: Do not pass AS number when network ID is passed * Fix deletion of Userdata / CNI Configuration in projects * CKS: Add CNI configuration details to the response and UI * Explicit events for registering cni configuration * Add Delete cni configuration API * Fix CKS deployment when using VPC tiers with custom ACLs * Fix DNS list on VR * CKS: Use Network offering of the network passed during CKS cluster creation to get the AS number * CKS cluster with guest IP * Fix: Use control node guest IP as join IP for external nodes addition * Fix DNS resolver issue * Improve etcd indexing - start from 1 * CKS: Add external node to a CKS cluster deployed with etcd node(s) successfully * CKS: Add external node to a CKS cluster deployed with etcd node(s) successfully * simplify logic * Tweak setup-kube-system script for baremetal external nodes * Consider cordoned nodes while getting ready nodes * Fix CKS cluster scale calculations * Set token TTL to 0 (no expire) for external etcd * Fix missing quotes * Fix build * Revert PR 9133 * Add calico commands for ens35 interface * Address review comments: plan CKS cluster deployment based on the node type * Add qemu-guest-agent dependency for kvm based templates * Add marvin test for CKS clusters with different offerings per node type * Remove test tag * Add marvin test and fix update template for cks and since annotations * Fix marvin test for adding and removing external nodes * Fix since version on API params * Address review comments * Fix unit test * Address review comments * UI: Make CKS public templates visible to non-admins on CKS cluster creation * Fix linter * Fix merge error * Fix positional parameters on the create kubernetes ISO script and make the ETCD version optional * fix etcd port displayed * Further improvements to CKS (#118) * Multiple nics support on Ubuntu template * Multiple nics support on Ubuntu template * supports allocating IP to the nic when VM is added to another network - no delay * Add option to select DNS or VR IP as resolver on VPC creation * Add API param and UI to select option * Add column on vpc and pass the value on the databags for CsDhcp.py to fix accordingly * Externalize the CKS Configuration, so that end users can tweak the configuration before deploying the cluster * Add new directory to c8 packaging for CKS config * Remove k8s configuration from resources and make it configurable * Revert "Remove k8s configuration from resources and make it configurable" This reverts commit d5997033ebe4ba559e6478a64578b894f8e7d3db. * copy conf to mgmt server and consume them from there * Remove node from cluster * Add missing /opt/bin directory requrired by external nodes * Login to a specific Project view * add indents * Fix CKS HA clusters * Fix build --------- Co-authored-by: Nicolas Vazquez <nicovazquez90@gmail.com> * Add missing headers * Fix linter * Address more review comments * Fix unit test * Fix scaling case for the same offering * Revert "Login to a specific Project view" This reverts commit 95e37563f48573780b07a038a7f48c0bc04e9b64. * Revert "Fix CKS HA clusters" (#120) This reverts commit 8dac16aa359faa6500ea1e1ce548169cfd08331a. * Apply suggestions from code review about user data Co-authored-by: Suresh Kumar Anaparti <sureshkumar.anaparti@gmail.com> * Update api/src/main/java/org/apache/cloudstack/api/command/user/userdata/BaseRegisterUserDataCmd.java Co-authored-by: Suresh Kumar Anaparti <sureshkumar.anaparti@gmail.com> * Refactor column names and schema path * Fix scaling for non existing previous offering per node type * Update node offering entry if there was an existing offering but a global service offering has been provided on scale --------- Co-authored-by: Pearl Dsilva <pearl1594@gmail.com> Co-authored-by: Daan Hoogland <daan@onecht.net> Co-authored-by: Suresh Kumar Anaparti <sureshkumar.anaparti@gmail.com>
		
			
				
	
	
		
			347 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			347 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash -l
 | 
						|
# 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.
 | 
						|
 | 
						|
# build script which wraps around packer and virtualbox to create the CKS template
 | 
						|
 | 
						|
function usage() {
 | 
						|
  cat <<END
 | 
						|
Usage:
 | 
						|
   ./build.sh [template] [version] [BUILD_NUMBER]
 | 
						|
 | 
						|
   * Set \$template to provide definition name to build
 | 
						|
     (or use command line arg, default ckstemplate)
 | 
						|
   * Set \$version to provide version to apply to built appliance
 | 
						|
     (or use command line arg, default empty)
 | 
						|
   * Set \$BUILD_NUMBER to provide build number to apply to built appliance
 | 
						|
     (or use command line arg, default empty)
 | 
						|
   * Set \$DEBUG=1 to enable debug logging
 | 
						|
   * Set \$TRACE=1 to enable trace logging
 | 
						|
END
 | 
						|
  exit 0
 | 
						|
}
 | 
						|
 | 
						|
for i in $@; do
 | 
						|
    if [ "$i" == "-h" -o "$i" == "--help" -o "$i" == "help" ]; then
 | 
						|
        usage
 | 
						|
    fi
 | 
						|
done
 | 
						|
 | 
						|
# requires 32-bit vhd-util and faketime binaries to be available (even for 64 bit builds)
 | 
						|
# Something like (on centos 6.5)...
 | 
						|
# * faketime
 | 
						|
#    wget -q http://bits.xensource.com/oss-xen/release/4.2.0/xen-4.2.0.tar.gz
 | 
						|
#    sudo yum -y install libuuid.i686
 | 
						|
#    cd repo/libfaketime/
 | 
						|
#    vim Makefile
 | 
						|
#    # (tune 32 bit)
 | 
						|
#    make
 | 
						|
#    sudo make install
 | 
						|
# * vhd-util
 | 
						|
#    Install on yum-based:
 | 
						|
#    sudo yum -y install python-devel dev86 iasl iasl-devel libuuid libuuid-devel \
 | 
						|
#        glib-devel glib2 glib2-devel yajl yajl-devel
 | 
						|
#    Install on apt-based:
 | 
						|
#    sudo apt-get install -y python python-dev bcc bin86 iasl uuid-dev \
 | 
						|
#        libglib2.0-dev libyajl-dev build-essential libc6-dev zlib1g-dev libncurses5-dev \
 | 
						|
#        patch iasl libbz2-dev e2fslibs-dev xz-utils gettext
 | 
						|
#    wget -q http://bits.xensource.com/oss-xen/release/4.2.0/xen-4.2.0.tar.gz
 | 
						|
#    tar xzvf xen-4.2.0.tar.gz
 | 
						|
#    cd xen-4.2.0/tools/
 | 
						|
#    wget https://github.com/citrix-openstack/xenserver-utils/raw/master/blktap2.patch -qO - | patch -p0
 | 
						|
#    ./configure --disable-monitors --disable-ocamltools --disable-rombios --disable-seabios
 | 
						|
#    make
 | 
						|
#    sudo cp ./blktap2/vhd/lib/libvhd.so.1.0 /usr/lib64/
 | 
						|
#    ldconfig
 | 
						|
#    sudo ldconfig
 | 
						|
#    sudo cp blktap2/vhd/vhd-util /usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver
 | 
						|
#    faketime 2010-01-01 vhd-util convert
 | 
						|
#
 | 
						|
set -e
 | 
						|
 | 
						|
###
 | 
						|
### Configuration
 | 
						|
###
 | 
						|
# whether to show DEBUG logs
 | 
						|
DEBUG="${DEBUG:-}"
 | 
						|
# whether to have other commands trace their actions
 | 
						|
TRACE="${TRACE:-0}"
 | 
						|
JENKINS_HOME=${JENKINS_HOME:-}
 | 
						|
if [[ ! -z "${JENKINS_HOME}" ]]; then
 | 
						|
  DEBUG=1
 | 
						|
fi
 | 
						|
 | 
						|
# which packer definition to use
 | 
						|
appliance="${1:-${appliance:-ckstemplate}}"
 | 
						|
 | 
						|
# optional version tag to put into the image filename
 | 
						|
version="${2:-${version:-}}"
 | 
						|
 | 
						|
# optional (jenkins) build number tag to put into the image filename
 | 
						|
BUILD_NUMBER="${4:-${BUILD_NUMBER:-}}"
 | 
						|
 | 
						|
version_tag=
 | 
						|
if [ ! -z "${version}" ]; then
 | 
						|
  if [ ! -z "${BUILD_NUMBER}" ]; then
 | 
						|
    version="${version}.${BUILD_NUMBER}"
 | 
						|
  fi
 | 
						|
  version_tag="-${version}"
 | 
						|
elif [ ! -z "${BUILD_NUMBER}" ]; then
 | 
						|
  version="${BUILD_NUMBER}"
 | 
						|
  version_tag="-${BUILD_NUMBER}"
 | 
						|
fi
 | 
						|
 | 
						|
appliance_build_name=${appliance}${version_tag}
 | 
						|
 | 
						|
###
 | 
						|
### Generic helper functions
 | 
						|
###
 | 
						|
 | 
						|
# how to tell sed to use extended regular expressions
 | 
						|
os=`uname`
 | 
						|
sed_regex_option="-E"
 | 
						|
if [ "${os}" == "Linux" ]; then
 | 
						|
  sed_regex_option="-r"
 | 
						|
fi
 | 
						|
 | 
						|
# logging support
 | 
						|
if [[ "${DEBUG}" == "1" ]]; then
 | 
						|
  set -x
 | 
						|
fi
 | 
						|
 | 
						|
function log() {
 | 
						|
  local level=${1?}
 | 
						|
  shift
 | 
						|
 | 
						|
  if [[ "${DEBUG}" != "1" && "${level}" == "DEBUG" ]]; then
 | 
						|
    return
 | 
						|
  fi
 | 
						|
 | 
						|
  local code=
 | 
						|
  local line="[$(date '+%F %T')] $level: $*"
 | 
						|
  if [ -t 2 ]
 | 
						|
  then
 | 
						|
    case "$level" in
 | 
						|
      INFO) code=36 ;;
 | 
						|
      DEBUG) code=30 ;;
 | 
						|
      WARN) code=33 ;;
 | 
						|
      ERROR) code=31 ;;
 | 
						|
      *) code=37 ;;
 | 
						|
    esac
 | 
						|
    echo -e "\033[${code}m${line}\033[0m"
 | 
						|
  else
 | 
						|
    echo "$line"
 | 
						|
  fi >&2
 | 
						|
}
 | 
						|
 | 
						|
function error() {
 | 
						|
  log ERROR $@
 | 
						|
  exit 1
 | 
						|
}
 | 
						|
 | 
						|
# cleanup code support
 | 
						|
declare -a on_exit_items
 | 
						|
 | 
						|
function on_exit() {
 | 
						|
  for (( i=${#on_exit_items[@]}-1 ; i>=0 ; i-- )) ; do
 | 
						|
    sleep 2
 | 
						|
    log DEBUG "on_exit: ${on_exit_items[i]}"
 | 
						|
    eval ${on_exit_items[i]}
 | 
						|
  done
 | 
						|
}
 | 
						|
 | 
						|
function add_on_exit() {
 | 
						|
  local n=${#on_exit_items[*]}
 | 
						|
  on_exit_items[${n}]="$*"
 | 
						|
  if [ ${n} -eq 0 ]; then
 | 
						|
    log DEBUG "Setting trap"
 | 
						|
    trap on_exit EXIT
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
# retry code support
 | 
						|
function retry() {
 | 
						|
  local times=$1
 | 
						|
  shift
 | 
						|
  local count=0
 | 
						|
  while [ ${count} -lt ${times} ]; do
 | 
						|
    "$@" && break
 | 
						|
    count=$(( $count +  1 ))
 | 
						|
    sleep ${count}
 | 
						|
  done
 | 
						|
 | 
						|
  if [ ${count} -eq ${times} ]; then
 | 
						|
    error "Failed ${times} times: $@"
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
###
 | 
						|
### Script logic
 | 
						|
###
 | 
						|
 | 
						|
function prepare() {
 | 
						|
  log INFO "preparing for build"
 | 
						|
  rm -rf dist *.ova *.vhd *.vdi *.qcow* *.bz2 *.vmdk *.ovf
 | 
						|
}
 | 
						|
 | 
						|
function packer_build() {
 | 
						|
  log INFO "building new image with packer"
 | 
						|
  #cd ${appliance_build_name} && packer build template.json && cd ..
 | 
						|
  cd 22.04 && packer build ${appliance_build_name}.json && cd ..
 | 
						|
}
 | 
						|
 | 
						|
function stage_vmx() {
 | 
						|
  cat << VMXFILE > "${1}.vmx"
 | 
						|
.encoding = "UTF-8"
 | 
						|
displayname = "${1}"
 | 
						|
annotation = "${1}"
 | 
						|
guestos = "otherlinux-64"
 | 
						|
virtualHW.version = "11"
 | 
						|
config.version = "8"
 | 
						|
numvcpus = "1"
 | 
						|
cpuid.coresPerSocket = "1"
 | 
						|
memsize = "256"
 | 
						|
pciBridge0.present = "TRUE"
 | 
						|
pciBridge4.present = "TRUE"
 | 
						|
pciBridge4.virtualDev = "pcieRootPort"
 | 
						|
pciBridge4.functions = "8"
 | 
						|
pciBridge5.present = "TRUE"
 | 
						|
pciBridge5.virtualDev = "pcieRootPort"
 | 
						|
pciBridge5.functions = "8"
 | 
						|
pciBridge6.present = "TRUE"
 | 
						|
pciBridge6.virtualDev = "pcieRootPort"
 | 
						|
pciBridge6.functions = "8"
 | 
						|
pciBridge7.present = "TRUE"
 | 
						|
pciBridge7.virtualDev = "pcieRootPort"
 | 
						|
pciBridge7.functions = "8"
 | 
						|
vmci0.present = "TRUE"
 | 
						|
floppy0.present = "FALSE"
 | 
						|
ide0:0.clientDevice = "FALSE"
 | 
						|
ide0:0.present = "TRUE"
 | 
						|
ide0:0.deviceType = "atapi-cdrom"
 | 
						|
ide0:0.autodetect = "TRUE"
 | 
						|
ide0:0.startConnected = "FALSE"
 | 
						|
mks.enable3d = "false"
 | 
						|
svga.autodetect = "false"
 | 
						|
svga.vramSize = "4194304"
 | 
						|
scsi0:0.present = "TRUE"
 | 
						|
scsi0:0.deviceType = "disk"
 | 
						|
scsi0:0.fileName = "$2"
 | 
						|
scsi0:0.mode = "persistent"
 | 
						|
scsi0:0.writeThrough = "false"
 | 
						|
scsi0.virtualDev = "lsilogic"
 | 
						|
scsi0.present = "TRUE"
 | 
						|
vmci0.unrestricted = "false"
 | 
						|
vcpu.hotadd = "false"
 | 
						|
vcpu.hotremove = "false"
 | 
						|
firmware = "bios"
 | 
						|
mem.hotadd = "false"
 | 
						|
VMXFILE
 | 
						|
}
 | 
						|
 | 
						|
function xen_server_export() {
 | 
						|
  log INFO "creating xen server export"
 | 
						|
  set +e
 | 
						|
  which faketime >/dev/null 2>&1 && which vhd-util >/dev/null 2>&1
 | 
						|
  local result=$?
 | 
						|
  set -e
 | 
						|
  if [ ${result} == 0 ]; then
 | 
						|
    qemu-img convert -f qcow2 -O raw "dist/${appliance}" img.raw
 | 
						|
    vhd-util convert -s 0 -t 1 -i img.raw -o stagefixed.vhd
 | 
						|
    faketime '2010-01-01' vhd-util convert -s 1 -t 2 -i stagefixed.vhd -o "${appliance_build_name}-xen.vhd"
 | 
						|
    rm -f *.bak
 | 
						|
    bzip2 "${appliance_build_name}-xen.vhd"
 | 
						|
    mv "${appliance_build_name}-xen.vhd.bz2" dist/
 | 
						|
    log INFO "${appliance} exported for XenServer: dist/${appliance_build_name}-xen.vhd.bz2"
 | 
						|
  else
 | 
						|
    log WARN "** Skipping ${appliance_build_name} export for XenServer: faketime or vhd-util command is missing. **"
 | 
						|
    log WARN "** faketime source code is available from https://github.com/wolfcw/libfaketime **"
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
function ovm_export() {
 | 
						|
  log INFO "creating OVM export"
 | 
						|
  qemu-img convert -f qcow2 -O raw "dist/${appliance}" "dist/${appliance_build_name}-ovm.raw"
 | 
						|
  cd dist && bzip2 "${appliance_build_name}-ovm.raw" && cd ..
 | 
						|
  log INFO "${appliance} exported for OracleVM: dist/${appliance_build_name}-ovm.raw.bz2"
 | 
						|
}
 | 
						|
 | 
						|
function kvm_export() {
 | 
						|
  log INFO "creating kvm export"
 | 
						|
  set +e
 | 
						|
  qemu-img convert -o compat=0.10 -f qcow2 -c -O qcow2 "dist/${appliance}" "dist/${appliance_build_name}-kvm.qcow2"
 | 
						|
  local qemuresult=$?
 | 
						|
  cd dist && bzip2 "${appliance_build_name}-kvm.qcow2" && cd ..
 | 
						|
  log INFO "${appliance} exported for KVM: dist/${appliance_build_name}-kvm.qcow2.bz2"
 | 
						|
}
 | 
						|
 | 
						|
function vmware_export() {
 | 
						|
  log INFO "creating vmware export"
 | 
						|
  qemu-img convert -f qcow2 -O vmdk "dist/${appliance}" "dist/${appliance_build_name}-vmware.vmdk"
 | 
						|
 | 
						|
  if ! ovftool_loc="$(type -p "ovftool")" || [ -z "$ovftool_loc" ]; then
 | 
						|
    log INFO "ovftool not found, skipping ova generation for VMware"
 | 
						|
    return
 | 
						|
  fi
 | 
						|
 | 
						|
  log INFO "ovftool found, using it to export ova file"
 | 
						|
  CDIR=$PWD
 | 
						|
  cd dist
 | 
						|
  chmod 666 ${appliance_build_name}-vmware.vmdk
 | 
						|
  stage_vmx ${appliance_build_name}-vmware ${appliance_build_name}-vmware.vmdk
 | 
						|
  ovftool ${appliance_build_name}-vmware.vmx ${appliance_build_name}-vmware.ova
 | 
						|
  rm -f *vmx *vmdk
 | 
						|
  cd $CDIR
 | 
						|
  log INFO "${appliance} exported for VMWare: dist/${appliance_build_name}-vmware.ova"
 | 
						|
}
 | 
						|
 | 
						|
function hyperv_export() {
 | 
						|
  log INFO "creating hyperv export"
 | 
						|
  qemu-img convert -f qcow2 -O vpc "dist/${appliance}" "dist/${appliance_build_name}-hyperv.vhd"
 | 
						|
  CDIR=$PWD
 | 
						|
  cd dist
 | 
						|
  zip "${appliance_build_name}-hyperv.vhd.zip" "${appliance_build_name}-hyperv.vhd"
 | 
						|
  rm -f *vhd
 | 
						|
  cd $CDIR
 | 
						|
  log INFO "${appliance} exported for HyperV: dist/${appliance_build_name}-hyperv.vhd.zip"
 | 
						|
}
 | 
						|
 | 
						|
###
 | 
						|
### Main invocation
 | 
						|
###
 | 
						|
 | 
						|
function main() {
 | 
						|
  prepare
 | 
						|
 | 
						|
  packer_build
 | 
						|
 | 
						|
  # process the disk at dist
 | 
						|
  kvm_export
 | 
						|
  ovm_export
 | 
						|
  xen_server_export
 | 
						|
  vmware_export
 | 
						|
  hyperv_export
 | 
						|
  rm -f "dist/${appliance}"
 | 
						|
  cd dist && chmod +r * && cd ..
 | 
						|
  cd dist && md5sum * > md5sum.txt && cd ..
 | 
						|
  cd dist && sha512sum * > sha512sum.txt && cd ..
 | 
						|
  add_on_exit log INFO "BUILD SUCCESSFUL"
 | 
						|
}
 | 
						|
 | 
						|
# we only run main() if not source-d
 | 
						|
return 2>/dev/null || main
 |