if s == '*':
self.val = s
return
+ elif s == "mgr":
+ self.nametype = "mgr"
+ self.val = s
+ return
if s.find('.') == -1:
raise ArgumentFormat('CephName: no . in {0}'.format(s))
else:
t, i = s.split('.', 1)
- if t not in ('osd', 'mon', 'client', 'mds'):
+ if t not in ('osd', 'mon', 'client', 'mds', 'mgr'):
raise ArgumentValid('unknown type ' + t)
if t == 'osd':
if i != '*':
ret, outbuf, outs = run_in_thread(
cluster.osd_command, osdid, cmd, inbuf, timeout)
+ elif target[0] == 'mgr':
+ ret, outbuf, outs = run_in_thread(
+ cluster.mgr_command, cmd, inbuf, timeout)
+
elif target[0] == 'pg':
pgid = target[1]
# pgid will already be in the command for the pg <pgid>
const char *inbuf, size_t inbuflen,
char **outbuf, size_t *outbuflen,
char **outs, size_t *outslen)
+ int rados_mgr_command(rados_t cluster, const char **cmd, size_t cmdlen,
+ const char *inbuf, size_t inbuflen,
+ char **outbuf, size_t *outbuflen,
+ char **outs, size_t *outslen)
int rados_mon_command_target(rados_t cluster, const char *name, const char **cmd, size_t cmdlen,
const char *inbuf, size_t inbuflen,
char **outbuf, size_t *outbuflen,
finally:
free(_cmd)
+ def mgr_command(self, cmd, inbuf, timeout=0):
+ """
+ returns (int ret, string outbuf, string outs)
+ """
+ # NOTE(sileht): timeout is ignored because C API doesn't provide
+ # timeout argument, but we keep it for backward compat with old python binding
+ self.require_state("connected")
+
+ cmd = cstr_list(cmd, 'cmd')
+ inbuf = cstr(inbuf, 'inbuf')
+
+ cdef:
+ char **_cmd = to_bytes_array(cmd)
+ size_t _cmdlen = len(cmd)
+
+ char *_inbuf = inbuf
+ size_t _inbuf_len = len(inbuf)
+
+ char *_outbuf
+ size_t _outbuf_len
+ char *_outs
+ size_t _outs_len
+
+ try:
+ with nogil:
+ ret = rados_mgr_command(self.cluster,
+ <const char **>_cmd, _cmdlen,
+ <const char*>_inbuf, _inbuf_len,
+ &_outbuf, &_outbuf_len,
+ &_outs, &_outs_len)
+
+ my_outs = decode_cstr(_outs[:_outs_len])
+ my_outbuf = _outbuf[:_outbuf_len]
+ if _outs_len:
+ rados_buffer_free(_outs)
+ if _outbuf_len:
+ rados_buffer_free(_outbuf)
+ return (ret, my_outbuf, my_outs)
+ finally:
+ free(_cmd)
+
def pg_command(self, pgid, cmd, inbuf, timeout=0):
"""
pg_command(pgid, cmd, inbuf, outbuf, outbuflen, outs, outslen)