init
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
## **Updates to this file are now at https://github.com/giovtorres/kvm-install-vm.**
|
||||
## **This updated version has more options and less hardcoded variables.**
|
||||
|
||||
# Take one argument from the commandline: VM name
|
||||
if ! [ $# -eq 1 ]; then
|
||||
echo "Usage: $0 <node-name>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if domain already exists
|
||||
virsh dominfo $1 > /dev/null 2>&1
|
||||
if [ "$?" -eq 0 ]; then
|
||||
echo -n "[WARNING] $1 already exists. "
|
||||
read -p "Do you want to overwrite $1 (y/[N])? " -r
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo ""
|
||||
virsh destroy $1 > /dev/null
|
||||
virsh undefine $1 > /dev/null
|
||||
else
|
||||
echo -e "\nNot overwriting $1. Exiting..."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Directory to store images
|
||||
DIR=~/virt/images
|
||||
|
||||
# Location of cloud image
|
||||
IMAGE=$DIR/CentOS-7-x86_64-GenericCloud.qcow2
|
||||
|
||||
# Amount of RAM in MB
|
||||
MEM=768
|
||||
|
||||
# Number of virtual CPUs
|
||||
CPUS=1
|
||||
|
||||
# Cloud init files
|
||||
USER_DATA=user-data
|
||||
META_DATA=meta-data
|
||||
CI_ISO=$1-cidata.iso
|
||||
DISK=$1.qcow2
|
||||
|
||||
# Bridge for VMs (default on Fedora is virbr0)
|
||||
BRIDGE=virbr0
|
||||
|
||||
# Start clean
|
||||
rm -rf $DIR/$1
|
||||
mkdir -p $DIR/$1
|
||||
|
||||
pushd $DIR/$1 > /dev/null
|
||||
|
||||
# Create log file
|
||||
touch $1.log
|
||||
|
||||
echo "$(date -R) Destroying the $1 domain (if it exists)..."
|
||||
|
||||
# Remove domain with the same name
|
||||
virsh destroy $1 >> $1.log 2>&1
|
||||
virsh undefine $1 >> $1.log 2>&1
|
||||
|
||||
# cloud-init config: set hostname, remove cloud-init package,
|
||||
# and add ssh-key
|
||||
cat > $USER_DATA << _EOF_
|
||||
#cloud-config
|
||||
|
||||
# Hostname management
|
||||
preserve_hostname: False
|
||||
hostname: $1
|
||||
fqdn: $1.example.local
|
||||
|
||||
# Remove cloud-init when finished with it
|
||||
runcmd:
|
||||
- [ yum, -y, remove, cloud-init ]
|
||||
|
||||
# Configure where output will go
|
||||
output:
|
||||
all: ">> /var/log/cloud-init.log"
|
||||
|
||||
# configure interaction with ssh server
|
||||
ssh_svcname: ssh
|
||||
ssh_deletekeys: True
|
||||
ssh_genkeytypes: ['rsa', 'ecdsa']
|
||||
|
||||
# Install my public ssh key to the first user-defined user configured
|
||||
# in cloud.cfg in the template (which is centos for CentOS cloud images)
|
||||
ssh_authorized_keys:
|
||||
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBil2QzORhDcnKiVVNpO5daOSYVp8nshcIc7aTEkdlqCRir2Oni8BEStK7x7bvh0jrp9KptlHPeos87fQs//VXEb1FEprL2c6fPWmVdtjmYw3yzSkaFKMksL7FdUoEiwF6t8pQAg2mU0Qj9emSHBKg5ttdGqNoSvXc92k7iOzgauda7jdNak+Dx9dPhR3FJwHMcZSlQHO4cweZcK63bZitxlFkJ/FJdry/TBirDhRcXslOJ3ECU2xiyRXJVPs3VNLjMdOTTAoMmZj+GraUBbQ9VIqe683xe02sM83th5hj2C4gW3qXUoFkNLfKAMRxXLRMEwI3ABFB/AAUhACxyTJp giovanni@throwaway
|
||||
_EOF_
|
||||
|
||||
echo "instance-id: $1; local-hostname: $1" > $META_DATA
|
||||
|
||||
echo "$(date -R) Copying template image..."
|
||||
cp $IMAGE $DISK
|
||||
|
||||
# Create CD-ROM ISO with cloud-init config
|
||||
echo "$(date -R) Generating ISO for cloud-init..."
|
||||
genisoimage -output $CI_ISO -volid cidata -joliet -r $USER_DATA $META_DATA &>> $1.log
|
||||
|
||||
echo "$(date -R) Installing the domain and adjusting the configuration..."
|
||||
echo "[INFO] Installing with the following parameters:"
|
||||
echo "virt-install --import --name $1 --ram $MEM --vcpus $CPUS --disk
|
||||
$DISK,format=qcow2,bus=virtio --disk $CI_ISO,device=cdrom --network
|
||||
bridge=virbr0,model=virtio --os-type=linux --os-variant=rhel7 --noautoconsole"
|
||||
|
||||
virt-install --import --name $1 --ram $MEM --vcpus $CPUS --disk \
|
||||
$DISK,format=qcow2,bus=virtio --disk $CI_ISO,device=cdrom --network \
|
||||
bridge=virbr0,model=virtio --os-type=linux --os-variant=rhel7 --noautoconsole
|
||||
|
||||
MAC=$(virsh dumpxml $1 | awk -F\' '/mac address/ {print $2}')
|
||||
while true
|
||||
do
|
||||
IP=$(grep -B1 $MAC /var/lib/libvirt/dnsmasq/$BRIDGE.status | head \
|
||||
-n 1 | awk '{print $2}' | sed -e s/\"//g -e s/,//)
|
||||
if [ "$IP" = "" ]
|
||||
then
|
||||
sleep 1
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Eject cdrom
|
||||
echo "$(date -R) Cleaning up cloud-init..."
|
||||
virsh change-media $1 hda --eject --config >> $1.log
|
||||
|
||||
# Remove the unnecessary cloud init files
|
||||
rm $USER_DATA $CI_ISO
|
||||
|
||||
echo "$(date -R) DONE. SSH to $1 using $IP with username 'centos'."
|
||||
|
||||
popd > /dev/null
|
||||
```
|
||||
Reference in New Issue
Block a user