opengnsys/installer/vagrant/Vagrantfile-esxi

157 lines
6.2 KiB
Plaintext

VAGRANTFILE_API_VERSION = "2"
# VM provider: Oracle VM VirtualBox.
ENV['VAGRANT_DEFAULT_PROVIDER'] = "vmware_esxi"
# OpenGnsys version and OGAgent version.
BRANCH=ENV['BRANCH'] || "main"
BRANCH_EXTRA=ENV['BRANCH_EXTRA'] || BRANCH
# OGAgent version.
OGAGENTVERSION="1.1.2"
# Language (accepted values: es_ES, ca_ES, en_GB).
LANGUAGE = "es_ES"
ENV['LC_ALL'] = LANGUAGE + ".UTF-8"
# Number of OpenGnsys clients (accepted values: from 2 to 9).
NCLIENTS = ENV['NUMBER_OF_CLIENTS']|| 4
NCLIENTS = NCLIENTS.to_i
# Repository virtual disk: file and size (GB).
REPODISK = "ogRepo.vdi"
REPOSIZE = 50
# Amount of memory for server and clients (MB)
SERVERMEM = 2048 # Minimum: 512
CLIENTMEM = 512 # Minimum: 256
# Prefixes for MAC and IP addresses.
MACPREFIX = ENV['OGN_MAC_PREFIX'] || '00:50:56:aa:aa'
NETPREFIX = ENV['OGN_NET_PREFIX'] || "192.168.2"
DHCPNET = ENV['DHCPNET'] || "192.168.2.0"
# OpenGnsys Server IP address.
SERVERIP = "#{NETPREFIX}.10"
# Local port to access OpenGnsys Server.
LOCALWEBPORT = 8443
# ESXI Password
ESXIPASSWORD = ENV['ESXI_PASSWORD'] || 'prompt:'
#Gitea credentials
GITEA_TOKEN = ENV['GITEA_TOKEN']
GITEA_USER = ENV['GITEA_USER'] || 'unizar'
SSH_GIT_KEY_PASS = ENV['SSH_GIT_KEY_PASS'] || ''
# OpenGnsys Server provisioning script: prepare repo disk, install OpenGnsys, change default interface, configure DHCP server.
OGSERVERSCRIPT = <<EOT
# Fix problem with gitea host
grep -q '^150\.214\.58\.246' /etc/hosts || echo "150.214.58.246 ognproject.evlt.uma.es" >> /etc/hosts
echo Setting up SSH config and agent
mkdir -p /root/.ssh/
cp /vagrant/config/id_rsa /root/.ssh/id_rsa
chown root:root /root/.ssh/id_rsa
chmod 0400 /root/.ssh/id_rsa
cp /vagrant/config/ssh_config /root/.ssh/config
chown root:root /root/.ssh/config
chmod 0400 /root/.ssh/config
cp /vagrant/config/ask_pass.sh /root/ask_pass.sh
chmod 755 /root/ask_pass.sh
eval `ssh-agent`
export DISPLAY=:0
export SSH_ASKPASS=/root/ask_pass.sh
ssh-add /root/.ssh/id_rsa <<< $SSH_GIT_KEY_PASS
echo Setting up language and locales
export LANG="#{LANGUAGE}.UTF-8"
echo "LANG=\\\"$LANG\\\"" > /etc/default/locale
echo "LANG=\\\"$LANG\\\"" >> /etc/environment
locale-gen --lang #{LANGUAGE}
sed -i "s/XKBLAYOUT=.*/XKBLAYOUT=\\\"${LANG%_*}\\\"/" /etc/default/keyboard
dpkg-reconfigure -fnoninteractive console-setup
# Exit if OpenGnsys is installed.
[ -f /opt/opengnsys/doc/VERSION.json ] && echo "Cannot provision, OpenGnsys is already installed." && exit 1
echo Creating a repository disk
if [ -z "$(blkid /dev/mapper/og-images | grep ext4)" ]; then
pvcreate /dev/sdb
vgcreate og /dev/sdb
vgchange -ay
lvcreate -ay -n images -l 100%VG og
mkfs -t ext4 /dev/mapper/og-images
mkdir -p /opt/opengnsys/images
echo "/dev/mapper/og-images /opt/opengnsys/images ext4 defaults 0 0" >> /etc/fstab
mount -a
fi
if [ -f /etc/netplan/01-eth1.yaml ]; then
echo "Network configured, skipping"
else
echo "Configuring eth1"
sed -i "s/##ADDRESS##/${NETPREFIX}.1/g" /tmp/01-eth1.yaml
mv /tmp/01-eth1.yaml /etc/netplan
chown root:root /etc/netplan/01-eth1.yaml
netplan apply
sleep 1
fi
# Download installer
set -eu
#BRANCH="$OGVERSION"
echo Downloading https://ognproject.evlt.uma.es/gitea/opengnsys/opengnsys/raw/branch/${BRANCH}/installer/opengnsys_installer_devel_esxi.sh
curl --show-error --fail -k -L -o opengnsys_installer_devel_esxi.sh https://$GITEA_USER:$GITEA_TOKEN@ognproject.evlt.uma.es/gitea/opengnsys/opengnsys/raw/branch/${BRANCH}/installer/opengnsys_installer_devel_esxi.sh
chmod 755 opengnsys_installer_devel_esxi.sh && ./opengnsys_installer_devel_esxi.sh $BRANCH
set +eu
mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log
echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2)
# Insert DHCP data.
for ((i=#{NCLIENTS+10}; i>10; i--)); do
sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf
done
service isc-dhcp-server restart
echo Creating an aula and some clients
SQL="INSERT INTO aulas (nombreaula, idcentro, urlfoto, grupoid, ubicacion, puestos, modomul, ipmul, pormul, velmul, router, netmask, ntp, dns, proxy, modp2p, timep2p) VALUES ('Aula virtual', 1, 'aula.jpg', 0, 'Despliegue virtual con Vagrant.', 5, 2, '239.194.2.11', 9000, 70, '#{NETPREFIX}.1', '255.255.255.0', '', '', '', 'peer', 30); INSERT INTO ordenadores (nombreordenador, ip, mac, idaula, idrepositorio, idperfilhard, idmenu, idproautoexec, grupoid, router, mascara, arranque, netiface, netdriver, fotoord) VALUES"
for ((i=11; i<=#{NCLIENTS+10}; i++)); do
SQL="$SQL ('pc$i', '#{NETPREFIX}.$i', REPLACE('#{MACPREFIX}$i',':',''), 1, 1, 0, 0, 0, 0, '#{NETPREFIX}.1', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif'),"
done
mysql -u usuog -ppassusuog -D ogAdmBD -e "${SQL%,}"
/opt/opengnsys/bin/setclientmode ogLiveAdmin pc11 PERM
for ((i=12; i<=#{NCLIENTS+10}; i++)); do
/opt/opengnsys/bin/setclientmode ogLive pc$i PERM
done
echo "Notes:"
echo "- OpenGnsys Server URL: https://localhost:${LOCALWEBPORT}/opengnsys/"
exit 0
EOT
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.define "og-#{BRANCH_EXTRA}-admin", primary: true do |og|
og.vm.provider :vmware_esxi do |esxi|
esxi.guest_name = "og-#{BRANCH_EXTRA}-admin"
esxi.guest_memsize = SERVERMEM
esxi.esxi_username = 'root'
esxi.esxi_password = ESXIPASSWORD
esxi.esxi_hostname = 'esxi-jenkins.evlt.uma.es'
esxi.clone_from_vm = 'Ubuntu-18-template-image'
esxi.esxi_resource_pool = "/"
esxi.local_allow_overwrite = 'True'
esxi.guest_custom_vmx_settings = [['monitor.allowLegacyCPU', 'TRUE']]
esxi.guest_storage = [ 10 ]
esxi.esxi_virtual_network = [ 'vLan_742', BRANCH_EXTRA ]
esxi.guest_mac_address = [ "#{MACPREFIX}:00", "#{MACPREFIX}:01" ]
esxi.guest_nic_type = 'e1000'
end
og.vm.box = "esxi_clone/dummy"
og.vm.hostname = "og-#{BRANCH_EXTRA}-admin"
og.vm.provision "file", source: "config/01-eth1.yaml" , destination: "/tmp/"
og.vm.provision "shell", inline: OGSERVERSCRIPT , env: {"NETPREFIX" => NETPREFIX , "BRANCH" => BRANCH , "GITEA_TOKEN" => GITEA_TOKEN , "GITEA_USER" => GITEA_USER , "DHCPNET" => DHCPNET , "SSH_GIT_KEY_PASS" => SSH_GIT_KEY_PASS }
end
end