[pve-devel] [PATCH cluster v5 00/17] Allow adding/deleting nodes and cluster creation over API
    Thomas Lamprecht 
    t.lamprecht at proxmox.com
       
    Fri Jan 26 14:25:10 CET 2018
    
    
  
Fifth iteration of this series, see [1] for the v4 cover letter.
Changes in other packages are now in place.
Higher level changes:
* Split the v4 03/15 refactor patch in two parts, should be easier to
  understand
* add a patch which combines the ringX_addr and nodeid parameter
  format descriptions, suggested by Fabian
* version the libpve-common-perl dependency when introducing the use
  of the fingerprint format
* reword and enhance some commit messageso
Just diff this and v3 for more details, the changes are not that big.
Tested with CLI tool pvecm and through an API client, see below for a
script doing this with our apiclient library.
cheers,
Thomas
[1]: https://pve.proxmox.com/pipermail/pve-devel/2018-January/030177.html
Thomas Lamprecht (17):
  move addnode/delnode from CLI to cluster config API
  tell cluster log when adding/deleting a node
  node add: factor out checks for joining
  node add: factor out local joining steps
  assert_joinable: simplify error and warning handling
  use run_command instead of system
  return cluster config and authkey in addnode API call
  api/cluster: add join endpoint
  pvecm add: use API by default to join cluster
  cluster create: factor out initial corosync config assembly
  cluster create: restart corosync & pmxfs in one go and say so
  move cluster create to API
  api/cluster: create cluster in forked worker
  factor out common parameter definitions
  api/cluster: add endpoint to GET cluster join information
  use resolved IP address for ring0_addr as default
  lock locally on create and add
 data/PVE/API2/ClusterConfig.pm | 505 +++++++++++++++++++++++++++++++++++-
 data/PVE/CLI/pvecm.pm          | 570 +++--------------------------------------
 data/PVE/Cluster.pm            | 137 +++++++++-
 data/PVE/Corosync.pm           |  73 ++++++
 debian/control.in              |   4 +-
 5 files changed, 754 insertions(+), 535 deletions(-)
-- 
2.14.2
Updated API Join example:
--
#!/usr/bin/perl
use strict;
use warnings;
use PVE::APIClient::LWP;
use JSON;
sub p { print to_json($_[0], { pretty => 1, canonical => 1}); }
# TODO: ADAPT BELOW
my $ip_cluster_node = '192.168.30.31';
my $pass_cluster_node = "12345";
my $ip_joinee = '192.168.30.32';
my $pass_joinee = '12345';
my $joinee = PVE::APIClient::LWP->new(
    username => 'root at pam',
    password => $pass_joinee,
    host => $ip_joinee,
    manual_verification => 1,
);
my $cluster_node = PVE::APIClient::LWP->new(
    username => 'root at pam',
    password =>$pass_cluster_node,
    host => $ip_cluster_node,
    manual_verification => 1,
);
my $joininfo = $cluster_node->get("/cluster/config/join", {});
p($joininfo);
my $upid = $joinee->post("/cluster/config/join", {
    hostname => $joininfo->{nodelist}[0]->{pve_addr},
    fingerprint => $joininfo->{nodelist}[0]->{pve_fp},
    password => $pass_cluster_node,
});
print "join task upid: $upid\n";
my $task_state;
my $errors = 0;
while (1) {
    eval { $task_state = $joinee->get("/nodes/localhost/tasks/$upid/status", {}) };
    if (my $err = $@) {
	warn $@;
	$errors++;
	die "to much errors from querying task state!\n" if $errors > 5;
    }
    last if $task_state->{status} eq 'stopped';
    sleep 1;
}
print "join task finished, res:\n";
p($task_state)
    
    
More information about the pve-devel
mailing list