source: installer/vagrant/Vagrantfile-esxi @ 92cab1e

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 92cab1e was 92cab1e, checked in by Natalia Serrano <natalia.serrano@…>, 11 months ago

refs #491 wait for eth0 to have an IP after netplan apply

  • Property mode set to 100644
File size: 10.7 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    while ! ip address show eth0 |grep -w inet; do
106        echo eth0 has no IPv4, waiting...
107        sleep 1
108    done
109fi
110
111
112# Download installer
113echo Downloading https://ognproject.evlt.uma.es/gitea/opengnsys/opengnsys/raw/branch/${BRANCH}/installer/opengnsys_installer_devel_esxi.sh
114curl --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
115chmod 755 opengnsys_installer_devel_esxi.sh && ./opengnsys_installer_devel_esxi.sh $BRANCH
116
117[ -e /opt/opengnsys/log/bash.log ] && mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log
118
119echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2)
120
121# Insert DHCP data.
122sed -i "/^}$/ i host modelo { hardware ethernet #{MACPREFIX}:FF; fixed-address #{NETPREFIX}.199; }" /etc/dhcp/dhcpd.conf
123for ((i=#{NCLIENTS+10}; i>10; i--)); do
124    sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf
125done
126service isc-dhcp-server restart
127
128#echo Creating an aula and some clients
129SQL="INSERT INTO aulas (nombreaula, idcentro, urlfoto, grupoid, ubicacion, puestos, modomul, ipmul, pormul, velmul, router, netmask, ntp, dns, proxy, modp2p, timep2p)"\
130"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); "\
131"INSERT INTO ordenadores (nombreordenador, ip, mac, idaula, idrepositorio, idperfilhard, idmenu, idproautoexec, grupoid, router, mascara, arranque, netiface, netdriver, fotoord) VALUES "\
132"('modelo', '#{NETPREFIX}.199', REPLACE('#{MACPREFIX}FF',':',''), 1, 1, 0, 0, 0, 0, '#{NETPREFIX}.1', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif'),"
133for ((i=11; i<=#{NCLIENTS+10}; i++)); do
134    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'),"
135done
136mysql -u usuog -ppassusuog -D ogAdmBD -e "${SQL%,}"
137/opt/opengnsys/bin/setclientmode ogLiveAdmin modelo PERM
138/opt/opengnsys/bin/setclientmode ogLiveAdmin pc11 PERM
139for ((i=12; i<=#{NCLIENTS+10}; i++)); do
140    /opt/opengnsys/bin/setclientmode ogLive pc$i PERM
141done
142
143echo "Notes:"
144echo "- OpenGnsys Server URL: https://localhost:${LOCALWEBPORT}/opengnsys/"
145exit 0
146EOT
147
148
149OGDHCPSCRIPT = <<EOT
150echo in ogdhcp script
151echo -n 'hostname: '; hostname -f
152echo env vars beginning with OG:
153env |grep OG
154ip address show eth0
155EOT
156
157
158OGBOOTSCRIPT = <<EOT
159echo in ogboot script
160echo -n 'hostname: '; hostname -f
161echo env vars beginning with OG:
162env |grep OG
163ip address show eth0
164echo "OGBOOT_BRANCH ($OGBOOT_BRANCH)"
165EOT
166
167
168OGREPOSCRIPT = <<EOT
169echo in ogrepo script
170echo -n 'hostname: '; hostname -f
171echo env vars beginning with OG:
172env |grep OG
173ip address show eth0
174EOT
175
176
177Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
178    require 'pp'
179
180    def do_debug(msg)
181        if ENV.has_key?("DEBUG_VAGRANT") and ENV["DEBUG_VAGRANT"] == "true" then
182            if msg.class == Array then
183                #PP.pp(msg, STDERR)        ## doesn't actually pretty print to the jenkins log
184                STDERR.puts msg.pretty_inspect
185            else
186                STDERR.puts msg
187            end
188        end
189    end
190
191    provisioners_env = {
192        "NETPREFIX"                 => NETPREFIX,
193        "BRANCH"                    => BRANCH,
194        "OGBOOT_BRANCH"             => ENV['OGBOOT_BRANCH'],
195        "GITEA_TOKEN"               => GITEA_TOKEN,
196        "GITEA_USER"                => GITEA_USER,
197        "DHCPNET"                   => DHCPNET,
198        "SSH_GIT_KEY_PASS"          => SSH_GIT_KEY_PASS,
199        "LOCALWEBPORT"              => LOCALWEBPORT,
200        "DEFAULT_UDS_REST_URL"      => ENV['DEFAULT_UDS_REST_URL'],
201        "DEFAULT_UDS_AUTHENTICATOR" => ENV['DEFAULT_UDS_AUTHENTICATOR'],
202        "DEFAULT_UDS_USER"          => ENV['DEFAULT_UDS_USER'],
203        "DEFAULT_UDS_PASS"          => ENV['DEFAULT_UDS_PASS'],
204        "OGLOG_IP"                  => ENV['OGLOG_IP'],
205        "OGSERVER_IP"               => ENV['OGSERVER_IP'],
206    }
207    app_servers = {
208        'vm1' => {
209            :name               => "og-#{BRANCH_EXTRA}-server",
210            :memsize            => SERVERMEM,
211            :clone_from         => 'Ubuntu-18-template-image',
212            :networks           => [ 'vLan_742', BRANCH_EXTRA ],
213            :macs               => [ "#{MACPREFIX}:00", "#{MACPREFIX}:01" ],
214            :file_provisioner   => {
215                :src => "config/01-eth1.yaml",
216                :dst => "/tmp/",
217            },
218            :shell_provisioners => [ OGSERVERSCRIPT ],
219        },
220    }
221
222    vm1 = vm2 = []
223
224    if ENV.has_key?("VM1_COMPONENTS") then
225        vm1 = ENV["VM1_COMPONENTS"].split(" ")
226    end
227
228    if ENV.has_key?("VM2_COMPONENTS") then
229        vm2 = ENV["VM2_COMPONENTS"].split(" ")
230        if vm2.size > 0 then
231            app_servers['vm2'] = {
232                :name               => "og-#{BRANCH_EXTRA}",
233                :memsize            => SERVERMEM,
234                :clone_from         => 'Ubuntu-18-template-image',
235                :networks           => [ 'vLan_742' ],
236                :macs               => [ "#{MACPREFIX}:02" ],
237                :shell_provisioners => [],
238            }
239        end
240    end
241    do_debug ("VM1_COMPONENTS: " + vm1.to_s)
242    do_debug ("VM2_COMPONENTS: " + vm2.to_s)
243
244    if vm1.include?("oglog") then
245        app_servers['vm1'][:name] += '-log'
246        app_servers['vm1'][:shell_provisioners].push (OGLOGSCRIPT)
247    end
248    if vm1.include?("ogdhcp") then
249        app_servers['vm1'][:name] += '-dhcp'
250        app_servers['vm1'][:shell_provisioners].push (OGDHCPSCRIPT)
251    end
252    if vm1.include?("ogboot") then
253        app_servers['vm1'][:name] += '-boot'
254        app_servers['vm1'][:shell_provisioners].push (OGBOOTSCRIPT)
255    end
256    if vm1.include?("ogrepo") then
257        app_servers['vm1'][:name] += '-repo'
258        app_servers['vm1'][:shell_provisioners].push (OGREPOSCRIPT)
259    end
260
261    if vm2.include?("oglog") then
262        app_servers['vm2'][:name] += '-log'
263        app_servers['vm2'][:shell_provisioners].push (OGLOGSCRIPT)
264    end
265    if vm2.include?("ogdhcp") then
266        app_servers['vm2'][:name] += '-dhcp'
267        app_servers['vm2'][:shell_provisioners].push (OGDHCPSCRIPT)
268    end
269    if vm2.include?("ogboot") then
270        app_servers['vm2'][:name] += '-boot'
271        app_servers['vm2'][:shell_provisioners].push (OGBOOTSCRIPT)
272    end
273    if vm2.include?("ogrepo") then
274        app_servers['vm2'][:name] += '-repo'
275        app_servers['vm2'][:shell_provisioners].push (OGREPOSCRIPT)
276    end
277
278    do_debug (app_servers)
279
280    app_servers.each do |machine,data|
281        boxname = data[:name]
282        config.vm.define boxname do |og|
283            og.vm.provider :vmware_esxi do |esxi|
284                esxi.guest_name = boxname
285                esxi.guest_memsize = data[:memsize]
286                esxi.esxi_username = 'root'
287                esxi.esxi_password = ESXIPASSWORD
288                esxi.esxi_hostname = 'esxi-jenkins.evlt.uma.es'
289                esxi.clone_from_vm = data[:clone_from]
290                esxi.esxi_resource_pool = "/"
291                esxi.local_allow_overwrite = 'True'
292                esxi.guest_custom_vmx_settings = [['monitor.allowLegacyCPU', 'TRUE']]
293                esxi.guest_storage = [ 10 ]
294                esxi.esxi_virtual_network = data[:networks]
295                esxi.guest_mac_address = data[:macs]
296                esxi.guest_nic_type = 'e1000'
297            end
298            og.vm.box = "esxi_clone/dummy"
299            og.vm.hostname = boxname
300            if data.key?(:file_provisioner)
301                og.vm.provision "file", source: data[:file_provisioner][:src], destination: data[:file_provisioner][:dst]
302            end
303            data[:shell_provisioners].each do |script|
304                og.vm.provision "shell", inline: script, env: provisioners_env
305            end
306        end
307    end
308end
Note: See TracBrowser for help on using the repository browser.