v0.4.0 - Create the VM & Gather additional Information
This commit is contained in:
		
							
								
								
									
										11
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								README.md
									
									
									
									
									
								
							@@ -13,15 +13,14 @@ Current State: Development
 | 
				
			|||||||
Just Execute the script, it's a guided Script (chmod +x CreateCloudInitVM.sh && ./ CreateCloudInitVM.sh)
 | 
					Just Execute the script, it's a guided Script (chmod +x CreateCloudInitVM.sh && ./ CreateCloudInitVM.sh)
 | 
				
			||||||
### Planned Features:
 | 
					### Planned Features:
 | 
				
			||||||
The checkbox visualises, if the feature is already working
 | 
					The checkbox visualises, if the feature is already working
 | 
				
			||||||
   - [ ] Guided VM Creation
 | 
					   - [X] Guided VM Creation
 | 
				
			||||||
   - [X] Image Download URL
 | 
					   - [X] Image Download URL
 | 
				
			||||||
   - [ ] Instant VM-Start after Creation
 | 
					 | 
				
			||||||
   - [X] Image Selection
 | 
					   - [X] Image Selection
 | 
				
			||||||
   - [X] VM-ID check
 | 
					   - [X] VM-ID check
 | 
				
			||||||
   - [ ] Choose Memorysize
 | 
					   - [X] Choose Memorysize
 | 
				
			||||||
   - [ ] Choose CPU cores
 | 
					   - [X] Choose CPU cores
 | 
				
			||||||
   - [ ] Choose Network
 | 
					   - [X] Choose Network
 | 
				
			||||||
   - [ ] Disable Firewall
 | 
					   - [X] IMG & ISO support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Bookstack Link to general Cloud-Init Information
 | 
					# Bookstack Link to general Cloud-Init Information
 | 
				
			||||||
https://bookstack.voser.cloud/books/virtualisierung/chapter/cloud-init
 | 
					https://bookstack.voser.cloud/books/virtualisierung/chapter/cloud-init
 | 
				
			||||||
@@ -9,29 +9,30 @@
 | 
				
			|||||||
# Date of Last Maintenance: 03.12.2021
 | 
					# Date of Last Maintenance: 03.12.2021
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Current State: Development
 | 
					# Current State: Development
 | 
				
			||||||
# Version: 0.3.0
 | 
					# Version: 0.4.0
 | 
				
			||||||
# Version History:
 | 
					# Version History:
 | 
				
			||||||
# v0.0.1 - Basic Script Structure
 | 
					# v0.0.1 - Basic Script Structure
 | 
				
			||||||
# v0.1.0 - Get the User input
 | 
					# v0.1.0 - Get the User input
 | 
				
			||||||
# v0.2.0 - Gather Virtual Machine ID
 | 
					# v0.2.0 - Gather Virtual Machine ID
 | 
				
			||||||
# v0.3.0 - Get & Select the Image of the Virtualmachine
 | 
					# v0.3.0 - Get & Select the Image of the Virtualmachine
 | 
				
			||||||
 | 
					# v0.4.0 - Create the VM & Gather additional Information
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Planned Features:
 | 
					# Planned Features:
 | 
				
			||||||
#   - [ ] Guided VM Creation
 | 
					#   - [X] Guided VM Creation
 | 
				
			||||||
#   - [ ] Image Download URL
 | 
					#   - [X] Image Download URL
 | 
				
			||||||
#   - [ ] Instant VM-Start after Creation
 | 
					#   - [X] Image Selection
 | 
				
			||||||
#   - [ ] Image Selection
 | 
					 | 
				
			||||||
#   - [X] VM-ID check
 | 
					#   - [X] VM-ID check
 | 
				
			||||||
#   - [ ] Choose Memorysize
 | 
					#   - [X] Choose Memorysize
 | 
				
			||||||
#   - [ ] Choose CPU cores
 | 
					#   - [X] Choose CPU cores
 | 
				
			||||||
#   - [ ] Choose Network
 | 
					#   - [X] Choose Network
 | 
				
			||||||
#   - [ ] Disable Firewall
 | 
					#   - [X] IMG & ISO & qcow2 support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Global Conigurable Variables
 | 
					# Global Conigurable Variables
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Global Constants
 | 
					# Global Constants
 | 
				
			||||||
IMAGE_STORAGE_LOCATION="/var/lib/vz/template/iso/"
 | 
					IMAGE_STORAGE_LOCATION="/var/lib/vz/template/iso/"
 | 
				
			||||||
 | 
					DEFAULT_VM_STORAGE="tank-vms"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Functions
 | 
					# Functions
 | 
				
			||||||
## Gather the ID of the Virtual machine
 | 
					## Gather the ID of the Virtual machine
 | 
				
			||||||
@@ -63,14 +64,17 @@ function get_img {
 | 
				
			|||||||
                echo "Retry or Downloadfile manually"
 | 
					                echo "Retry or Downloadfile manually"
 | 
				
			||||||
                get_img
 | 
					                get_img
 | 
				
			||||||
            fi
 | 
					            fi
 | 
				
			||||||
 | 
					            ;;
 | 
				
			||||||
        no|NO|No|n|N)
 | 
					        no|NO|No|n|N)
 | 
				
			||||||
            echo "Carrying on without a new Image"
 | 
					            echo "Carrying on without a new Image"
 | 
				
			||||||
 | 
					            ;;
 | 
				
			||||||
        *)
 | 
					        *)
 | 
				
			||||||
            echo "Invalid Argument: Please type \"yes\" or \"no\""
 | 
					            echo "Invalid Argument: Please type \"yes\" or \"no\""
 | 
				
			||||||
 | 
					            ;;
 | 
				
			||||||
 | 
					    esac
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
## Select an Image
 | 
					## Select an Image
 | 
				
			||||||
function sel_img{
 | 
					function sel_img {
 | 
				
			||||||
    echo "The following list represents all Images which exist on the Hoststorage"
 | 
					    echo "The following list represents all Images which exist on the Hoststorage"
 | 
				
			||||||
    ls $IMAGE_STORAGE_LOCATION -l | tr -s ' ' | cut -d' ' -f 6-9
 | 
					    ls $IMAGE_STORAGE_LOCATION -l | tr -s ' ' | cut -d' ' -f 6-9
 | 
				
			||||||
    readarray -t OS_IMG_ARRAY < <(ls $IMAGE_STORAGE_LOCATION -l | tr -s ' ' | cut -d' ' -f 9)
 | 
					    readarray -t OS_IMG_ARRAY < <(ls $IMAGE_STORAGE_LOCATION -l | tr -s ' ' | cut -d' ' -f 9)
 | 
				
			||||||
@@ -91,13 +95,94 @@ function gather_img {
 | 
				
			|||||||
    get_img
 | 
					    get_img
 | 
				
			||||||
    sel_img
 | 
					    sel_img
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					## Gather Virtualmachine Network
 | 
				
			||||||
 | 
					function gather_vm_net {
 | 
				
			||||||
 | 
					    ip -o link show | awk -F': ' '{print $2}' | grep vmbr
 | 
				
			||||||
 | 
					    echo "Enter one of the above shown Network-Interfaces to add to your VM"
 | 
				
			||||||
 | 
					    read VM_NET
 | 
				
			||||||
 | 
					    readarray -t VM_NET_ARRAY < <(ip -o link show | awk -F': ' '{print $2}' | grep vmbr)
 | 
				
			||||||
 | 
					    if ! [[ "${VM_NET_ARRAY[*]}" =~ "$VM_NET" ]]; then
 | 
				
			||||||
 | 
					        echo "Your selected Network does not exist"
 | 
				
			||||||
 | 
					        echo "Maybe it was a Typo, Please check:"
 | 
				
			||||||
 | 
					        echo " - Upper/Lowercase writing"
 | 
				
			||||||
 | 
					        echo "ProTip: Copy & Paste"
 | 
				
			||||||
 | 
					        sleep 3
 | 
				
			||||||
 | 
					        gather_vm_net
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Gather hardware
 | 
				
			||||||
 | 
					function gather_hardware {
 | 
				
			||||||
 | 
					    echo "Enter the amount of memory in MegaBytes"
 | 
				
			||||||
 | 
					    echo "Example for 2GB = \"2048\""
 | 
				
			||||||
 | 
					    read VM_RAM
 | 
				
			||||||
 | 
					    echo "Enter the amount of Cpu-Cores you want to give to the Virtual machine"
 | 
				
			||||||
 | 
					    read VM_CORES
 | 
				
			||||||
 | 
					    gather_vm_net
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					## Gather all aditional Data
 | 
				
			||||||
 | 
					function gather_additional {
 | 
				
			||||||
 | 
					    gather_vmid
 | 
				
			||||||
 | 
					    echo "Enter the name of the new Virtualmachine"
 | 
				
			||||||
 | 
					    read VM_NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					## Gather VM_Storage
 | 
				
			||||||
 | 
					function gather_vm_storage {
 | 
				
			||||||
 | 
					    echo "Please enter the Virtual Machine Storage Pool:[$DEFAULT_VM_STORAGE]"
 | 
				
			||||||
 | 
					    read VM_STORAGE
 | 
				
			||||||
 | 
					    VM_STORAGE=${VM_STORAGE:=$DEFAULT_VM_STORAGE}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
## Get all the Variables from the User
 | 
					## Get all the Variables from the User
 | 
				
			||||||
function get_user_input {
 | 
					function get_user_input {
 | 
				
			||||||
    gather_vmid
 | 
					 | 
				
			||||||
    gather_img
 | 
					    gather_img
 | 
				
			||||||
    
 | 
					    gather_hardware
 | 
				
			||||||
 | 
					    gather_vm_storage
 | 
				
			||||||
 | 
					    gather_additional
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					function vm_import_cloudinit_img {
 | 
				
			||||||
 | 
					    IMG_TYPE=$(echo "$OS_IMG_NAME" | rev | cut -d "." -f 1 | rev)
 | 
				
			||||||
 | 
					    if [ $IMG_TYPE == "iso" ] || [ $IMG_TYPE == "img" ];then
 | 
				
			||||||
 | 
					        qm importdisk "$VM_ID" "$IMAGE_STORAGE_LOCATION$OS_IMG_NAME" "$VM_STORAGE" -format qcow2
 | 
				
			||||||
 | 
					        if ! [ $? -eq 0 ];then
 | 
				
			||||||
 | 
					            echo "It was not possible to convert a new Image with your values"
 | 
				
			||||||
 | 
					            echo "Read the error message above"
 | 
				
			||||||
 | 
					            exit
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    elif [ $IMG_TYPE == "qcow2" ];then
 | 
				
			||||||
 | 
					        qm importdisk "$VM_ID" "$IMAGE_STORAGE_LOCATION$OS_IMG_NAME" "$VM_STORAGE"
 | 
				
			||||||
 | 
					        if ! [ $? -eq 0 ];then
 | 
				
			||||||
 | 
					            echo "It was not possible to convert a new Image with your values"
 | 
				
			||||||
 | 
					            echo "Read the error message above"
 | 
				
			||||||
 | 
					            exit
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    else 
 | 
				
			||||||
 | 
					        echo "Your OS-Image does not have a fileending which is supported by this scirpt"
 | 
				
			||||||
 | 
					        echo "only iso & img are Supported"
 | 
				
			||||||
 | 
					        exit
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					function create_qm_vm {
 | 
				
			||||||
 | 
					    qm create "$VM_ID" --name "$VM_NAME" --memory "$VM_RAM" --cores "$VM_CORES" --net0 virtio,bridge="$VM_NET"
 | 
				
			||||||
 | 
					    if ! [ $? -eq 0 ];then
 | 
				
			||||||
 | 
					        echo "It was not possible to create a Virtual machine with your values"
 | 
				
			||||||
 | 
					        echo "Read the error message above"
 | 
				
			||||||
 | 
					        exit
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    vm_import_cloudinit_img
 | 
				
			||||||
 | 
					    qm set $VM_ID --scsihw virtio-scsi-pci --scsi0 $VM_STORAGE:vm-$VM_ID-disk-0
 | 
				
			||||||
 | 
					    if ! [ $? -eq 0 ];then
 | 
				
			||||||
 | 
					        echo "It was not possible to add the custom Image to your Virtual machine"
 | 
				
			||||||
 | 
					        echo "Read the error message above"
 | 
				
			||||||
 | 
					        exit
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    qm set $VM_ID --ide2 $VM_STORAGE:cloudinit --boot c --bootdisk scsi0 --serial0 socket --vga serial0
 | 
				
			||||||
 | 
					    if ! [ $? -eq 0 ];then
 | 
				
			||||||
 | 
					        echo "It was not possible to add an cloudinit drive to your Virtual machine"
 | 
				
			||||||
 | 
					        echo "Read the error message above"
 | 
				
			||||||
 | 
					        exit
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
# Main Script
 | 
					# Main Script
 | 
				
			||||||
get_user_input
 | 
					get_user_input
 | 
				
			||||||
 | 
					create_qm_vm
 | 
				
			||||||
# Debug
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user