source: installer/vagrant/Vagrantfile-esxi @ aaa63f4

configure-oglivelgromero-new-oglivemainmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineoglive-ipv6test-python-scriptsticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacion
Last change on this file since aaa63f4 was aaa63f4, checked in by Natalia Serrano <natalia.serrano@…>, 11 months ago

refs #491 curl can now be more verbose, also retry curls

  • Property mode set to 100644
File size: 10.6 KB
Line 
1VAGRANTFILE_API_VERSION = "2"
2ENV['VAGRANT_DEFAULT_PROVIDER'] = "vmware_esxi"
3
4BRANCH=ENV['BRANCH'] || "main"
5BRANCH_EXTRA=ENV['BRANCH_EXTRA'] || BRANCH
6
7OGAGENTVERSION="1.1.2"
8
9LANGUAGE = "es_ES"
10ENV['LC_ALL'] = LANGUAGE + ".UTF-8"
11
12NCLIENTS = ENV['NUMBER_OF_CLIENTS']|| 4
13NCLIENTS = NCLIENTS.to_i
14
15#REPODISK = "ogRepo.vdi"
16#REPOSIZE = 50
17
18SERVERMEM = 2048        # Minimum: 512
19CLIENTMEM = 512         # Minimum: 256
20
21MACPREFIX = ENV['OGN_MAC_PREFIX'] || '00:50:56:aa:aa'
22NETPREFIX = ENV['OGN_NET_PREFIX'] || "192.168.2"
23DHCPNET   = ENV['DHCPNET'] || "192.168.2.0"
24
25SERVERIP = "#{NETPREFIX}.10"
26
27LOCALWEBPORT = 8443
28
29ESXIPASSWORD = ENV['ESXI_PASSWORD'] || 'prompt:'
30
31GITEA_TOKEN = ENV['GITEA_TOKEN']
32GITEA_USER = ENV['GITEA_USER'] || 'unizar'
33SSH_GIT_KEY_PASS = ENV['SSH_GIT_KEY_PASS'] || ''
34
35
36OGLOGSCRIPT = <<EOT
37echo in oglog script
38echo -n 'hostname: '; hostname -f
39echo env vars beginning with OG:
40env |grep OG
41ip address show eth0
42EOT
43
44
45OGSERVERSCRIPT = <<EOT
46echo -n 'hostname: '; hostname -f
47echo env vars beginning with OG:
48env |grep OG
49ip address show eth0
50
51# Fix problem with gitea host
52grep -q '^150\.214\.58\.246' /etc/hosts || echo "150.214.58.246 ognproject.evlt.uma.es" >> /etc/hosts
53
54echo Setting up SSH config and agent
55mkdir -p /root/.ssh/
56cp /vagrant/config/id_rsa /root/.ssh/id_rsa
57chown root:root /root/.ssh/id_rsa
58chmod 0400 /root/.ssh/id_rsa
59cp /vagrant/config/ssh_config /root/.ssh/config
60chown root:root /root/.ssh/config
61chmod 0400 /root/.ssh/config
62cp /vagrant/config/ask_pass.sh /root/ask_pass.sh
63chmod 755 /root/ask_pass.sh
64
65eval `ssh-agent`
66export DISPLAY=:0
67export SSH_ASKPASS=/root/ask_pass.sh
68ssh-add /root/.ssh/id_rsa <<< $SSH_GIT_KEY_PASS
69
70
71echo Setting up language and locales
72export LANG="#{LANGUAGE}.UTF-8"
73echo "LANG=\\\"$LANG\\\"" > /etc/default/locale
74echo "LANG=\\\"$LANG\\\"" >> /etc/environment
75locale-gen --lang #{LANGUAGE}
76sed -i "s/XKBLAYOUT=.*/XKBLAYOUT=\\\"${LANG%_*}\\\"/" /etc/default/keyboard
77dpkg-reconfigure -fnoninteractive console-setup
78
79
80# Exit if OpenGnsys is installed.
81[ -f /opt/opengnsys/doc/VERSION.json ] && echo "Cannot provision, OpenGnsys is already installed." && exit 1
82
83
84echo Creating a repository disk
85if [ -z "$(blkid /dev/mapper/og-images | grep ext4)" ]; then
86    pvcreate /dev/sdb
87    vgcreate og /dev/sdb
88    vgchange -ay
89    lvcreate -ay -n images -l 100%VG og
90    mkfs -t ext4 /dev/mapper/og-images
91    mkdir -p /opt/opengnsys/images
92    echo "/dev/mapper/og-images  /opt/opengnsys/images  ext4  defaults  0  0" >> /etc/fstab
93    mount -a
94fi
95
96
97if [ -f /etc/netplan/01-eth1.yaml ]; then
98    echo "Network configured, skipping"
99else
100    echo "Configuring eth1"
101    sed -i "s/##ADDRESS##/${NETPREFIX}.1/g" /tmp/01-eth1.yaml
102    mv /tmp/01-eth1.yaml /etc/netplan
103    chown root:root /etc/netplan/01-eth1.yaml
104    netplan apply
105    sleep 1
106fi
107
108
109# Download installer
110echo Downloading https://ognproject.evlt.uma.es/gitea/opengnsys/opengnsys/raw/branch/${BRANCH}/installer/opengnsys_installer_devel_esxi.sh
111curl --retry 5 --stderr - --fail --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
112chmod 755 opengnsys_installer_devel_esxi.sh && ./opengnsys_installer_devel_esxi.sh $BRANCH
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
125#echo 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
152EOT
153
154
155OGBOOTSCRIPT = <<EOT
156echo in ogboot script
157echo -n 'hostname: '; hostname -f
158echo env vars beginning with OG:
159env |grep OG
160ip address show eth0
161echo "OGBOOT_BRANCH ($OGBOOT_BRANCH)"
162EOT
163
164
165OGREPOSCRIPT = <<EOT
166echo in ogrepo script
167echo -n 'hostname: '; hostname -f
168echo env vars beginning with OG:
169env |grep OG
170ip address show eth0
171EOT
172
173
174Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
175    require 'pp'
176
177    def do_debug(msg)
178        if ENV.has_key?("DEBUG_VAGRANT") and ENV["DEBUG_VAGRANT"] == "true" then
179            if msg.class == Array then
180                #PP.pp(msg, STDERR)        ## doesn't actually pretty print to the jenkins log
181                STDERR.puts msg.pretty_inspect
182            else
183                STDERR.puts msg
184            end
185        end
186    end
187
188    provisioners_env = {
189        "NETPREFIX"                 => NETPREFIX,
190        "BRANCH"                    => BRANCH,
191        "OGBOOT_BRANCH"             => ENV['OGBOOT_BRANCH'],
192        "GITEA_TOKEN"               => GITEA_TOKEN,
193        "GITEA_USER"                => GITEA_USER,
194        "DHCPNET"                   => DHCPNET,
195        "SSH_GIT_KEY_PASS"          => SSH_GIT_KEY_PASS,
196        "LOCALWEBPORT"              => LOCALWEBPORT,
197        "DEFAULT_UDS_REST_URL"      => ENV['DEFAULT_UDS_REST_URL'],
198        "DEFAULT_UDS_AUTHENTICATOR" => ENV['DEFAULT_UDS_AUTHENTICATOR'],
199        "DEFAULT_UDS_USER"          => ENV['DEFAULT_UDS_USER'],
200        "DEFAULT_UDS_PASS"          => ENV['DEFAULT_UDS_PASS'],
201        "OGLOG_IP"                  => ENV['OGLOG_IP'],
202        "OGSERVER_IP"               => ENV['OGSERVER_IP'],
203    }
204    app_servers = {
205        'vm1' => {
206            :name               => "og-#{BRANCH_EXTRA}-server",
207            :memsize            => SERVERMEM,
208            :clone_from         => 'Ubuntu-18-template-image',
209            :networks           => [ 'vLan_742', BRANCH_EXTRA ],
210            :macs               => [ "#{MACPREFIX}:00", "#{MACPREFIX}:01" ],
211            :file_provisioner   => {
212                :src => "config/01-eth1.yaml",
213                :dst => "/tmp/",
214            },
215            :shell_provisioners => [ OGSERVERSCRIPT ],
216        },
217    }
218
219    vm1 = vm2 = []
220
221    if ENV.has_key?("VM1_COMPONENTS") then
222        vm1 = ENV["VM1_COMPONENTS"].split(" ")
223    end
224
225    if ENV.has_key?("VM2_COMPONENTS") then
226        vm2 = ENV["VM2_COMPONENTS"].split(" ")
227        if vm2.size > 0 then
228            app_servers['vm2'] = {
229                :name               => "og-#{BRANCH_EXTRA}",
230                :memsize            => SERVERMEM,
231                :clone_from         => 'Ubuntu-18-template-image',
232                :networks           => [ 'vLan_742' ],
233                :macs               => [ "#{MACPREFIX}:02" ],
234                :shell_provisioners => [],
235            }
236        end
237    end
238    do_debug ("VM1_COMPONENTS: " + vm1.to_s)
239    do_debug ("VM2_COMPONENTS: " + vm2.to_s)
240
241    if vm1.include?("oglog") then
242        app_servers['vm1'][:name] += '-log'
243        app_servers['vm1'][:shell_provisioners].push (OGLOGSCRIPT)
244    end
245    if vm1.include?("ogdhcp") then
246        app_servers['vm1'][:name] += '-dhcp'
247        app_servers['vm1'][:shell_provisioners].push (OGDHCPSCRIPT)
248    end
249    if vm1.include?("ogboot") then
250        app_servers['vm1'][:name] += '-boot'
251        app_servers['vm1'][:shell_provisioners].push (OGBOOTSCRIPT)
252    end
253    if vm1.include?("ogrepo") then
254        app_servers['vm1'][:name] += '-repo'
255        app_servers['vm1'][:shell_provisioners].push (OGREPOSCRIPT)
256    end
257
258    if vm2.include?("oglog") then
259        app_servers['vm2'][:name] += '-log'
260        app_servers['vm2'][:shell_provisioners].push (OGLOGSCRIPT)
261    end
262    if vm2.include?("ogdhcp") then
263        app_servers['vm2'][:name] += '-dhcp'
264        app_servers['vm2'][:shell_provisioners].push (OGDHCPSCRIPT)
265    end
266    if vm2.include?("ogboot") then
267        app_servers['vm2'][:name] += '-boot'
268        app_servers['vm2'][:shell_provisioners].push (OGBOOTSCRIPT)
269    end
270    if vm2.include?("ogrepo") then
271        app_servers['vm2'][:name] += '-repo'
272        app_servers['vm2'][:shell_provisioners].push (OGREPOSCRIPT)
273    end
274
275    do_debug (app_servers)
276
277    app_servers.each do |machine,data|
278        boxname = data[:name]
279        config.vm.define boxname do |og|
280            og.vm.provider :vmware_esxi do |esxi|
281                esxi.guest_name = boxname
282                esxi.guest_memsize = data[:memsize]
283                esxi.esxi_username = 'root'
284                esxi.esxi_password = ESXIPASSWORD
285                esxi.esxi_hostname = 'esxi-jenkins.evlt.uma.es'
286                esxi.clone_from_vm = data[:clone_from]
287                esxi.esxi_resource_pool = "/"
288                esxi.local_allow_overwrite = 'True'
289                esxi.guest_custom_vmx_settings = [['monitor.allowLegacyCPU', 'TRUE']]
290                esxi.guest_storage = [ 10 ]
291                esxi.esxi_virtual_network = data[:networks]
292                esxi.guest_mac_address = data[:macs]
293                esxi.guest_nic_type = 'e1000'
294            end
295            og.vm.box = "esxi_clone/dummy"
296            og.vm.hostname = boxname
297            if data.key?(:file_provisioner)
298                og.vm.provision "file", source: data[:file_provisioner][:src], destination: data[:file_provisioner][:dst]
299            end
300            data[:shell_provisioners].each do |script|
301                og.vm.provision "shell", inline: script, env: provisioners_env
302            end
303        end
304    end
305end
Note: See TracBrowser for help on using the repository browser.