[pve-devel] [PATCH cluster v4 12/15] api/cluster: create cluster in worker
Thomas Lamprecht
t.lamprecht at proxmox.com
Tue Jan 9 15:53:00 CET 2018
This may need a bit longer and we get a nice task log entry with
this.
Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---
data/PVE/API2/ClusterConfig.pm | 44 +++++++++++++++++++++++-------------------
1 file changed, 24 insertions(+), 20 deletions(-)
diff --git a/data/PVE/API2/ClusterConfig.pm b/data/PVE/API2/ClusterConfig.pm
index 954c293..8c88a17 100644
--- a/data/PVE/API2/ClusterConfig.pm
+++ b/data/PVE/API2/ClusterConfig.pm
@@ -100,38 +100,42 @@ __PACKAGE__->register_method ({
},
},
},
- returns => { type => 'null' },
-
+ returns => { type => 'string' },
code => sub {
my ($param) = @_;
-f $clusterconf && die "cluster config '$clusterconf' already exists\n";
- PVE::Cluster::setup_sshd_config(1);
- PVE::Cluster::setup_rootsshconfig();
- PVE::Cluster::setup_ssh_keys();
+ my $rpcenv = PVE::RPCEnvironment::get();
+ my $authuser = $rpcenv->get_user();
- PVE::Tools::run_command(['/usr/sbin/corosync-keygen', '-lk', $authfile])
- if !-f $authfile;
- die "no authentication key available\n" if -f !$authfile;
+ my $worker = sub {
+ PVE::Cluster::setup_sshd_config(1);
+ PVE::Cluster::setup_rootsshconfig();
+ PVE::Cluster::setup_ssh_keys();
- my $nodename = PVE::INotify::nodename();
+ PVE::Tools::run_command(['/usr/sbin/corosync-keygen', '-lk', $authfile])
+ if !-f $authfile;
+ die "no authentication key available\n" if -f !$authfile;
- # get the corosync basis config for the new cluster
- my $config = PVE::Corosync::create_conf($nodename, %$param);
+ my $nodename = PVE::INotify::nodename();
- print "Writing corosync config to /etc/pve/corosync.conf\n";
- PVE::Corosync::atomic_write_conf($config);
+ # get the corosync basis config for the new cluster
+ my $config = PVE::Corosync::create_conf($nodename, %$param);
- my $local_ip_address = PVE::Cluster::remote_node_ip($nodename);
- PVE::Cluster::ssh_merge_keys();
- PVE::Cluster::gen_pve_node_files($nodename, $local_ip_address);
- PVE::Cluster::ssh_merge_known_hosts($nodename, $local_ip_address, 1);
+ print "Writing corosync config to /etc/pve/corosync.conf\n";
+ PVE::Corosync::atomic_write_conf($config);
- print "Restart corosync and cluster filesystem\n";
- PVE::Tools::run_command('systemctl restart corosync pve-cluster');
+ my $local_ip_address = PVE::Cluster::remote_node_ip($nodename);
+ PVE::Cluster::ssh_merge_keys();
+ PVE::Cluster::gen_pve_node_files($nodename, $local_ip_address);
+ PVE::Cluster::ssh_merge_known_hosts($nodename, $local_ip_address, 1);
- return undef;
+ print "Restart corosync and cluster filesystem\n";
+ PVE::Tools::run_command('systemctl restart corosync pve-cluster');
+ };
+
+ return $rpcenv->fork_worker('clustercreate', '', $authuser, $worker);
}});
__PACKAGE__->register_method({
--
2.11.0
More information about the pve-devel
mailing list