Couchbase API 桶创建
Couchbase API bucket creation
我正在尝试使用 requests 模块和 python (3.5) 创建 Couchbase (v.4.6.2) 存储桶,但没有成功。这是代码:
import requests
import json
url = 'http://127.0.0.1:8091/pools/default/buckets'
cdb_login = 'Administrator'
cdb_pass = 'adminpassw0rd'
payload = {'bucketType': 'couchbase',
'authType': 'sasl',
'saslPassword': 'passw0rd',
'name': 'newBucket01',
'ramQuotaMB': 512,
'replicaNumber': 1,
'conflictResolutionType':'lww',
'flushEnabled': 1}
r = requests.post(url, auth=(cdb_login, cdb_pass), data=json.dumps(payload))
print(r.status_code, r.reason, r.text)
响应错误:
400 Bad Request {"errors":{"authType":"invalid authType"},"summaries":{"ramSummary":{"total":4831838208,"otherBuckets":641728512,"nodesCount":1,"perNodeMegs":0,"thisAlloc":0,"thisUsed":0,"free":4190109696},"hddSummary":{"total":317653053440,"otherData":123855113749,"otherBuckets":29577092,"thisUsed":0,"free":193768362599}}}
我试图强制使用 HTTPDigestAuth 而不是像这样的基本默认设置:
r = requests.post(url, auth=requests.auth.HTTPDigestAuth(cdb_login, cdb_pass), data=json.dumps(payload))
它抛出
401 Unauthorized
(注意登录名和密码同上)。所以也不行。
'Administrator' 和 'adminpassw0rd' 是我用来访问 127.0.0.1:8091 的 Couchbase 管理 GUI 的日志记录和密码。如果我使用来自 bash:
的 CURL,这些参数会起作用并创建存储桶
import subprocess
create_bucket_bash = ['curl', '-X', 'POST', '-u', 'Administrator:adminpassw0rd', 'http://127.0.0.1:8091/pools/default/buckets',
'-d', 'name=newBucket01',
'-d', 'conflictResolutionType=lww',
'-d', 'authType=sasl',
'-d', 'ramQuotaMB=512',
'-d', 'saslPassword=passw0rd',
'-d', 'bucketType=couchbase']
subprocess.call(create_bucket_bash)
我在请求中遗漏了什么或做错了什么?
REST 端点需要 URL 编码值而不是 JSON,如果您直接传递有效负载,它应该可以工作。
r = requests.post(url, auth=(cdb_login, cdb_pass), data=payload)
您是否尝试过使用 Python SDK 的集群管理 API?它可以以交互方式为您创建存储桶。
例如:
from couchbase.admin import Admin
admin = Admin('Administrator', 'password', host='10.112.162.101', port=8091)
# create bucket
admin.bucket_create('bucket_name',
bucket_type='couchbase',
bucket_password='passw0rd',
replicas=1,
ram_quota=100,
flush_enabled=False)
# optionally wait for bucket to be ready
admin.wait_ready('bucket_name',
timeout=10.0,
sleep_interval=0.2)
我正在尝试使用 requests 模块和 python (3.5) 创建 Couchbase (v.4.6.2) 存储桶,但没有成功。这是代码:
import requests
import json
url = 'http://127.0.0.1:8091/pools/default/buckets'
cdb_login = 'Administrator'
cdb_pass = 'adminpassw0rd'
payload = {'bucketType': 'couchbase',
'authType': 'sasl',
'saslPassword': 'passw0rd',
'name': 'newBucket01',
'ramQuotaMB': 512,
'replicaNumber': 1,
'conflictResolutionType':'lww',
'flushEnabled': 1}
r = requests.post(url, auth=(cdb_login, cdb_pass), data=json.dumps(payload))
print(r.status_code, r.reason, r.text)
响应错误:
400 Bad Request {"errors":{"authType":"invalid authType"},"summaries":{"ramSummary":{"total":4831838208,"otherBuckets":641728512,"nodesCount":1,"perNodeMegs":0,"thisAlloc":0,"thisUsed":0,"free":4190109696},"hddSummary":{"total":317653053440,"otherData":123855113749,"otherBuckets":29577092,"thisUsed":0,"free":193768362599}}}
我试图强制使用 HTTPDigestAuth 而不是像这样的基本默认设置:
r = requests.post(url, auth=requests.auth.HTTPDigestAuth(cdb_login, cdb_pass), data=json.dumps(payload))
它抛出
401 Unauthorized
(注意登录名和密码同上)。所以也不行。
'Administrator' 和 'adminpassw0rd' 是我用来访问 127.0.0.1:8091 的 Couchbase 管理 GUI 的日志记录和密码。如果我使用来自 bash:
的 CURL,这些参数会起作用并创建存储桶import subprocess
create_bucket_bash = ['curl', '-X', 'POST', '-u', 'Administrator:adminpassw0rd', 'http://127.0.0.1:8091/pools/default/buckets',
'-d', 'name=newBucket01',
'-d', 'conflictResolutionType=lww',
'-d', 'authType=sasl',
'-d', 'ramQuotaMB=512',
'-d', 'saslPassword=passw0rd',
'-d', 'bucketType=couchbase']
subprocess.call(create_bucket_bash)
我在请求中遗漏了什么或做错了什么?
REST 端点需要 URL 编码值而不是 JSON,如果您直接传递有效负载,它应该可以工作。
r = requests.post(url, auth=(cdb_login, cdb_pass), data=payload)
您是否尝试过使用 Python SDK 的集群管理 API?它可以以交互方式为您创建存储桶。
例如:
from couchbase.admin import Admin
admin = Admin('Administrator', 'password', host='10.112.162.101', port=8091)
# create bucket
admin.bucket_create('bucket_name',
bucket_type='couchbase',
bucket_password='passw0rd',
replicas=1,
ram_quota=100,
flush_enabled=False)
# optionally wait for bucket to be ready
admin.wait_ready('bucket_name',
timeout=10.0,
sleep_interval=0.2)