docs: def guest_live_migrate(self, userid, dest_zcc_userid, destination,
                             parms, lgr_action):
          """Move an eligible, running z/VM(R) virtual machine transparently
          from one z/VM system to another within an SSI cluster.
  
          :param userid: (str) the userid of the vm to be relocated or tested
          :param dest_zcc_userid: (str) the userid of zcc on destination
          :param destination: (str) the system ID of the z/VM system to which
                 the specified vm will be relocated or tested.
          :param parms: (dict) a dictionary of options for relocation.
                 It has one dictionary that contains some of the below keys:
                 {'maxtotal': i,
                  'maxquiesce': i,
                  'immediate': str}
  
                  In which, 'maxtotal':indicates the maximum total time
                  (in seconds)
                  that the command issuer is willing to
                  wait for the entire relocation
                  to complete or -1 to indicate there is no limit for time.
                  'maxquiesce':indicates the maximum quiesce time
                  for this relocation.
                  This is the amount of time (in seconds)
                  a virtual machine may be stopped
                  during a relocation attempt or -1 to indicate
                  there is no limit for time.
                  'immediate':If present, immediate=YES is set,
                  which causes the VMRELOCATE command
                  to do one early pass through virtual machine storage
                  and then go directly to the quiesce stage.
          :param lgr_action: (str) indicates the action is move or test for vm.
  
          """
          if lgr_action.lower() == 'move':
              if dest_zcc_userid == '':
                  errmsg = ("'dest_zcc_userid' is required if the value of "
                            "'lgr_action' equals 'move'.")
                  LOG.error(errmsg)
                  raise exception.SDKMissingRequiredInput(msg=errmsg)
  
              # Add authorization for new zcc.
              cmd = ('echo -n %s > /etc/iucv_authorized_userid\n' %
                                                      dest_zcc_userid)
              rc = self._smtclient.execute_cmd(userid, cmd)
              if rc != 0:
                  err_msg = ("Add authorization for new zcc failed")
                  LOG.error(err_msg)
  
              # Live_migrate the guest
              operation = "Move guest '%s' to SSI '%s'" % (userid, destination)
              with zvmutils.log_and_reraise_sdkbase_error(operation):
                  self._vmops.live_migrate_vm(userid, destination,
                                              parms, lgr_action)
              comments = self._GuestDbOperator.get_comments_by_userid(userid)
              comments['migrated'] = 1
              action = "update guest '%s' in database" % userid
              with zvmutils.log_and_reraise_sdkbase_error(action):
                  self._GuestDbOperator.update_guest_by_userid(userid,
                                                      comments=comments)
          if lgr_action.lower() == 'test':
              operation = "Test move guest '%s' to SSI '%s'" % (userid,
                                                      destination)
              with zvmutils.log_and_reraise_sdkbase_error(operation):
                  self._vmops.live_migrate_vm(userid, destination,
                                              parms, lgr_action)