Uploaded from github, added FreeBSD VMs support
This commit is contained in:
23
base_scripts/vm_connect.sh
Executable file
23
base_scripts/vm_connect.sh
Executable file
@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
#Variables
|
||||
VM="$1"
|
||||
VM_BASE_DIR=${VM_BASE_DIR:-"${HOME}/vms"}
|
||||
VM_USER="user"
|
||||
#Functions
|
||||
usage() {
|
||||
cat << EOF
|
||||
USO: $0 VM
|
||||
|
||||
Este script conecta por ssh con la maquina virtual seleccionada.
|
||||
EOF
|
||||
}
|
||||
|
||||
connect_vm() {
|
||||
local VM_IP=$(./vm_get_ip.sh ${VM})
|
||||
ssh -i ${VM_BASE_DIR}/ssh/${VM} -l${VM_USER} ${VM_IP}
|
||||
}
|
||||
if [[ -z "$VM" ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
connect_vm
|
||||
228
base_scripts/vm_create.sh
Executable file
228
base_scripts/vm_create.sh
Executable file
@ -0,0 +1,228 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Variables
|
||||
VM_HOSTNAME=
|
||||
VM_BASE_DIR=${VM_BASE_DIR:-"${HOME}/vms"}
|
||||
VM_DISK_SIZE=20
|
||||
VM_DISK_FORMAT=qcow2
|
||||
VM_MEM_SIZE=2048
|
||||
VM_VCPUS=2
|
||||
VM_BASE_IMAGE=
|
||||
VM_OS_VARIANT=
|
||||
VM_USERNAME="user"
|
||||
VM_BRIDGE_INT=
|
||||
LIBVIRT_NET_OPTION="network=default,model=e1000"
|
||||
# Functions
|
||||
usage()
|
||||
{
|
||||
cat << EOF
|
||||
usage: $0 options
|
||||
|
||||
Quickly create guest VMs using cloud image files and cloud-init.
|
||||
|
||||
OPTIONS:
|
||||
-h Show this message
|
||||
-n Host name (required)
|
||||
-b bridge interface name (bridge network is used)
|
||||
-r RAM in MB (defaults to ${VM_MEM_SIZE})
|
||||
-c Number of VCPUs (defaults to ${VM_VCPUS})
|
||||
-s Amount of storage to allocate in GB (defaults to ${VM_DISK_SIZE})
|
||||
-v Verbose
|
||||
EOF
|
||||
}
|
||||
|
||||
download_base_image()
|
||||
{
|
||||
if ! test -f "$HOME/vms/base/$VM_OS_VARIANT.qcow2"; then
|
||||
if [[ "$VM_OS_VARIANT" == "freebsd14.0" ]]; then
|
||||
VM_DISK_FORMAT=".qcow2.xz"
|
||||
wget -v -O "$HOME/vms/base/$VM_OS_VARIANT.${VM_DISK_FORMAT}" ${VM_BASE_IMAGE}
|
||||
cd $HOME/vms/base/
|
||||
xz -d $VM_OS_VARIANT.${VM_DISK_FORMAT}
|
||||
cd -
|
||||
else
|
||||
wget -v -O "$HOME/vms/base/$VM_OS_VARIANT.${VM_DISK_FORMAT}" ${VM_BASE_IMAGE}
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
gen_linux_user_data()
|
||||
{
|
||||
VM_USER_PASS=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 8; echo)
|
||||
VM_USER_PASS_HASH=$(mkpasswd --method=SHA-512 --rounds=4096 ${VM_USER_PASS})
|
||||
cat <<EOF > "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
||||
#cloud-config
|
||||
hostname: ${VM_HOSTNAME}
|
||||
# manage_etc_hosts: false
|
||||
ssh_pwauth: true
|
||||
disable_root: true
|
||||
users:
|
||||
- name: ${VM_USERNAME}
|
||||
hashed_passwd: ${VM_USER_PASS_HASH}
|
||||
sudo: ALL=(ALL) NOPASSWD:ALL
|
||||
shell: /bin/bash
|
||||
lock-passwd: false
|
||||
ssh_authorized_keys:
|
||||
- ${SSH_PUB_KEY}
|
||||
EOF
|
||||
}
|
||||
|
||||
gen_freebsd_user_data()
|
||||
{
|
||||
#VM_ROOT_PASS=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 16; echo)
|
||||
VM_ROOT_PASS="changeme"
|
||||
echo "Generated root passwd: ${VM_ROOT_PASS}"
|
||||
VM_ROOT_PASS_HASH=$(mkpasswd --method=SHA-512 --rounds=4096 ${VM_ROOT_PASS})
|
||||
# Write FreeBSD 13.2 user-data
|
||||
VM_USER_PASS="sasasa123"
|
||||
VM_USER_PASS_HASH=$(mkpasswd --method=SHA-512 --rounds=4096 ${VM_USER_PASS})
|
||||
cat <<EOF > "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
||||
#cloud-config
|
||||
users:
|
||||
- name: root
|
||||
lock_passwd: false
|
||||
hashed_passwd: ${VM_ROOT_PASS}
|
||||
- name: ${VM_USERNAME}
|
||||
ssh_authorized_keys:
|
||||
- ssh-rsa ${SSH_PUB_KEY}
|
||||
groups: wheel
|
||||
ssh_pwauth: true
|
||||
hashed_passwd: ${VM_USER_PASS_HASH}
|
||||
write_files:
|
||||
- path: /usr/local/etc/sudoers
|
||||
content: |
|
||||
%wheel ALL=(ALL) NOPASSWD: ALL
|
||||
append: true
|
||||
EOF
|
||||
|
||||
}
|
||||
|
||||
while getopts "h:n:net:b:r:c:s:v" option; do
|
||||
case "${option}"
|
||||
in
|
||||
h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
n) VM_HOSTNAME=${OPTARG};;
|
||||
b) VM_BRIDGE_INT=${OPTARG};;
|
||||
r) VM_MEM_SIZE=${OPTARG};;
|
||||
c) VM_VCPUS=${OPTARG};;
|
||||
s) VM_DISK_SIZE=${OPTARG};;
|
||||
v) VERBOSE=1;;
|
||||
*)
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -z $VM_HOSTNAME ]]; then
|
||||
echo "ERROR: Host name is required"
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -n $VERBOSE ]]; then
|
||||
echo "Building ${VM_HOSTNAME} in $VM_IMAGE_DIR"
|
||||
set -xv
|
||||
fi
|
||||
|
||||
if [[ -n $VM_BRIDGE_INT ]]; then
|
||||
LIBVIRT_NET_OPTION="model=virtio,bridge=${VM_BRIDGE_INT}"
|
||||
fi
|
||||
|
||||
mkdir -p "$VM_BASE_DIR"/{images,xml,init,base,ssh}
|
||||
|
||||
## VM Base image
|
||||
if [ -n "$VM_BASE_IMAGE" ] && [ -f "$VM_BASE_IMAGE" ]; then
|
||||
download_base_image
|
||||
else
|
||||
while true; do
|
||||
read -r -p $'Select VM OS:\n 1.Debian12\n 2.Ubuntu 20.04\n 3.Ubuntu22.04\n 4.FreeBSD 14\n' -n1 answer
|
||||
case $answer in
|
||||
[1]* ) VM_OS_VARIANT='debian11'
|
||||
VM_BASE_IMAGE='https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2'
|
||||
break;;
|
||||
[2]* ) VM_OS_VARIANT='ubuntu20.04'
|
||||
VM_BASE_IMAGE='https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img'
|
||||
break;;
|
||||
[3]* ) VM_OS_VARIANT='ubuntu22.04'
|
||||
VM_BASE_IMAGE='https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img'
|
||||
break;;
|
||||
[4]* ) VM_OS_VARIANT='freebsd14.0'
|
||||
VM_BASE_IMAGE='https://download.freebsd.org/releases/VM-IMAGES/14.0-RELEASE/amd64/Latest/FreeBSD-14.0-RELEASE-amd64.qcow2.xz'
|
||||
break;;
|
||||
* ) echo "Please answer 1,2,3,4.";;
|
||||
esac
|
||||
done
|
||||
download_base_image
|
||||
fi
|
||||
|
||||
|
||||
echo "Creating a qcow2 image file ${VM_BASE_DIR}/images/${VM_HOSTNAME}.img that uses the cloud image file $HOME/vms/base/$VM_OS_VARIANT.${VM_DISK_FORMAT} as its base"
|
||||
if ! test -f "${VM_BASE_DIR}/images/${VM_HOSTNAME}.img"; then
|
||||
qemu-img create -b "$HOME/vms/base/${VM_OS_VARIANT}.qcow2" -f qcow2 -F qcow2 "${VM_BASE_DIR}/images/${VM_HOSTNAME}.img" "${VM_DISK_SIZE}G"
|
||||
else
|
||||
echo "El fichero ${VM_BASE_DIR}/images/${VM_HOSTNAME}.img ya existe"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# VM ssh keys gen
|
||||
if [ -f "${VM_BASE_IMAGE}/ssh/${VM_HOSTNAME}" ]; then
|
||||
echo "Ya existe una clave ssh para la maquina ${VM_HOSTNAME}"
|
||||
else
|
||||
ssh-keygen -t rsa -b 4096 -N '' -f "${VM_BASE_DIR}/ssh/${VM_HOSTNAME}"
|
||||
chmod 600 ${VM_BASE_DIR}/ssh/${VM_HOSTNAME}.pub
|
||||
ssh-keygen -y -f "${VM_BASE_DIR}/ssh/${VM_HOSTNAME}" > "${VM_BASE_DIR}/ssh/${VM_HOSTNAME}".pub.txt
|
||||
SSH_PUB_KEY=$(cat "${VM_BASE_DIR}/ssh/${VM_HOSTNAME}".pub.txt)
|
||||
rm "${VM_BASE_DIR}/ssh/${VM_HOSTNAME}".pub.txt
|
||||
fi
|
||||
#cloud-init VM meta-data
|
||||
cat > "$VM_BASE_DIR/init/${VM_HOSTNAME}-meta-data" << EOF
|
||||
instance-id: ${VM_HOSTNAME}
|
||||
local-hostname: ${VM_HOSTNAME}
|
||||
EOF
|
||||
#cloud-init VM user-data
|
||||
if [[ "$VM_OS_VARIANT" == "freebsd14.0" ]]; then
|
||||
gen_freebsd_user_data
|
||||
# genisoimage \
|
||||
# -output ${VM_BASE_DIR}/images/${VM_HOSTNAME}-cidata.iso \
|
||||
# -V cidata -r \
|
||||
# -J ${VM_BASE_DIR}/init/${VM_HOSTNAME}-user-data ${VM_BASE_DIR}/init/${VM_HOSTNAME}-meta-data
|
||||
# virt-install \
|
||||
# --name ${VM_HOSTNAME} \
|
||||
# --memory ${VM_MEM_SIZE} \
|
||||
# --vcpus="${VM_VCPUS}" \
|
||||
# --os-variant=${VM_OS_VARIANT} \
|
||||
# --disk ${VM_BASE_DIR}/images/${VM_HOSTNAME}.img,device=disk,bus=virtio \
|
||||
# --disk path=${VM_BASE_DIR}/images/${VM_HOSTNAME}-cidata.iso,device=cdrom \
|
||||
# --network ${LIBVIRT_NET_OPTION} \
|
||||
# --autostart \
|
||||
# --import --noautoconsole \
|
||||
# --cloud-init root-password-generate=on,user-data=${VM_BASE_DIR}/init/${VM_HOSTNAME}-user-data
|
||||
else
|
||||
gen_linux_user_data
|
||||
fi
|
||||
|
||||
virt-install \
|
||||
--name ${VM_HOSTNAME} \
|
||||
--memory ${VM_MEM_SIZE} \
|
||||
--vcpus="${VM_VCPUS}" \
|
||||
--os-variant=${VM_OS_VARIANT} \
|
||||
--disk ${VM_BASE_DIR}/images/${VM_HOSTNAME}.img,device=disk,bus=virtio \
|
||||
--network ${LIBVIRT_NET_OPTION} \
|
||||
--autostart \
|
||||
--import --noautoconsole \
|
||||
--cloud-init root-password-generate=on,user-data=${VM_BASE_DIR}/init/${VM_HOSTNAME}-user-data
|
||||
# cloud-localds \
|
||||
# ${VM_BASE_DIR}/images/${VM_HOSTNAME}.iso \
|
||||
# ${VM_BASE_DIR}/init/${VM_HOSTNAME}-user-data
|
||||
virsh dumpxml "${VM_HOSTNAME}" > "${VM_BASE_DIR}/xml/${VM_HOSTNAME}.xml"
|
||||
|
||||
if [ -n $VERBOSE ]; then
|
||||
set +xv
|
||||
fi
|
||||
# Show running VMs
|
||||
virsh list
|
||||
42
base_scripts/vm_delete.sh
Executable file
42
base_scripts/vm_delete.sh
Executable file
@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Function for usage message
|
||||
usage() {
|
||||
cat << EOF
|
||||
Usage: $0 vm_name
|
||||
|
||||
This script removes a virtual machine managed by virsh.
|
||||
|
||||
EOF
|
||||
}
|
||||
VM_BASE_DIR="${VM_BASE_DIR:-${HOME}/vms}"
|
||||
VM_IMAGE_PATH="${VM_BASE_DIR}/images/$1.img"
|
||||
CI_IMAGE_PATH="${VM_BASE_DIR}/images/$1-cidata.iso"
|
||||
|
||||
# Validate VM name argument
|
||||
if [[ -z "$1" ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if VM exists
|
||||
if [[ -f "$VM_IMAGE_PATH" ]]; then
|
||||
# Safely remove the VM with confirmation
|
||||
read -p "Are you sure you want to remove the VM '$1' (y/N)? " confirm
|
||||
if [[ "$confirm" =~ ^[Yy]$ ]]; then
|
||||
# Attempt to stop the VM before deleting
|
||||
virsh destroy "$1" 2>/dev/null || true
|
||||
# Delete VM definition and associated images
|
||||
virsh undefine "$1" 2>/dev/null || true
|
||||
rm -fv "$VM_IMAGE_PATH" "$CI_IMAGE_PATH"
|
||||
rm ${VM_BASE_DIR}/xml/$1.xml
|
||||
rm ${VM_BASE_DIR}/ssh/$1*
|
||||
rm ${VM_BASE_DIR}/init/$1-user-data
|
||||
rm ${VM_BASE_DIR}/init/$1-meta-data
|
||||
else
|
||||
echo "VM removal cancelled."
|
||||
fi
|
||||
else
|
||||
# Handle case where VM image is not found
|
||||
echo "Cannot find VM image file '$VM_IMAGE_PATH'. No action taken."
|
||||
fi
|
||||
41
base_scripts/vm_get_ip.sh
Executable file
41
base_scripts/vm_get_ip.sh
Executable file
@ -0,0 +1,41 @@
|
||||
#!/bin/bash
|
||||
usage() {
|
||||
cat << EOF
|
||||
USO: $0 VM
|
||||
|
||||
Este script recupera la dirección IP de una máquina virtual administrada por virsh.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Función para obtener la dirección IP de la máquina virtual
|
||||
get_vm_ip_address() {
|
||||
local VM="$1"
|
||||
|
||||
# Obtener la dirección MAC de la interfaz de red
|
||||
MAC_VM=$(virsh domiflist "$VM" | awk '{ print $5 }' | tail -2 | head -1)
|
||||
if [[ -z "$MAC_VM" ]]; then
|
||||
echo "Error: No se pudo encontrar la dirección MAC para '$VM'"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Obtener la dirección IP a partir de la dirección MAC
|
||||
VM_IP_ADDRESS=$(arp -a | grep "$MAC_VM" | awk '{ print $2 }' | sed 's/[()]//g')
|
||||
if [[ -z "$VM_IP_ADDRESS" ]]; then
|
||||
echo "Error: No se pudo encontrar la dirección IP para la dirección MAC '$MAC_VM'"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$VM_IP_ADDRESS"
|
||||
}
|
||||
|
||||
# Obtener el nombre del host de la máquina virtual
|
||||
VM="$1"
|
||||
|
||||
if [[ -z "$VM" ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Obtener la dirección IP de la máquina virtual
|
||||
get_vm_ip_address "$VM"
|
||||
88
base_scripts/vm_install.sh
Executable file
88
base_scripts/vm_install.sh
Executable file
@ -0,0 +1,88 @@
|
||||
#!/bin/bash
|
||||
VM_BASE_DIR=${VM_BASE_DIR:-"${HOME}/vms"}
|
||||
VM_USER="user"
|
||||
VM=$1
|
||||
VM_IP=''
|
||||
SCRIPT=''
|
||||
VM_DISTRO=''
|
||||
VM_VERSION=''
|
||||
usage() {
|
||||
cat << EOF
|
||||
USO: $0 VM
|
||||
|
||||
Este script instala algunos programas en la VM seleccionada
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Función para obtener la dirección IP de la máquina virtual
|
||||
get_vm_ip_address() {
|
||||
local VM="$1"
|
||||
|
||||
# Obtener la dirección MAC de la interfaz de red
|
||||
MAC_VM=$(virsh domiflist "$VM" | awk '{ print $5 }' | tail -2 | head -1)
|
||||
if [[ -z "$MAC_VM" ]]; then
|
||||
echo "Error: No se pudo encontrar la dirección MAC para '$VM'"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Obtener la dirección IP a partir de la dirección MAC
|
||||
VM_IP_ADDRESS=$(arp -a | grep "$MAC_VM" | awk '{ print $2 }' | sed 's/[()]//g')
|
||||
if [[ -z "$VM_IP_ADDRESS" ]]; then
|
||||
echo "Error: No se pudo encontrar la dirección IP para la dirección MAC '$MAC_VM'"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$VM_IP_ADDRESS"
|
||||
}
|
||||
|
||||
obtener_info_vm() {
|
||||
# Obtener el ID del sistema operativo
|
||||
# Obtener el ID del sistema operativo
|
||||
OS_ID=$(grep -o 'id="[^"]*"' "$1" | tr -d '"' | awk '{print $1}')
|
||||
|
||||
# Eliminar el protocolo y el dominio del ID
|
||||
OS_ID=$(echo "$OS_ID" | cut -d '/' -f 2-)
|
||||
echo $OS_ID
|
||||
# Convertir la URL a un nombre de distribución y versión
|
||||
VM_DISTRO=$(echo "$OS_ID" | awk -F '/' '{print $3}')
|
||||
VM_VERSION=$(echo "$OS_ID" | awk -F '/' '{print $4}')
|
||||
|
||||
}
|
||||
|
||||
# Obtener el nombre del host de la máquina virtual
|
||||
VM="$1"
|
||||
|
||||
if [[ -z "$VM" ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Obtener la dirección IP de la máquina virtual
|
||||
VM_IP=$(get_vm_ip_address "$VM")
|
||||
obtener_info_vm ${VM_BASE_DIR}/xml/${VM}.xml
|
||||
while true; do
|
||||
read -r -p $'Select software to install:\n 1.Docker\n 2.Gitlab CE\n 3.Gitlab runner\n 4.Kubernetes Single cluster\n' -n1 answer
|
||||
case $answer in
|
||||
[1]* )
|
||||
if [[ "$VM_DISTRO" == "debian" ]]; then
|
||||
SCRIPT='../vm_example_scripts/docker_debian.sh'
|
||||
elif [[ "$VM_DISTRO" == "ubuntu" ]]; then
|
||||
SCRIPT='../vm_example_scripts/docker_ubuntu.sh'
|
||||
fi
|
||||
break;;
|
||||
[2]* ) SCRIPT='../vm_example_scripts/gitlab_ce.sh'
|
||||
break;;
|
||||
[3]* ) SCRIPT='../vm_example_scripts/gitlab_runner.sh'
|
||||
break;;
|
||||
[4]* ) cd ../vm_example_scripts/
|
||||
./k8s.sh $VM
|
||||
break;;
|
||||
* ) echo "Please answer 1,2,3 or 4.";;
|
||||
esac
|
||||
done
|
||||
if [[ -z "$SCRIPT" ]]; then
|
||||
exit 0
|
||||
else
|
||||
ssh -i ${VM_BASE_DIR}/ssh/${VM} -l${VM_USER} ${VM_IP} "bash -s" -- < ${SCRIPT}
|
||||
fi
|
||||
2
base_scripts/vm_list.sh
Executable file
2
base_scripts/vm_list.sh
Executable file
@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
virsh list
|
||||
79
base_scripts/vm_set_ip.sh
Executable file
79
base_scripts/vm_set_ip.sh
Executable file
@ -0,0 +1,79 @@
|
||||
#!/bin/bash
|
||||
VM_BASE_DIR=${VM_BASE_DIR:-"${HOME}/vms"}
|
||||
VM_USER="user"
|
||||
MAC_VM=
|
||||
usage() {
|
||||
cat << EOF
|
||||
USO: $0 VM
|
||||
|
||||
Este script setea la dirección IP de una máquina virtual administrada por virsh.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Función para obtener la dirección IP de la máquina virtual
|
||||
get_vm_ip_address() {
|
||||
local VM="$1"
|
||||
|
||||
# Obtener la dirección MAC de la interfaz de red
|
||||
MAC_VM=$(virsh domiflist "$VM" | awk '{ print $5 }' | tail -2 | head -1)
|
||||
if [[ -z "$MAC_VM" ]]; then
|
||||
echo "Error: No se pudo encontrar la dirección MAC para '$VM'"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Obtener la dirección IP a partir de la dirección MAC
|
||||
VM_IP_ADDRESS=$(arp -a | grep "$MAC_VM" | awk '{ print $2 }' | sed 's/[()]//g')
|
||||
if [[ -z "$VM_IP_ADDRESS" ]]; then
|
||||
echo "Error: No se pudo encontrar la dirección IP para la dirección MAC '$MAC_VM'"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$VM_IP_ADDRESS"
|
||||
}
|
||||
|
||||
|
||||
define_netplan()
|
||||
{
|
||||
cat <<EOF > "$VM_BASE_DIR/init/${VM}-netplan"
|
||||
# This file is generated from information provided by the datasource. Changes
|
||||
# to it will not persist across an instance reboot. To disable cloud-init's
|
||||
# network configuration capabilities, write a file
|
||||
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
|
||||
# network: {config: disabled}
|
||||
network:
|
||||
ethernets:
|
||||
enp1s0:
|
||||
addresses:
|
||||
- ${IP}/24
|
||||
nameservers:
|
||||
addresses:
|
||||
- 208.67.222.222
|
||||
- 208.67.220.220
|
||||
match:
|
||||
macaddress: ${MAC_VM}
|
||||
set-name: enp1s0
|
||||
version: 2
|
||||
EOF
|
||||
}
|
||||
# Obtener el nombre del host de la máquina virtual
|
||||
VM="$1"
|
||||
IP="$2"
|
||||
if [[ -z "$VM" ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "$IP" ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
MAC_VM=$(virsh domiflist "$VM" | awk '{ print $5 }' | tail -2 | head -1)
|
||||
CURRENT_IP=$(get_vm_ip_address "$VM")
|
||||
define_netplan
|
||||
# Obtener la dirección IP de la máquina virtual
|
||||
scp -i ${VM_BASE_DIR}/ssh/${VM} \
|
||||
-r $VM_BASE_DIR/init/${VM}-netplan \
|
||||
${VM_USER}@${CURRENT_IP}:50-cloud-init.yaml
|
||||
ssh -i ${VM_BASE_DIR}/ssh/${VM} -l${VM_USER} ${CURRENT_IP} "bash -s" -- < ../vm_example_scripts/apply_netplan.sh
|
||||
|
||||
Reference in New Issue
Block a user