[pve-devel] [PATCH manager 09/14] ceph: mon create: add to mon_host with msgr2

Dominik Csapak d.csapak at proxmox.com
Tue Jun 18 15:42:53 CEST 2019


in nautilus, the default msgr protocol is v2, but it has to be
explicitely given to monmaptool, also we don't want to use the
monitor sections anymore so only update mon_host

ceph can cope with mixed mon_host and monitor sections, so this is
not a problem

also the ceph-create-keys part is not necessary anymore since
this is done by the monitor itself now

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 PVE/API2/Ceph/MON.pm | 38 ++++++++++++++++----------------------
 1 file changed, 16 insertions(+), 22 deletions(-)

diff --git a/PVE/API2/Ceph/MON.pm b/PVE/API2/Ceph/MON.pm
index a0980886..6cba7f8e 100644
--- a/PVE/API2/Ceph/MON.pm
+++ b/PVE/API2/Ceph/MON.pm
@@ -191,9 +191,6 @@ __PACKAGE__->register_method ({
 	my $monsection = "mon.$monid";
 	my $ip = $find_mon_ip->($cfg, $rados, $param->{node}, $param->{'mon-address'});
 
-	my $monaddr = Net::IP::ip_is_ipv6($ip) ? "[$ip]:6789" : "$ip:6789";
-	my $monname = $param->{node};
-
 	$assert_mon_prerequisites->($cfg, $monhash, $monid, $ip);
 
 	my $worker = sub  {
@@ -224,10 +221,15 @@ __PACKAGE__->register_method ({
 		    my $mapdata = $rados->mon_command({ prefix => 'mon getmap', format => 'plain' });
 		    file_set_contents($monmap, $mapdata);
 		} else {
-		    run_command("monmaptool --create --clobber --add $monid $monaddr --print $monmap");
+		    my $monaddr = $ip;
+		    if (Net::IP::ip_is_ipv6($ip)) {
+			$monaddr = "[$ip]";
+			$cfg->{global}->{ms_bind_ipv6} = 'true';
+		    }
+		    run_command("monmaptool --create --clobber --addv $monid '[v2:$monaddr:3300,v1:$monaddr:6789]' --print $monmap");
 		}
 
-		run_command("ceph-mon --mkfs -i $monid --monmap $monmap --keyring $mon_keyring");
+		run_command("ceph-mon --mkfs -i $monid --monmap $monmap --keyring $mon_keyring --public-addr $ip");
 		run_command("chown ceph:ceph -R $mondir");
 	    };
 	    my $err = $@;
@@ -237,26 +239,18 @@ __PACKAGE__->register_method ({
 		die $err;
 	    }
 
-	    $cfg->{$monsection} = {
-		'host' => $monname,
-		'mon addr' => $monaddr,
-	    };
+	    # update ceph.conf
+	    my $monhost = $cfg->{global}->{mon_host} // "";
+	    $monhost .= " $ip";
+	    $cfg->{global}->{mon_host} = $monhost;
 
 	    cfs_write_file('ceph.conf', $cfg);
 
-	    my $create_keys_pid = fork();
-	    if (!defined($create_keys_pid)) {
-		die "Could not spawn ceph-create-keys to create bootstrap keys\n";
-	    } elsif ($create_keys_pid == 0) {
-		exit PVE::Tools::run_command(['ceph-create-keys', '-i', $monid]);
-	    } else {
-		PVE::Ceph::Services::ceph_service_cmd('start', $monsection);
-
-		# to ensure we have the correct startup order.
-		eval { PVE::Ceph::Services::ceph_service_cmd('enable', $monsection) };
-		warn "Enable ceph-mon\@${monid}.service failed, do manually: $@\n" if $@;
-		waitpid($create_keys_pid, 0);
-	    }
+	    PVE::Ceph::Services::ceph_service_cmd('start', $monsection);
+
+	    eval { PVE::Ceph::Services::ceph_service_cmd('enable', $monsection) };
+	    warn "Enable ceph-mon\@${monid}.service failed, do manually: $@\n" if $@;
+
 	    PVE::Ceph::Services::broadcast_ceph_services();
 	};
 
-- 
2.11.0





More information about the pve-devel mailing list