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)