Uploaded image for project: 'MariaDB Foundation Development'
  1. MariaDB Foundation Development
  2. MDBF-122

Automate VM creation process for LibVirt workers

Details

    • Task
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Fixed
    • N/A
    • N/A
    • None
    • None

    Description

      For install and upgrade tests we use LibVirt managed KVMs.

      We currently have one LibVirt worker that handles these types of workers (bg-bbw5-x64). We need an automatic way of creating VMs for all major operating systems and platforms that we are supporting (basically, for all the OSs and platforms for which we create Docker images - see https://github.com/MariaDB/mariadb.org-tools/blob/master/.github/workflows/bb_containers.yml)

      VM creation

      Create the image and configure LibVirt to use it. The current naming scheme consists in "buildbot-osname". Probably we need to adjust that.
      Setup the base image (see VM installed packages below)
      Configure LibVirt hook to always start from a clean VM

      VM installed packages

      The VMs need to be clean and have nothing installed except:

      import fnmatch
      import os
      import sys
       
      from twisted.application import service
      from twisted.python.log import FileLogObserver
      from twisted.python.log import ILogObserver
       
      from buildbot_worker.bot import Worker
       
      # setup worker
      basedir = os.path.abspath(os.path.dirname(__file__))
      application = service.Application('buildbot-worker')
       
       
      application.setComponent(ILogObserver, FileLogObserver(sys.stdout).emit)
      # and worker on the same process!
      buildmaster_host = os.environ.get("BUILDMASTER", 'buildbot.mariadb.org')
      port = int(os.environ.get("BUILDMASTER_PORT", 9990))
      workername = os.environ.get("WORKERNAME", 'buildbot-ubuntu1804')
      passwd = os.environ.get("WORKERPASS", 'PASSWORD')
       
      # delete the password from the environ so that it is not leaked in the log
      blacklist = os.environ.get("WORKER_ENVIRONMENT_BLACKLIST", "WORKERPASS").split()
      for name in list(os.environ.keys()):
          for toremove in blacklist:
              if fnmatch.fnmatch(name, toremove):
                  del os.environ[name]
       
      keepalive = 600
      umask = None
      maxdelay = 300
      allow_shutdown = None
      maxretries = 10
       
      s = Worker(buildmaster_host, port, workername, passwd, basedir,
                 keepalive, umask=umask, maxdelay=maxdelay,
                 allow_shutdown=allow_shutdown, maxRetries=maxretries)
      s.setServiceParent(application)
      

      Attention the WORKERNAME must match the name of the LibVirt VM. The password also needs to be set.

      • Ideally, include a possibility to easily add packages if needed.

      Attachments

        Issue Links

          Activity

            faust Faustin Lammler logged work - 2022-04-13 06:49
            • Time Spent:
              1.25d
               
              - POC for generating BB VM, next:
                - use ansible to deploy and configure VM;
                - improve the bb_worker_vm role;
                - test full destroy;
                - test deploy from scratch (ok with debian/ubuntu).

              - Finish cloud-init POC (test other OS):
                - test centos;
                - test fedora;
                - handle case where VM are created manually (do not destroy them, and keep qemu hook in place);
                - create PR (https://gitlab.com/mariadb/sysadmin/-/merge_requests/28);
                - activate VM's with Vlad;
                - improve installation mechanism (pb with unbuntu18.04 and fedora35);
                - still pb with centos-8-stream.
            faust Faustin Lammler logged work - 2022-04-21 09:51
            • Time Spent:
              3h
               
              Deploy VMs on ARM.
            faust Faustin Lammler logged work - 2022-05-11 08:32
            • Time Spent:
              1h
               
              <No comment>
            faust Faustin Lammler logged work - 2022-05-16 14:02
            • Time Spent:
              3h
               
              make deployment of rhel7/8 via ansible working.
            faust Faustin Lammler logged work - 2022-06-10 16:40
            • Time Spent:
              3h
               
              See last today comment

            People

              faust Faustin Lammler
              vladbogo Vlad Bogolin
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0d
                  0d
                  Logged:
                  Time Spent - 2.5d
                  2.5d