Exemple #1
0
def is_mounted(volname, mpoint, mserver, mclient, mtype, user='******'):
    """Check if mount exist.

    Args:
        volname (str): Name of the volume
        mpoint (str): Mountpoint dir
        mserver (str): Server to which it is mounted to
        mclient (str): Client from which it is mounted.
        mtype (str): Mount type (glusterfs|nfs|smb|cifs)

    Kwargs:
        user (str): Super user of the node mclient

    Returns:
        bool: True if mounted and False otherwise.
    """
    # python will error on missing arg, so just checking for empty args here
    if not volname or not mpoint or not mserver or not mclient or not mtype:
        g.log.error("Missing arguments for mount.")
        return False

    if mtype == "smb":
        if mpoint == "*":
            return False
        else:
            cmd = powershell("net use %s" % mpoint)
            ret, out, err = g.run(mclient, cmd, user)
            if ret != 0:
                return False
            else:
                expected_output = ("Remote name       \\\%s\gluster-%s" %
                                   (mserver, volname))
                if expected_output in out:
                    return True
                else:
                    return False
    else:
        ret, _, _ = g.run(
            mclient, "mount | grep %s | grep %s | grep \"%s\"" %
            (volname, mpoint, mserver), user)
        if ret == 0:
            g.log.debug("Volume %s is mounted at %s:%s" %
                        (volname, mclient, mpoint))
            return True
        else:
            g.log.error("Volume %s is not mounted at %s:%s" %
                        (volname, mclient, mpoint))
            return False
def umount_volume(mclient, mpoint, mtype='', user='******'):
    """Unmounts the mountpoint.

    Args:
        mclient (str): Client from which it has to be mounted.
        mpoint (str): Mountpoint dir.

    Kwargs:
        mtype (str): Mounttype. Defaults to ''.
        user (str): Super user of the node mclient. Defaults to 'root'

    Returns:
        tuple: Tuple containing three elements (ret, out, err) as returned by
            umount command execution.
    """
    if mtype == "smb":
        cmd = "net use %s /d /Y" % mpoint
        cmd = powershell(cmd)
    else:
        cmd = ("umount %s || umount -f %s || umount -l %s" %
               (mpoint, mpoint, mpoint))
    return g.run(mclient, cmd, user=user)
def mount_volume(volname,
                 mtype,
                 mpoint,
                 mserver,
                 mclient,
                 options='',
                 smbuser=None,
                 smbpasswd=None,
                 user='******'):
    """Mount the gluster volume with specified options.

    Args:
        volname (str): Name of the volume to mount.
        mtype (str): Protocol to be used to mount.
        mpoint (str): Mountpoint dir.
        mserver (str): Server to mount.
        mclient (str): Client from which it has to be mounted.

    Kwargs:
        option (str): Options for the mount command.
        smbuser (str): SMB USERNAME. Used with mtype = 'cifs'
        smbpasswd (str): SMB PASSWD. Used with mtype = 'cifs'
        user (str): Super user of the node mclient


    Returns:
        tuple: Tuple containing three elements (ret, out, err).
            (0, '', '') if already mounted.
            (1, '', '') if setup_samba_service fails in case of smb.
            (ret, out, err) of mount commnd execution otherwise.
    """
    if is_mounted(volname, mpoint, mserver, mclient, mtype, user):
        g.log.debug("Volume %s is already mounted at %s" % (volname, mpoint))
        return (0, '', '')

    if options != '':
        options = "-o %s" % options

    if mtype == 'smb':
        if smbuser is None or smbpasswd is None:
            g.log.error("smbuser and smbpasswd to be passed as parameters "
                        "for cifs mounts")
            return (1, '', '')

        mcmd = ("net use %s \\\\%s\\gluster-%s " % (mpoint, mserver, volname) +
                " /user:%s " % (smbuser) + '"' + smbpasswd + '"')

        mcmd = powershell(mcmd)

        ret, out, err = g.run(mclient, mcmd, user=user)
        if ret != 0:
            g.log.error("net use command failed on windows client %s "
                        "failed: %s" % (mclient, err))
            return (ret, out, err)

        if out.startswith('Drive'):
            drv_ltr = out.split(' ')[1]
            g.log.info("Samba share mount success on windows client %s. "
                       "Share is : %s" % (mclient, drv_ltr))
            return (ret, drv_ltr, err)

        g.log.error("net use command successful but error in mount of samba "
                    " share for windows client %s for reason %s" %
                    (mclient, err))
        return (1, out, err)

    if mtype == 'nfs':
        if not options:
            options = "-o vers=4.1"

        elif options and 'vers' not in options:
            options = options + ",vers=4.1"

    if mserver:
        mcmd = ("mount -t %s %s %s:/%s %s" %
                (mtype, options, mserver, volname, mpoint))
    else:
        mcmd = ("mount -t %s %s %s %s" % (mtype, options, volname, mpoint))

    if mtype == 'cifs':
        if smbuser is None or smbpasswd is None:
            g.log.error("smbuser and smbpasswd to be passed as parameters "
                        "for cifs mounts")
            return (1, '', '')

        # Check if client is running rhel. If so add specific options
        cifs_options = ""
        cmd = "cat /etc/redhat-release | grep Santiago"
        ret, _, _ = g.run(mclient, cmd, user=user)
        if not ret:
            cifs_options = "sec=ntlmssp"
        mcmd = ("mount -t cifs -o username=%s,password=%s,%s "
                "\\\\\\\\%s\\\\gluster-%s %s" %
                (smbuser, smbpasswd, cifs_options, mserver, volname, mpoint))

    # Create mount dir
    _, _, _ = g.run(mclient,
                    "test -d %s || mkdir -p %s" % (mpoint, mpoint),
                    user=user)

    # Create mount
    return g.run(mclient, mcmd, user=user)