source: installer/vagrant/Vagrantfile-esxi @ 41e910b

configure-oglivelgromero-new-oglivemainmount-efivarfsuse-local-agent-oglive
Last change on this file since 41e910b was 41e910b, checked in by Natalia Serrano <natalia.serrano@…>, 6 months ago

refs #941 add stuff that we used to have before

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