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
Line 
1VAGRANTFILE_API_VERSION = "2"
2ENV['VAGRANT_DEFAULT_PROVIDER'] = "vmware_esxi"
3
4BRANCH=ENV['BRANCH'] || "main"
5BRANCH_EXTRA=ENV['BRANCH_EXTRA'] || BRANCH
6
7#OGAGENTVERSION="1.4.2"
8
9LANGUAGE = "es_ES"
10ENV['LC_ALL'] = LANGUAGE + ".UTF-8"
11
12NCLIENTS = ENV['NUMBER_OF_CLIENTS']|| 4
13NCLIENTS = NCLIENTS.to_i
14
15SERVERMEM = 2048        # Minimum: 512
16CLIENTMEM = 512         # Minimum: 256
17
18MACPREFIX = ENV['OGN_MAC_PREFIX'] || '00:50:56:aa:aa'
19NETPREFIX = ENV['OGN_NET_PREFIX'] || "192.168.2"
20DHCPNET   = ENV['DHCPNET'] || "192.168.2.0"
21
22SERVERIP = "#{NETPREFIX}.10"
23
24LOCALWEBPORT = 8443
25
26ESXIPASSWORD = ENV['ESXI_PASSWORD'] || 'prompt:'
27
28GITEA_TOKEN = ENV['GITEA_TOKEN']
29GITEA_USER = ENV['GITEA_USER'] || 'unizar'
30SSH_GIT_KEY_PASS = ENV['SSH_GIT_KEY_PASS'] || ''
31
32
33OGSERVERSCRIPT = <<EOT
34echo -n 'hostname: '; hostname -f
35echo env vars beginning with OG:
36env |grep OG
37ip address show eth0
38
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
41
42echo Setting up SSH config and agent
43mkdir -p /root/.ssh/
44cp /vagrant/installer/vagrant/config/id_rsa /root/.ssh/id_rsa
45chown root:root /root/.ssh/id_rsa
46chmod 0400 /root/.ssh/id_rsa
47cp /vagrant/installer/vagrant/config/ssh_config /root/.ssh/config
48chown root:root /root/.ssh/config
49chmod 0400 /root/.ssh/config
50cp /vagrant/installer/vagrant/config/ask_pass.sh /root/ask_pass.sh
51chmod 755 /root/ask_pass.sh
52
53eval `ssh-agent`
54export DISPLAY=:0
55export SSH_ASKPASS=/root/ask_pass.sh
56ssh-add /root/.ssh/id_rsa <<< $SSH_GIT_KEY_PASS
57
58
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 --yes install locales file bsdextrautils moreutils
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
66echo Setting up language and locales
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
73
74
75# Exit if OpenGnsys is installed.
76[ -f /opt/opengnsys/doc/VERSION.json ] && echo "Cannot provision, OpenGnsys is already installed." && exit 1
77
78
79echo Creating a repository disk
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
91
92if [ -f /etc/netplan/01-eth1.yaml ]; then
93    echo "Network configured, skipping"
94else
95    echo "Configuring eth1"
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
100    while ! ip address show eth0 |grep -qw inet; do
101        echo eth0 has no IPv4, waiting...
102        sleep 1
103    done
104fi
105
106echo Available ogLive and ogagent files:
107ls -l /vagrant/installer/{ogLive,ogagentpkgs}*
108
109/vagrant/installer/opengnsys_installer_devel_esxi.sh
110
111[ -e /opt/opengnsys/log/bash.log ] && mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log
112
113echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2)
114
115# Insert DHCP data.
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
121
122echo Creating an aula and some clients
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
136
137echo "Notes:"
138echo "- OpenGnsys Server URL: https://localhost:${LOCALWEBPORT}/opengnsys/"
139exit 0
140EOT
141
142
143OGDHCPSCRIPT = <<EOT
144echo in ogdhcp script
145echo -n 'hostname: '; hostname -f
146echo env vars beginning with OG:
147env |grep OG
148ip address show eth0
149echo "OGDHCP_BRANCH ($OGDHCP_BRANCH)"
150EOT
151
152
153OGBOOTSCRIPT = <<EOT
154echo in ogboot script
155echo -n 'hostname: '; hostname -f
156echo env vars beginning with OG:
157env |grep OG
158ip address show eth0
159echo "OGBOOT_BRANCH ($OGBOOT_BRANCH)"
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
163EOT
164
165
166OGREPOSCRIPT = <<EOT
167echo in ogrepo script
168echo -n 'hostname: '; hostname -f
169echo env vars beginning with OG:
170env |grep OG
171ip address show eth0
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)"
183EOT
184
185
186Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
187    require 'pp'
188
189    def do_debug(msg)
190        if ENV.has_key?("DEBUG_VAGRANT") and ENV["DEBUG_VAGRANT"] == "true" then
191            if msg.class == Array then
192                #PP.pp(msg, STDERR)        ## doesn't actually pretty print to the jenkins log
193                STDERR.puts msg.pretty_inspect
194            else
195                STDERR.puts msg
196            end
197        end
198    end
199
200    provisioners_env = {
201        "NETPREFIX"                 => NETPREFIX,
202        "BRANCH"                    => BRANCH,
203        "OGDHCP_BRANCH"             => ENV['OGDHCP_BRANCH'],
204        "OGBOOT_BRANCH"             => ENV['OGBOOT_BRANCH'],
205        "OGREPO_BRANCH"             => ENV['OGREPO_BRANCH'],
206        "OGLOG_BRANCH"              => ENV['OGLOG_BRANCH'],
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'],
215        "DEFAULT_UDS_PASS"          => ENV['DEFAULT_UDS_PASS'],
216        "OGLOG_IP"                  => ENV['OGLOG_IP'],
217        "OGSERVER_IP"               => ENV['OGSERVER_IP'],
218    }
219    app_servers = {
220        'vm1' => {
221            :name               => "og-#{BRANCH_EXTRA}-server",
222            :memsize            => SERVERMEM,
223            :clone_from         => 'template-ubuntu24',
224            :networks           => [ 'vLan_742', BRANCH_EXTRA ],
225            :macs               => [ "#{MACPREFIX}:00", "#{MACPREFIX}:01" ],
226            :file_provisioner   => {
227                :src => "installer/vagrant/config/01-eth1.yaml",
228                :dst => "/tmp/",
229            },
230            :shell_provisioners => [ OGSERVERSCRIPT ],
231        },
232    }
233
234    vm1_components = vm2_components = []
235
236    if ENV.has_key?("VM1_COMPONENTS") then
237        vm1_components = ENV["VM1_COMPONENTS"].split(" ")
238    end
239
240    if ENV.has_key?("VM2_COMPONENTS") then
241        vm2_components = ENV["VM2_COMPONENTS"].split(" ")
242        if vm2_components.size > 0 then
243            app_servers['vm2'] = {
244                :name               => "og-#{BRANCH_EXTRA}",
245                :memsize            => SERVERMEM,
246                :clone_from         => 'template-ubuntu24',
247                :networks           => [ 'vLan_742' ],
248                :macs               => [ "#{MACPREFIX}:02" ],
249                :shell_provisioners => [],
250            }
251        end
252    end
253    do_debug ("VM1_COMPONENTS: " + vm1_components.to_s)
254    do_debug ("VM2_COMPONENTS: " + vm2_components.to_s)
255
256    vms_loop = [
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 },
265    ]
266
267    ## foreach VM, foreach OG component: edit hostname and add provisioning script
268    vms_loop.each do |vm|
269        components = vm['components']
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
276        end
277    end
278
279    do_debug (app_servers)
280
281    app_servers.each do |machine,data|
282        boxname = data[:name]
283        config.vm.define boxname do |og|
284            og.vm.provider :vmware_esxi do |esxi|
285                esxi.guest_name = boxname
286                esxi.guest_memsize = data[:memsize]
287                esxi.esxi_username = 'root'
288                esxi.esxi_password = ESXIPASSWORD
289                esxi.esxi_hostname = 'esxi-jenkins.evlt.uma.es'
290                esxi.clone_from_vm = data[:clone_from]
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 ]
295                esxi.esxi_virtual_network = data[:networks]
296                esxi.guest_mac_address = data[:macs]
297                esxi.guest_nic_type = 'e1000'
298            end
299            og.vm.box = "esxi_clone/dummy"
300            og.vm.hostname = boxname
301            if data.key?(:file_provisioner)
302                og.vm.provision "file", source: data[:file_provisioner][:src], destination: data[:file_provisioner][:dst]
303            end
304            data[:shell_provisioners].each do |script|
305                og.vm.provision "shell", inline: script, env: provisioners_env
306            end
307        end
308    end
309end
Note: See TracBrowser for help on using the repository browser.