[pve-devel] [PATCH v2 manager 4/7] ceph: adapt to changed rados mon_command return values
Aaron Lauterer
a.lauterer at proxmox.com
Fri Mar 25 11:55:07 CET 2022
The mon_command now returns a hash ref but current calls are only
interested in the 'data'.
Signed-off-by: Aaron Lauterer <a.lauterer at proxmox.com>
---
Needs to be coordinated with librados2-perl changes from patch 1
PVE/API2/Ceph.pm | 6 +++---
PVE/API2/Ceph/MGR.pm | 2 +-
PVE/API2/Ceph/MON.pm | 19 +++++++++++++------
PVE/API2/Ceph/OSD.pm | 14 +++++++-------
PVE/API2/Ceph/Pools.pm | 18 ++++++++++--------
PVE/API2/Cluster/Ceph.pm | 6 +++---
PVE/CLI/pveceph.pm | 4 ++--
PVE/Ceph/Services.pm | 10 +++++-----
PVE/Ceph/Tools.pm | 16 ++++++++--------
9 files changed, 52 insertions(+), 43 deletions(-)
diff --git a/PVE/API2/Ceph.pm b/PVE/API2/Ceph.pm
index 3bbcfe4c..1e1b1edd 100644
--- a/PVE/API2/Ceph.pm
+++ b/PVE/API2/Ceph.pm
@@ -168,7 +168,7 @@ __PACKAGE__->register_method ({
PVE::Ceph::Tools::check_ceph_inited();
my $rados = PVE::RADOS->new();
- my $res = $rados->mon_command( { prefix => 'config dump', format => 'json' });
+ my $res = $rados->mon_command( { prefix => 'config dump', format => 'json' })->{data};
foreach my $entry (@$res) {
$entry->{can_update_at_runtime} = $entry->{can_update_at_runtime}? 1 : 0; # JSON::true/false -> 1/0
}
@@ -525,7 +525,7 @@ __PACKAGE__->register_method ({
my $rados = PVE::RADOS->new();
eval {
- my $bindata = $rados->mon_command({ prefix => 'osd getcrushmap', format => 'plain' });
+ my $bindata = $rados->mon_command({ prefix => 'osd getcrushmap', format => 'plain' })->{data};
file_set_contents($mapfile, $bindata);
run_command(['crushtool', '-d', $mapfile, '-o', $mapdata]);
$txt = file_get_contents($mapdata);
@@ -630,7 +630,7 @@ __PACKAGE__->register_method ({
my $rados = PVE::RADOS->new();
- my $rules = $rados->mon_command({ prefix => 'osd crush rule ls' });
+ my $rules = $rados->mon_command({ prefix => 'osd crush rule ls' })->{data};
my $res = [];
diff --git a/PVE/API2/Ceph/MGR.pm b/PVE/API2/Ceph/MGR.pm
index 2dc679ef..5b9087c9 100644
--- a/PVE/API2/Ceph/MGR.pm
+++ b/PVE/API2/Ceph/MGR.pm
@@ -67,7 +67,7 @@ __PACKAGE__->register_method ({
my $mgr_hash = PVE::Ceph::Services::get_services_info("mgr", $cfg, $rados);
- my $mgr_dump = $rados->mon_command({ prefix => 'mgr dump' });
+ my $mgr_dump = $rados->mon_command({ prefix => 'mgr dump' })->{data};
my $active_name = $mgr_dump->{active_name};
$mgr_hash->{$active_name}->{state} = 'active' if $active_name;
diff --git a/PVE/API2/Ceph/MON.pm b/PVE/API2/Ceph/MON.pm
index 12c9caf0..943ba0a0 100644
--- a/PVE/API2/Ceph/MON.pm
+++ b/PVE/API2/Ceph/MON.pm
@@ -28,8 +28,12 @@ my $find_mon_ips = sub {
my $pubnet;
if ($rados) {
- $pubnet = $rados->mon_command({ prefix => "config get" , who => "mon.",
- key => "public_network", format => 'plain' });
+ $pubnet = $rados->mon_command({
+ prefix => "config get",
+ who => "mon.",
+ key => "public_network",
+ format => 'plain',
+ })->{data};
# if not defined in the db, the result is empty, it is also always
# followed by a newline
($pubnet) = $pubnet =~ m/^(\S+)$/;
@@ -231,7 +235,7 @@ __PACKAGE__->register_method ({
my $monhash = PVE::Ceph::Services::get_services_info("mon", $cfg, $rados);
if ($rados) {
- my $monstat = $rados->mon_command({ prefix => 'quorum_status' });
+ my $monstat = $rados->mon_command({ prefix => 'quorum_status' })->{data};
my $mons = $monstat->{monmap}->{mons};
foreach my $d (@$mons) {
@@ -391,7 +395,10 @@ __PACKAGE__->register_method ({
];
if (defined($rados)) { # we can only have a RADOS object if we have a monitor
- my $mapdata = $rados->mon_command({ prefix => 'mon getmap', format => 'plain' });
+ my $mapdata = $rados->mon_command({
+ prefix => 'mon getmap',
+ format => 'plain',
+ })->{data};
file_set_contents($monmap, $mapdata);
run_command($monmaptool_cmd);
} else { # we need to create a monmap for the first monitor
@@ -502,7 +509,7 @@ __PACKAGE__->register_method ({
my $monsection = "mon.$monid";
my $rados = PVE::RADOS->new();
- my $monstat = $rados->mon_command({ prefix => 'quorum_status' });
+ my $monstat = $rados->mon_command({ prefix => 'quorum_status' })->{data};
my $monlist = $monstat->{monmap}->{mons};
my $monhash = PVE::Ceph::Services::get_services_info('mon', $cfg, $rados);
@@ -520,7 +527,7 @@ __PACKAGE__->register_method ({
# reopen with longer timeout
$rados = PVE::RADOS->new(timeout => PVE::Ceph::Tools::get_config('long_rados_timeout'));
$monhash = PVE::Ceph::Services::get_services_info('mon', $cfg, $rados);
- $monstat = $rados->mon_command({ prefix => 'quorum_status' });
+ $monstat = $rados->mon_command({ prefix => 'quorum_status' })->{data};
$monlist = $monstat->{monmap}->{mons};
my $addrs = [];
diff --git a/PVE/API2/Ceph/OSD.pm b/PVE/API2/Ceph/OSD.pm
index 93433b3a..d38c4ced 100644
--- a/PVE/API2/Ceph/OSD.pm
+++ b/PVE/API2/Ceph/OSD.pm
@@ -30,7 +30,7 @@ my $nodename = PVE::INotify::nodename();
my $get_osd_status = sub {
my ($rados, $osdid) = @_;
- my $stat = $rados->mon_command({ prefix => 'osd dump' });
+ my $stat = $rados->mon_command({ prefix => 'osd dump' })->{data};
my $osdlist = $stat->{osds} || [];
@@ -51,7 +51,7 @@ my $get_osd_status = sub {
my $get_osd_usage = sub {
my ($rados) = @_;
- my $osdlist = $rados->mon_command({ prefix => 'pg dump', dumpcontents => [ 'osds' ]});
+ my $osdlist = $rados->mon_command({ prefix => 'pg dump', dumpcontents => [ 'osds' ]})->{data};
if (!($osdlist && ref($osdlist))) {
warn "got unknown result format for 'pg dump osds' command\n";
return [];
@@ -95,7 +95,7 @@ __PACKAGE__->register_method ({
PVE::Ceph::Tools::check_ceph_inited();
my $rados = PVE::RADOS->new();
- my $res = $rados->mon_command({ prefix => 'osd tree' });
+ my $res = $rados->mon_command({ prefix => 'osd tree' })->{data};
die "no tree nodes found\n" if !($res && $res->{nodes});
@@ -103,7 +103,7 @@ __PACKAGE__->register_method ({
my $osd_usage = $get_osd_usage->($rados);
- my $osdmetadata_res = $rados->mon_command({ prefix => 'osd metadata' });
+ my $osdmetadata_res = $rados->mon_command({ prefix => 'osd metadata' })->{data};
my $osdmetadata = { map { $_->{id} => $_ } @$osdmetadata_res };
my $hostversions = PVE::Ceph::Services::get_ceph_versions();
@@ -350,7 +350,7 @@ __PACKAGE__->register_method ({
# get necessary ceph infos
my $rados = PVE::RADOS->new();
- my $monstat = $rados->mon_command({ prefix => 'quorum_status' });
+ my $monstat = $rados->mon_command({ prefix => 'quorum_status' })->{data};
die "unable to get fsid\n" if !$monstat->{monmap} || !$monstat->{monmap}->{fsid};
my $fsid = $monstat->{monmap}->{fsid};
@@ -366,7 +366,7 @@ __PACKAGE__->register_method ({
'mon' => 'allow profile bootstrap-osd'
],
format => 'plain',
- });
+ })->{data};
file_set_contents($ceph_bootstrap_osd_keyring, $bindata);
};
@@ -574,7 +574,7 @@ __PACKAGE__->register_method ({
my $rados = PVE::RADOS->new();
my $osd_belongs_to_node = osd_belongs_to_node(
- $rados->mon_command({ prefix => 'osd tree' }),
+ $rados->mon_command({ prefix => 'osd tree' })->{data},
$param->{node},
$osdid,
);
diff --git a/PVE/API2/Ceph/Pools.pm b/PVE/API2/Ceph/Pools.pm
index 002f7893..ed384d6f 100644
--- a/PVE/API2/Ceph/Pools.pm
+++ b/PVE/API2/Ceph/Pools.pm
@@ -21,8 +21,7 @@ my $get_autoscale_status = sub {
$rados = PVE::RADOS->new() if !defined($rados);
- my $autoscale = $rados->mon_command({
- prefix => 'osd pool autoscale-status'});
+ my $autoscale = $rados->mon_command({ prefix => 'osd pool autoscale-status' })->{data};
my $data;
foreach my $p (@$autoscale) {
@@ -132,7 +131,7 @@ __PACKAGE__->register_method ({
my $rados = PVE::RADOS->new();
my $stats = {};
- my $res = $rados->mon_command({ prefix => 'df' });
+ my $res = $rados->mon_command({ prefix => 'df' })->{data};
foreach my $d (@{$res->{pools}}) {
next if !$d->{stats};
@@ -140,8 +139,8 @@ __PACKAGE__->register_method ({
$stats->{$d->{id}} = $d->{stats};
}
- $res = $rados->mon_command({ prefix => 'osd dump' });
- my $rulestmp = $rados->mon_command({ prefix => 'osd crush rule dump'});
+ $res = $rados->mon_command({ prefix => 'osd dump' })->{data};
+ my $rulestmp = $rados->mon_command({ prefix => 'osd crush rule dump'})->{data};
my $rules = {};
for my $rule (@$rulestmp) {
@@ -566,7 +565,7 @@ __PACKAGE__->register_method ({
prefix => 'osd pool get',
pool => "$pool",
var => 'all',
- });
+ })->{data};
my $data = {
id => $res->{pool_id},
@@ -593,7 +592,7 @@ __PACKAGE__->register_method ({
if ($verbose) {
my $stats;
- my $res = $rados->mon_command({ prefix => 'df' });
+ my $res = $rados->mon_command({ prefix => 'df' })->{data};
# pg_autoscaler module is not enabled in Nautilus
# avoid partial read further down, use new rados instance
@@ -606,7 +605,10 @@ __PACKAGE__->register_method ({
$data->{statistics} = $d->{stats};
}
- my $apps = $rados->mon_command({ prefix => "osd pool application get", pool => "$pool", });
+ my $apps = $rados->mon_command({
+ prefix => "osd pool application get",
+ pool => "$pool",
+ })->{data};
$data->{application_list} = [ keys %$apps ];
}
diff --git a/PVE/API2/Cluster/Ceph.pm b/PVE/API2/Cluster/Ceph.pm
index 7f825003..e48626eb 100644
--- a/PVE/API2/Cluster/Ceph.pm
+++ b/PVE/API2/Cluster/Ceph.pm
@@ -96,7 +96,7 @@ __PACKAGE__->register_method ({
}
# get data from metadata call and merge 'our' data
- my $services = $rados->mon_command({ prefix => "$type metadata" });
+ my $services = $rados->mon_command({ prefix => "$type metadata" })->{data};
for my $service ( @$services ) {
my $hostname = $service->{hostname};
next if !defined($hostname); # can happen if node is dead
@@ -115,7 +115,7 @@ __PACKAGE__->register_method ({
$res->{$type} = $data;
}
- $res->{osd} = $rados->mon_command({ prefix => "osd metadata" });
+ $res->{osd} = $rados->mon_command({ prefix => "osd metadata" })->{data};
return $res;
}
@@ -152,7 +152,7 @@ my $get_current_set_flags = sub {
$rados //= PVE::RADOS->new();
- my $stat = $rados->mon_command({ prefix => 'osd dump' });
+ my $stat = $rados->mon_command({ prefix => 'osd dump' })->{data};
my $setflags = $stat->{flags} // '';
return { map { $_ => 1 } PVE::Tools::split_list($setflags) };
};
diff --git a/PVE/CLI/pveceph.pm b/PVE/CLI/pveceph.pm
index 995cfcd5..0aa390ef 100755
--- a/PVE/CLI/pveceph.pm
+++ b/PVE/CLI/pveceph.pm
@@ -77,7 +77,7 @@ __PACKAGE__->register_method ({
$pools = PVE::Ceph::Tools::ls_pools(undef, $rados);
$monstat = PVE::Ceph::Services::get_services_info('mon', undef, $rados);
$mdsstat = PVE::Ceph::Services::get_services_info('mds', undef, $rados);
- $osdstat = $rados->mon_command({ prefix => 'osd metadata' });
+ $osdstat = $rados->mon_command({ prefix => 'osd metadata' })->{data};
};
warn "Error gathering ceph info, already purged? Message: $@" if $@;
@@ -291,7 +291,7 @@ __PACKAGE__->register_method ({
if ($param->{'remove-storages'}) {
my $defaultfs;
- my $fs_dump = $rados->mon_command({ prefix => "fs dump" });
+ my $fs_dump = $rados->mon_command({ prefix => "fs dump" })->{data};
for my $fs ($fs_dump->{filesystems}->@*) {
next if $fs->{id} != $fs_dump->{default_fscid};
$defaultfs = $fs->{mdsmap}->{fs_name};
diff --git a/PVE/Ceph/Services.pm b/PVE/Ceph/Services.pm
index cda13c6a..8fe62cb1 100644
--- a/PVE/Ceph/Services.pm
+++ b/PVE/Ceph/Services.pm
@@ -147,7 +147,7 @@ sub get_services_info {
return $result;
}
- my $metadata = $rados->mon_command({ prefix => "$type metadata" });
+ my $metadata = $rados->mon_command({ prefix => "$type metadata" })->{data};
foreach my $info (@$metadata) {
my $id = $info->{name} // $info->{id};
my $service = $result->{$id};
@@ -197,7 +197,7 @@ sub get_cluster_mds_state {
$mds_state->{$mds->{name}} = $state;
};
- my $mds_dump = $rados->mon_command({ prefix => 'mds stat' });
+ my $mds_dump = $rados->mon_command({ prefix => 'mds stat' })->{data};
my $fsmap = $mds_dump->{fsmap};
@@ -225,7 +225,7 @@ sub is_mds_active {
$rados = PVE::RADOS->new();
}
- my $mds_dump = $rados->mon_command({ prefix => 'mds stat' });
+ my $mds_dump = $rados->mon_command({ prefix => 'mds stat' })->{data};
my $fsmap = $mds_dump->{fsmap}->{filesystems};
if (!($fsmap && scalar(@$fsmap) > 0)) {
@@ -280,7 +280,7 @@ sub create_mds {
entity => $service_name,
caps => $priv,
format => 'plain',
- });
+ })->{data};
PVE::Tools::file_set_contents($service_keyring, $output);
@@ -357,7 +357,7 @@ sub create_mgr {
mds => 'allow *',
],
format => 'plain'
- });
+ })->{data};
PVE::Tools::file_set_contents($mgrkeyring, $output);
print "setting owner for directory\n";
diff --git a/PVE/Ceph/Tools.pm b/PVE/Ceph/Tools.pm
index 36d7788a..85306328 100644
--- a/PVE/Ceph/Tools.pm
+++ b/PVE/Ceph/Tools.pm
@@ -78,7 +78,7 @@ sub get_cluster_versions {
my $rados = PVE::RADOS->new();
my $cmd = $service ? "$service versions" : 'versions';
- return $rados->mon_command({ prefix => $cmd });
+ return $rados->mon_command({ prefix => $cmd })->{data};
}
sub get_config {
@@ -282,7 +282,7 @@ sub ls_pools {
$rados = PVE::RADOS->new();
}
- my $res = $rados->mon_command({ prefix => "osd lspools" });
+ my $res = $rados->mon_command({ prefix => "osd lspools" })->{data};
return $res;
}
@@ -319,7 +319,7 @@ sub ls_fs {
$rados = PVE::RADOS->new();
}
- my $res = $rados->mon_command({ prefix => "fs ls" });
+ my $res = $rados->mon_command({ prefix => "fs ls" })->{data};
return $res;
}
@@ -420,7 +420,7 @@ sub get_db_wal_sizes {
my $res = {};
my $rados = PVE::RADOS->new();
- my $db_config = $rados->mon_command({ prefix => 'config-key dump', key => 'config/' });
+ my $db_config = $rados->mon_command({ prefix => 'config-key dump', key => 'config/' })->{data};
$res->{db} = $db_config->{"config/osd/bluestore_block_db_size"} //
$db_config->{"config/global/bluestore_block_db_size"};
@@ -520,12 +520,12 @@ sub ceph_cluster_status {
my ($rados) = @_;
$rados = PVE::RADOS->new() if !$rados;
- my $status = $rados->mon_command({ prefix => 'status' });
- $status->{health} = $rados->mon_command({ prefix => 'health', detail => 'detail' });
+ my $status = $rados->mon_command({ prefix => 'status' })->{data};
+ $status->{health} = $rados->mon_command({ prefix => 'health', detail => 'detail' })->{data};
if (!exists $status->{monmap}->{mons}) { # octopus moved most info out of status, re-add
- $status->{monmap} = $rados->mon_command({ prefix => 'mon dump' });
- $status->{mgrmap} = $rados->mon_command({ prefix => 'mgr dump' });
+ $status->{monmap} = $rados->mon_command({ prefix => 'mon dump' })->{data};
+ $status->{mgrmap} = $rados->mon_command({ prefix => 'mgr dump' })->{data};
}
return $status;
--
2.30.2
More information about the pve-devel
mailing list