source: installer/vagrant/Vagrantfile-esxi @ c7b7505

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

refs #491 remove debug statements

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