source: installer/vagrant/Vagrantfile-esxi @ 267fa3c

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

refs #941 fix path to file provisioner

  • Property mode set to 100644
File size: 11.1 KB
RevLine 
[3a0f599]1VAGRANTFILE_API_VERSION = "2"
2ENV['VAGRANT_DEFAULT_PROVIDER'] = "vmware_esxi"
[bc84890]3
[85df22be]4BRANCH=ENV['BRANCH'] || "main"
5BRANCH_EXTRA=ENV['BRANCH_EXTRA'] || BRANCH
[bc84890]6
[cf14a94]7#OGAGENTVERSION="1.4.2"
[bc84890]8
[3a0f599]9LANGUAGE = "es_ES"
10ENV['LC_ALL'] = LANGUAGE + ".UTF-8"
[bc84890]11
[a8044f7]12NCLIENTS = ENV['NUMBER_OF_CLIENTS']|| 4
[915580e]13NCLIENTS = NCLIENTS.to_i
[bc84890]14
[3a0f599]15SERVERMEM = 2048        # Minimum: 512
16CLIENTMEM = 512         # Minimum: 256
[bc84890]17
[0fe1fb95]18MACPREFIX = ENV['OGN_MAC_PREFIX'] || '00:50:56:aa:aa'
[6a65c2d]19NETPREFIX = ENV['OGN_NET_PREFIX'] || "192.168.2"
[f43bbbd]20DHCPNET   = ENV['DHCPNET'] || "192.168.2.0"
[bc84890]21
[3a0f599]22SERVERIP = "#{NETPREFIX}.10"
[bc84890]23
[3a0f599]24LOCALWEBPORT = 8443
[bc84890]25
[1f22729]26ESXIPASSWORD = ENV['ESXI_PASSWORD'] || 'prompt:'
[3a0f599]27
[c5afb54]28GITEA_TOKEN = ENV['GITEA_TOKEN']
29GITEA_USER = ENV['GITEA_USER'] || 'unizar'
[bf3f1ed]30SSH_GIT_KEY_PASS = ENV['SSH_GIT_KEY_PASS'] || ''
[c5afb54]31
[4fa8ce3]32
[3a0f599]33OGSERVERSCRIPT = <<EOT
[6a830177]34echo -n 'hostname: '; hostname -f
35echo env vars beginning with OG:
36env |grep OG
37ip address show eth0
38
[a8044f7]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
[c0b4f96]41
[85df22be]42echo Setting up SSH config and agent
[c9497e6]43mkdir -p /root/.ssh/
[cf14a94]44cp /vagrant/installer/vagrant/config/id_rsa /root/.ssh/id_rsa
[c9497e6]45chown root:root /root/.ssh/id_rsa
[a8044f7]46chmod 0400 /root/.ssh/id_rsa
[cf14a94]47cp /vagrant/installer/vagrant/config/ssh_config /root/.ssh/config
[c9497e6]48chown root:root /root/.ssh/config
49chmod 0400 /root/.ssh/config
[cf14a94]50cp /vagrant/installer/vagrant/config/ask_pass.sh /root/ask_pass.sh
[a8044f7]51chmod 755 /root/ask_pass.sh
[692e9417]52
[a8044f7]53eval `ssh-agent`
54export DISPLAY=:0
[692e9417]55export SSH_ASKPASS=/root/ask_pass.sh
[bf3f1ed]56ssh-add /root/.ssh/id_rsa <<< $SSH_GIT_KEY_PASS
[692e9417]57
[787ba5b]58
[85df22be]59echo Setting up language and locales
[c9497e6]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
[787ba5b]66
[85df22be]67
[3a0f599]68# Exit if OpenGnsys is installed.
[c9497e6]69[ -f /opt/opengnsys/doc/VERSION.json ] && echo "Cannot provision, OpenGnsys is already installed." && exit 1
70
[85df22be]71
72echo Creating a repository disk
[c9497e6]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
[85df22be]84
[c9497e6]85if [ -f /etc/netplan/01-eth1.yaml ]; then
[85df22be]86    echo "Network configured, skipping"
[c9497e6]87else
[85df22be]88    echo "Configuring eth1"
[c9497e6]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
[9d0f5c5]93    while ! ip address show eth0 |grep -qw inet; do
[92cab1e]94        echo eth0 has no IPv4, waiting...
95        sleep 1
96    done
[c9497e6]97fi
[787ba5b]98
[726f7c0]99
[a8044f7]100# Download installer
[cf14a94]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
[e202670]106
[6a830177]107[ -e /opt/opengnsys/log/bash.log ] && mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log
[6b2b601]108
[6a830177]109echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2)
[c9497e6]110
[3a0f599]111# Insert DHCP data.
[6a830177]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
[2e6fcee]117
[0709732]118echo Creating an aula and some clients
[6a830177]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
[85df22be]132
[3a0f599]133echo "Notes:"
[6b2b601]134echo "- OpenGnsys Server URL: https://localhost:${LOCALWEBPORT}/opengnsys/"
[3a0f599]135exit 0
136EOT
137
[0c52391]138
[4f70c64]139OGDHCPSCRIPT = <<EOT
140echo in ogdhcp script
[a984630]141echo -n 'hostname: '; hostname -f
142echo env vars beginning with OG:
[c3e28cfe]143env |grep OG
[a984630]144ip address show eth0
[fff09f6]145echo "OGDHCP_BRANCH ($OGDHCP_BRANCH)"
[7073c13]146EOT
147
[3a0f599]148
[4f70c64]149OGBOOTSCRIPT = <<EOT
150echo in ogboot script
[a984630]151echo -n 'hostname: '; hostname -f
152echo env vars beginning with OG:
[c3e28cfe]153env |grep OG
[a984630]154ip address show eth0
[6a830177]155echo "OGBOOT_BRANCH ($OGBOOT_BRANCH)"
[9e67610]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
[4f70c64]159EOT
[84092f8]160
[bc84890]161
[4f70c64]162OGREPOSCRIPT = <<EOT
163echo in ogrepo script
[a984630]164echo -n 'hostname: '; hostname -f
165echo env vars beginning with OG:
[c3e28cfe]166env |grep OG
[a984630]167ip address show eth0
[fff09f6]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)"
[4f70c64]179EOT
[bc84890]180
[84092f8]181
[4f70c64]182Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
[ea215a9]183    require 'pp'
[86d3587]184
185    def do_debug(msg)
186        if ENV.has_key?("DEBUG_VAGRANT") and ENV["DEBUG_VAGRANT"] == "true" then
[9ffa6b4]187            if msg.class == Array then
[c3e28cfe]188                #PP.pp(msg, STDERR)        ## doesn't actually pretty print to the jenkins log
189                STDERR.puts msg.pretty_inspect
[9ffa6b4]190            else
191                STDERR.puts msg
[86d3587]192            end
193        end
[ea215a9]194    end
195
[5ad4022]196    provisioners_env = {
197        "NETPREFIX"                 => NETPREFIX,
198        "BRANCH"                    => BRANCH,
[fff09f6]199        "OGDHCP_BRANCH"             => ENV['OGDHCP_BRANCH'],
[6a830177]200        "OGBOOT_BRANCH"             => ENV['OGBOOT_BRANCH'],
[fff09f6]201        "OGREPO_BRANCH"             => ENV['OGREPO_BRANCH'],
202        "OGLOG_BRANCH"              => ENV['OGLOG_BRANCH'],
[5ad4022]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'],
[8c1f4cf]211        "DEFAULT_UDS_PASS"          => ENV['DEFAULT_UDS_PASS'],
[a984630]212        "OGLOG_IP"                  => ENV['OGLOG_IP'],
[8c1f4cf]213        "OGSERVER_IP"               => ENV['OGSERVER_IP'],
[5ad4022]214    }
[039b4d8]215    app_servers = {
[4fa8ce3]216        'vm1' => {
[6a830177]217            :name               => "og-#{BRANCH_EXTRA}-server",
[5ad4022]218            :memsize            => SERVERMEM,
[7e81a869]219            :clone_from         => 'template-ubuntu24',
[5ad4022]220            :networks           => [ 'vLan_742', BRANCH_EXTRA ],
221            :macs               => [ "#{MACPREFIX}:00", "#{MACPREFIX}:01" ],
222            :file_provisioner   => {
[267fa3c]223                :src => "installer/vagrant/config/01-eth1.yaml",
[0c52391]224                :dst => "/tmp/",
225            },
[5ad4022]226            :shell_provisioners => [ OGSERVERSCRIPT ],
[7073c13]227        },
[edae476]228    }
[4f70c64]229
[f19f12b]230    vm1_components = vm2_components = []
[4f70c64]231
232    if ENV.has_key?("VM1_COMPONENTS") then
[f19f12b]233        vm1_components = ENV["VM1_COMPONENTS"].split(" ")
[4f70c64]234    end
235
236    if ENV.has_key?("VM2_COMPONENTS") then
[f19f12b]237        vm2_components = ENV["VM2_COMPONENTS"].split(" ")
238        if vm2_components.size > 0 then
[4f70c64]239            app_servers['vm2'] = {
[c3e28cfe]240                :name               => "og-#{BRANCH_EXTRA}",
[4f70c64]241                :memsize            => SERVERMEM,
[7e81a869]242                :clone_from         => 'template-ubuntu24',
[4f70c64]243                :networks           => [ 'vLan_742' ],
244                :macs               => [ "#{MACPREFIX}:02" ],
245                :shell_provisioners => [],
246            }
247        end
248    end
[f19f12b]249    do_debug ("VM1_COMPONENTS: " + vm1_components.to_s)
250    do_debug ("VM2_COMPONENTS: " + vm2_components.to_s)
251
252    vms_loop = [
[cf46f8b]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 },
[f19f12b]261    ]
262
[cf46f8b]263    ## foreach VM, foreach OG component: edit hostname and add provisioning script
[f19f12b]264    vms_loop.each do |vm|
[89a25ee]265        components = vm['components']
[cf46f8b]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
[f19f12b]272        end
[4f70c64]273    end
274
[6a830177]275    do_debug (app_servers)
[4f70c64]276
[0c52391]277    app_servers.each do |machine,data|
278        boxname = data[:name]
279        config.vm.define boxname do |og|
[039b4d8]280            og.vm.provider :vmware_esxi do |esxi|
281                esxi.guest_name = boxname
[0c52391]282                esxi.guest_memsize = data[:memsize]
[039b4d8]283                esxi.esxi_username = 'root'
284                esxi.esxi_password = ESXIPASSWORD
285                esxi.esxi_hostname = 'esxi-jenkins.evlt.uma.es'
[0c52391]286                esxi.clone_from_vm = data[:clone_from]
[039b4d8]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 ]
[0c52391]291                esxi.esxi_virtual_network = data[:networks]
292                esxi.guest_mac_address = data[:macs]
[039b4d8]293                esxi.guest_nic_type = 'e1000'
294            end
295            og.vm.box = "esxi_clone/dummy"
296            og.vm.hostname = boxname
[0c52391]297            if data.key?(:file_provisioner)
298                og.vm.provision "file", source: data[:file_provisioner][:src], destination: data[:file_provisioner][:dst]
299            end
[5ad4022]300            data[:shell_provisioners].each do |script|
301                og.vm.provision "shell", inline: script, env: provisioners_env
302            end
[039b4d8]303        end
304    end
[3a0f599]305end
Note: See TracBrowser for help on using the repository browser.