[3a0f599] | 1 | VAGRANTFILE_API_VERSION = "2" |
---|
| 2 | ENV['VAGRANT_DEFAULT_PROVIDER'] = "vmware_esxi" |
---|
[bc84890] | 3 | |
---|
[85df22be] | 4 | BRANCH=ENV['BRANCH'] || "main" |
---|
| 5 | BRANCH_EXTRA=ENV['BRANCH_EXTRA'] || BRANCH |
---|
[bc84890] | 6 | |
---|
[cf14a94] | 7 | #OGAGENTVERSION="1.4.2" |
---|
[bc84890] | 8 | |
---|
[3a0f599] | 9 | LANGUAGE = "es_ES" |
---|
| 10 | ENV['LC_ALL'] = LANGUAGE + ".UTF-8" |
---|
[bc84890] | 11 | |
---|
[a8044f7] | 12 | NCLIENTS = ENV['NUMBER_OF_CLIENTS']|| 4 |
---|
[915580e] | 13 | NCLIENTS = NCLIENTS.to_i |
---|
[bc84890] | 14 | |
---|
[3a0f599] | 15 | SERVERMEM = 2048 # Minimum: 512 |
---|
| 16 | CLIENTMEM = 512 # Minimum: 256 |
---|
[bc84890] | 17 | |
---|
[0fe1fb95] | 18 | MACPREFIX = ENV['OGN_MAC_PREFIX'] || '00:50:56:aa:aa' |
---|
[6a65c2d] | 19 | NETPREFIX = ENV['OGN_NET_PREFIX'] || "192.168.2" |
---|
[f43bbbd] | 20 | DHCPNET = ENV['DHCPNET'] || "192.168.2.0" |
---|
[bc84890] | 21 | |
---|
[3a0f599] | 22 | SERVERIP = "#{NETPREFIX}.10" |
---|
[bc84890] | 23 | |
---|
[3a0f599] | 24 | LOCALWEBPORT = 8443 |
---|
[bc84890] | 25 | |
---|
[1f22729] | 26 | ESXIPASSWORD = ENV['ESXI_PASSWORD'] || 'prompt:' |
---|
[3a0f599] | 27 | |
---|
[c5afb54] | 28 | GITEA_TOKEN = ENV['GITEA_TOKEN'] |
---|
| 29 | GITEA_USER = ENV['GITEA_USER'] || 'unizar' |
---|
[bf3f1ed] | 30 | SSH_GIT_KEY_PASS = ENV['SSH_GIT_KEY_PASS'] || '' |
---|
[c5afb54] | 31 | |
---|
[4fa8ce3] | 32 | |
---|
[3a0f599] | 33 | OGSERVERSCRIPT = <<EOT |
---|
[6a830177] | 34 | echo -n 'hostname: '; hostname -f |
---|
| 35 | echo env vars beginning with OG: |
---|
| 36 | env |grep OG |
---|
| 37 | ip address show eth0 |
---|
| 38 | |
---|
[a8044f7] | 39 | # Fix problem with gitea host |
---|
| 40 | grep -q '^150\.214\.58\.246' /etc/hosts || echo "150.214.58.246 ognproject.evlt.uma.es" >> /etc/hosts |
---|
[c0b4f96] | 41 | |
---|
[85df22be] | 42 | echo Setting up SSH config and agent |
---|
[c9497e6] | 43 | mkdir -p /root/.ssh/ |
---|
[cf14a94] | 44 | cp /vagrant/installer/vagrant/config/id_rsa /root/.ssh/id_rsa |
---|
[c9497e6] | 45 | chown root:root /root/.ssh/id_rsa |
---|
[a8044f7] | 46 | chmod 0400 /root/.ssh/id_rsa |
---|
[cf14a94] | 47 | cp /vagrant/installer/vagrant/config/ssh_config /root/.ssh/config |
---|
[c9497e6] | 48 | chown root:root /root/.ssh/config |
---|
| 49 | chmod 0400 /root/.ssh/config |
---|
[cf14a94] | 50 | cp /vagrant/installer/vagrant/config/ask_pass.sh /root/ask_pass.sh |
---|
[a8044f7] | 51 | chmod 755 /root/ask_pass.sh |
---|
[692e9417] | 52 | |
---|
[a8044f7] | 53 | eval `ssh-agent` |
---|
| 54 | export DISPLAY=:0 |
---|
[692e9417] | 55 | export SSH_ASKPASS=/root/ask_pass.sh |
---|
[bf3f1ed] | 56 | ssh-add /root/.ssh/id_rsa <<< $SSH_GIT_KEY_PASS |
---|
[692e9417] | 57 | |
---|
[787ba5b] | 58 | |
---|
[41e910b] | 59 | ## setup stuff that used to be in the old ubuntu-18 ESXi template but are absent in the current ubuntu-24 one |
---|
[ea8a33b] | 60 | apt-get --yes install locales file bsdextrautils moreutils |
---|
[41e910b] | 61 | sudo sed -i -e '/^# es_ES\.UTF-8/s/^# //' /etc/locale.gen |
---|
| 62 | sudo sed -i -e '/^# en_US\.UTF-8/s/^# //' /etc/locale.gen |
---|
| 63 | sudo sed -i -e '/^# en_GB\.UTF-8/s/^# //' /etc/locale.gen |
---|
| 64 | |
---|
| 65 | |
---|
[85df22be] | 66 | echo Setting up language and locales |
---|
[c9497e6] | 67 | export LANG="#{LANGUAGE}.UTF-8" |
---|
| 68 | echo "LANG=\\\"$LANG\\\"" > /etc/default/locale |
---|
| 69 | echo "LANG=\\\"$LANG\\\"" >> /etc/environment |
---|
| 70 | locale-gen --lang #{LANGUAGE} |
---|
| 71 | sed -i "s/XKBLAYOUT=.*/XKBLAYOUT=\\\"${LANG%_*}\\\"/" /etc/default/keyboard |
---|
| 72 | dpkg-reconfigure -fnoninteractive console-setup |
---|
[787ba5b] | 73 | |
---|
[85df22be] | 74 | |
---|
[3a0f599] | 75 | # Exit if OpenGnsys is installed. |
---|
[c9497e6] | 76 | [ -f /opt/opengnsys/doc/VERSION.json ] && echo "Cannot provision, OpenGnsys is already installed." && exit 1 |
---|
| 77 | |
---|
[85df22be] | 78 | |
---|
| 79 | echo Creating a repository disk |
---|
[c9497e6] | 80 | if [ -z "$(blkid /dev/mapper/og-images | grep ext4)" ]; then |
---|
| 81 | pvcreate /dev/sdb |
---|
| 82 | vgcreate og /dev/sdb |
---|
| 83 | vgchange -ay |
---|
| 84 | lvcreate -ay -n images -l 100%VG og |
---|
| 85 | mkfs -t ext4 /dev/mapper/og-images |
---|
| 86 | mkdir -p /opt/opengnsys/images |
---|
| 87 | echo "/dev/mapper/og-images /opt/opengnsys/images ext4 defaults 0 0" >> /etc/fstab |
---|
| 88 | mount -a |
---|
| 89 | fi |
---|
| 90 | |
---|
[85df22be] | 91 | |
---|
[c9497e6] | 92 | if [ -f /etc/netplan/01-eth1.yaml ]; then |
---|
[85df22be] | 93 | echo "Network configured, skipping" |
---|
[c9497e6] | 94 | else |
---|
[85df22be] | 95 | echo "Configuring eth1" |
---|
[c9497e6] | 96 | sed -i "s/##ADDRESS##/${NETPREFIX}.1/g" /tmp/01-eth1.yaml |
---|
| 97 | mv /tmp/01-eth1.yaml /etc/netplan |
---|
| 98 | chown root:root /etc/netplan/01-eth1.yaml |
---|
| 99 | netplan apply |
---|
[9d0f5c5] | 100 | while ! ip address show eth0 |grep -qw inet; do |
---|
[92cab1e] | 101 | echo eth0 has no IPv4, waiting... |
---|
| 102 | sleep 1 |
---|
| 103 | done |
---|
[c9497e6] | 104 | fi |
---|
[787ba5b] | 105 | |
---|
[9186a75e] | 106 | echo Available ogLive and ogagent files: |
---|
| 107 | ls -l /vagrant/installer/{ogLive,ogagentpkgs}* |
---|
[726f7c0] | 108 | |
---|
[cf14a94] | 109 | /vagrant/installer/opengnsys_installer_devel_esxi.sh |
---|
[e202670] | 110 | |
---|
[6a830177] | 111 | [ -e /opt/opengnsys/log/bash.log ] && mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log |
---|
[6b2b601] | 112 | |
---|
[6a830177] | 113 | echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2) |
---|
[c9497e6] | 114 | |
---|
[3a0f599] | 115 | # Insert DHCP data. |
---|
[6a830177] | 116 | sed -i "/^}$/ i host modelo { hardware ethernet #{MACPREFIX}:FF; fixed-address #{NETPREFIX}.199; }" /etc/dhcp/dhcpd.conf |
---|
| 117 | for ((i=#{NCLIENTS+10}; i>10; i--)); do |
---|
| 118 | sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf |
---|
| 119 | done |
---|
| 120 | service isc-dhcp-server restart |
---|
[2e6fcee] | 121 | |
---|
[0709732] | 122 | echo Creating an aula and some clients |
---|
[6a830177] | 123 | SQL="INSERT INTO aulas (nombreaula, idcentro, urlfoto, grupoid, ubicacion, puestos, modomul, ipmul, pormul, velmul, router, netmask, ntp, dns, proxy, modp2p, timep2p)"\ |
---|
| 124 | "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); "\ |
---|
| 125 | "INSERT INTO ordenadores (nombreordenador, ip, mac, idaula, idrepositorio, idperfilhard, idmenu, idproautoexec, grupoid, router, mascara, arranque, netiface, netdriver, fotoord) VALUES "\ |
---|
| 126 | "('modelo', '#{NETPREFIX}.199', REPLACE('#{MACPREFIX}FF',':',''), 1, 1, 0, 0, 0, 0, '#{NETPREFIX}.1', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif')," |
---|
| 127 | for ((i=11; i<=#{NCLIENTS+10}; i++)); do |
---|
| 128 | 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')," |
---|
| 129 | done |
---|
| 130 | mysql -u usuog -ppassusuog -D ogAdmBD -e "${SQL%,}" |
---|
| 131 | /opt/opengnsys/bin/setclientmode ogLiveAdmin modelo PERM |
---|
| 132 | /opt/opengnsys/bin/setclientmode ogLiveAdmin pc11 PERM |
---|
| 133 | for ((i=12; i<=#{NCLIENTS+10}; i++)); do |
---|
| 134 | /opt/opengnsys/bin/setclientmode ogLive pc$i PERM |
---|
| 135 | done |
---|
[85df22be] | 136 | |
---|
[3a0f599] | 137 | echo "Notes:" |
---|
[6b2b601] | 138 | echo "- OpenGnsys Server URL: https://localhost:${LOCALWEBPORT}/opengnsys/" |
---|
[3a0f599] | 139 | exit 0 |
---|
| 140 | EOT |
---|
| 141 | |
---|
[0c52391] | 142 | |
---|
[4f70c64] | 143 | OGDHCPSCRIPT = <<EOT |
---|
| 144 | echo in ogdhcp script |
---|
[a984630] | 145 | echo -n 'hostname: '; hostname -f |
---|
| 146 | echo env vars beginning with OG: |
---|
[c3e28cfe] | 147 | env |grep OG |
---|
[a984630] | 148 | ip address show eth0 |
---|
[fff09f6] | 149 | echo "OGDHCP_BRANCH ($OGDHCP_BRANCH)" |
---|
[7073c13] | 150 | EOT |
---|
| 151 | |
---|
[3a0f599] | 152 | |
---|
[4f70c64] | 153 | OGBOOTSCRIPT = <<EOT |
---|
| 154 | echo in ogboot script |
---|
[a984630] | 155 | echo -n 'hostname: '; hostname -f |
---|
| 156 | echo env vars beginning with OG: |
---|
[c3e28cfe] | 157 | env |grep OG |
---|
[a984630] | 158 | ip address show eth0 |
---|
[6a830177] | 159 | echo "OGBOOT_BRANCH ($OGBOOT_BRANCH)" |
---|
[9e67610] | 160 | echo "OGSERVER_IP ($OGSERVER_IP)" |
---|
| 161 | #curl --retry 5 --stderr - --insecure --location --output installer.py https://$GITEA_USER:$GITEA_TOKEN@ognproject.evlt.uma.es/gitea/opengnsys/ogboot/raw/branch/ ${OGBOOT_BRANCH}/installer.py |
---|
| 162 | #python3 /install.py |
---|
[4f70c64] | 163 | EOT |
---|
[84092f8] | 164 | |
---|
[bc84890] | 165 | |
---|
[4f70c64] | 166 | OGREPOSCRIPT = <<EOT |
---|
| 167 | echo in ogrepo script |
---|
[a984630] | 168 | echo -n 'hostname: '; hostname -f |
---|
| 169 | echo env vars beginning with OG: |
---|
[c3e28cfe] | 170 | env |grep OG |
---|
[a984630] | 171 | ip address show eth0 |
---|
[fff09f6] | 172 | echo "OGREPO_BRANCH ($OGREPO_BRANCH)" |
---|
| 173 | EOT |
---|
| 174 | |
---|
| 175 | |
---|
| 176 | OGLOGSCRIPT = <<EOT |
---|
| 177 | echo in oglog script |
---|
| 178 | echo -n 'hostname: '; hostname -f |
---|
| 179 | echo env vars beginning with OG: |
---|
| 180 | env |grep OG |
---|
| 181 | ip address show eth0 |
---|
| 182 | echo "OGLOG_BRANCH ($OGLOG_BRANCH)" |
---|
[4f70c64] | 183 | EOT |
---|
[bc84890] | 184 | |
---|
[84092f8] | 185 | |
---|
[4f70c64] | 186 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| |
---|
[ea215a9] | 187 | require 'pp' |
---|
[86d3587] | 188 | |
---|
| 189 | def do_debug(msg) |
---|
| 190 | if ENV.has_key?("DEBUG_VAGRANT") and ENV["DEBUG_VAGRANT"] == "true" then |
---|
[9ffa6b4] | 191 | if msg.class == Array then |
---|
[c3e28cfe] | 192 | #PP.pp(msg, STDERR) ## doesn't actually pretty print to the jenkins log |
---|
| 193 | STDERR.puts msg.pretty_inspect |
---|
[9ffa6b4] | 194 | else |
---|
| 195 | STDERR.puts msg |
---|
[86d3587] | 196 | end |
---|
| 197 | end |
---|
[ea215a9] | 198 | end |
---|
| 199 | |
---|
[5ad4022] | 200 | provisioners_env = { |
---|
| 201 | "NETPREFIX" => NETPREFIX, |
---|
| 202 | "BRANCH" => BRANCH, |
---|
[fff09f6] | 203 | "OGDHCP_BRANCH" => ENV['OGDHCP_BRANCH'], |
---|
[6a830177] | 204 | "OGBOOT_BRANCH" => ENV['OGBOOT_BRANCH'], |
---|
[fff09f6] | 205 | "OGREPO_BRANCH" => ENV['OGREPO_BRANCH'], |
---|
| 206 | "OGLOG_BRANCH" => ENV['OGLOG_BRANCH'], |
---|
[5ad4022] | 207 | "GITEA_TOKEN" => GITEA_TOKEN, |
---|
| 208 | "GITEA_USER" => GITEA_USER, |
---|
| 209 | "DHCPNET" => DHCPNET, |
---|
| 210 | "SSH_GIT_KEY_PASS" => SSH_GIT_KEY_PASS, |
---|
| 211 | "LOCALWEBPORT" => LOCALWEBPORT, |
---|
| 212 | "DEFAULT_UDS_REST_URL" => ENV['DEFAULT_UDS_REST_URL'], |
---|
| 213 | "DEFAULT_UDS_AUTHENTICATOR" => ENV['DEFAULT_UDS_AUTHENTICATOR'], |
---|
| 214 | "DEFAULT_UDS_USER" => ENV['DEFAULT_UDS_USER'], |
---|
[8c1f4cf] | 215 | "DEFAULT_UDS_PASS" => ENV['DEFAULT_UDS_PASS'], |
---|
[a984630] | 216 | "OGLOG_IP" => ENV['OGLOG_IP'], |
---|
[8c1f4cf] | 217 | "OGSERVER_IP" => ENV['OGSERVER_IP'], |
---|
[5ad4022] | 218 | } |
---|
[039b4d8] | 219 | app_servers = { |
---|
[4fa8ce3] | 220 | 'vm1' => { |
---|
[6a830177] | 221 | :name => "og-#{BRANCH_EXTRA}-server", |
---|
[5ad4022] | 222 | :memsize => SERVERMEM, |
---|
[7e81a869] | 223 | :clone_from => 'template-ubuntu24', |
---|
[5ad4022] | 224 | :networks => [ 'vLan_742', BRANCH_EXTRA ], |
---|
| 225 | :macs => [ "#{MACPREFIX}:00", "#{MACPREFIX}:01" ], |
---|
| 226 | :file_provisioner => { |
---|
[267fa3c] | 227 | :src => "installer/vagrant/config/01-eth1.yaml", |
---|
[0c52391] | 228 | :dst => "/tmp/", |
---|
| 229 | }, |
---|
[5ad4022] | 230 | :shell_provisioners => [ OGSERVERSCRIPT ], |
---|
[7073c13] | 231 | }, |
---|
[edae476] | 232 | } |
---|
[4f70c64] | 233 | |
---|
[f19f12b] | 234 | vm1_components = vm2_components = [] |
---|
[4f70c64] | 235 | |
---|
| 236 | if ENV.has_key?("VM1_COMPONENTS") then |
---|
[f19f12b] | 237 | vm1_components = ENV["VM1_COMPONENTS"].split(" ") |
---|
[4f70c64] | 238 | end |
---|
| 239 | |
---|
| 240 | if ENV.has_key?("VM2_COMPONENTS") then |
---|
[f19f12b] | 241 | vm2_components = ENV["VM2_COMPONENTS"].split(" ") |
---|
| 242 | if vm2_components.size > 0 then |
---|
[4f70c64] | 243 | app_servers['vm2'] = { |
---|
[c3e28cfe] | 244 | :name => "og-#{BRANCH_EXTRA}", |
---|
[4f70c64] | 245 | :memsize => SERVERMEM, |
---|
[7e81a869] | 246 | :clone_from => 'template-ubuntu24', |
---|
[4f70c64] | 247 | :networks => [ 'vLan_742' ], |
---|
| 248 | :macs => [ "#{MACPREFIX}:02" ], |
---|
| 249 | :shell_provisioners => [], |
---|
| 250 | } |
---|
| 251 | end |
---|
| 252 | end |
---|
[f19f12b] | 253 | do_debug ("VM1_COMPONENTS: " + vm1_components.to_s) |
---|
| 254 | do_debug ("VM2_COMPONENTS: " + vm2_components.to_s) |
---|
| 255 | |
---|
| 256 | vms_loop = [ |
---|
[cf46f8b] | 257 | { "components" => vm1_components, "key" => "vm1" }, |
---|
| 258 | { "components" => vm2_components, "key" => "vm2" }, |
---|
| 259 | ] |
---|
| 260 | all_components = [ |
---|
| 261 | { "name" => "oglog", "hostname_suffix" => "-log", "script" => OGLOGSCRIPT }, |
---|
| 262 | { "name" => "ogdhcp", "hostname_suffix" => "-dhcp", "script" => OGDHCPSCRIPT }, |
---|
| 263 | { "name" => "ogboot", "hostname_suffix" => "-boot", "script" => OGBOOTSCRIPT }, |
---|
| 264 | { "name" => "ogrepo", "hostname_suffix" => "-repo", "script" => OGREPOSCRIPT }, |
---|
[f19f12b] | 265 | ] |
---|
| 266 | |
---|
[cf46f8b] | 267 | ## foreach VM, foreach OG component: edit hostname and add provisioning script |
---|
[f19f12b] | 268 | vms_loop.each do |vm| |
---|
[89a25ee] | 269 | components = vm['components'] |
---|
[cf46f8b] | 270 | key = vm['key'] |
---|
| 271 | all_components.each do |c| |
---|
| 272 | if components.include?(c['name']) then |
---|
| 273 | app_servers[key][:name] += c['hostname_suffix'] |
---|
| 274 | app_servers[key][:shell_provisioners].push (c['script']) |
---|
| 275 | end |
---|
[f19f12b] | 276 | end |
---|
[4f70c64] | 277 | end |
---|
| 278 | |
---|
[6a830177] | 279 | do_debug (app_servers) |
---|
[4f70c64] | 280 | |
---|
[0c52391] | 281 | app_servers.each do |machine,data| |
---|
| 282 | boxname = data[:name] |
---|
| 283 | config.vm.define boxname do |og| |
---|
[039b4d8] | 284 | og.vm.provider :vmware_esxi do |esxi| |
---|
| 285 | esxi.guest_name = boxname |
---|
[0c52391] | 286 | esxi.guest_memsize = data[:memsize] |
---|
[039b4d8] | 287 | esxi.esxi_username = 'root' |
---|
| 288 | esxi.esxi_password = ESXIPASSWORD |
---|
| 289 | esxi.esxi_hostname = 'esxi-jenkins.evlt.uma.es' |
---|
[0c52391] | 290 | esxi.clone_from_vm = data[:clone_from] |
---|
[039b4d8] | 291 | esxi.esxi_resource_pool = "/" |
---|
| 292 | esxi.local_allow_overwrite = 'True' |
---|
| 293 | esxi.guest_custom_vmx_settings = [['monitor.allowLegacyCPU', 'TRUE']] |
---|
| 294 | esxi.guest_storage = [ 10 ] |
---|
[0c52391] | 295 | esxi.esxi_virtual_network = data[:networks] |
---|
| 296 | esxi.guest_mac_address = data[:macs] |
---|
[039b4d8] | 297 | esxi.guest_nic_type = 'e1000' |
---|
| 298 | end |
---|
| 299 | og.vm.box = "esxi_clone/dummy" |
---|
| 300 | og.vm.hostname = boxname |
---|
[0c52391] | 301 | if data.key?(:file_provisioner) |
---|
| 302 | og.vm.provision "file", source: data[:file_provisioner][:src], destination: data[:file_provisioner][:dst] |
---|
| 303 | end |
---|
[5ad4022] | 304 | data[:shell_provisioners].each do |script| |
---|
| 305 | og.vm.provision "shell", inline: script, env: provisioners_env |
---|
| 306 | end |
---|
[039b4d8] | 307 | end |
---|
| 308 | end |
---|
[3a0f599] | 309 | end |
---|