source: installer/vagrant/Vagrantfile-esxi

lgromero-new-oglive
Last change on this file was ea8a33b, checked in by lgromero <lgromero@…>, 5 months ago

refs #1202 for some reason ifdata is not installed in the machines, adds moreutils package to install it

  • Property mode set to 100644
File size: 11.0 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
[ea8a33b]60apt-get --yes install locales file bsdextrautils moreutils
[41e910b]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
[9186a75e]106echo Available ogLive and ogagent files:
107ls -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]113echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2)
[c9497e6]114
[3a0f599]115# Insert DHCP data.
[6a830177]116sed -i "/^}$/ i host modelo { hardware ethernet #{MACPREFIX}:FF; fixed-address #{NETPREFIX}.199; }" /etc/dhcp/dhcpd.conf
117for ((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
119done
120service isc-dhcp-server restart
[2e6fcee]121
[0709732]122echo Creating an aula and some clients
[6a830177]123SQL="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'),"
127for ((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'),"
129done
130mysql -u usuog -ppassusuog -D ogAdmBD -e "${SQL%,}"
131/opt/opengnsys/bin/setclientmode ogLiveAdmin modelo PERM
132/opt/opengnsys/bin/setclientmode ogLiveAdmin pc11 PERM
133for ((i=12; i<=#{NCLIENTS+10}; i++)); do
134    /opt/opengnsys/bin/setclientmode ogLive pc$i PERM
135done
[85df22be]136
[3a0f599]137echo "Notes:"
[6b2b601]138echo "- OpenGnsys Server URL: https://localhost:${LOCALWEBPORT}/opengnsys/"
[3a0f599]139exit 0
140EOT
141
[0c52391]142
[4f70c64]143OGDHCPSCRIPT = <<EOT
144echo in ogdhcp script
[a984630]145echo -n 'hostname: '; hostname -f
146echo env vars beginning with OG:
[c3e28cfe]147env |grep OG
[a984630]148ip address show eth0
[fff09f6]149echo "OGDHCP_BRANCH ($OGDHCP_BRANCH)"
[7073c13]150EOT
151
[3a0f599]152
[4f70c64]153OGBOOTSCRIPT = <<EOT
154echo in ogboot script
[a984630]155echo -n 'hostname: '; hostname -f
156echo env vars beginning with OG:
[c3e28cfe]157env |grep OG
[a984630]158ip address show eth0
[6a830177]159echo "OGBOOT_BRANCH ($OGBOOT_BRANCH)"
[9e67610]160echo "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]163EOT
[84092f8]164
[bc84890]165
[4f70c64]166OGREPOSCRIPT = <<EOT
167echo in ogrepo script
[a984630]168echo -n 'hostname: '; hostname -f
169echo env vars beginning with OG:
[c3e28cfe]170env |grep OG
[a984630]171ip address show eth0
[fff09f6]172echo "OGREPO_BRANCH ($OGREPO_BRANCH)"
173EOT
174
175
176OGLOGSCRIPT = <<EOT
177echo in oglog script
178echo -n 'hostname: '; hostname -f
179echo env vars beginning with OG:
180env |grep OG
181ip address show eth0
182echo "OGLOG_BRANCH ($OGLOG_BRANCH)"
[4f70c64]183EOT
[bc84890]184
[84092f8]185
[4f70c64]186Vagrant.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]309end
Note: See TracBrowser for help on using the repository browser.