integ/ceph/python-cephclient/python-cephclient/0001-US70398-Ceph-Rebase-Up...

476 lines
19 KiB
Diff

From 2253242390ed6dfd1206ae2743ccab4c28437d13 Mon Sep 17 00:00:00 2001
From: Robert Church <robert.church@windriver.com>
Date: Tue, 24 Nov 2015 20:37:39 -0600
Subject: [PATCH] US70398: Ceph Rebase - Update REST API to 0.94.5
Add support for all APIs currently present in the Ceph REST API. This
provides a version 0.94.5 compliant client and include client calls that
were present previously but never added to the python-cephclient.
---
cephclient/wrapper.py | 281 +++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 269 insertions(+), 12 deletions(-)
diff --git a/cephclient/wrapper.py b/cephclient/wrapper.py
index 867b68b..871b53a 100644
--- a/cephclient/wrapper.py
+++ b/cephclient/wrapper.py
@@ -58,6 +58,9 @@ class CephWrapper(client.CephClient):
def status(self, **kwargs):
return self.get('status', **kwargs)
+ def version(self, **kwargs):
+ return self.get('version', **kwargs)
+
###
# root PUT calls
###
@@ -83,6 +86,16 @@ class CephWrapper(client.CephClient):
def scrub(self, **kwargs):
return self.put('scrub', **kwargs)
+ def sync(self, validate1=None, validate2=None, **kwargs):
+ request = []
+ request.append('sync/force')
+ if validate1 is not None:
+ request.append('?validate1={0}'.format(validate1))
+ if validate2 is not None:
+ request.append('validate2={0}'.format(validate2))
+
+ return self.put(''.join(request), **kwargs)
+
def tell(self, target, args, **kwargs):
return self.put('tell?target={0}&args={1}'
.format(target, args), **kwargs)
@@ -191,6 +204,44 @@ class CephWrapper(client.CephClient):
return self.get('config-key/list', **kwargs)
###
+ # config-key PUT calls
+ ###
+ def config_key_del(self, key, **kwargs):
+ return self.put('config-key/del?key={0}'
+ .format(key), **kwargs)
+
+ def config_key_put(self, key, val, **kwargs):
+ return self.put('config-key/put?key={0}&val={1}'
+ .format(key, val), **kwargs)
+
+ ###
+ # fs GET calls
+ ###
+ def fs_ls(self, **kwargs):
+ return self.get('fs/ls', **kwargs)
+
+ ###
+ # fs PUT calls
+ ###
+ def fs_new(self, fs_name, metadata, data, **kwargs):
+ return self.put('fs/new?fs_name={0}&metadata={1}&data={2}'
+ .format(fs_name, metadata, data), **kwargs)
+
+ def fs_reset(self, fs_name, sure=None, **kwargs):
+ request = []
+ request.append('fs/reset?fs_name={0}'.format(fs_name))
+ if sure is not None:
+ request.append('&sure={0}'.format(sure))
+ return self.put(''.join(request), **kwargs)
+
+ def fs_rm(self, fs_name, sure=None, **kwargs):
+ request = []
+ request.append('fs/rm?fs_name={0}'.format(fs_name))
+ if sure is not None:
+ request.append('&sure={0}'.format(sure))
+ return self.put(''.join(request), **kwargs)
+
+ ###
# mds GET calls
###
def mds_compat_show(self, **kwargs):
@@ -244,9 +295,13 @@ class CephWrapper(client.CephClient):
return self.put('mds/fail?who={0}'
.format(who), **kwargs)
- def mds_newfs(self, metadata, data, sure, **kwargs):
- return self.put('mds/newfs?metadata={0}&data={1}&sure={2}'
- .format(metadata, data, sure), **kwargs)
+ def mds_newfs(self, metadata, data, sure=None, **kwargs):
+ if sure is not None:
+ return self.put('mds/newfs?metadata={0}&data={1}&sure={2}'
+ .format(metadata, data, sure), **kwargs)
+ else:
+ return self.put('mds/newfs?metadata={0}&data={1}'
+ .format(metadata, data), **kwargs)
def mds_remove_data_pool(self, pool, **kwargs):
return self.put('mds/remove_data_pool?pool={0}'
@@ -260,11 +315,29 @@ class CephWrapper(client.CephClient):
return self.put('mds/rmfailed?who={0}'
.format(who), **kwargs)
- def mds_set_allow_new_snaps(self, sure, **kwargs):
- """
- mds/set?key=allow_new_snaps&sure=
- """
- raise exceptions.FunctionNotImplemented()
+ def mds_set_max_file_size(self, val, confirm=None, **kwargs):
+ if confirm is not None:
+ return self.put('mds/set?var=max_file_size?val={0}&confirm={1}'
+ .format(val, confirm), **kwargs)
+ else:
+ return self.put('mds/set?var=max_file_size?val={0}'
+ .format(val), **kwargs)
+
+ def mds_set_allow_new_snaps(self, val, confirm=None, **kwargs):
+ if confirm is not None:
+ return self.put('mds/set?var=allow_new_snaps?val={0}&confirm={1}'
+ .format(val, confirm), **kwargs)
+ else:
+ return self.put('mds/set?var=allow_new_snaps?val={0}'
+ .format(val), **kwargs)
+
+ def mds_set_inline_data(self, val, confirm=None, **kwargs):
+ if confirm is not None:
+ return self.put('mds/set?var=inline_data?val={0}&confirm={1}'
+ .format(val, confirm), **kwargs)
+ else:
+ return self.put('mds/set?var=inline_data?val={0}'
+ .format(val), **kwargs)
def mds_set_max_mds(self, maxmds, **kwargs):
return self.put('mds/set_max_mds?maxmds={0}'
@@ -332,6 +405,9 @@ class CephWrapper(client.CephClient):
def osd_blacklist_ls(self, **kwargs):
return self.get('osd/blacklist/ls', **kwargs)
+ def osd_blocked_by(self, **kwargs):
+ return self.get('osd/blocked-by', **kwargs)
+
def osd_crush_dump(self, **kwargs):
return self.get('osd/crush/dump', **kwargs)
@@ -348,6 +424,19 @@ class CephWrapper(client.CephClient):
def osd_crush_rule_ls(self, **kwargs):
return self.get('osd/crush/rule/ls', **kwargs)
+ def osd_crush_show_tunables(self, **kwargs):
+ return self.get('osd/crush/show-tunables', **kwargs)
+
+ def osd_crush_tree(self, **kwargs):
+ return self.get('osd/crush/tree', **kwargs)
+
+ def osd_df(self, output_method=None, **kwargs):
+ if output_method is not None:
+ return self.get('osd/df?output_method={0}'
+ .format(output_method), **kwargs)
+ else:
+ return self.get('osd/df', **kwargs)
+
def osd_dump(self, epoch=None, **kwargs):
if epoch is not None:
return self.get('osd/dump?epoch={0}'
@@ -355,6 +444,13 @@ class CephWrapper(client.CephClient):
else:
return self.get('osd/dump', **kwargs)
+ def osd_erasure_code_profile_get(self, name, **kwargs):
+ return self.get('osd/erasure-code-profile/get?name={0}'
+ .format(name), **kwargs)
+
+ def osd_erasure_code_profile_ls(self, **kwargs):
+ return self.get('osd/erasure-code-profile/ls', **kwargs)
+
def osd_find(self, id, **kwargs):
return self.get('osd/find?id={0}'
.format(id), **kwargs)
@@ -398,9 +494,17 @@ class CephWrapper(client.CephClient):
return self.get('osd/map?pool={0}&object={1}'
.format(pool, object), **kwargs)
+ def osd_metadata(self, id, **kwargs):
+ return self.get('osd/metadata?id={0}'
+ .format(id), **kwargs)
+
def osd_perf(self, **kwargs):
return self.get('osd/perf', **kwargs)
+ def osd_get_pool_param(self, pool, var, **kwargs):
+ return self.get('osd/pool/get?pool={0}&var={1}'
+ .format(pool, var), **kwargs)
+
def osd_pool_get(self, pool, var, **kwargs):
return self.get('osd/pool/get?pool={0}&var={1}'
.format(pool, var), **kwargs)
@@ -416,6 +520,13 @@ class CephWrapper(client.CephClient):
return self.get('osd/pool/get-quota?pool={0}'
.format(pool), **kwargs)
+ def osd_pool_ls(self, detail=None, **kwargs):
+ if detail is not None:
+ return self.get('osd/pool/ls?detail={0}'
+ .format(detail), **kwargs)
+ else:
+ return self.get('osd/pool/ls', **kwargs)
+
def osd_stat(self, **kwargs):
return self.get('osd/stat', **kwargs)
@@ -449,6 +560,10 @@ class CephWrapper(client.CephClient):
return self.put('osd/crush/create-or-move?id={0}&weight={1}&args={2}'
.format(id, weight, args), **kwargs)
+ def osd_crush_get_tunable(self, tunable, **kwargs):
+ return self.put('osd/crush/get-tunable?tunable={0}'
+ .format(tunable), **kwargs)
+
def osd_crush_link(self, name, args, **kwargs):
return self.put('osd/crush/link?name={0}&args={2}'
.format(name, args), **kwargs)
@@ -465,10 +580,21 @@ class CephWrapper(client.CephClient):
return self.put('osd/crush/remove?name={0}'
.format(name), **kwargs)
+ def osd_crush_rename_bucket(self, srcname, dstname, **kwargs):
+ return self.put('osd/crush/rename-bucket?srcname={0}&dstname={1}'
+ .format(srcname, dstname), **kwargs)
+
def osd_crush_reweight(self, name, weight, **kwargs):
return self.put('osd/crush/reweight?name={0}&weight={1}'
.format(name, weight), **kwargs)
+ def osd_crush_reweight_all(self, **kwargs):
+ return self.put('osd/crush/reweight-all', **kwargs)
+
+ def osd_crush_reweight_subtree(self, name, weight, **kwargs):
+ return self.put('osd/crush/reweight-subtree?name={0}&weight={1}'
+ .format(name, weight), **kwargs)
+
def osd_crush_rm(self, name, ancestor, **kwargs):
if ancestor is not None:
return self.put('osd/crush/rm?name={0}&ancestor={1}'
@@ -477,6 +603,11 @@ class CephWrapper(client.CephClient):
return self.put('osd/crush/rm?name={0}'
.format(name), **kwargs)
+ def osd_crush_rule_create_erasure(self, name, profile, **kwargs):
+ return self.put(
+ 'osd/crush/rule/create-erasure?name={0}&profile={1}'
+ .format(name, profile), **kwargs)
+
def osd_crush_rule_create_simple(self, name, root,
type, mode=None, **kwargs):
if mode is not None:
@@ -496,6 +627,10 @@ class CephWrapper(client.CephClient):
return self.put('osd/crush/set?id={0}&weight={1}&args={2}'
.format(id, weight, args), **kwargs)
+ def osd_crush_set_tunable(self, tunable, value, **kwargs):
+ return self.put('osd/crush/set-tunable?tunable={0}&value={1}'
+ .format(tunable), **kwargs)
+
def osd_crush_tunables(self, profile, **kwargs):
return self.put('osd/crush/tunables?profile={0}'
.format(profile), **kwargs)
@@ -516,6 +651,18 @@ class CephWrapper(client.CephClient):
return self.put('osd/down?ids={0}'
.format(ids), **kwargs)
+ def osd_erasure_code_profile_rm(self, name, **kwargs):
+ return self.put('osd/erasure-code-profile/rm?name={0}'
+ .format(name), **kwargs)
+
+ def osd_erasure_code_profile_set(self, name, profile=None, **kwargs):
+ if profile is not None:
+ return self.put('osd/erasure-code-profile/set?name={0}&profile={1}'
+ .format(name, profile), **kwargs)
+ else:
+ return self.put('osd/erasure-code-profile/set?name={0}'
+ .format(name), **kwargs)
+
def osd_in(self, ids, **kwargs):
return self.put('osd/in?ids={0}'
.format(ids), **kwargs)
@@ -532,6 +679,17 @@ class CephWrapper(client.CephClient):
return self.put('osd/out?ids={0}'
.format(ids), **kwargs)
+ def osd_pause(self, **kwargs):
+ return self.put('osd/pause', **kwargs)
+
+ def osd_pg_temp(self, pgid, id=None, **kwargs):
+ if id is not None:
+ return self.put('osd/pg-temp?pgid={0}&id={1}'
+ .format(pgid, id), **kwargs)
+ else:
+ return self.put('osd/pg-temp?pgid={0}'
+ .format(pgid), **kwargs)
+
def osd_pool_create(self, pool, pg_num, pgp_num, pool_type=None,
erasure_code_profile=None, ruleset=None,
expected_num_objects=None, **kwargs):
@@ -559,10 +717,6 @@ class CephWrapper(client.CephClient):
request.append('&sure={0}'.format(sure))
return self.put(''.join(request), **kwargs)
- def osd_pool_param(self, pool, var, **kwargs):
- return self.put('osd/pool/get?pool={0}&var={1}'
- .format(pool, var), **kwargs)
-
def osd_pool_mksnap(self, pool, snap, **kwargs):
return self.put('osd/pool/mksnap?pool={0}&snap={1}'
.format(pool, snap), **kwargs)
@@ -583,6 +737,22 @@ class CephWrapper(client.CephClient):
return self.put('osd/pool/set?pool={0}&var={1}&val={2}'
.format(pool, var, val), **kwargs)
+ def osd_pool_set(self, pool, var, val, force=None, **kwargs):
+ if force is not None:
+ return self.put('osd/pool/set?pool={0}&var={1}&val={2}&force={3}'
+ .format(pool, var, val, force), **kwargs)
+ else:
+ return self.put('osd/pool/set?pool={0}&var={1}&val={2}'
+ .format(pool, var, val), **kwargs)
+
+ def osd_primary_affinity(self, id, weight, **kwargs):
+ return self.put('osd/primary-affinity?id={0}&weight={1}'
+ .format(id, weight), **kwargs)
+
+ def osd_primary_temp(self, pgid, id, **kwargs):
+ return self.put('osd/primary-temp?pgid={0}&id={1}'
+ .format(pgid, id), **kwargs)
+
def osd_set_pool_quota(self, pool, field, val, **kwargs):
return self.put('osd/pool/set-quota?pool={0}&field={1}&val={2}'
.format(pool, field, val), **kwargs)
@@ -595,6 +765,10 @@ class CephWrapper(client.CephClient):
return self.put('osd/reweight?id={0}&weight={1}'
.format(id, weight), **kwargs)
+ def osd_reweight_by_pg(self, oload, pools, **kwargs):
+ return self.put('osd/reweight-by-pg?oload={0}&pools={1}'
+ .format(oload, pools), **kwargs)
+
def osd_reweight_by_utilization(self, oload, **kwargs):
return self.put('osd/reweight-by-utilization?oload={0}'
.format(oload), **kwargs)
@@ -611,6 +785,12 @@ class CephWrapper(client.CephClient):
return self.put('osd/set?key={0}'
.format(key), **kwargs)
+ def osd_crushmap(self, **kwargs):
+ """
+ osd/crushmap
+ """
+ raise exceptions.FunctionNotImplemented()
+
def osd_setmaxosd(self, newmax, **kwargs):
return self.put('osd/setmaxosd?newmax={0}'
.format(newmax), **kwargs)
@@ -628,6 +808,11 @@ class CephWrapper(client.CephClient):
return self.put('osd/tier/add?pool={0}&tierpool={1}'
.format(pool, tierpool), **kwargs)
+ def osd_tier_add_cache(self, pool, tierpool, size, **kwargs):
+ return self.put('osd/tier/add-cache?pool={0}&tierpool={1}'
+ '&size={2}'
+ .format(pool, tierpool, size), **kwargs)
+
def osd_tier_cachemode(self, pool, mode, **kwargs):
return self.put('osd/tier/cache-mode?pool={0}&mode={1}'
.format(pool, mode), **kwargs)
@@ -644,6 +829,9 @@ class CephWrapper(client.CephClient):
return self.put('osd/tier/set-overlay?pool={0}&overlaypool={1}'
.format(pool, overlaypool), **kwargs)
+ def osd_unpause(self, key, **kwargs):
+ return self.put('osd/unpause', **kwargs)
+
def osd_unset(self, key, **kwargs):
return self.put('osd/unset?key={0}'
.format(key), **kwargs)
@@ -693,6 +881,44 @@ class CephWrapper(client.CephClient):
return self.get('pg/getmap', **kwargs)
+ def pg_ls(self, pool=None, states=None, **kwargs):
+ request = []
+ request.append('pg/ls')
+ if pool is not None:
+ request.append('?pool={0}'.format(pool))
+ if states is not None:
+ request.append('states={0}'.format(states))
+
+ return self.get(''.join(request), **kwargs)
+
+ def pg_ls_by_osd(self, osd, pool=None, states=None, **kwargs):
+ request = []
+ request.append('pg/ls-by-osd?osd={0}'.format(osd))
+ if pool is not None:
+ request.append('?pool={0}'.format(pool))
+ if states is not None:
+ request.append('states={0}'.format(states))
+
+ return self.get(''.join(request), **kwargs)
+
+ def pg_ls_by_pool(self, poolstr, states=None, **kwargs):
+ if states is not None:
+ return self.get('pg/ls-by-pool?poolstr={0}&states={1}'
+ .format(poolstr, states), **kwargs)
+ else:
+ return self.get('pg/ls-by-pool?poolstr={0}'
+ .format(poolstr), **kwargs)
+
+ def pg_ls_by_primary(self, osd, pool=None, states=None, **kwargs):
+ request = []
+ request.append('pg/ls-by-primary?osd={0}'.format(osd))
+ if pool is not None:
+ request.append('?pool={0}'.format(pool))
+ if states is not None:
+ request.append('states={0}'.format(states))
+
+ return self.get(''.join(request), **kwargs)
+
def pg_map(self, pgid, **kwargs):
return self.get('pg/map?pgid={0}'
.format(pgid), **kwargs)
@@ -701,6 +927,37 @@ class CephWrapper(client.CephClient):
return self.get('pg/stat', **kwargs)
###
+ # pg PUT calls
+ ###
+
+ def pg_deep_scrub(self, pgid, **kwargs):
+ return self.put('pg/deep-scrub?pgid={0}'
+ .format(pgid), **kwargs)
+
+ def pg_force_create_pg(self, pgid, **kwargs):
+ return self.put('pg/force_create_pg?pgid={0}'
+ .format(pgid), **kwargs)
+
+ def pg_repair(self, pgid, **kwargs):
+ return self.put('pg/repair?pgid={0}'
+ .format(pgid), **kwargs)
+
+ def pg_scrub(self, pgid, **kwargs):
+ return self.put('pg/scrub?pgid={0}'
+ .format(pgid), **kwargs)
+
+ def pg_send_pg_creates(self, **kwargs):
+ return self.put('pg/send_pg_creates', **kwargs)
+
+ def pg_set_full_ratio(self, ratio, **kwargs):
+ return self.put('pg/set_full_ratio?ratio={0}'
+ .format(ratio), **kwargs)
+
+ def pg_set_nearfull_ratio(self, ratio, **kwargs):
+ return self.put('pg/set_nearfull_ratio?ratio={0}'
+ .format(ratio), **kwargs)
+
+ ###
# tell GET calls
###
def tell_debug_dump_missing(self, id, filename, **kwargs):
--
2.5.0