source: installer/vagrant/Vagrantfile-esxi @ cf14a94

configure-oglivelgromero-new-oglivemainmount-efivarfsuse-local-agent-oglive
Last change on this file since cf14a94 was cf14a94, checked in by Natalia Serrano <natalia.serrano@…>, 6 months ago

refs #941 try to make installer on ESXi pick oglive/ogagent from NFS

  • Property mode set to 100644
File size: 11.1 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
59echo Setting up language and locales
60export LANG="#{LANGUAGE}.UTF-8"
61echo "LANG=\\\"$LANG\\\"" > /etc/default/locale
62echo "LANG=\\\"$LANG\\\"" >> /etc/environment
63locale-gen --lang #{LANGUAGE}
64sed -i "s/XKBLAYOUT=.*/XKBLAYOUT=\\\"${LANG%_*}\\\"/" /etc/default/keyboard
65dpkg-reconfigure -fnoninteractive console-setup
66
67
68# Exit if OpenGnsys is installed.
69[ -f /opt/opengnsys/doc/VERSION.json ] && echo "Cannot provision, OpenGnsys is already installed." && exit 1
70
71
72echo Creating a repository disk
73if [ -z "$(blkid /dev/mapper/og-images | grep ext4)" ]; then
74    pvcreate /dev/sdb
75    vgcreate og /dev/sdb
76    vgchange -ay
77    lvcreate -ay -n images -l 100%VG og
78    mkfs -t ext4 /dev/mapper/og-images
79    mkdir -p /opt/opengnsys/images
80    echo "/dev/mapper/og-images  /opt/opengnsys/images  ext4  defaults  0  0" >> /etc/fstab
81    mount -a
82fi
83
84
85if [ -f /etc/netplan/01-eth1.yaml ]; then
86    echo "Network configured, skipping"
87else
88    echo "Configuring eth1"
89    sed -i "s/##ADDRESS##/${NETPREFIX}.1/g" /tmp/01-eth1.yaml
90    mv /tmp/01-eth1.yaml /etc/netplan
91    chown root:root /etc/netplan/01-eth1.yaml
92    netplan apply
93    while ! ip address show eth0 |grep -qw inet; do
94        echo eth0 has no IPv4, waiting...
95        sleep 1
96    done
97fi
98
99
100# Download installer
101#echo Downloading https://ognproject.evlt.uma.es/gitea/opengnsys/opengnsys/raw/branch/${BRANCH}/installer/opengnsys_installer_devel_esxi.sh
102#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
103#chmod 755 opengnsys_installer_devel_esxi.sh && ./opengnsys_installer_devel_esxi.sh $BRANCH
104ls -l /vagrant/installer/
105/vagrant/installer/opengnsys_installer_devel_esxi.sh
106
107[ -e /opt/opengnsys/log/bash.log ] && mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log
108
109echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2)
110
111# Insert DHCP data.
112sed -i "/^}$/ i host modelo { hardware ethernet #{MACPREFIX}:FF; fixed-address #{NETPREFIX}.199; }" /etc/dhcp/dhcpd.conf
113for ((i=#{NCLIENTS+10}; i>10; i--)); do
114    sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf
115done
116service isc-dhcp-server restart
117
118echo Creating an aula and some clients
119SQL="INSERT INTO aulas (nombreaula, idcentro, urlfoto, grupoid, ubicacion, puestos, modomul, ipmul, pormul, velmul, router, netmask, ntp, dns, proxy, modp2p, timep2p)"\
120"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); "\
121"INSERT INTO ordenadores (nombreordenador, ip, mac, idaula, idrepositorio, idperfilhard, idmenu, idproautoexec, grupoid, router, mascara, arranque, netiface, netdriver, fotoord) VALUES "\
122"('modelo', '#{NETPREFIX}.199', REPLACE('#{MACPREFIX}FF',':',''), 1, 1, 0, 0, 0, 0, '#{NETPREFIX}.1', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif'),"
123for ((i=11; i<=#{NCLIENTS+10}; i++)); do
124    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'),"
125done
126mysql -u usuog -ppassusuog -D ogAdmBD -e "${SQL%,}"
127/opt/opengnsys/bin/setclientmode ogLiveAdmin modelo PERM
128/opt/opengnsys/bin/setclientmode ogLiveAdmin pc11 PERM
129for ((i=12; i<=#{NCLIENTS+10}; i++)); do
130    /opt/opengnsys/bin/setclientmode ogLive pc$i PERM
131done
132
133echo "Notes:"
134echo "- OpenGnsys Server URL: https://localhost:${LOCALWEBPORT}/opengnsys/"
135exit 0
136EOT
137
138
139OGDHCPSCRIPT = <<EOT
140echo in ogdhcp script
141echo -n 'hostname: '; hostname -f
142echo env vars beginning with OG:
143env |grep OG
144ip address show eth0
145echo "OGDHCP_BRANCH ($OGDHCP_BRANCH)"
146EOT
147
148
149OGBOOTSCRIPT = <<EOT
150echo in ogboot script
151echo -n 'hostname: '; hostname -f
152echo env vars beginning with OG:
153env |grep OG
154ip address show eth0
155echo "OGBOOT_BRANCH ($OGBOOT_BRANCH)"
156echo "OGSERVER_IP ($OGSERVER_IP)"
157#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
158#python3 /install.py
159EOT
160
161
162OGREPOSCRIPT = <<EOT
163echo in ogrepo script
164echo -n 'hostname: '; hostname -f
165echo env vars beginning with OG:
166env |grep OG
167ip address show eth0
168echo "OGREPO_BRANCH ($OGREPO_BRANCH)"
169EOT
170
171
172OGLOGSCRIPT = <<EOT
173echo in oglog script
174echo -n 'hostname: '; hostname -f
175echo env vars beginning with OG:
176env |grep OG
177ip address show eth0
178echo "OGLOG_BRANCH ($OGLOG_BRANCH)"
179EOT
180
181
182Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
183    require 'pp'
184
185    def do_debug(msg)
186        if ENV.has_key?("DEBUG_VAGRANT") and ENV["DEBUG_VAGRANT"] == "true" then
187            if msg.class == Array then
188                #PP.pp(msg, STDERR)        ## doesn't actually pretty print to the jenkins log
189                STDERR.puts msg.pretty_inspect
190            else
191                STDERR.puts msg
192            end
193        end
194    end
195
196    provisioners_env = {
197        "NETPREFIX"                 => NETPREFIX,
198        "BRANCH"                    => BRANCH,
199        "OGDHCP_BRANCH"             => ENV['OGDHCP_BRANCH'],
200        "OGBOOT_BRANCH"             => ENV['OGBOOT_BRANCH'],
201        "OGREPO_BRANCH"             => ENV['OGREPO_BRANCH'],
202        "OGLOG_BRANCH"              => ENV['OGLOG_BRANCH'],
203        "GITEA_TOKEN"               => GITEA_TOKEN,
204        "GITEA_USER"                => GITEA_USER,
205        "DHCPNET"                   => DHCPNET,
206        "SSH_GIT_KEY_PASS"          => SSH_GIT_KEY_PASS,
207        "LOCALWEBPORT"              => LOCALWEBPORT,
208        "DEFAULT_UDS_REST_URL"      => ENV['DEFAULT_UDS_REST_URL'],
209        "DEFAULT_UDS_AUTHENTICATOR" => ENV['DEFAULT_UDS_AUTHENTICATOR'],
210        "DEFAULT_UDS_USER"          => ENV['DEFAULT_UDS_USER'],
211        "DEFAULT_UDS_PASS"          => ENV['DEFAULT_UDS_PASS'],
212        "OGLOG_IP"                  => ENV['OGLOG_IP'],
213        "OGSERVER_IP"               => ENV['OGSERVER_IP'],
214    }
215    app_servers = {
216        'vm1' => {
217            :name               => "og-#{BRANCH_EXTRA}-server",
218            :memsize            => SERVERMEM,
219            :clone_from         => 'template-ubuntu24',
220            :networks           => [ 'vLan_742', BRANCH_EXTRA ],
221            :macs               => [ "#{MACPREFIX}:00", "#{MACPREFIX}:01" ],
222            :file_provisioner   => {
223                :src => "config/01-eth1.yaml",
224                :dst => "/tmp/",
225            },
226            :shell_provisioners => [ OGSERVERSCRIPT ],
227        },
228    }
229
230    vm1_components = vm2_components = []
231
232    if ENV.has_key?("VM1_COMPONENTS") then
233        vm1_components = ENV["VM1_COMPONENTS"].split(" ")
234    end
235
236    if ENV.has_key?("VM2_COMPONENTS") then
237        vm2_components = ENV["VM2_COMPONENTS"].split(" ")
238        if vm2_components.size > 0 then
239            app_servers['vm2'] = {
240                :name               => "og-#{BRANCH_EXTRA}",
241                :memsize            => SERVERMEM,
242                :clone_from         => 'template-ubuntu24',
243                :networks           => [ 'vLan_742' ],
244                :macs               => [ "#{MACPREFIX}:02" ],
245                :shell_provisioners => [],
246            }
247        end
248    end
249    do_debug ("VM1_COMPONENTS: " + vm1_components.to_s)
250    do_debug ("VM2_COMPONENTS: " + vm2_components.to_s)
251
252    vms_loop = [
253        { "components" => vm1_components, "key" => "vm1" },
254        { "components" => vm2_components, "key" => "vm2" },
255    ]
256    all_components = [
257        { "name" => "oglog",  "hostname_suffix" => "-log",  "script" => OGLOGSCRIPT  },
258        { "name" => "ogdhcp", "hostname_suffix" => "-dhcp", "script" => OGDHCPSCRIPT },
259        { "name" => "ogboot", "hostname_suffix" => "-boot", "script" => OGBOOTSCRIPT },
260        { "name" => "ogrepo", "hostname_suffix" => "-repo", "script" => OGREPOSCRIPT },
261    ]
262
263    ## foreach VM, foreach OG component: edit hostname and add provisioning script
264    vms_loop.each do |vm|
265        components = vm['components']
266        key = vm['key']
267        all_components.each do |c|
268            if components.include?(c['name']) then
269                app_servers[key][:name] += c['hostname_suffix']
270                app_servers[key][:shell_provisioners].push (c['script'])
271            end
272        end
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.