Man Linux: Main Page and Category List

NAME

       dpm - Python interface to the DPM

SYNOPSIS

       import dpm

DESCRIPTION

       The  dpm  module  permits  you  to access the DPM client interface from
       python programs. The dpm module is a swig wrapping of  the  standard  C
       interface.    For  detailed  descriptions  of  each  function  see  the
       individual man page of each function.

       There follows a series of examples of how to use selected functions and
       how  to retrieve the information returned by them: Examples are listing
       the replicas of a given entry, reading  the  content  of  a  directory,
       getting and setting ACLs. etc.

EXAMPLE

       #!/usr/bin/python

       """
       # Using the dpns_readdirxr method
       """

       import sys
       import dpm

       name = "/dpm/cern.ch/home/dteam/";

       dir = dpm.dpns_opendirg(name,"")
       if (dir == None) or (dir == 0):
               err_num = dpm.cvar.serrno
               err_string = dpm.sstrerror(err_num)
               print "Error while looking for " + name + ": Error " + str(err_num) \
                      + " (" + err_string + ")"
               sys.exit(1)

       while 1:
               read_pt = dpm.dpns_readdirxr(dir,"")
               if (read_pt == None) or (read_pt == 0):
                       break
               entry, list = read_pt
               print entry.d_name
               try:
                       for i in range(len(list)):
                               print " ==> %s" % list[i].sfn
               except TypeError, x:
                       print " ==> None"

       dpm.dpns_closedir(dir)

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpns_getlinks method
       """

       result, list = dpm.dpns_getlinks("/dpm/cern.ch/home/dteam/file.test", "")
       print result
       print len(list)
       if (result == 0):
            for i in list:
                 print i.path

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpns_getreplica method
       """

       result, list = dpm.dpns_getreplica("/dpm/cern.ch/home/dteam/file.test", "", "")
       print result
       print len(list)
       if (result == 0):
            for i in list:
                 print i.host
                 print i.sfn

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpns_getacl and dpns_setacl methods to add a user ACL
       """

       nentries, acls_list = dpm.dpns_getacl("/dpm/cern.ch/home/dteam/file.test", \
                                dpm.CA_MAXACLENTRIES)

       print nentries
       print len(acls_list)

       for i in acls_list:
               print i.a_type
               print i.a_id
               print i.a_perm

       # When adding a first ACL for a given user, you also need to add the mask
       # When adding the second user ACL, it is not necessary anymore

       acl_user = dpm.dpns_acl()
       acl_mask = dpm.dpns_acl()

       acl_user.a_type=2        # 2 corresponds to CNS_ACL_USER
       acl_user.a_id=18701      # user id
       acl_user.a_perm=5

       acl_mask.a_type=5        # 5 corresponds to CNS_ACL_MASK
       acl_mask.a_id=0               # no user id specified
       acl_mask.a_perm=5

       acls_list.append(acl_user)
       acls_list.append(acl_mask)

       res = dpm.dpns_setacl("/dpm/cern.ch/home/dteam/file.test", acls_list)

       if res == 0:
               print "OK"
       else:
               err_num = dpm.cvar.serrno
               err_string = dpm.sstrerror(err_num)
               print "There was an error : Error " + str(err_num) + " (" + err_string + ")"
               sys.exit(1)

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpns_getacl and dpns_setacl methods to remove a user ACL
       """

       nentries, acls_list = dpm.dpns_getacl("/dpm/cern.ch/home/dteam/file.test", \
                                     dpm.CA_MAXACLENTRIES)

       # Note : you cannot remove the owner ACL (i.e. for CNS_ACL_USER_OBJ type) if
       # ====== ACLs for other users exist. If all the other user ACLs are deleted,
       # ====== the owner ACL is automatically removed.

       for i in acls_list:
               print i.a_type
               print i.a_id
               print i.a_perm

       del acls_list[1]    # delete a given user ACL from the list of ACLs

       res = dpm.dpns_setacl("/dpm/cern.ch/home/dteam/file.test", acls_list)

       if res == 0:
               print "OK"
       else:
               err_num = dpm.cvar.serrno
               err_string = dpm.sstrerror(err_num)
               print "There was an error : Error " + str(err_num) + " (" + err_string + ")"
               sys.exit(1)

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpns_getusrmap method
       """

       result, list = dpm.dpns_getusrmap()
       print result
       print len(list)
       if (result == 0):
            for i in list:
                 print i.userid + " " + i.username

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpns_getgrpmap method
       """

       result, list = dpm.dpns_getgrpmap()
       print result
       print len(list)
       if (result == 0):
            for i in list:
                 print i.gid + " " + i.groupname

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpm_addfs method
       """

       result = dpm.dpm_addfs("mypool", "mydiskserver.domain.com", "/mountpoint", \
                      dpm.FS_READONLY)
       print result

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpm_modifyfs method
       """

       result = dpm.dpm_modifyfs("mydiskserver.domain.com", "/mountpoint", \
                      dpm.FS_READONLY)
       print result

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpm_rmfs method
       """

       result = dpm.dpm_rmfs("mypool", "mydiskserver.domain.com", "/mountpoint")
       print result

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpm_addpool method
       """

       dpmpool = dpm.dpm_pool()
       dpmpool.poolname = "mypool"
       dpmpool.defsize = 209715200
       dpmpool.def_lifetime = 604800
       dpmpool.defpintime = 604800
       dpmpool.max_lifetime = 604800
       dpmpool.max_pintime = 604800
       dpmpool.nbgids = 1
       dpmpool.gids = [0]
       dpmpool.ret_policy = ’R’
       dpmpool.s_type = ’D’

       result = dpm.dpm_addpool(dpmpool)
       print result

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpm_modifypool method
       """

       dpmpool = dpm.dpm_pool()
       dpmpool.poolname = "mypool"
       dpmpool.defsize = 209715200
       dpmpool.def_lifetime = 604800
       dpmpool.defpintime = 604800
       dpmpool.max_lifetime = 604800
       dpmpool.max_pintime = 604800
       dpmpool.nbgids = 1
       dpmpool.gids = [0]
       dpmpool.ret_policy = ’R’
       dpmpool.s_type = ’D’

       result = dpm.dpm_modifypool(dpmpool)
       print result

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpm_rmpool method
       """

       result = dpm.dpm_rmpool("mypool")
       print result

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpm_getpoolfs method
       """

       result,list = dpm.dpm_getpoolfs("mypool")
       print result
       print len(list)
       if (result == 0):
            for i in list:
                 print "POOL " + i.poolname + " SERVER " + i.server + " FS " + i.fs \
                      + " CAPACITY " + i.capacity + " FREE " + i.free

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpm_getpools method
       """

       result,list = dpm.dpm_getpools()
       print result
       print len(list)
       if (result == 0):
            for i in list:
                 print "POOL " + i.poolname + " CAPACITY " + i.capacity + " FREE " + i.free

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpm_getprotocols method
       """

       result,list = dpm.dpm_getprotocols()
       print result
       print len(list)
       if (result == 0):
            for i in list:
                 print i

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpm_getspacemd method
       """

       result, list = dpm.dpm_getspacemd(["myspacetoken"])
       print result
       print len(list)
       if (result == 0):
            for i in list:
                 print "TYPE " + i.s_type + " SPACETOKEN " i.s_token + " USERTOKEN " \
                      + i.u_token + " TOTAL " + i.t_space + " GUARANTUEED " + i.g_space \
                      + " UNUSED " + i.u_space + " POOL " + i.poolname

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpm_getspacetoken method
       """

       result, list = dpm.dpm_getspacetoken("myspacetokendesc")
       print result
       print len(list)
       if (result == 0):
            for i in list:
                 print i

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpm_reservespace method
       """

       result,actual_s_type,actual_t_space,actual_g_space,actual_lifetime,s_token = \
                 dpm.dpm_reservespace(’D’, "myspacetokendesc", ’R’, ’O’, 209715200, \
                 209715200, 2592000, 0, "mypoolname")
       print result
       if (result == 0):
            print "TYPE " + actual_s_type + " TOTAL " + actual_t_space + " GUARANTEED " \
                 + actual_g_space + " LIFETIME " + actual_lifetime + " TOKEN " + s_token

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpm_updatespace method
       """

       result,actual_t_space,actual_g_space,actual_lifetime = \
                 dpm.dpm_updatespace("myspacetoken", 209715200, 209715200, 2592000)
       print result
       if (result == 0):
            print " TOTAL " + actual_t_space + " GUARANTEED " + actual_g_space \
                 + " LIFETIME " + actual_lifetime

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpm_releasespace method
       """

       result = dpm.dpm_releasespace("myspacetoken", 0)
       print result

EXAMPLE

       #!/usr/bin/python

       import dpm

       """
       # Using the dpm_ping method
       """

       result,info = dpm.dpm_ping("mydpmserver.domain.com")
       print result
       if (result == 0):
            print info

KNOWN BUGS

       The   current   interface   to  the  dpns_getcwd(3),  dpns_readlink(3),
       dpns_seterrbuf(3) requires the passing of str object which is  modified
       to  contain  the  result  (in  a  similar way to the C functions, which
       accept a buffer).  However this breaks the immutability of python  str.
       This will be changed in the future.

SEE ALSO

       DPM C interface man pages

DPM          $Date: 2010-02-04 13:08:39 +0100 (Thu, 04 Feb 2010) dpm_python(3)