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
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 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
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
106
107# Download installer
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
113
114[ -e /opt/opengnsys/log/bash.log ] && mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log
115
116echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2)
117
118# Insert DHCP data.
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
124
125echo Creating an aula and some clients
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
139
140echo "Notes:"
141echo "- OpenGnsys Server URL: https://localhost:${LOCALWEBPORT}/opengnsys/"
142exit 0
143EOT
144
145
146OGDHCPSCRIPT = <<EOT
147echo in ogdhcp script
148echo -n 'hostname: '; hostname -f
149echo env vars beginning with OG:
150env |grep OG
151ip address show eth0
152echo "OGDHCP_BRANCH ($OGDHCP_BRANCH)"
153EOT
154
155
156OGBOOTSCRIPT = <<EOT
157echo in ogboot script
158echo -n 'hostname: '; hostname -f
159echo env vars beginning with OG:
160env |grep OG
161ip address show eth0
162echo "OGBOOT_BRANCH ($OGBOOT_BRANCH)"
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
166EOT
167
168
169OGREPOSCRIPT = <<EOT
170echo in ogrepo script
171echo -n 'hostname: '; hostname -f
172echo env vars beginning with OG:
173env |grep OG
174ip address show eth0
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)"
186EOT
187
188
189Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
190    require 'pp'
191
192    def do_debug(msg)
193        if ENV.has_key?("DEBUG_VAGRANT") and ENV["DEBUG_VAGRANT"] == "true" then
194            if msg.class == Array then
195                #PP.pp(msg, STDERR)        ## doesn't actually pretty print to the jenkins log
196                STDERR.puts msg.pretty_inspect
197            else
198                STDERR.puts msg
199            end
200        end
201    end
202
203    provisioners_env = {
204        "NETPREFIX"                 => NETPREFIX,
205        "BRANCH"                    => BRANCH,
206        "OGDHCP_BRANCH"             => ENV['OGDHCP_BRANCH'],
207        "OGBOOT_BRANCH"             => ENV['OGBOOT_BRANCH'],
208        "OGREPO_BRANCH"             => ENV['OGREPO_BRANCH'],
209        "OGLOG_BRANCH"              => ENV['OGLOG_BRANCH'],
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'],
218        "DEFAULT_UDS_PASS"          => ENV['DEFAULT_UDS_PASS'],
219        "OGLOG_IP"                  => ENV['OGLOG_IP'],
220        "OGSERVER_IP"               => ENV['OGSERVER_IP'],
221    }
222    app_servers = {
223        'vm1' => {
224            :name               => "og-#{BRANCH_EXTRA}-server",
225            :memsize            => SERVERMEM,
226            :clone_from         => 'template-ubuntu24',
227            :networks           => [ 'vLan_742', BRANCH_EXTRA ],
228            :macs               => [ "#{MACPREFIX}:00", "#{MACPREFIX}:01" ],
229            :file_provisioner   => {
230                :src => "installer/vagrant/config/01-eth1.yaml",
231                :dst => "/tmp/",
232            },
233            :shell_provisioners => [ OGSERVERSCRIPT ],
234        },
235    }
236
237    vm1_components = vm2_components = []
238
239    if ENV.has_key?("VM1_COMPONENTS") then
240        vm1_components = ENV["VM1_COMPONENTS"].split(" ")
241    end
242
243    if ENV.has_key?("VM2_COMPONENTS") then
244        vm2_components = ENV["VM2_COMPONENTS"].split(" ")
245        if vm2_components.size > 0 then
246            app_servers['vm2'] = {
247                :name               => "og-#{BRANCH_EXTRA}",
248                :memsize            => SERVERMEM,
249                :clone_from         => 'template-ubuntu24',
250                :networks           => [ 'vLan_742' ],
251                :macs               => [ "#{MACPREFIX}:02" ],
252                :shell_provisioners => [],
253            }
254        end
255    end
256    do_debug ("VM1_COMPONENTS: " + vm1_components.to_s)
257    do_debug ("VM2_COMPONENTS: " + vm2_components.to_s)
258
259    vms_loop = [
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 },
268    ]
269
270    ## foreach VM, foreach OG component: edit hostname and add provisioning script
271    vms_loop.each do |vm|
272        components = vm['components']
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
279        end
280    end
281
282    do_debug (app_servers)
283
284    app_servers.each do |machine,data|
285        boxname = data[:name]
286        config.vm.define boxname do |og|
287            og.vm.provider :vmware_esxi do |esxi|
288                esxi.guest_name = boxname
289                esxi.guest_memsize = data[:memsize]
290                esxi.esxi_username = 'root'
291                esxi.esxi_password = ESXIPASSWORD
292                esxi.esxi_hostname = 'esxi-jenkins.evlt.uma.es'
293                esxi.clone_from_vm = data[:clone_from]
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 ]
298                esxi.esxi_virtual_network = data[:networks]
299                esxi.guest_mac_address = data[:macs]
300                esxi.guest_nic_type = 'e1000'
301            end
302            og.vm.box = "esxi_clone/dummy"
303            og.vm.hostname = boxname
304            if data.key?(:file_provisioner)
305                og.vm.provision "file", source: data[:file_provisioner][:src], destination: data[:file_provisioner][:dst]
306            end
307            data[:shell_provisioners].each do |script|
308                og.vm.provision "shell", inline: script, env: provisioners_env
309            end
310        end
311    end
312end
Note: See TracBrowser for help on using the repository browser.