docs: def create_vm(self, userid, cpu, memory, disk_list, profile,
                    max_cpu, max_mem, ipl_from, ipl_param, ipl_loadparam):
          """ Create VM and add disks if specified. """
          rd = ('makevm %(uid)s directory LBYONLY %(mem)im %(pri)s '
                '--cpus %(cpu)i --profile %(prof)s --maxCPU %(max_cpu)i '
                '--maxMemSize %(max_mem)s --setReservedMem' %
                {'uid': userid, 'mem': memory,
                 'pri': const.ZVM_USER_DEFAULT_PRIVILEGE,
                 'cpu': cpu, 'prof': profile,
                 'max_cpu': max_cpu, 'max_mem': max_mem})
  
          if CONF.zvm.default_admin_userid:
              rd += (' --logonby "%s"' % CONF.zvm.default_admin_userid)
  
          if (disk_list and 'is_boot_disk' in disk_list[0] and
              disk_list[0]['is_boot_disk']):
              # we assume at least one disk exist, which means, is_boot_disk
              # is true for exactly one disk.
              rd += (' --ipl %s' % self._get_ipl_param(ipl_from))
  
              # load param for ipl
              if ipl_param:
                  rd += ' --iplParam %s' % ipl_param
  
              if ipl_loadparam:
                  rd += ' --iplLoadparam %s' % ipl_loadparam
  
          action = "create userid '%s'" % userid
  
          try:
              self._request(rd)
          except exception.SDKSMTRequestFailed as err:
              if ((err.results['rc'] == 436) and (err.results['rs'] == 4)):
                  result = "Profile '%s'" % profile
                  raise exception.SDKObjectNotExistError(obj_desc=result,
                                                         modID='guest')
              else:
                  msg = ''
                  if action is not None:
                      msg = "Failed to %s. " % action
                  msg += "SMT error: %s" % err.format_message()
                  LOG.error(msg)
                  raise exception.SDKSMTRequestFailed(err.results, msg)
  
          # Add the guest to db immediately after user created
          action = "add guest '%s' to database" % userid
          with zvmutils.log_and_reraise_sdkbase_error(action):
              self._GuestDbOperator.add_guest(userid)
  
          # Continue to add disk
          if disk_list:
              # Add disks for vm
              return self.add_mdisks(userid, disk_list)