diff options
Diffstat (limited to 'glustolibs-gluster/glustolibs/gluster/glusterdir.py')
-rw-r--r-- | glustolibs-gluster/glustolibs/gluster/glusterdir.py | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/glustolibs-gluster/glustolibs/gluster/glusterdir.py b/glustolibs-gluster/glustolibs/gluster/glusterdir.py new file mode 100644 index 000000000..50c37c715 --- /dev/null +++ b/glustolibs-gluster/glustolibs/gluster/glusterdir.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python +# Copyright (C) 2018 Red Hat, Inc. <http://www.redhat.com> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +"""Description: Module for library gluster dir class and related functions + +A GlusterDir is a file object that exists on the client and backend brick. +This module provides low-level functions and a GlusterDir class to maintain +state and manage properties of a file in both locations. + +GlusterDir inherits from GlusterFile. +""" + +from glusto.core import Glusto as g + +from glustolibs.gluster.glusterfile import GlusterFile + + +def mkdir(host, fqpath, parents=False, mode=None): + """Create a directory or path of directories. + + Args: + host (str): The hostname/ip of the remote system. + fqpath (str): The fully-qualified path to the file. + parents (Bool, optional): create parent directories if do not exist. + mode (str, optional): the initial mode of the directory. + + Returns: + True on success. + False on failure. + """ + command_list = ['mkdir'] + if parents: + command_list.append('-p') + if mode is not None: + command_list.append('-m %s' % mode) + command_list.append(fqpath) + rcode, _, rerr = g.run(host, ' '.join(command_list)) + + if rcode == 0: + return True + + g.log.error("Directory mkdir failed: %s" % rerr) + return False + + +def rmdir(host, fqpath, force=False): + """Remove a directory. + + Args: + host (str): The hostname/ip of the remote system. + fqpath (str): The fully-qualified path to the file. + force (bool, optional): Remove directory with recursive file delete. + + Returns: + True on success. False on failure. + """ + command_list = ['rmdir'] + if force: + command_list = ["rm"] + command_list.append('-rf') + command_list.append(fqpath) + rcode, _, rerr = g.run(host, ' '.join(command_list)) + + if rcode == 0: + return True + + g.log.error("Directory remove failed: %s" % rerr) + return False + + +class GlusterDir(GlusterFile): + """Class to handle directories specific to Gluster (client and backend)""" + def mkdir(self, parents=False, mode=None): + """mkdir the instance fqpath on the remote host. + + Args: + parents (Bool, optional): create parent directories + if they do not exist. + mode (str, optional): the initial mode of the directory. + + Returns: + True on success. + False on failure. + """ + if not self.exists_on_client: + ret = mkdir(self._host, self._fqpath, parents, mode) + if ret: + return True + + return False + + def create(self): + """Creates the directory and parent directories if they do not exist. + Overrides GlusterFile.create() to handle directories. + + Args: + None + + Returns: + True on success. False on failure. + """ + # TODO: extend with additional methods to create directories as needed + return self.mkdir(parents=True, mode=None) |