diff --git a/ceph/python-cephclient/centos/build_srpm.data b/ceph/python-cephclient/centos/build_srpm.data deleted file mode 100644 index 42cbb465..00000000 --- a/ceph/python-cephclient/centos/build_srpm.data +++ /dev/null @@ -1,6 +0,0 @@ -CLIENT_NAME=python-cephclient -CLIENT_VER=v0.1.0.5 - -COPY_LIST="$CGCS_BASE/downloads/$CLIENT_NAME-$CLIENT_VER.tar.gz $PKG_BASE/$CLIENT_NAME/*" - -TIS_PATCH_VER=2 diff --git a/ceph/python-cephclient/centos/python-cephclient.spec b/ceph/python-cephclient/centos/python-cephclient.spec deleted file mode 100644 index d31c3f4b..00000000 --- a/ceph/python-cephclient/centos/python-cephclient.spec +++ /dev/null @@ -1,69 +0,0 @@ -%{!?_licensedir:%global license %%doc} -%global pypi_name python-cephclient - -Name: python-cephclient -Version: 0.1.0.5 -Release: 0%{?_tis_dist}.%{tis_patch_ver} -Summary: python-cephclient - -License: Apache-2.0 -URL: https://github.com/dmsimard/python-cephclient -Group: devel/python -Packager: Wind River - -Source0: %{pypi_name}-v%{version}.tar.gz - -Patch0: fix-osd-crush-remove.patch -Patch1: set-default-endpoint.patch -Patch2: 0001-US63903-Ceph-Rebase-Update-REST-API-to-0.94.2.patch -Patch3: add-osd-get-pool-quota.patch -Patch4: 0001-US70398-Ceph-Rebase-Update-REST-API-to-0.94.5.patch -Patch5: fix-osd-tier-add.patch -Patch6: US92424-Ceph-Rebase-Update-REST-API-to-10.2.4.patch - -BuildArch: noarch - -BuildRequires: python -BuildRequires: ceph -BuildRequires: python2-pip -BuildRequires: python2-wheel - -Requires: python - -Provides: python-cephclient - -%description -Client library for the Ceph REST API - -%prep -%autosetup -p 1 -n %{pypi_name}-%{version} - -# Remove bundled egg-info -rm -rf %{pypi_name}.egg-info - -# Let RPM handle the dependencies -rm -f requirements.txt - -%build -%{__python2} setup.py build -%py2_build_wheel - -%install -%{__python2} setup.py install --skip-build --root %{buildroot} -mkdir -p $RPM_BUILD_ROOT/wheels -install -m 644 dist/*.whl $RPM_BUILD_ROOT/wheels/ - -%files -%doc README.rst -%license LICENSE -%{python2_sitelib}/cephclient -%{python2_sitelib}/*.egg-info - -%package wheels -Summary: %{name} wheels - -%description wheels -Contains python wheels for %{name} - -%files wheels -/wheels/* diff --git a/ceph/python-cephclient/python-cephclient/0001-US63903-Ceph-Rebase-Update-REST-API-to-0.94.2.patch b/ceph/python-cephclient/python-cephclient/0001-US63903-Ceph-Rebase-Update-REST-API-to-0.94.2.patch deleted file mode 100644 index d2fc9b65..00000000 --- a/ceph/python-cephclient/python-cephclient/0001-US63903-Ceph-Rebase-Update-REST-API-to-0.94.2.patch +++ /dev/null @@ -1,220 +0,0 @@ -From 016ebffad6c953cf51c538cc8c45edf56e681515 Mon Sep 17 00:00:00 2001 -From: Robert Church -Date: Fri, 21 Aug 2015 13:05:18 -0500 -Subject: [PATCH] US63903: Ceph Rebase - Update REST API to 0.94.2 - -This updates the existing REST APIs to correspond to what in required by -Ceph 0.94.2 (Hammer LTS) ---- - cephclient/wrapper.py | 134 +++++++++++++++++++++++++++++++++++--------------- - 1 file changed, 95 insertions(+), 39 deletions(-) - -diff --git a/cephclient/wrapper.py b/cephclient/wrapper.py -index 8f583a5..926eb7f 100644 ---- a/cephclient/wrapper.py -+++ b/cephclient/wrapper.py -@@ -335,8 +335,12 @@ class CephWrapper(client.CephClient): - def osd_crush_dump(self, **kwargs): - return self.get('osd/crush/dump', **kwargs) - -- def osd_crush_rule_dump(self, **kwargs): -- return self.get('osd/crush/rule/dump', **kwargs) -+ def osd_crush_rule_dump(self, name=None, **kwargs): -+ if name is not None: -+ return self.get('osd/crush/rule/dump?name={0}' -+ .format(name), **kwargs) -+ else: -+ return self.get('osd/crush/rule/dump', **kwargs) - - def osd_crush_rule_list(self, **kwargs): - return self.get('osd/crush/rule/list', **kwargs) -@@ -450,7 +454,7 @@ class CephWrapper(client.CephClient): - .format(name, args), **kwargs) - - def osd_crush_remove(self, name, ancestor=None, **kwargs): -- if ancestor: -+ if ancestor is not None: - return self.put('osd/crush/remove?name={0}&ancestor={1}' - .format(name, ancestor), **kwargs) - else: -@@ -462,29 +466,43 @@ class CephWrapper(client.CephClient): - .format(name, weight), **kwargs) - - def osd_crush_rm(self, name, ancestor, **kwargs): -- return self.put('osd/crush/rm?name={0}&ancestor={1}' -- .format(name, ancestor), **kwargs) -+ if ancestor is not None: -+ return self.put('osd/crush/rm?name={0}&ancestor={1}' -+ .format(name, ancestor), **kwargs) -+ else: -+ return self.put('osd/crush/rm?name={0}' -+ .format(name), **kwargs) - -- def osd_crush_rule_create_simple(self, name, root, type, **kwargs): -- return self.put( -- 'osd/crush/rule/create-simple?name={0}&root={1}&type={2}' -- .format(name, root, type), **kwargs) -+ def osd_crush_rule_create_simple(self, name, root, -+ type, mode=None, **kwargs): -+ if mode is not None: -+ return self.put( -+ 'osd/crush/rule/create-simple?name={0}&root={1}&type={2}' -+ '&mode={3}'.format(name, root, type, mode), **kwargs) -+ else: -+ return self.put( -+ 'osd/crush/rule/create-simple?name={0}&root={1}&type={2}' -+ .format(name, root, type), **kwargs) - - def osd_crush_rule_rm(self, name, **kwargs): - return self.put('osd/crush/rule/rm?name={0}' - .format(name), **kwargs) - -- def osd_crush_set(self, id, name, weight, args, **kwargs): -+ def osd_crush_set(self, id, weight, args, **kwargs): - return self.put('osd/crush/set?id={0}&weight={1}&args={2}' -- .format(id, name, weight, args), **kwargs) -+ .format(id, weight, args), **kwargs) - - def osd_crush_tunables(self, profile, **kwargs): - return self.put('osd/crush/tunables?profile={0}' - .format(profile), **kwargs) - -- def osd_crush_unlink(self, name, ancestor, **kwargs): -- return self.put('osd/crush/unlink?name={0}&ancestor={1}' -- .format(name, ancestor), **kwargs) -+ def osd_crush_unlink(self, name, ancestor=None, **kwargs): -+ if ancestor is not None: -+ return self.put('osd/crush/unlink?name={0}&ancestor={1}' -+ .format(name, ancestor), **kwargs) -+ else: -+ return self.put('osd/crush/unlink?name={0}' -+ .format(name), **kwargs) - - def osd_deep_scrub(self, who, **kwargs): - return self.put('osd/deep-scrub?who={0}' -@@ -498,22 +516,44 @@ class CephWrapper(client.CephClient): - return self.put('osd/in?ids={0}' - .format(ids), **kwargs) - -- def osd_lost(self, id, sure, **kwargs): -- return self.put('osd/lost?id={0}&sure={1}' -- .format(id, sure), **kwargs) -+ def osd_lost(self, id, sure=None, **kwargs): -+ if sure is not None: -+ return self.put('osd/lost?id={0}&sure={1}' -+ .format(id, sure), **kwargs) -+ else: -+ return self.put('osd/lost?id={0}' -+ .format(id), **kwargs) - - def osd_out(self, ids, **kwargs): - return self.put('osd/out?ids={0}' - .format(ids), **kwargs) - -- def osd_pool_create(self, pool, pg_num, pgp_num, properties, **kwargs): -- return self.put( -- 'osd/pool/create?pool={0}&pg_num={1}&pgp_num={2}&properties={3}' -- .format(pool, pg_num, pgp_num, properties), **kwargs) -- -- def osd_pool_delete(self, pool, sure, **kwargs): -- return self.put('osd/pool/delete?pool={0}&sure={1}' -- .format(pool, sure), **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): -+ request = [] -+ request.append('osd/pool/create?pool={0}&pg_num={1}&pgp_num={2}' -+ .format(pool, pg_num, pgp_num)) -+ if pool_type is not None: -+ request.append('&pool_type={0}'.format(pool_type)) -+ if erasure_code_profile is not None: -+ request.append('&erasure_code_profile={0}' -+ .format(erasure_code_profile)) -+ if ruleset is not None: -+ request.append('&ruleset={0}'.format(ruleset)) -+ if expected_num_objects is not None: -+ request.append('&expected_num_objects={0}' -+ .format(expected_num_objects)) -+ return self.put(''.join(request), **kwargs) -+ -+ def osd_pool_delete(self, pool, pool2=None, sure=None, **kwargs): -+ request = [] -+ request.append('osd/pool/delete?pool={0}'.format(pool)) -+ if pool2 is not None: -+ request.append('&pool2={0}'.format(pool2)) -+ if sure is not None: -+ 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}' -@@ -531,13 +571,17 @@ class CephWrapper(client.CephClient): - return self.put('osd/pool/rmsnap?pool={0}&snap={1}' - .format(pool, snap), **kwargs) - -- def osd_set_pool_param(self, pool, var, **kwargs): -- return self.put('osd/pool/set?pool={0}&var={1}' -- .format(pool, var), **kwargs) -+ def osd_set_pool_param(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_set_pool_quota(self, pool, field, **kwargs): -- return self.put('osd/pool/set-quota?pool={0}&field={1}' -- .format(pool, field), **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) - - def osd_repair(self, pool, who, **kwargs): - return self.put('osd/repair?who={0}' -@@ -571,9 +615,14 @@ class CephWrapper(client.CephClient): - return self.put('osd/thrash?num_epochs={0}' - .format(num_epochs), **kwargs) - -- def osd_tier_add(self, pool, tierpool, **kwargs): -- return self.put('osd/tier/add?pool={0}&tierpool={1}' -- .format(pool, tierpool), **kwargs) -+ def osd_tier_add(self, pool, tierpool, force_notempty=None, **kwargs): -+ if force_notempty is not None: -+ return self.put('osd/tier/add?pool={0}&tierpool={1}' -+ '&force_notempty={2}' -+ .format(pool, tierpool, force_notempty), **kwargs) -+ else: -+ return self.put('osd/tier/add?pool={0}&tierpool={1}' -+ .format(pool, tierpool), **kwargs) - - def osd_tier_cachemode(self, pool, mode, **kwargs): - return self.put('osd/tier/cache-mode?pool={0}&mode={1}' -@@ -621,12 +670,19 @@ class CephWrapper(client.CephClient): - def pg_dump_pools_json(self, **kwargs): - return self.get('pg/dump_pools_json', **kwargs) - -- def pg_dump_stuck(self, stuckops=None, **kwargs): -+ def pg_dump_stuck(self, stuckops=None, threshold=None, **kwargs): -+ request = [] -+ request.append('pg/dump_stuck') - if stuckops is not None: -- return self.get('pg/dump_stuck?stuckops={0}' -- .format(stuckops), **kwargs) -- else: -- return self.get('pg/dump_stuck', **kwargs) -+ request.append('?stuckops={0}'.format(stuckops)) -+ if threshold is not None: -+ if stuckops is not None: -+ request.append('&') -+ else: -+ request.append('?') -+ request.append('threshold={0}'.format(threshold)) -+ -+ return self.get(''.join(request), **kwargs) - - def pg_getmap(self, **kwargs): - kwargs['supported_body_types'] = ['binary'] --- -2.5.0 - diff --git a/ceph/python-cephclient/python-cephclient/0001-US70398-Ceph-Rebase-Update-REST-API-to-0.94.5.patch b/ceph/python-cephclient/python-cephclient/0001-US70398-Ceph-Rebase-Update-REST-API-to-0.94.5.patch deleted file mode 100644 index 15d01089..00000000 --- a/ceph/python-cephclient/python-cephclient/0001-US70398-Ceph-Rebase-Update-REST-API-to-0.94.5.patch +++ /dev/null @@ -1,475 +0,0 @@ -From 2253242390ed6dfd1206ae2743ccab4c28437d13 Mon Sep 17 00:00:00 2001 -From: Robert Church -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 - diff --git a/ceph/python-cephclient/python-cephclient/US92424-Ceph-Rebase-Update-REST-API-to-10.2.4.patch b/ceph/python-cephclient/python-cephclient/US92424-Ceph-Rebase-Update-REST-API-to-10.2.4.patch deleted file mode 100644 index 01660c8e..00000000 --- a/ceph/python-cephclient/python-cephclient/US92424-Ceph-Rebase-Update-REST-API-to-10.2.4.patch +++ /dev/null @@ -1,1062 +0,0 @@ ---- a/cephclient/wrapper.py 2017-02-16 14:59:35.589795141 +0200 -+++ b/cephclient/wrapper.py 2017-02-16 20:15:47.543896397 +0200 -@@ -25,9 +25,6 @@ class CephWrapper(client.CephClient): - super(CephWrapper, self).__init__(**params) - self.user_agent = 'python-cephclient-wrapper' - -- ### -- # root GET calls -- ### - def df(self, detail=None, **kwargs): - if detail is not None: - return self.get('df?detail={0}' -@@ -61,9 +58,6 @@ class CephWrapper(client.CephClient): - def version(self, **kwargs): - return self.get('version', **kwargs) - -- ### -- # root PUT calls -- ### - def compact(self, **kwargs): - return self.put('compact', **kwargs) - -@@ -72,10 +66,14 @@ class CephWrapper(client.CephClient): - .format(heapcmd), **kwargs) - - def injectargs(self, injected_args, **kwargs): -+ if isinstance(injected_args, list): -+ injected_args = '&injected_args='.join(injected_args) - return self.put('injectargs?injected_args={0}' - .format(injected_args), **kwargs) - - def log(self, logtext, **kwargs): -+ if isinstance(logtext, list): -+ logtext = '&logtext='.join(logtext) - return self.put('log?logtext={0}' - .format(logtext), **kwargs) - -@@ -87,22 +85,25 @@ class CephWrapper(client.CephClient): - return self.put('scrub', **kwargs) - - def sync(self, validate1=None, validate2=None, **kwargs): -+ return self.sync_force(validate1, validate2, **kwargs) -+ -+ def sync_force(self, validate1=None, validate2=None, **kwargs): - request = [] - request.append('sync/force') - if validate1 is not None: -- request.append('?validate1={0}'.format(validate1)) -+ request.append('validate1={0}'.format(validate1)) - if validate2 is not None: - request.append('validate2={0}'.format(validate2)) -- -- return self.put(''.join(request), **kwargs) -+ if len(request) == 1: -+ return self.put(request[0], **kwargs) -+ return self.put(request[0] + '?' + '&'.join(request[1:]), **kwargs) - - def tell(self, target, args, **kwargs): -+ if isinstance(args, list): -+ args = '&args='.join(args) - return self.put('tell?target={0}&args={1}' - .format(target, args), **kwargs) - -- ### -- # auth GET calls -- ### - def auth_export(self, entity=None, **kwargs): - if entity is not None: - return self.get('auth/export?entity={0}' -@@ -125,9 +126,10 @@ class CephWrapper(client.CephClient): - return self.get('auth/print-key?entity={0}' - .format(entity), **kwargs) - -- ### -- # auth PUT calls -- ### -+ def auth_print_key(self, entity, **kwargs): -+ return self.get('auth/print_key?entity={0}' -+ .format(entity), **kwargs) -+ - """ - caps dictionary format: - caps = { -@@ -136,62 +138,50 @@ class CephWrapper(client.CephClient): - ... - } - """ -- def auth_add(self, entity, caps={}, file=None, **kwargs): -- # XXX-TODO: Implement file input -- full_caps = list() -+ def auth_add(self, entity, caps={}, **kwargs): - if caps: -- for key in caps: -- permissions = caps[key].replace(' ', '+') -- full_caps.append('&caps={0}&caps={1}' -- .format(key, permissions)) -- -- return self.put('auth/add?entity={0}{1}' -- .format(entity, ''.join(full_caps)), **kwargs) -+ caps = '&caps='.join(['{}&caps={}'.format(k, v) for (k, v) in caps.items()]).replace(' ', '+') -+ return self.put('auth/add?entity={0}&caps={1}' -+ .format(entity, caps), **kwargs) -+ else: -+ return self.put('auth/add?entity={0}' -+ .format(entity), **kwargs) - -- def auth_caps(self, entity, caps={}, **kwargs): -- full_caps = list() -+ def auth_caps(self, entity, caps, **kwargs): - if caps: -- for key in caps: -- permissions = caps[key].replace(' ', '+') -- full_caps.append('&caps={0}&caps={1}' -- .format(key, permissions)) -- -- return self.put('auth/caps?entity={0}{1}' -- .format(entity, ''.join(full_caps)), **kwargs) -+ caps = '&caps='.join(['{}&caps={}'.format(k, v) for (k, v) in caps.items()]).replace(' ', '+') -+ return self.put('auth/caps?entity={0}&caps={1}' -+ .format(entity, caps), **kwargs) - - def auth_del(self, entity, **kwargs): - return self.put('auth/del?entity={0}' - .format(entity), **kwargs) - -- def auth_get_or_create(self, entity, caps={}, file=None, **kwargs): -- # XXX-TODO: Implement file input -- full_caps = list() -+ def auth_get_or_create(self, entity, caps={}, **kwargs): - if caps: -- for key in caps: -- permissions = caps[key].replace(' ', '+') -- full_caps.append('&caps={0}&caps={1}'.format(key, permissions)) -- -- return self.put('auth/get-or-create?entity={0}{1}' -- .format(entity, ''.join(full_caps)), **kwargs) -+ caps = '&caps='.join(['{}&caps={}'.format(k, v) for (k, v) in caps.items()]).replace(' ', '+') -+ return self.put('auth/get-or-create?entity={0}&caps={1}' -+ .format(entity, caps), **kwargs) -+ else: -+ return self.put('auth/get-or-create?entity={0}' -+ .format(entity), **kwargs) - - def auth_get_or_create_key(self, entity, caps={}, **kwargs): -- # XXX-TODO: Implement file input -- full_caps = list() -- if caps: -- for key in caps: -- permissions = caps[key].replace(' ', '+') -- full_caps.append('&caps={0}&caps={1}'.format(key, permissions)) -- -- return self.put('auth/get-or-create-key?entity={0}{1}' -- .format(entity, ''.join(full_caps)), **kwargs) -- -- def auth_import(self, file): -- # XXX-TODO: Implement file input -- raise exceptions.FunctionNotImplemented() -- -- ### -- # config-key GET calls -- ### -+ if caps is not None: -+ caps = '&caps='.join(['{}&caps={}'.format(k, v) for (k, v) in caps.items()]).replace(' ', '+') -+ return self.put('auth/get-or-create-key?entity={0}&caps={1}' -+ .format(entity, caps), **kwargs) -+ else: -+ return self.put('auth/get-or-create-key?entity={0}' -+ .format(entity), **kwargs) -+ -+ def auth_import(self, **kwargs): -+ return self.put('auth/import', **kwargs) -+ -+ def auth_rm(self, entity, **kwargs): -+ return self.put('auth/rm?entity={0}' -+ .format(entity), **kwargs) -+ - def config_key_exists(self, key, **kwargs): - return self.get('config-key/exists?key={0}' - .format(key), **kwargs) -@@ -203,47 +193,84 @@ class CephWrapper(client.CephClient): - def config_key_list(self, **kwargs): - 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 config_key_put(self, key, val=None, **kwargs): -+ if val is not None: -+ return self.put('config-key/put?key={0}&val={1}' -+ .format(key, val), **kwargs) -+ else: -+ return self.put('config-key/put?key={0}' -+ .format(key), **kwargs) -+ -+ def config_key_rm(self, key, **kwargs): -+ return self.put('config-key/rm?key={0}' -+ .format(key), **kwargs) -+ - 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) -+ return self.put('fs/reset?fs_name={0}&sure={1}' -+ .format(fs_name, sure), **kwargs) -+ else: -+ return self.put('fs/reset?fs_name={0}' -+ .format(fs_name), **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) -+ return self.put('fs/rm?fs_name={0}&sure={1}' -+ .format(fs_name, sure), **kwargs) -+ else: -+ return self.put('fs/rm?fs_name={0}' -+ .format(fs_name), **kwargs) -+ -+ def fs_add_data_pool(self, fs_name, pool, **kwargs): -+ return self.put('fs/add_data_pool?fs_name={0}&pool={1}' -+ .format(fs_name, pool), **kwargs) -+ -+ def fs_dump(self, epoch=None, **kwargs): -+ if epoch is not None: -+ return self.get('fs/dump?epoch={0}' -+ .format(epoch), **kwargs) -+ else: -+ return self.get('fs/dump', **kwargs) -+ -+ def fs_flag_set(self, flag_name, val, confirm=None, **kwargs): -+ if confirm is not None: -+ return self.put('fs/flag/set?flag_name={0}&val={1}&confirm={2}' -+ .format(flag_name, val, confirm), **kwargs) -+ else: -+ return self.put('fs/flag/set?flag_name={0}&val={1}' -+ .format(flag_name, val), **kwargs) -+ -+ def fs_get(self, fs_name, **kwargs): -+ return self.get('fs/get?fs_name={0}' -+ .format(fs_name), **kwargs) -+ -+ def fs_rm_data_pool(self, fs_name, pool, **kwargs): -+ return self.put('fs/rm_data_pool?fs_name={0}&pool={1}' -+ .format(fs_name, pool), **kwargs) -+ -+ def fs_set(self, fs_name, var, val, confirm=None, **kwargs): -+ if confirm is not None: -+ return self.put('fs/set?fs_name={0}&var={1}&val={2}&confirm={3}' -+ .format(fs_name, var, val, confirm), **kwargs) -+ else: -+ return self.put('fs/set?fs_name={0}&var={1}&val={2}' -+ .format(fs_name, var, val), **kwargs) -+ -+ def fs_set_default(self, fs_name, **kwargs): -+ return self.put('fs/set_default?fs_name={0}' -+ .format(fs_name), **kwargs) - -- ### -- # mds GET calls -- ### - def mds_compat_show(self, **kwargs): - return self.get('mds/compat/show', **kwargs) - -@@ -266,9 +293,6 @@ class CephWrapper(client.CephClient): - def mds_stat(self, **kwargs): - return self.get('mds/stat', **kwargs) - -- ### -- # mds PUT calls -- ### - def mds_add_data_pool(self, pool, **kwargs): - return self.put('mds/add_data_pool?pool={0}' - .format(pool), **kwargs) -@@ -307,63 +331,69 @@ class CephWrapper(client.CephClient): - return self.put('mds/remove_data_pool?pool={0}' - .format(pool), **kwargs) - -- def mds_rm(self, gid, who, **kwargs): -- return self.put('mds/rm?gid={0}&who={1}' -- .format(gid, who), **kwargs) -+ def mds_rm(self, gid, **kwargs): -+ return self.put('mds/rm?gid={0}' -+ .format(gid), **kwargs) - -- def mds_rmfailed(self, who, **kwargs): -- return self.put('mds/rmfailed?who={0}' -- .format(who), **kwargs) -- -- def mds_set_max_file_size(self, val, confirm=None, **kwargs): -+ def mds_rmfailed(self, who, 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) -+ return self.put('mds/rmfailed?who={0}&confirm={1}' -+ .format(who, confirm), **kwargs) - else: -- return self.put('mds/set?var=max_file_size?val={0}' -- .format(val), **kwargs) -+ return self.put('mds/rmfailed?who={0}' -+ .format(who), **kwargs) -+ -+ def mds_set_max_file_size(self, val, confirm=None, **kwargs): -+ return self.mds_set(self, 'max_file_size', val, confirm=None, **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) -+ return self.mds_set(self, 'allow_new_snaps', val, confirm=None, **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) -+ return self.mds_set(self, 'inline_data', val, confirm=None, **kwargs) - - def mds_set_max_mds(self, maxmds, **kwargs): - return self.put('mds/set_max_mds?maxmds={0}' - .format(maxmds), **kwargs) - -- def mds_setmap(self, epoch, **kwargs): -- return self.put('mds/setmap?epoch={0}' -- .format(epoch), **kwargs) -+ # mds_setmap() not defined in new api - - def mds_stop(self, who, **kwargs): - return self.put('mds/stop?who={0}' - .format(who), **kwargs) - - def mds_tell(self, who, args, **kwargs): -+ if isinstance(args, list): -+ args = '&args='.join(args) - return self.put('mds/tell?who={0}&args={1}' - .format(who, args), **kwargs) - -- def mds_unset_allow_new_snaps(self, sure, **kwargs): -- """ -- mds/unset?key=allow_new_snaps&sure= -- """ -- raise exceptions.FunctionNotImplemented() -- -- ### -- # mon GET calls -- ### -+ # mds_unset_allow_new_snaps() not defined in new api -+ -+ def mds_metadata(self, who, **kwargs): -+ return self.get('mds/metadata?who={0}' -+ .format(who), **kwargs) -+ -+ def mds_repaired(self, rank, **kwargs): -+ return self.put('mds/repaired?rank={0}' -+ .format(rank), **kwargs) -+ -+ def mds_rm_data_pool(self, pool, **kwargs): -+ return self.put('mds/rm_data_pool?pool={0}' -+ .format(pool), **kwargs) -+ -+ def mds_set(self, var, val, confirm=None, **kwargs): -+ if confirm is not None: -+ return self.put('mds/set?var={0}&val={1}&confirm={2}' -+ .format(var, val, confirm), **kwargs) -+ else: -+ return self.put('mds/set?var={0}&val={1}' -+ .format(var, val), **kwargs) -+ -+ def mds_set_state(self, gid, state, **kwargs): -+ return self.put('mds/set_state?gid={0}&state={1}' -+ .format(gid, state), **kwargs) -+ - def mon_dump(self, epoch=None, **kwargs): - if epoch is not None: - return self.get('mon/dump?epoch={0}' -@@ -388,9 +418,6 @@ class CephWrapper(client.CephClient): - def mon_status(self, **kwargs): - return self.get('mon_status', **kwargs) - -- ### -- # mon PUT calls -- ### - def mon_add(self, name, addr, **kwargs): - return self.put('mon/add?name={0}&addr={1}' - .format(name, addr), **kwargs) -@@ -399,9 +426,38 @@ class CephWrapper(client.CephClient): - return self.put('mon/remove?name={0}' - .format(name), **kwargs) - -- ### -- # osd GET calls -- ### -+ def mon_compact(self, **kwargs): -+ return self.put('mon/compact', **kwargs) -+ -+ def mon_metadata(self, id, **kwargs): -+ return self.get('mon/metadata?id={0}' -+ .format(id), **kwargs) -+ -+ def mon_rm(self, name, **kwargs): -+ return self.put('mon/rm?name={0}' -+ .format(name), **kwargs) -+ -+ def mon_scrub(self, **kwargs): -+ return self.put('mon/scrub', **kwargs) -+ -+ def mon_sync_force(self, validate1=None, validate2=None, **kwargs): -+ request = [] -+ request.append('mon/sync/force') -+ if validate1 is not None: -+ request.append('validate1={0}'.format(validate1)) -+ if validate2 is not None: -+ request.append('validate2={0}'.format(validate2)) -+ if len(request) == 1: -+ return self.put(request[0], **kwargs) -+ return self.put(request[0] + '?' + '&'.join(request[1:]), **kwargs) -+ -+ def node_ls(self, type=None, **kwargs): -+ if type is not None: -+ return self.get('node/ls?type={0}' -+ .format(type), **kwargs) -+ else: -+ return self.get('node/ls', **kwargs) -+ - def osd_blacklist_ls(self, **kwargs): - return self.get('osd/blacklist/ls', **kwargs) - -@@ -490,20 +546,26 @@ class CephWrapper(client.CephClient): - else: - return self.get('osd/lspools', **kwargs) - -- def osd_map(self, pool, object, **kwargs): -- return self.get('osd/map?pool={0}&object={1}' -- .format(pool, object), **kwargs) -+ def osd_map(self, pool, object, nspace=None, **kwargs): -+ if nspace is not None: -+ return self.get('osd/map?pool={0}&object={1}&nspace={2}' -+ .format(pool, object, nspace), **kwargs) -+ else: -+ 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_metadata(self, id=None, **kwargs): -+ if id is not None: -+ return self.get('osd/metadata?id={0}' -+ .format(id), **kwargs) -+ else: -+ return self.get('osd/metadata', **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) -+ return self.osd_pool_get(pool, var, **kwargs) - - def osd_pool_get(self, pool, var, **kwargs): - return self.get('osd/pool/get?pool={0}&var={1}' -@@ -517,6 +579,9 @@ class CephWrapper(client.CephClient): - return self.get('osd/pool/stats', **kwargs) - - def osd_get_pool_quota(self, pool, **kwargs): -+ return self.osd_pool_get_quota(pool, **kwargs) -+ -+ def osd_pool_get_quota(self, pool, **kwargs): - return self.get('osd/pool/get-quota?pool={0}' - .format(pool), **kwargs) - -@@ -537,18 +602,28 @@ class CephWrapper(client.CephClient): - else: - return self.get('osd/tree', **kwargs) - -- ### -- # osd PUT calls -- ### -- def osd_blacklist(self, blacklistop, addr, expire, **kwargs): -- return self.put('osd/blacklist?blacklistop={0}&addr={1}&expire={2}' -- .format(blacklistop, addr, expire), **kwargs) -- -- def osd_create(self, uuid, **kwargs): -- return self.put('osd/create?uuid={0}' -- .format(uuid), **kwargs) -+ def osd_blacklist(self, blacklistop, addr, expire=None, **kwargs): -+ if expire is not None: -+ return self.put('osd/blacklist?blacklistop={0}&addr={1}&expire={2}' -+ .format(blacklistop, addr, expire), **kwargs) -+ else: -+ return self.put('osd/blacklist?blacklistop={0}&addr={1}' -+ .format(blacklistop, addr), **kwargs) -+ -+ def osd_create(self, uuid=None, id=None, **kwargs): -+ request = [] -+ request.append('osd/create') -+ if uuid is not None: -+ request.append('uuid={0}'.format(uuid)) -+ if id is not None: -+ request.append('id={0}'.format(id)) -+ if len(request) == 1: -+ return self.put(request[0], **kwargs) -+ return self.put(request[0] + '?' + '&'.join(request[1:]), **kwargs) - - def osd_crush_add(self, id, weight, args, **kwargs): -+ if isinstance(args, list): -+ args = '&args='.join(args) - return self.put('osd/crush/add?id={0}&weight={1}&args={2}' - .format(id, weight, args), **kwargs) - -@@ -557,6 +632,8 @@ class CephWrapper(client.CephClient): - .format(name, type), **kwargs) - - def osd_crush_create_or_move(self, id, weight, args, **kwargs): -+ if isinstance(args, list): -+ args = '&args='.join(args) - return self.put('osd/crush/create-or-move?id={0}&weight={1}&args={2}' - .format(id, weight, args), **kwargs) - -@@ -565,10 +642,14 @@ class CephWrapper(client.CephClient): - .format(tunable), **kwargs) - - def osd_crush_link(self, name, args, **kwargs): -- return self.put('osd/crush/link?name={0}&args={2}' -+ if isinstance(args, list): -+ args = '&args='.join(args) -+ return self.put('osd/crush/link?name={0}&args={1}' - .format(name, args), **kwargs) - - def osd_crush_move(self, name, args, **kwargs): -+ if isinstance(args, list): -+ args = '&args='.join(args) - return self.put('osd/crush/move?name={0}&args={1}' - .format(name, args), **kwargs) - -@@ -595,7 +676,7 @@ class CephWrapper(client.CephClient): - return self.put('osd/crush/reweight-subtree?name={0}&weight={1}' - .format(name, weight), **kwargs) - -- def osd_crush_rm(self, name, ancestor, **kwargs): -+ def osd_crush_rm(self, name, ancestor=None, **kwargs): - if ancestor is not None: - return self.put('osd/crush/rm?name={0}&ancestor={1}' - .format(name, ancestor), **kwargs) -@@ -603,33 +684,35 @@ 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_erasure(self, name, profile=None, **kwargs): -+ if profile is not None: -+ return self.put('osd/crush/rule/create-erasure?name={0}&profile={1}' -+ .format(name, profile), **kwargs) -+ else: -+ return self.put('osd/crush/rule/create-erasure?name={0}' -+ .format(name), **kwargs) - -- def osd_crush_rule_create_simple(self, name, root, -- type, mode=None, **kwargs): -+ def osd_crush_rule_create_simple(self, name, root, type, mode=None, **kwargs): - if mode is not None: -- return self.put( -- 'osd/crush/rule/create-simple?name={0}&root={1}&type={2}' -- '&mode={3}'.format(name, root, type, mode), **kwargs) -- else: -- return self.put( -- 'osd/crush/rule/create-simple?name={0}&root={1}&type={2}' -- .format(name, root, type), **kwargs) -+ return self.put('osd/crush/rule/create-simple?name={0}&root={1}&type={2}&mode={3}' -+ .format(name, root, type, mode), **kwargs) -+ else: -+ return self.put('osd/crush/rule/create-simple?name={0}&root={1}&type={2}' -+ .format(name, root, type), **kwargs) - - def osd_crush_rule_rm(self, name, **kwargs): - return self.put('osd/crush/rule/rm?name={0}' - .format(name), **kwargs) - - def osd_crush_set(self, id, weight, args, **kwargs): -+ if isinstance(args, list): -+ args = '&args='.join(args) - 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) -+ .format(tunable, value), **kwargs) - - def osd_crush_tunables(self, profile, **kwargs): - return self.put('osd/crush/tunables?profile={0}' -@@ -648,6 +731,8 @@ class CephWrapper(client.CephClient): - .format(who), **kwargs) - - def osd_down(self, ids, **kwargs): -+ if isinstance(ids, list): -+ ids = '&ids='.join(ids) - return self.put('osd/down?ids={0}' - .format(ids), **kwargs) - -@@ -664,6 +749,8 @@ class CephWrapper(client.CephClient): - .format(name), **kwargs) - - def osd_in(self, ids, **kwargs): -+ if isinstance(ids, list): -+ ids = '&ids='.join(ids) - return self.put('osd/in?ids={0}' - .format(ids), **kwargs) - -@@ -676,6 +763,8 @@ class CephWrapper(client.CephClient): - .format(id), **kwargs) - - def osd_out(self, ids, **kwargs): -+ if isinstance(ids, list): -+ ids = '&ids='.join(ids) - return self.put('osd/out?ids={0}' - .format(ids), **kwargs) - -@@ -690,32 +779,29 @@ class CephWrapper(client.CephClient): - 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): -+ def osd_pool_create(self, pool, pg_num, pgp_num=None, pool_type=None, erasure_code_profile=None, ruleset=None, expected_num_objects=None, **kwargs): - request = [] -- request.append('osd/pool/create?pool={0}&pg_num={1}&pgp_num={2}' -- .format(pool, pg_num, pgp_num)) -+ request.append('osd/pool/create?pool={0}&pg_num={1}'.format(pool, pg_num)) -+ if pgp_num is not None: -+ request.append('pgp_num={0}'.format(pgp_num)) - if pool_type is not None: -- request.append('&pool_type={0}'.format(pool_type)) -+ request.append('pool_type={0}'.format(pool_type)) - if erasure_code_profile is not None: -- request.append('&erasure_code_profile={0}' -- .format(erasure_code_profile)) -+ request.append('erasure_code_profile={0}'.format(erasure_code_profile)) - if ruleset is not None: -- request.append('&ruleset={0}'.format(ruleset)) -+ request.append('ruleset={0}'.format(ruleset)) - if expected_num_objects is not None: -- request.append('&expected_num_objects={0}' -- .format(expected_num_objects)) -- return self.put(''.join(request), **kwargs) -+ request.append('expected_num_objects={0}'.format(expected_num_objects)) -+ return self.put('&'.join(request), **kwargs) - - def osd_pool_delete(self, pool, pool2=None, sure=None, **kwargs): - request = [] - request.append('osd/pool/delete?pool={0}'.format(pool)) - if pool2 is not None: -- request.append('&pool2={0}'.format(pool2)) -+ request.append('pool2={0}'.format(pool2)) - if sure is not None: -- request.append('&sure={0}'.format(sure)) -- return self.put(''.join(request), **kwargs) -+ request.append('sure={0}'.format(sure)) -+ return self.put('&'.join(request), **kwargs) - - def osd_pool_mksnap(self, pool, snap, **kwargs): - return self.put('osd/pool/mksnap?pool={0}&snap={1}' -@@ -730,12 +816,7 @@ class CephWrapper(client.CephClient): - .format(pool, snap), **kwargs) - - def osd_set_pool_param(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) -+ return self.osd_pool_set(pool, var, val, force, **kwargs) - - def osd_pool_set(self, pool, var, val, force=None, **kwargs): - if force is not None: -@@ -754,26 +835,57 @@ class CephWrapper(client.CephClient): - .format(pgid, id), **kwargs) - - def osd_set_pool_quota(self, pool, field, val, **kwargs): -+ return self.osd_pool_set_quota(pool, field, val, **kwargs) -+ -+ def osd_pool_set_quota(self, pool, field, val, **kwargs): - return self.put('osd/pool/set-quota?pool={0}&field={1}&val={2}' - .format(pool, field, val), **kwargs) - -- def osd_repair(self, pool, who, **kwargs): -+ -+ def osd_repair(self, who, **kwargs): - return self.put('osd/repair?who={0}' -- .format(pool, who), **kwargs) -+ .format(who), **kwargs) - - def osd_reweight(self, id, weight, **kwargs): - 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) -+ def osd_reweight_by_pg(self, oload=None, max_change=None, max_osds=None, pools=None, **kwargs): -+ request = [] -+ request.append('osd/reweight-by-pg') -+ if oload is not None: -+ request.append('oload={0}'.format(oload)) -+ if max_change is not None: -+ request.append('max_change={0}'.format(max_change)) -+ if max_osds is not None: -+ request.append('max_osds={0}'.format(max_osds)) -+ if pools is not None: -+ request.append('pools={0}'.format(pools)) -+ if len(request) == 1: -+ return self.put(request[0], **kwargs) -+ return self.put(request[0] + '?' + '&'.join(request[1:]), **kwargs) -+ -+ def osd_reweight_by_utilization(self, oload=None, max_change=None, max_osds=None, no_increasing=None, **kwargs): -+ request = [] -+ request.append('osd/reweight-by-utilization') -+ if oload is not None: -+ request.append('oload={0}'.format(oload)) -+ if max_change is not None: -+ request.append('max_change={0}'.format(max_change)) -+ if max_osds is not None: -+ request.append('max_osds={0}'.format(max_osds)) -+ if no_increasing is not None: -+ request.append('no_increasing={0}'.format(no_increasing)) -+ if len(request) == 1: -+ return self.put(request[0], **kwargs) -+ return self.put(request[0] + '?' + '&'.join(request[1:]), **kwargs) - - def osd_remove(self, ids, **kwargs): -+ return self.osd_rm(ids, **kwargs) -+ -+ def osd_rm(self, ids, **kwargs): -+ if isinstance(ids, list): -+ ids = '&ids='.join(ids) - return self.put('osd/rm?ids={0}' - .format(ids), **kwargs) - -@@ -782,14 +894,9 @@ class CephWrapper(client.CephClient): - .format(who), **kwargs) - - def osd_set_key(self, key, **kwargs): -- return self.put('osd/set?key={0}' -- .format(key), **kwargs) -+ return self.osd_set(key, **kwargs) - -- def osd_crushmap(self, **kwargs): -- """ -- osd/crushmap -- """ -- raise exceptions.FunctionNotImplemented() -+ # osd_crushmap() not defined in new api - - def osd_setmaxosd(self, newmax, **kwargs): - return self.put('osd/setmaxosd?newmax={0}' -@@ -801,21 +908,18 @@ class CephWrapper(client.CephClient): - - def osd_tier_add(self, pool, tierpool, force_nonempty=None, **kwargs): - if force_nonempty is not None: -- return self.put('osd/tier/add?pool={0}&tierpool={1}' -- '&force_nonempty={2}' -+ return self.put('osd/tier/add?pool={0}&tierpool={1}&force_nonempty={2}' - .format(pool, tierpool, force_nonempty), **kwargs) - else: - 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}' -+ 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) -+ return self.osd_tier_cache_mode(pool, mode, **kwargs) - - def osd_tier_remove(self, pool, tierpool, **kwargs): - return self.put('osd/tier/remove?pool={0}&tierpool={1}' -@@ -829,16 +933,81 @@ 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): -+ def osd_unpause(self, **kwargs): - return self.put('osd/unpause', **kwargs) - - def osd_unset(self, key, **kwargs): - return self.put('osd/unset?key={0}' - .format(key), **kwargs) - -- ### -- # pg GET calls -- ### -+ def osd_blacklist_clear(self, **kwargs): -+ return self.put('osd/blacklist/clear', **kwargs) -+ -+ def osd_pool_rm(self, pool, pool2=None, sure=None, **kwargs): -+ request = [] -+ request.append('osd/pool/rm?pool={0}'.format(pool)) -+ if pool2 is not None: -+ request.append('pool2={0}'.format(pool2)) -+ if sure is not None: -+ request.append('sure={0}'.format(sure)) -+ return self.put('&'.join(request), **kwargs) -+ -+ def osd_set(self, key, **kwargs): -+ return self.put('osd/set?key={0}' -+ .format(key), **kwargs) -+ -+ def osd_setcrushmap(self, **kwargs): -+ return self.put('osd/setcrushmap', **kwargs) -+ -+ def osd_test_reweight_by_pg(self, oload=None, max_change=None, max_osds=None, pools=None, **kwargs): -+ request = [] -+ request.append('osd/test-reweight-by-pg') -+ if oload is not None: -+ request.append('oload={0}'.format(oload)) -+ if max_change is not None: -+ request.append('max_change={0}'.format(max_change)) -+ if max_osds is not None: -+ request.append('max_osds={0}'.format(max_osds)) -+ if pools is not None: -+ request.append('pools={0}'.format(pools)) -+ if len(request) == 1: -+ return self.put(request[0], **kwargs) -+ return self.put(request[0] + '?' + '&'.join(request[1:]), **kwargs) -+ -+ def osd_test_reweight_by_utilization(self, oload=None, max_change=None, max_osds=None, no_increasing=None, **kwargs): -+ request = [] -+ request.append('osd/test-reweight-by-utilization') -+ if oload is not None: -+ request.append('oload={0}'.format(oload)) -+ if max_change is not None: -+ request.append('max_change={0}'.format(max_change)) -+ if max_osds is not None: -+ request.append('max_osds={0}'.format(max_osds)) -+ if no_increasing is not None: -+ request.append('no_increasing={0}'.format(no_increasing)) -+ if len(request) == 1: -+ return self.put(request[0], **kwargs) -+ return self.put(request[0] + '?' + '&'.join(request[1:]), **kwargs) -+ -+ def osd_tier_cache_mode(self, pool, mode, sure=None, **kwargs): -+ if sure is not None: -+ return self.put('osd/tier/cache-mode?pool={0}&mode={1}&sure={2}' -+ .format(pool, mode, sure), **kwargs) -+ else: -+ return self.put('osd/tier/cache-mode?pool={0}&mode={1}' -+ .format(pool, mode), **kwargs) -+ -+ def osd_tier_rm(self, pool, tierpool, **kwargs): -+ return self.put('osd/tier/rm?pool={0}&tierpool={1}' -+ .format(pool, tierpool), **kwargs) -+ -+ def osd_tier_rm_overlay(self, pool, **kwargs): -+ return self.put('osd/tier/rm-overlay?pool={0}' -+ .format(pool), **kwargs) -+ -+ def osd_utilization(self, **kwargs): -+ return self.get('osd/utilization', **kwargs) -+ - def pg_debug(self, debugop, **kwargs): - kwargs['supported_body_types'] = ['text', 'xml'] - -@@ -866,15 +1035,12 @@ class CephWrapper(client.CephClient): - request = [] - request.append('pg/dump_stuck') - if stuckops is not None: -- request.append('?stuckops={0}'.format(stuckops)) -+ request.append('stuckops={0}'.format(stuckops)) - if threshold is not None: -- if stuckops is not None: -- request.append('&') -- else: -- request.append('?') - request.append('threshold={0}'.format(threshold)) -- -- return self.get(''.join(request), **kwargs) -+ if len(request) == 1: -+ return self.get(request[0], **kwargs) -+ return self.get(request[0] + '?' + '&'.join(request[1:]), **kwargs) - - def pg_getmap(self, **kwargs): - kwargs['supported_body_types'] = ['binary'] -@@ -885,21 +1051,21 @@ class CephWrapper(client.CephClient): - request = [] - request.append('pg/ls') - if pool is not None: -- request.append('?pool={0}'.format(pool)) -+ request.append('pool={0}'.format(pool)) - if states is not None: - request.append('states={0}'.format(states)) -- -- return self.get(''.join(request), **kwargs) -+ if len(request) == 1: -+ return self.get(request[0], **kwargs) -+ return self.get(request[0] + '?' + '&'.join(request[1:]), **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)) -+ request.append('pool={0}'.format(pool)) - if states is not None: - request.append('states={0}'.format(states)) -- -- return self.get(''.join(request), **kwargs) -+ return self.get('&'.join(request), **kwargs) - - def pg_ls_by_pool(self, poolstr, states=None, **kwargs): - if states is not None: -@@ -913,11 +1079,10 @@ class CephWrapper(client.CephClient): - request = [] - request.append('pg/ls-by-primary?osd={0}'.format(osd)) - if pool is not None: -- request.append('?pool={0}'.format(pool)) -+ request.append('pool={0}'.format(pool)) - if states is not None: - request.append('states={0}'.format(states)) -- -- return self.get(''.join(request), **kwargs) -+ return self.get('&'.join(request), **kwargs) - - def pg_map(self, pgid, **kwargs): - return self.get('pg/map?pgid={0}' -@@ -926,10 +1091,6 @@ class CephWrapper(client.CephClient): - def pg_stat(self, **kwargs): - 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) -@@ -957,20 +1118,20 @@ class CephWrapper(client.CephClient): - return self.put('pg/set_nearfull_ratio?ratio={0}' - .format(ratio), **kwargs) - -- ### -- # tell GET calls -- ### - def tell_debug_dump_missing(self, id, filename, **kwargs): -- return self.get('tell/{0}/debug_dump_missing?filename={1}' -+ return self.get('tell/{0}/debug/dump_missing?filename={1}' - .format(id, filename), **kwargs) - - def tell_dump_pg_recovery_stats(self, id, **kwargs): - return self.get('tell/{0}/dump_pg_recovery_stats' - .format(id), **kwargs) - -- def tell_list_missing(self, id, offset, **kwargs): -- return self.get('tell/{0}/list_missing?offset={1}' -- .format(id, offset), **kwargs) -+ def tell_list_missing(self, id, offset=None, **kwargs): -+ if offset is not None: -+ return self.get('tell/{0}/list_missing?offset={1}' -+ .format(id, offset), **kwargs) -+ else: -+ return self.get('tell/{0}/list_missing', **kwargs) - - def tell_query(self, id, **kwargs): - return self.get('tell/{0}/query' -@@ -979,3 +1140,55 @@ class CephWrapper(client.CephClient): - def tell_version(self, id, **kwargs): - return self.get('tell/{0}/version' - .format(id), **kwargs) -+ -+ def tell_bench(self, id, count=None, size=None, object_size=None, object_num=None, **kwargs): -+ request = [] -+ request.append('tell/{0}/bench'.format(id)) -+ if count is not None: -+ request.append('count={0}'.format(count)) -+ if size is not None: -+ request.append('size={0}'.format(size)) -+ if object_size is not None: -+ request.append('object_size={0}'.format(object_size)) -+ if object_num is not None: -+ request.append('object_num={0}'.format(object_num)) -+ if len(request) == 1: -+ return self.put(request[0], **kwargs) -+ return self.put(request[0] + '?' + '&'.join(request[1:]), **kwargs) -+ -+ def tell_cluster_log(self, id, level, message, **kwargs): -+ if isinstance(message, list): -+ message = '&message='.join(message) -+ return self.put('tell/{0}/cluster_log?level={1}&message={2}' -+ .format(id, level, message), **kwargs) -+ -+ def tell_cpu_profiler(self, id, arg, **kwargs): -+ return self.put('tell/{0}/cpu_profiler?arg={1}' -+ .format(id, arg), **kwargs) -+ -+ def tell_debug_kick_recovery_wq(self, id, delay, **kwargs): -+ return self.put('tell/{0}/debug/kick_recovery_wq?delay={1}' -+ .format(id, delay), **kwargs) -+ -+ def tell_flush_pg_stats(self, id, **kwargs): -+ return self.put('tell/{0}/flush_pg_stats' -+ .format(id), **kwargs) -+ -+ def tell_heap(self, id, heapcmd, **kwargs): -+ return self.put('tell/{0}/heap?heapcmd={1}' -+ .format(id, heapcmd), **kwargs) -+ -+ def tell_injectargs(self, id, injected_args, **kwargs): -+ if isinstance(injected_args, list): -+ injected_args = '&injected_args='.join(injected_args) -+ return self.put('tell/{0}/injectargs?injected_args={1}' -+ .format(id, injected_args), **kwargs) -+ -+ def tell_mark_unfound_lost(self, id, mulcmd, **kwargs): -+ return self.put('tell/{0}/mark_unfound_lost?mulcmd={1}' -+ .format(id, mulcmd), **kwargs) -+ -+ def tell_reset_pg_recovery_stats(self, id, **kwargs): -+ return self.put('tell/{0}/reset_pg_recovery_stats' -+ .format(id), **kwargs) -+ diff --git a/ceph/python-cephclient/python-cephclient/add-osd-get-pool-quota.patch b/ceph/python-cephclient/python-cephclient/add-osd-get-pool-quota.patch deleted file mode 100644 index 4127d7eb..00000000 --- a/ceph/python-cephclient/python-cephclient/add-osd-get-pool-quota.patch +++ /dev/null @@ -1,15 +0,0 @@ -Index: git/cephclient/wrapper.py -=================================================================== ---- git.orig/cephclient/wrapper.py 2015-10-26 16:00:32.768154102 +0200 -+++ git/cephclient/wrapper.py 2015-11-04 14:46:09.491855340 +0200 -@@ -412,6 +412,10 @@ - else: - return self.get('osd/pool/stats', **kwargs) - -+ def osd_get_pool_quota(self, pool, **kwargs): -+ return self.get('osd/pool/get-quota?pool={0}' -+ .format(pool), **kwargs) -+ - def osd_stat(self, **kwargs): - return self.get('osd/stat', **kwargs) - diff --git a/ceph/python-cephclient/python-cephclient/fix-osd-crush-remove.patch b/ceph/python-cephclient/python-cephclient/fix-osd-crush-remove.patch deleted file mode 100644 index 2f611a75..00000000 --- a/ceph/python-cephclient/python-cephclient/fix-osd-crush-remove.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- - cephclient/wrapper.py | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -Index: git/cephclient/wrapper.py -=================================================================== ---- git.orig/cephclient/wrapper.py -+++ git/cephclient/wrapper.py -@@ -449,9 +449,13 @@ class CephWrapper(client.CephClient): - return self.put('osd/crush/move?name={0}&args={1}' - .format(name, args), **kwargs) - -- def osd_crush_remove(self, name, ancestor, **kwargs): -- return self.put('osd/crush/remove?name={0}&ancestor={1}' -- .format(name, ancestor), **kwargs) -+ def osd_crush_remove(self, name, ancestor=None, **kwargs): -+ if ancestor: -+ return self.put('osd/crush/remove?name={0}&ancestor={1}' -+ .format(name, ancestor), **kwargs) -+ else: -+ return self.put('osd/crush/remove?name={0}' -+ .format(name), **kwargs) - - def osd_crush_reweight(self, name, weight, **kwargs): - return self.put('osd/crush/reweight?name={0}&weight={1}' diff --git a/ceph/python-cephclient/python-cephclient/fix-osd-tier-add.patch b/ceph/python-cephclient/python-cephclient/fix-osd-tier-add.patch deleted file mode 100644 index c07f5319..00000000 --- a/ceph/python-cephclient/python-cephclient/fix-osd-tier-add.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff -rupN a/cephclient/wrapper.py b/cephclient/wrapper.py ---- a/cephclient/wrapper.py 2016-07-04 21:59:06.000000000 +0300 -+++ b/cephclient/wrapper.py 2016-07-07 18:01:50.000000000 +0300 -@@ -799,11 +799,11 @@ class CephWrapper(client.CephClient): - return self.put('osd/thrash?num_epochs={0}' - .format(num_epochs), **kwargs) - -- def osd_tier_add(self, pool, tierpool, force_notempty=None, **kwargs): -- if force_notempty is not None: -+ def osd_tier_add(self, pool, tierpool, force_nonempty=None, **kwargs): -+ if force_nonempty is not None: - return self.put('osd/tier/add?pool={0}&tierpool={1}' -- '&force_notempty={2}' -- .format(pool, tierpool, force_notempty), **kwargs) -+ '&force_nonempty={2}' -+ .format(pool, tierpool, force_nonempty), **kwargs) - else: - return self.put('osd/tier/add?pool={0}&tierpool={1}' - .format(pool, tierpool), **kwargs) diff --git a/ceph/python-cephclient/python-cephclient/set-default-endpoint.patch b/ceph/python-cephclient/python-cephclient/set-default-endpoint.patch deleted file mode 100644 index 40adee89..00000000 --- a/ceph/python-cephclient/python-cephclient/set-default-endpoint.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- - cephclient/client.py | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - ---- a/cephclient/client.py -+++ b/cephclient/client.py -@@ -53,7 +53,12 @@ class CephClient(object): - - self.log.debug("Params: {0}".format(str(self.params))) - -- self.endpoint = self.params['endpoint'] -+ if 'endpoint' in self.params: -+ self.endpoint = self.params['endpoint'] -+ else: -+ # default endpoint -+ self.endpoint = 'http://localhost:5001/api/v0.1/' -+ - if 'timeout' not in self.params: - self.timeout = None -