Uploaded from github, added FreeBSD VMs support

This commit is contained in:
2024-07-03 16:08:50 +02:00
parent 65b998560f
commit cc437fa204
32 changed files with 2269 additions and 195 deletions

79
base_scripts/vm_set_ip.sh Executable file
View 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