Esempio n. 1
0
 def __init__(self, baseUrl, realm, secret, userName, password):
     self.baseUrl = baseUrl
     self.realm = realm
     self.secret = secret
     self.accessToken = self.__getAccessToken(userName, password)
     self.client = restclient.RestClient(baseUrl, realm, self.accessToken)
     self.encoder = json.JSONEncoder()
Esempio n. 2
0
    def setup_create(self):
        rest = restclient.RestClient(self.server, self.port,
                                     {'debug': self.debug})
        if self.remote_cluster:
            rest.setParam('name', self.remote_cluster)
        else:
            rest.setParam('name', 'remote cluster')
        if self.remote_hostname:
            rest.setParam('hostname', self.remote_hostname)
        else:
            print "Error: hostname (ip) is missing"
            return

        if self.remote_username:
            rest.setParam('username', self.remote_username)
        else:
            rest.setParam('username', "username")
        if self.remote_password:
            rest.setParam('password', self.remote_password)
        else:
            rest.setParam('password', "password")

        opts = {
            'error_msg':
            "unable to set up xdcr remote site %s" % self.remote_cluster,
            'success_msg': "init %s" % self.remote_cluster
        }
        output_result = rest.restCmd('POST', self.rest_cmd, self.user,
                                     self.password, opts)
        print output_result
Esempio n. 3
0
    def setup_edit(self):
        rest = restclient.RestClient(self.server, self.port,
                                     {'debug': self.debug})
        if self.remote_cluster:
            rest.setParam('name', self.remote_cluster)
            self.rest_cmd = self.rest_cmd + "/" + self.remote_cluster
        else:
            print "Error: Cluster name is needed to edit cluster connections"
            return
        if self.remote_hostname:
            rest.setParam('hostname', self.remote_hostname)
        else:
            print "Error: hostname (ip) is missing"
            return
        if self.remote_username:
            rest.setParam('username', self.remote_username)
        else:
            rest.setParam('username', "username")
        if self.remote_password:
            rest.setParam('password', self.remote_password)
        else:
            rest.setParam('password', "password")

        opts = {
            'error_msg':
            "unable to edit xdcr remote site %s" % self.remote_cluster,
            'success_msg': "edit cluster %s" % self.remote_cluster
        }
        output_result = rest.restCmd('POST', self.rest_cmd, self.user,
                                     self.password, opts)
        print output_result
Esempio n. 4
0
    def runCmd(self, cmd, server, port, user, password, opts):
        for (o, a) in opts:
            if o == '-d' or o == '--debug':
                self.debug = True

        rest = restclient.RestClient(server, port, {'debug': self.debug})
        opts = {'error_msg': 'server-info error'}

        data = rest.restCmd('GET', '/nodes/self', user, password, opts)

        json = rest.getJson(data)

        for x in ['license', 'licenseValid', 'licenseValidUntil']:
            if x in json:
                del (json[x])

        if cmd == 'get-server-info':
            return json
        elif cmd == 'server-eshell':
            name = self._remoteShellName()
            p = subprocess.call([
                'erl', '-name', name, '-setcookie', json['otpCookie'],
                '-hidden', '-remsh', json['otpNode']
            ])
        else:
            print simplejson.dumps(json, sort_keys=True, indent=2)
Esempio n. 5
0
    def runCmd(self, cmd, server, port, user, password, opts):
        opts = {}
        opts['error_msg'] = "unable to %s" % cmd
        opts['success_msg'] = "%s" % cmd

        #print server, port, cmd, self.rest_cmd
        rest = restclient.RestClient(server, port, {'debug': self.debug})
        data = rest.restCmd(methods[cmd], self.rest_cmd, user, password, opts)
        return rest.getJson(data)
Esempio n. 6
0
    def getData(self, server, port, user, password):
        """
        getData()

        Obtain the raw json output from the server
        The reason for passing arguments which could be obtained
        from 'self' is because getData() must be callable externally
    """
        self.rest = restclient.RestClient(server, port, {'debug': self.debug})
        return self.rest.restCmd('GET', self.rest_cmd, user, password)
Esempio n. 7
0
def getRequest(node):
    global logger
    if node['client'] == None:
        endpoint = copy.copy(get(node, 'endpoint'))
        endpoint['password'] = "******"
        #logger.logDebug("Creating REST client with config: %s ..." % endpoint)
        print("Creating REST client with config: %s ..." % endpoint)
        node['client'] = restclient.RestClient(get(node, 'endpoint'))
        #logger.logDebug("Initialized REST client: %s" % node['client'])
        print("Initialized REST client: %s" % node['client'])
    return node['client'].getRequest()
Esempio n. 8
0
    def compact_view(self, rest, server, port, bucket_name):
        opts = {}
        opts[
            'error_msg'] = "unable to compact view; please check your username (-u) and password (-p);"
        opts['success_msg'] = "compact view for bucket"

        rest_query = restclient.RestClient(server, port, {'debug': self.debug})
        rest_cmd = '/pools/default/buckets/%s/ddocs' % bucket_name
        ddoc_info = rest_query.restCmd('GET', rest_cmd, self.user,
                                       self.password, opts)
        json = rest_query.getJson(ddoc_info)
        for row in json["rows"]:
            cmd = row["controllers"]["compact"]
            data = rest.restCmd('POST', cmd, self.user, self.password, opts)
            print data
Esempio n. 9
0
    def setup_delete(self):
        rest = restclient.RestClient(self.server, self.port,
                                     {'debug': self.debug})
        if self.remote_cluster:
            self.rest_cmd = self.rest_cmd + "/" + self.remote_cluster
        else:
            print "Error: Cluster name is needed to delete cluster connections"
            return

        opts = {
            'error_msg': "unable to delete xdcr remote site %s" % self.server,
            'success_msg': "delete %s" % self.remote_cluster
        }
        output_result = rest.restCmd('DELETE', self.rest_cmd, self.user,
                                     self.password, opts)
        print output_result
Esempio n. 10
0
    def replicate_stop(self):
        rest = restclient.RestClient(self.server, self.port,
                                     {'debug': self.debug})
        if self.replicator:
            self.rest_cmd = '/controller/cancelXCDR/' + urllib.quote_plus(
                self.replicator)
        else:
            print "Error: option --xdcr-replicator is needed to delete a replication"
            return

        opts = {
            'error_msg': "unable to delete replication",
            'success_msg': "delete replication"
        }
        output_result = rest.restCmd('DELETE', self.rest_cmd, self.user,
                                     self.password, opts)
        print output_result
Esempio n. 11
0
    def setting(self):
        rest = restclient.RestClient(self.server, self.port,
                                     {'debug': self.debug})
        opts = {
            'error_msg': "unable to set xdcr internal settings",
            'success_msg': "set xdcr settings"
        }

        if self.max_stream:
            rest.setParam('xdcrMaxConcurrentReps', self.max_stream)
            opts['success_msg'] += ' xdcrMaxConcurrentReps'

        if self.checkpoint_interval:
            rest.setParam('xdcrCheckpointInterval', self.checkpoint_interval)
            opts['success_msg'] += ' xdcrCheckpointInterval'

        if self.worker_batch_size:
            rest.setParam('xdcrWorkerBatchSize', self.worker_batch_size)
            opts['success_msg'] += ' xdcrWorkerBatchSize'

        if self.doc_batch_size:
            rest.setParam('xdcrDocBatchSizeKb', self.doc_batch_size)
            opts['success_msg'] += ' xdcrDocBatchSizeKb'

        if self.failure_restart_interval:
            rest.setParam('xdcrFailureRestartInterval',
                          self.failure_restart_interval)
            opts['success_msg'] += ' xdcrFailureRestartInterval'

        if self.optimistic_replication_threshold:
            rest.setParam('xdcrOptimisticReplicationThreshold',
                          self.optimistic_replication_threshold)
            opts['success_msg'] += ' xdcrOptimisticReplicationThreshold'

        output_result = rest.restCmd(self.method, self.rest_cmd, self.user,
                                     self.password, opts)
        print output_result
Esempio n. 12
0
    def replicate_start(self):
        rest = restclient.RestClient(self.server, self.port,
                                     {'debug': self.debug})
        if self.to_bucket:
            rest.setParam('toBucket', self.to_bucket)

        if self.remote_cluster:
            rest.setParam('toCluster', self.remote_cluster)

        if self.from_bucket:
            rest.setParam('fromBucket', self.from_bucket)

        if self.replication_mode:
            rest.setParam('type', self.replication_mode)

        rest.setParam('replicationType', 'continuous')

        opts = {
            'error_msg': "unable to create replication",
            'success_msg': "start replication"
        }
        output_result = rest.restCmd(self.method, self.rest_cmd, self.user,
                                     self.password, opts)
        print output_result
Esempio n. 13
0
    def runCmd(self, cmd, server, port, user, password, opts):
        self.user = user
        self.password = password

        bucketname = ''
        buckettype = ''
        authtype = 'sasl'
        bucketport = '11211'
        bucketpassword = ''
        bucketramsize = ''
        bucketreplication = '1'
        output = 'default'
        wait_for_bucket_ready = False
        enable_flush = None
        enable_replica_index = None
        force = False
        compact_data_only = False
        compact_view_only = False

        for (o, a) in opts:
            if o in ('-b', '--bucket'):
                bucketname = a
            elif o == '--bucket-type':
                buckettype = a
            elif o == '--bucket-port':
                bucketport = a
            elif o == '--bucket-password':
                bucketpassword = a
            elif o == '--bucket-ramsize':
                bucketramsize = a
            elif o == '--bucket-replica':
                bucketreplication = a
            elif o == '-d' or o == '--debug':
                self.debug = True
            elif o in ('-o', '--output'):
                output = a
            elif o == '--enable-flush':
                enable_flush = a
            elif o == '--enable-index-replica':
                enable_replica_index = a
            elif o == '--wait':
                wait_for_bucket_ready = True
            elif o == '--force':
                force = True
            elif o == '--data-only':
                compact_data_only = True
            elif o == '--view-only':
                compact_view_only = True

        self.rest_cmd = rest_cmds[cmd]
        rest = restclient.RestClient(server, port, {'debug': self.debug})

        # get the parameters straight
        opts = {}
        opts[
            'error_msg'] = "unable to %s; please check your username (-u) and password (-p);" % cmd
        opts['success_msg'] = "%s" % cmd

        if cmd in ('bucket-create', 'bucket-edit'):
            if bucketname:
                rest.setParam('name', bucketname)
                if bucketname == "default":
                    if bucketport and bucketport != "11211":
                        usage("default bucket must be on port 11211.")
                    if bucketpassword:
                        usage(
                            "default bucket should only have empty password.")
                    authtype = 'sasl'
                else:
                    if bucketport == "11211":
                        authtype = 'sasl'
                    else:
                        authtype = 'none'
                        if bucketpassword:
                            usage(
                                "a sasl bucket is supported only on port 11211."
                            )
            if buckettype:
                rest.setParam('bucketType', buckettype)
            if authtype:
                rest.setParam('authType', authtype)
            if bucketport:
                rest.setParam('proxyPort', bucketport)
            if bucketpassword:
                rest.setParam('saslPassword', bucketpassword)
            if bucketramsize:
                rest.setParam('ramQuotaMB', bucketramsize)
            if bucketreplication:
                rest.setParam('replicaNumber', bucketreplication)
            if enable_flush:
                rest.setParam('flushEnabled', enable_flush)
            if enable_replica_index and cmd == 'bucket-create':
                rest.setParam('replicaIndex', enable_replica_index)
        if cmd in ('bucket-delete', 'bucket-flush', 'bucket-edit'):
            self.rest_cmd = self.rest_cmd + bucketname
        if cmd == 'bucket-flush':
            self.rest_cmd = self.rest_cmd + '/controller/doFlush'
            if not force:
                question = "Running this command will totally PURGE database data from disk." + \
                           "Do you really want to do it? (Yes/No)"
                confirm = raw_input(question)
                if confirm in ('Y', 'Yes'):
                    print "Database data will be purged from disk ..."
                else:
                    print "Database data will not be purged. Done."
                    return False
            else:
                print "Database data will be purged from disk ..."
            opts[
                'error_msg'] = "unable to %s; please check username/password or if the bucket exists or not;" % cmd
        elif cmd == 'bucket-compact':
            if compact_data_only and compact_view_only:
                print "You cannot compact data only and view only at the same time."
                return False
            elif compact_data_only:
                self.rest_cmd = self.rest_cmd + bucketname + '/controller/compactDatabases'
            elif compact_view_only:
                self.compact_view(rest, server, port, bucketname)
                return True
            else:
                self.rest_cmd = self.rest_cmd + bucketname + '/controller/compactBucket'
        elif cmd == 'bucket-ddocs':
            self.rest_cmd = self.rest_cmd % bucketname

        data = rest.restCmd(methods[cmd], self.rest_cmd, self.user,
                            self.password, opts)

        if cmd in ("bucket-get", "bucket-stats", "bucket-node-stats",
                   "bucket-ddocs"):
            return rest.getJson(data)
        elif cmd == "bucket-list":
            if output == 'json':
                print data
            else:
                json = rest.getJson(data)
                for bucket in json:
                    print '%s' % bucket['name']
                    print ' bucketType: %s' % bucket['bucketType']
                    print ' authType: %s' % bucket['authType']
                    if bucket['authType'] == "sasl":
                        print ' saslPassword: %s' % bucket['saslPassword']
                    else:
                        print ' proxyPort: %s' % bucket['proxyPort']
                    print ' numReplicas: %s' % bucket['replicaNumber']
                    print ' ramQuota: %s' % bucket['quota']['ram']
                    print ' ramUsed: %s' % bucket['basicStats']['memUsed']
        elif cmd == "bucket-create" and wait_for_bucket_ready:
            rest_query = restclient.RestClient(server, port,
                                               {'debug': self.debug})
            timeout_in_seconds = 120
            start = time.time()
            # Make sure the bucket exists before querying its status
            bucket_exist = False
            while (time.time() -
                   start) <= timeout_in_seconds and not bucket_exist:
                buckets = rest_query.restCmd('GET', rest_cmds['bucket-list'],
                                             self.user, self.password, opts)
                for bucket in rest_query.getJson(buckets):
                    if bucket["name"] == bucketname:
                        bucket_exist = True
                        break
                if not bucket_exist:
                    sys.stderr.write(".")
                    time.sleep(2)

            if not bucket_exist:
                print "\nFail to create bucket '%s' within %s seconds" %\
                      (bucketname, timeout_in_seconds)
                return False

            #Query status for all bucket nodes
            while (time.time() - start) <= timeout_in_seconds:
                bucket_info = rest_query.restCmd(
                    'GET', rest_cmds['bucket-info'] % bucketname, self.user,
                    self.password, opts)
                json = rest_query.getJson(bucket_info)
                all_node_ready = True
                for node in json["nodes"]:
                    if node["status"] != "healthy":
                        all_node_ready = False
                        break
                if all_node_ready:
                    if output == 'json':
                        print rest.jsonMessage(data)
                    else:
                        print data
                    return True
                else:
                    sys.stderr.write(".")
                    time.sleep(2)

            print "\nBucket '%s' is created but not ready to use within %s seconds" %\
                 (bucketname, timeout_in_seconds)
            return False
        else:
            if output == 'json':
                print rest.jsonMessage(data)
            else:
                print data
Esempio n. 14
0
    def runCmd(self, cmd, server, port, user, password, opts):
        self.user = user
        self.password = password

        bucketname = ''
        buckettype = ''
        authtype = 'sasl'
        bucketport = '11211'
        bucketpassword = ''
        bucketramsize = ''
        bucketreplication = '1'
        output = 'default'
        wait_for_bucket_ready = False

        for (o, a) in opts:
            if o == '-b' or o == '--bucket':
                bucketname = a
            if o == '--bucket-type':
                buckettype = a
            if o == '--bucket-port':
                bucketport = a
            if o == '--bucket-password':
                bucketpassword = a
            if o == '--bucket-ramsize':
                bucketramsize = a
            if o == '--bucket-replica':
                bucketreplication = a
            if o == '-d' or o == '--debug':
                self.debug = True
            if o in ('-o', '--output'):
                output = a
            if o == '--wait':
                wait_for_bucket_ready = True

        self.rest_cmd = rest_cmds[cmd]
        rest = restclient.RestClient(server, port, {'debug': self.debug})

        # get the parameters straight

        if cmd in ('bucket-create', 'bucket-edit'):
            if bucketname:
                rest.setParam('name', bucketname)
                if bucketname == "default":
                    if bucketport and bucketport != "11211":
                        usage("default bucket must be on port 11211.")
                    if bucketpassword:
                        usage(
                            "default bucket should only have empty password.")
                    authtype = 'sasl'
                else:
                    if bucketport == "11211":
                        authtype = 'sasl'
                    else:
                        authtype = 'none'
                        if bucketpassword:
                            usage(
                                "a sasl bucket is supported only on port 11211."
                            )
            if buckettype:
                rest.setParam('bucketType', buckettype)
            if authtype:
                rest.setParam('authType', authtype)
            if bucketport:
                rest.setParam('proxyPort', bucketport)
            if bucketpassword:
                rest.setParam('saslPassword', bucketpassword)
            if bucketramsize:
                rest.setParam('ramQuotaMB', bucketramsize)
            if bucketreplication:
                rest.setParam('replicaNumber', bucketreplication)
        if cmd in ('bucket-delete', 'bucket-flush', 'bucket-edit'):
            self.rest_cmd = self.rest_cmd + bucketname
        if cmd == 'bucket-flush':
            self.rest_cmd = self.rest_cmd + '/controller/doFlush'

        opts = {}
        opts[
            'error_msg'] = "unable to %s; please check your username (-u) and password (-p);" % cmd
        opts['success_msg'] = "%s" % cmd
        data = rest.restCmd(methods[cmd], self.rest_cmd, self.user,
                            self.password, opts)

        if cmd in ("bucket-get", "bucket-stats", "bucket-node-stats"):
            return rest.getJson(data)
        elif cmd == "bucket-list":
            if output == 'json':
                print data
            else:
                json = rest.getJson(data)
                for bucket in json:
                    print '%s' % bucket['name']
                    print ' bucketType: %s' % bucket['bucketType']
                    print ' authType: %s' % bucket['authType']
                    if bucket['authType'] == "sasl":
                        print ' saslPassword: %s' % bucket['saslPassword']
                    else:
                        print ' proxyPort: %s' % bucket['proxyPort']
                    print ' numReplicas: %s' % bucket['replicaNumber']
                    print ' ramQuota: %s' % bucket['quota']['ram']
                    print ' ramUsed: %s' % bucket['basicStats']['memUsed']
        elif cmd == "bucket-create" and wait_for_bucket_ready:
            rest_query = restclient.RestClient(server, port,
                                               {'debug': self.debug})
            timeout_in_seconds = 120
            start = time.time()
            # Make sure the bucket exists before querying its status
            bucket_exist = False
            while (time.time() -
                   start) <= timeout_in_seconds and not bucket_exist:
                buckets = rest_query.restCmd('GET', rest_cmds['bucket-list'],
                                             self.user, self.password, opts)
                for bucket in rest_query.getJson(buckets):
                    if bucket["name"] == bucketname:
                        bucket_exist = True
                        break
                if not bucket_exist:
                    sys.stderr.write(".")
                    time.sleep(2)

            if not bucket_exist:
                print "\nFail to create bucket '%s' within %s seconds" %\
                      (bucketname, timeout_in_seconds)
                return False

            #Query status for all bucket nodes
            while (time.time() - start) <= timeout_in_seconds:
                bucket_info = rest_query.restCmd(
                    'GET', rest_cmds['bucket-info'] % bucketname, self.user,
                    self.password, opts)
                json = rest_query.getJson(bucket_info)
                all_node_ready = True
                for node in json["nodes"]:
                    if node["status"] != "healthy":
                        all_node_ready = False
                        break
                if all_node_ready:
                    if output == 'json':
                        print rest.jsonMessage(data)
                    else:
                        print data
                    return True
                else:
                    sys.stderr.write(".")
                    time.sleep(2)

            print "\nBucket '%s' is created but not ready to use within %s seconds" %\
                 (bucketname, timeout_in_seconds)
            return False
        else:
            if output == 'json':
                print rest.jsonMessage(data)
            else:
                print data
Esempio n. 15
0
 def __init__(self, baseUrl, realm, accessToken):
     self.baseUrl = baseUrl
     self.realm = realm
     self.client = restclient.RestClient(baseUrl, realm, accessToken)
Esempio n. 16
0
def restclient_factory(server, port, debug, ssl=False):
    if ssl:
        return restclient.SslRestClient(server, port, debug)
    else:
        return restclient.RestClient(server, port, debug)
Esempio n. 17
0
    def runCmd(self, cmd, server, port,
               user, password, opts):
        self.user = user
        self.password = password

        bucketname = ''
        buckettype = ''
        authtype = ''
        bucketport = ''
        bucketpassword = ''
        bucketramsize = ''
        bucketreplication = ''
        output = 'default'

        for (o, a) in opts:
            if o == '-b' or o == '--bucket':
                bucketname = a
            if o == '--bucket-type':
                buckettype = a
            if o == '--bucket-port':
                bucketport = a
                authtype = 'none'
            if o == '--bucket-password':
                bucketpassword = a
                authtype = 'sasl'
            if o == '--bucket-ramsize':
                bucketramsize = a
            if o == '--bucket-replica':
                bucketreplication = a
            if o == '-d' or o == '--debug':
                self.debug = True
            if o in  ('-o', '--output'):
                output = a

        self.rest_cmd = rest_cmds[cmd]

        rest = restclient.RestClient(server, port, {'debug':self.debug})

        # get the parameters straight

        if cmd in ('bucket-create', 'bucket-edit'):
            if bucketname:
                rest.setParam('name', bucketname)
                if bucketname == "default":
                    if bucketport and bucketport != "11211":
                        usage("default bucket must be on port 11211.")
                    if bucketpassword:
                        usage("default bucket should only have empty password.")
                else:
                    if bucketpassword and bucketport and bucketport != "11211":
                        usage("a sasl bucket is supported only on port 11211.")
            if buckettype:
                rest.setParam('bucketType', buckettype)
            if authtype:
                rest.setParam('authType', authtype)
            if bucketport:
                rest.setParam('proxyPort', bucketport)
            if bucketpassword:
                rest.setParam('saslPassword', bucketpassword)
            if bucketramsize:
                rest.setParam('ramQuotaMB', bucketramsize)
            if bucketreplication:
                rest.setParam('replicaNumber', bucketreplication)
        if cmd in ('bucket-delete', 'bucket-flush', 'bucket-edit'):
            self.rest_cmd = self.rest_cmd + bucketname
        if cmd == 'bucket-flush':
            self.rest_cmd = self.rest_cmd + '/controller/doFlush'

        opts = {}
        opts['error_msg'] = "unable to %s" % cmd
        opts['success_msg'] = "%s" % cmd

        data = rest.restCmd(methods[cmd], self.rest_cmd,
                            self.user, self.password, opts)

        if cmd == "bucket-list":
            if output == 'json':
                print data
            else:
                json = rest.getJson(data)
                for bucket in json:
                    print '%s' % bucket['name']
                    print ' bucketType: %s' % bucket['bucketType']
                    print ' authType: %s' % bucket['authType']
                    if bucket['authType'] == "sasl":
                        print ' saslPassword: %s' % bucket['saslPassword']
                    else:
                        print ' proxyPort: %s' % bucket['proxyPort']
                    print ' numReplicas: %s' % bucket['replicaNumber']
                    print ' ramQuota: %s' % bucket['quota']['ram']
                    print ' ramUsed: %s' % bucket['basicStats']['memUsed']
        else:
            if output == 'json':
                print rest.jsonMessage(data)
            else:
                print data