Exemplo n.º 1
0
 def do_data2(self, args):
     if (args is not None):
         tap_fields = args.split()
         url = ('%s%s?%s' % (self.baseurl, tap_fields[0], tap_fields[1]))
         print api_call(url)
     else:
         return self.do_help(args)
Exemplo n.º 2
0
 def do_bootstrap(self, args):
     """
     bootraps the storage state, mounts anything that needs to be mounted
     etc..
     """
     url = ('%scommands/bootstrap' % BaseConsole.url)
     print api_call(url, calltype='post')
Exemplo n.º 3
0
    def do_config(self, args):
        """configure a network interface. dhcp and static ipv4 configurations are
        supported. Note that there is a risk of losing connectivity to the
        system. So this is best done via console connection.

        to configure using dhcp:
        config <interface> -d

        to configure static ip: config <interface> -s <ip_addr> <netmask>
        <gateway> <dns_servers> <domain>

        """
        fields = args.split()
        if len(fields) < 2:
            return self.do_help(args)
        url = "%s/%s" % (self.baseurl, fields[0])
        if fields[1] == "-d":
            print(api_call(url, data={"boot_protocol": "dhcp",}, calltype="put"))
        elif fields[1] == "-s":
            if len(fields) < 7:
                return self.do_help(args[:2])
            input_data = {
                "boot_protocol": "static",
                "ipaddr": fields[2],
                "netmask": fields[3],
                "gateway": fields[4],
                "dns_servers": fields[5],
                "domain": fields[6],
                "itype": "management",
            }
            print(api_call(url, data=input_data, calltype="put"))
        else:
            return self.do_help(args)
Exemplo n.º 4
0
 def do_data2(self, args):
     if args is not None:
         tap_fields = args.split()
         url = "%s%s?%s" % (self.baseurl, tap_fields[0], tap_fields[1])
         print api_call(url)
     else:
         return self.do_help(args)
Exemplo n.º 5
0
 def do_delete(self, args):
     if len(args) == 0:
         return self.help_wrapper("missing pool_name", "delete")
     url = "%s/%s" % (self.url, args)
     print("Deleting pool %s" % args[0])
     api_call(url, calltype="delete")
     print("Pool %s deleted" % args[0])
Exemplo n.º 6
0
 def do_bootstrap(self, args):
     """
     bootraps the storage state, mounts anything that needs to be mounted
     etc..
     """
     url = ('%scommands/bootstrap' % BaseConsole.url)
     print api_call(url, calltype='post')
Exemplo n.º 7
0
    def do_config(self, args):
        """configure a network interface. dhcp and static ipv4 configurations are
        supported. Note that there is a risk of losing connectivity to the
        system. So this is best done via console connection.

        to configure using dhcp:
        config <interface> -d

        to configure static ip: config <interface> -s <ip_addr> <netmask>
        <gateway> <dns_servers> <domain>

        """
        fields = args.split()
        if (len(fields) < 2):
            return self.do_help(args)
        url = ('%s/%s' % (self.baseurl, fields[0]))
        if (fields[1] == '-d'):
            print(api_call(url, data={'boot_protocol': 'dhcp', },
                           calltype='put'))
        elif (fields[1] == '-s'):
            if (len(fields) < 7):
                return self.do_help(args[:2])
            input_data = {'boot_protocol': 'static',
                          'ipaddr': fields[2],
                          'netmask': fields[3],
                          'gateway': fields[4],
                          'dns_servers': fields[5],
                          'domain': fields[6],
                          'itype': 'management', }
            print(api_call(url, data=input_data, calltype='put'))
        else:
            return self.do_help(args)
Exemplo n.º 8
0
 def do_delete(self, args):
     if (len(args) == 0):
         return self.help_wrapper('missing pool_name', 'delete')
     url = ('%s/%s' % (self.url, args))
     print("Deleting pool %s" % args[0])
     api_call(url, calltype='delete')
     print("Pool %s deleted" % args[0])
Exemplo n.º 9
0
 def do_delete(self, args):
     if (len(args) == 0):
         return self.help_wrapper('missing pool_name', 'delete')
     url = ('%s/%s' % (self.url, args))
     print("Deleting pool %s" % args[0])
     api_call(url, calltype='delete')
     print("Pool %s deleted" % args[0])
    def _plugin_command(self, command):
        """
        Current status of the plugin

        status
        """
        url = ('%s/plugin/%s' % (self.url, command))
        print api_call(url, calltype='post')
Exemplo n.º 11
0
    def do_delete(self, args):
        """
        Delete a offlined disk

        delete disk_name
        """
        url = ('%s/%s' % (self.baseurl, args))
        api_call(url, calltype='delete')
        print_disk_info(api_call(self.baseurl))
Exemplo n.º 12
0
 def do_list(self, args):
     url = self.url + "?format=json"
     if args:
         # print info for a single pool
         url = "%s/%s" % (self.url, args)
         pool_info = api_call(url)
         print_pool_info(pool_info, True)
     else:
         pools_info = api_call(url)
         print_pools_info(pools_info)
Exemplo n.º 13
0
    def do_list(self, args):
        """
        print all scheduled tasks, or optionally for the given id.

        list <task_id>
        """
        url = self.baseurl
        if (len(args) > 0):
            url = ('%s%s' % (url, args))
        print api_call(url)
Exemplo n.º 14
0
 def do_list(self, args):
     url = self.url + '?format=json'
     if (args):
         # print info for a single pool
         url = ('%s/%s' % (self.url, args))
         pool_info = api_call(url)
         print_pool_info(pool_info, True)
     else:
         pools_info = api_call(url)
         print_pools_info(pools_info)
Exemplo n.º 15
0
    def do_wipe(self, args):
        """
        Wipe the partition table of a disk. This is required for
        used/partitioned disks to be usable by rockstor.

        wipe disk_name
        """
        url = ('%s/%s/wipe' % (self.baseurl, args))
        api_call(url, calltype='post')
        print_disk_info(api_call(self.baseurl))
Exemplo n.º 16
0
    def do_log(self, args):
        """
        print all task logs, or optionally for the given task

        log <task_id>
        """
        url = ('%slog' % self.baseurl)
        if (len(args) > 0):
            url = ('%s/taskdef/%s' % (url, args))
        print api_call(url)
Exemplo n.º 17
0
    def do_clone(self, args):
        """
        Clone a snapshot into a brand new share

        clone <snap_name> <new_share_name>
        """
        fields = args.split()
        url = ('%s/%s/clone' % (self.url, fields[0]))
        input_data = {'name': fields[1],}
        print api_call(url, data=input_data, calltype='post')
Exemplo n.º 18
0
    def do_rollback(self, args):
        """
        Rollback a share to the state of one of it's snapshots.

        rollback <share_name> <snap_name>
        """
        fields = args.split()
        input_data = {'name': fields[1], }
        url = ('%s/%s/rollback' % (self.url, fields[0]))
        print api_call(url, data=input_data, calltype='post')
Exemplo n.º 19
0
 def do_list(self, args):
     url = self.url+'?format=json'
     if (args):
         # print info for a single pool
         url = ('%s/%s' % (self.url, args))
         pool_info = api_call(url)
         print_pool_info(pool_info, True)
     else:
         pools_info = api_call(url)
         print_pools_info(pools_info)
Exemplo n.º 20
0
 def do_config(self, args):
     """
     config server_name
     """
     url = ('%s/config' % self.baseurl)
     fields = args.split()
     input_data = {'config': {'server': fields[0],},}
     headers = {'content-type': 'application/json'}
     api_call(url, data=json.dumps(input_data), calltype='post',
              headers=headers)
Exemplo n.º 21
0
    def do_list(self, args):
        """
        print all scheduled tasks, or optionally for the given id.

        list <task_id>
        """
        url = self.baseurl
        if (len(args) > 0):
            url = ('%s%s' % (url, args))
        print api_call(url)
Exemplo n.º 22
0
    def do_log(self, args):
        """
        print all task logs, or optionally for the given task

        log <task_id>
        """
        url = ('%slog' % self.baseurl)
        if (len(args) > 0):
            url = ('%s/taskdef/%s' % (url, args))
        print api_call(url)
Exemplo n.º 23
0
 def do_list(self, args):
     url = self.baseurl
     if args:
         # print info for a single disk
         url = "%s/%s" % (url, args)
         disk_info = api_call(url)
         print_disk_info(disk_info, True)
     else:
         # print info for all disks
         disks_info = api_call(url)
         print_disks_info(disks_info)
Exemplo n.º 24
0
 def do_list(self, args):
     url = self.baseurl
     if (args):
         # print info for a single disk
         url = ('%s/%s' % (url, args))
         disk_info = api_call(url)
         print_disk_info(disk_info, True)
     else:
         # print info for all disks
         disks_info = api_call(url)
         print_disks_info(disks_info)
Exemplo n.º 25
0
    def do_clone(self, args):
        """
        Clone a snapshot into a brand new share

        clone <snap_name> <new_share_name>
        """
        fields = args.split()
        url = ('%s/%s/clone' % (self.url, fields[0]))
        input_data = {
            'name': fields[1],
        }
        print api_call(url, data=input_data, calltype='post')
Exemplo n.º 26
0
 def do_config(self, args):
     """
     config server_name
     """
     url = "%s/config" % self.baseurl
     fields = args.split()
     input_data = {
         "config": {
             "server": fields[0],
         },
     }
     headers = {"content-type": "application/json"}
     api_call(url, data=input_data, calltype="post", headers=headers)
Exemplo n.º 27
0
 def do_config(self, args):
     """
     config server_name
     """
     url = ('%s/config' % self.baseurl)
     fields = args.split()
     input_data = {
         'config': {
             'server': fields[0],
         },
     }
     headers = {'content-type': 'application/json'}
     api_call(url, data=input_data, calltype='post', headers=headers)
Exemplo n.º 28
0
    def do_enable(self, args):
        """
        Make the share available via smb. all flags are optional.

        enable -c comment [-b <yes|no> -g <yes|no> -r <yes|no> -m 0755]
        """
        arg_fields = args.split()
        input_data = {}
        for f in arg_fields:
            if f[0:2] == "-c":
                input_data["comment"] = f[2:]
            elif f[0:2] == "-b":
                input_data["browsable"] = f[2:]
            elif f[0:2] == "-g":
                input_data["guest_ok"] = f[2:]
            elif f[0:2] == "-r":
                input_data["read_only"] = f[2:]
            elif f[0:2] == "-m":
                input_data["create_mask"] = f[2:]
            else:
                return self.do_help(args)
        if len(input_data) == 0:
            return self.do_help(args)
        samba_info = api_call(self.url, data=input_data, calltype="post")
        print(samba_info)
Exemplo n.º 29
0
 def do_list(self, args):
     url = BaseConsole.url + 'disks/'
     input_disk_list = args.split()
     if (len(input_disk_list) > 0):
         url = url + input_disk_list[0] + '/'
     disk_info = api_call(url)
     print_disk_info(disk_info)
Exemplo n.º 30
0
 def do_add(self, args):
     arg_fields = args.split()
     input_data = {
         "name": arg_fields[0],
         "username": arg_fields[1],
     }
     print(api_call(self.baseurl, data=input_data, calltype="post"))
Exemplo n.º 31
0
    def do_list(self, args):
        """
        List brief information about all pools

        """
        pool_info = api_call(self.url)
        print_pool_info(pool_info)
Exemplo n.º 32
0
    def do_enable(self, args):
        """
        Make the share available via smb. all flags are optional.

        enable -c comment [-b <yes|no> -g <yes|no> -r <yes|no> -m 0755]
        """
        arg_fields = args.split()
        input_data = {}
        for f in arg_fields:
            if (f[0:2] == '-c'):
                input_data['comment'] = f[2:]
            elif (f[0:2] == '-b'):
                input_data['browsable'] = f[2:]
            elif (f[0:2] == '-g'):
                input_data['guest_ok'] = f[2:]
            elif (f[0:2] == '-r'):
                input_data['read_only'] = f[2:]
            elif (f[0:2] == '-m'):
                input_data['create_mask'] = f[2:]
            else:
                return self.do_help(args)
        if (len(input_data) == 0):
            return self.do_help(args)
        samba_info = api_call(self.url, data=input_data, calltype='post')
        print samba_info
Exemplo n.º 33
0
 def do_data2(self, args):
     if args is not None:
         tap_fields = args.split()
         url = "%s%s?%s" % (self.baseurl, tap_fields[0], tap_fields[1])
         print(api_call(url))
     else:
         return self.do_help(args)
Exemplo n.º 34
0
 def do_snap(self, args):
     """
     snap share_name name_prefix frequency tag
     """
     if (len(args) > 0):
         fields = args.split()
         input_data = {
             'meta': {
                 'share': fields[0],
                 'prefix': fields[1],
             },
             'task_type': 'snapshot',
             'name': fields[3],
             'ts': time.time() + 120,
             'frequency': fields[2],
         }
         print(input_data)
         headers = {'content-type': 'application/json'}
         snap_info = api_call(self.baseurl,
                              data=input_data,
                              calltype='post',
                              headers=headers)
         print(snap_info)
     else:
         return self.do_help(args)
Exemplo n.º 35
0
 def do_bootstrap(self, args):
     """
     bootraps the storage state, mounts anything that needs to be mounted
     etc..
     """
     url = "%scommands/bootstrap" % BaseConsole.url
     print(api_call(url, calltype="post"))
Exemplo n.º 36
0
 def do_add(self, args):
     arg_fields = args.split()
     input_data = {
         'name': arg_fields[0],
         'username': arg_fields[1],
     }
     print(api_call(self.baseurl, data=input_data, calltype='post'))
Exemplo n.º 37
0
    def do_add(self, args):
        """
        Create a new pool.

        Create a new pool: add pool_name disk_list raid_type

        Parameters:
        pool_name:    Intended name of the pool.
        disk_list:    A list of comma-separated(no whitespace) disks. For
                      example: sdb,sdc.
        raid_type:    One of the following: raid0, raid1

        Examples:
        To create a raid0 pool with two disks(sdb and sdc) called pool0
            add pool0 sdb,sdc raid0
        """
        arg_fields = args.split()
        if (len(arg_fields) < 3):
            error = '3 arguments expected. %d given' % len(arg_fields)
            return self.help_wrapper(error, 'add')

        input_data = {'disks': arg_fields[1],
                      'raid_level': arg_fields[2],}
        url = ('%s%s' % (self.url, arg_fields[0]))
        pool_info = api_call(url, data=input_data, calltype='post')
        print pool_info
Exemplo n.º 38
0
    def do_add(self, args):
        """
        Create a new pool.

        Create a new pool: add pool_name disk_list raid_type

        Parameters:
        pool_name:    Intended name of the pool.
        disk_list:    A list of comma-separated(no whitespace) disks. For
                      example: sdb,sdc.
        raid_type:    One of the following: single, raid0, raid1 and raid10

        Examples:
        To create a raid0 pool with two disks(sdb and sdc) called pool0
            add pool0 sdb,sdc raid0
        """
        arg_fields = args.split()
        if (len(arg_fields) < 3):
            error = '3 arguments expected. %d given' % len(arg_fields)
            return self.help_wrapper(error, 'add')

        input_data = {'pname': arg_fields[0],
                      'disks': arg_fields[1],
                      'raid_level': arg_fields[2]}
        url = (self.url)
        pool_info = api_call(url, data=input_data, calltype='post')
        print_pool_info(pool_info)
Exemplo n.º 39
0
 def do_clone(self, args):
     fields = args.split()
     input_data = {
         "name": fields[1],
     }
     url = "%s/%s/clone" % (self.url, fields[0])
     print(api_call(url, data=input_data, calltype="post"))
Exemplo n.º 40
0
    def do_add(self, args):
        """
        Add a new snapshot.

        add <snap_name>

        To add a visible snapshot

        add -v <snap_name>
        """
        fields = args.split()
        snap_name = fields[0]
        data = None
        headers = None
        if (len(fields) > 1):
            if (fields[0] != '-v'):
                return self.do_help(args)
            snap_name = fields[1]
            data = {
                'uvisible': True,
            }
            headers = {
                'content-type': 'application/json',
            }
        url = ('%s/%s' % (self.url, snap_name))
        snap_info = api_call(url, data=data, calltype='post', headers=headers)
        print snap_info
Exemplo n.º 41
0
 def do_data2(self, args):
     if (args is not None):
         tap_fields = args.split()
         url = ('%s%s?%s' % (self.baseurl, tap_fields[0], tap_fields[1]))
         print(api_call(url))
     else:
         return self.do_help(args)
Exemplo n.º 42
0
    def do_add(self, args):
        """
        Add a new snapshot.

        add <snap_name>

        To add a visible snapshot

        add -v <snap_name>
        """
        fields = args.split()
        snap_name = fields[0]
        data = None
        headers = None
        if len(fields) > 1:
            if fields[0] != "-v":
                return self.do_help(args)
            snap_name = fields[1]
            data = {
                "uvisible": True,
            }
            headers = {
                "content-type": "application/json",
            }
        url = "%s/%s" % (self.url, snap_name)
        snap_info = api_call(url, data=data, calltype="post", headers=headers)
        print(snap_info)
Exemplo n.º 43
0
    def do_add(self, args):
        """
        Add advanced nfs export entries. aka edit /etc/exports file directly.

        add exports_line

        parameters:
        exports_line:    Intended line of /etc/exports.
                         eg: /exports/share1 example.com(rw,no_root_squash)
                         for multiple entries, use | as the separator.
                         eg: /exports/s1 example.com(rw) | /exports/s2 *(ro)
        """
        exports = []
        if args != "":
            exports = args.split("|")
        input_data = {
            "entries": exports,
        }
        print(
            api_call(
                self.baseurl,
                data=input_data,
                headers={"content-type": "application/json"},
                calltype="post",
            ))
Exemplo n.º 44
0
 def do_snap(self, args):
     """
     snap share_name name_prefix frequency tag
     """
     if len(args) > 0:
         fields = args.split()
         input_data = {
             "meta": {
                 "share": fields[0],
                 "prefix": fields[1],
             },
             "task_type": "snapshot",
             "name": fields[3],
             "ts": time.time() + 120,
             "frequency": fields[2],
         }
         print(input_data)
         headers = {"content-type": "application/json"}
         snap_info = api_call(self.baseurl,
                              data=input_data,
                              calltype="post",
                              headers=headers)
         print(snap_info)
     else:
         return self.do_help(args)
Exemplo n.º 45
0
    def do_add(self, args):
        """
        Create a new share.

        Create a new share: add share_name pool_name size

        Parameters:
        share_name:    Intended name of the share.
        pool_name:     Pool in which to create the share. The pool should
                       exist in order to create shares.
        size:          Intened size of the share. An integer is expected with
                       an optional suffix(MB, GB, TB, PB). When no suffix is
                       given, MB is presumed.

        Examples:
        To create a 20 GB share in a valid pool called pool0.
            add share1234 pool0 20GB

        To create a 100 MB share in a valid pool called mypool.
            add share100 mypool 100
        """
        arg_fields = args.split()
        if (len(arg_fields) < 3):
            error = ('3 arguments expected. %d given' % len(arg_fields))
            return self.help_wrapper(error, 'add')

        multiplier = 1024
        num = None
        try:
            num = int(arg_fields[2])
        except:
            if (len(arg_fields[2]) > 2):
                try:
                    num = int(arg_fields[2][:-2])
                except:
                    error = ('Invalid size parameter: %s' % arg_fields[2])
                    return self.help_wrapper(error, 'add')
                suffix = arg_fields[2][-2:].lower()
                if (suffix == 'mb'):
                    multiplier = multiplier ** 1
                elif (suffix == 'gb'):
                    multiplier = multiplier ** 2
                elif (suffix == 'tb'):
                    multiplier = multiplier ** 3
                elif (suffix == 'pb'):
                    multiplier = multiplier ** 4
                else:
                    error = ('Invalid size suffix: %s. must be one of '
                             'MB, GB, TB or PB' % suffix)
                    return self.help_wrapper(error, 'add')
            else:
                error = 'Invalid size parameter: %s' % arg_fields[2]
                return self.help_wrapper(error, 'add')
        size = num * multiplier
        input_data = {'pool' : arg_fields[1],
                      'size': size,}
        url = ('%s%s' % (self.url, arg_fields[0]))
        share_info = api_call(url, data=input_data, calltype='post')
        print_share_info(share_info)
Exemplo n.º 46
0
    def do_add(self, args):
        """
        Create a new share.

        Create a new share: add share_name pool_name size

        Parameters:
        share_name:    Intended name of the share.
        pool_name:     Pool in which to create the share. The pool should
                       exist in order to create shares.
        size:          Intened size of the share. An integer is expected with
                       an optional suffix(MB, GB, TB, PB). When no suffix is
                       given, MB is presumed.

        Examples:
        To create a 20 GB share in a valid pool called pool0.
            add share1234 pool0 20GB

        To create a 100 MB share in a valid pool called mypool.
            add share100 mypool 100
        """
        arg_fields = args.split()
        if (len(arg_fields) < 3):
            error = ('3 arguments expected. %d given' % len(arg_fields))
            return self.help_wrapper(error, 'add')

        multiplier = 1024
        num = None
        try:
            num = int(arg_fields[2])
        except:
            if (len(arg_fields[2]) > 2):
                try:
                    num = int(arg_fields[2][:-2])
                except:
                    error = ('Invalid size parameter: %s' % arg_fields[2])
                    return self.help_wrapper(error, 'add')
                suffix = arg_fields[2][-2:].lower()
                if (suffix == 'mb'):
                    multiplier = multiplier ** 1
                elif (suffix == 'gb'):
                    multiplier = multiplier ** 2
                elif (suffix == 'tb'):
                    multiplier = multiplier ** 3
                elif (suffix == 'pb'):
                    multiplier = multiplier ** 4
                else:
                    error = ('Invalid size suffix: %s. must be one of '
                             'MB, GB, TB or PB' % suffix)
                    return self.help_wrapper(error, 'add')
            else:
                error = 'Invalid size parameter: %s' % arg_fields[2]
                return self.help_wrapper(error, 'add')
        size = num * multiplier
        input_data = {'pool' : arg_fields[1],
                      'size': size,}
        url = ('%s%s' % (self.url, arg_fields[0]))
        share_info = api_call(url, data=input_data, calltype='post')
        print_share_info(share_info)
Exemplo n.º 47
0
    def do_list(self, args):
        """
        List all replication jobs, or optionally for a share

        list <share_name>
        """
        ro = api_call(self.url)
        print ro
Exemplo n.º 48
0
 def do_disks(self, args):
     """
     Discover and setup disks.
     """
     url = BaseConsole.url + 'tools/sysdisks/'
     result = api_call(url, calltype='post')
     print("Setup is complete")
     print_disk_info(result)
Exemplo n.º 49
0
 def do_data(self, args):
     if args is not None:
         tap_fields = args.split()
         url = "%s%s/%s/data?%s" % (self.baseurl, tap_fields[0], tap_fields[1], tap_fields[2])
         stap_info = api_call(url)
         print stap_info
     else:
         return self.do_help(args)
Exemplo n.º 50
0
 def do_stop(self, args):
     if args is not None:
         tap_fields = args.split()
         url = "%s%s/%s/stop" % (self.baseurl, tap_fields[0], tap_fields[1])
         stap_info = api_call(url, data=None, calltype="post")
         print stap_info
     else:
         return self.do_help(args)
Exemplo n.º 51
0
    def do_scan(self, args):
        """
        scan the system for any new network interfaces

        scan
        """
        network_info = api_call(self.baseurl, calltype='post')
        print(network_info)
Exemplo n.º 52
0
 def do_list(self, args):
     url = self.baseurl
     if (args is not None):
         tap_fields = args.split()
         if (len(tap_fields) > 0):
             url = url + tap_fields[0] + '/'
     stap_info = api_call(url)
     print stap_info
Exemplo n.º 53
0
 def do_delete(self, args):
     if (len(args) > 0):
         username = args.split()[0]
         url = ('%s%s' % (self.base_url, username))
         user_info = api_call(url, calltype='delete')
         print user_info
     else:
         self.do_help(args)
Exemplo n.º 54
0
    def do_list(self, args):
        """
        List all replication jobs, or optionally for a share

        list <share_name>
        """
        ro = api_call(self.url)
        print ro
Exemplo n.º 55
0
    def do_list(self, args):
        """
        List all backup policies

        list
        """
        ro = api_call(self.url)
        print(ro)
Exemplo n.º 56
0
 def do_run(self, args):
     tap_fields = args.split()
     if (len(tap_fields) > 0):
         tname = tap_fields[0]
         url = ('%ssm/stap/%s/' % (BaseConsole.url, tname))
         stap_info = api_call(url, data=None, calltype='post')
         print stap_info
     else:
         return self.do_help(args)
Exemplo n.º 57
0
 def do_passwd(self, args):
     if (len(args) > 0):
         username, pw = args.split()
         data = {'password': pw}
         url = ('%s%s/' % (self.base_url, username))
         user_info = api_call(url, data=data, calltype='put')
         print user_info
     else:
         self.do_help(args)