Can synchronize multiple target of ssh_keys
This commit is contained in:
parent
068e23a4ce
commit
b49a2322d9
135
process/ldap/sync_ssh_keys.pl
Normal file
135
process/ldap/sync_ssh_keys.pl
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
#! /usr/bin/env perl
|
||||||
|
|
||||||
|
use v5.10.1;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use XML::LibXML;
|
||||||
|
|
||||||
|
use lib "../../";
|
||||||
|
|
||||||
|
use ACU::LDAP;
|
||||||
|
use ACU::Log;
|
||||||
|
use ACU::Process;
|
||||||
|
use ACU::VCS::Git;
|
||||||
|
|
||||||
|
my %master_actions =
|
||||||
|
(
|
||||||
|
"update" => \&master_update,
|
||||||
|
"register" => \&master_register,
|
||||||
|
);
|
||||||
|
|
||||||
|
my %node_actions =
|
||||||
|
(
|
||||||
|
"git" => { "update" => \&node_git_update, },
|
||||||
|
);
|
||||||
|
|
||||||
|
my @nodes;
|
||||||
|
my $service;
|
||||||
|
|
||||||
|
sub master_register
|
||||||
|
{
|
||||||
|
my $args = shift;
|
||||||
|
|
||||||
|
if ($args->{param}{nodename}) {
|
||||||
|
my $nodename = "sync_ssh_keys_".$args->{param}{nodename};
|
||||||
|
|
||||||
|
log INFO, "New node: $nodename";
|
||||||
|
push @nodes, "$nodename";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
log WARN, "nodename empty, cannot register new node";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub master_update
|
||||||
|
{
|
||||||
|
my $args = shift;
|
||||||
|
|
||||||
|
my %params = ("action" => "update");
|
||||||
|
|
||||||
|
for (my $i = $args->{unamed}; $i > 0; $i--) {
|
||||||
|
$params{"__$i"} = $args->{param}{$i};
|
||||||
|
}
|
||||||
|
|
||||||
|
log TRACE, %params;
|
||||||
|
log DEBUG, "Start updating nodes...";
|
||||||
|
|
||||||
|
Process::Client::paralaunch(\@nodes, \%params);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub process_master
|
||||||
|
{
|
||||||
|
my ($given_args, $args) = @_;
|
||||||
|
|
||||||
|
my $action = $args->{param}{action} // "update";
|
||||||
|
|
||||||
|
if (! exists $master_actions{$action}) {
|
||||||
|
log WARN, "Unknown action '$action' for sync_ssh_keys master process.";
|
||||||
|
}
|
||||||
|
return $master_actions{$action}($args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub node_git_update
|
||||||
|
{
|
||||||
|
my $args = shift;
|
||||||
|
|
||||||
|
Git::init_conf();
|
||||||
|
|
||||||
|
my $commit_msg = "Updating keys for ";
|
||||||
|
for (my $i = $args->{unamed}; $i > 0; $i--)
|
||||||
|
{
|
||||||
|
Git::user_add($args->{param}{$i}, 1);
|
||||||
|
$commit_msg .= $args->{param}{$i}.", ";
|
||||||
|
}
|
||||||
|
|
||||||
|
Git::save_conf("$commit_msg from sync_ssh_keys");
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub process_node
|
||||||
|
{
|
||||||
|
my ($given_args, $args) = @_;
|
||||||
|
|
||||||
|
my $action = $args->{param}{action} // "update";
|
||||||
|
|
||||||
|
if (! exists $node_actions{$service}{$action}) {
|
||||||
|
log WARN, "Unknown action '$action' for sync_ssh_keys $service node process.";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $node_actions{$service}{$action}($args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ($0 =~ /^(?:.*\/)?sync_ssh_keys_(?:([a-zA-Z0-9]+)_)?([a-zA-Z0-9]+).pl$/) {
|
||||||
|
$service = $1 // "git";
|
||||||
|
|
||||||
|
log INFO, "Starting sync_ssh_keys.pl as $service for server $2";
|
||||||
|
|
||||||
|
if ($service eq "git")
|
||||||
|
{
|
||||||
|
$Git::git_server = $2;
|
||||||
|
|
||||||
|
log INFO, "Start by syncing all users key...";
|
||||||
|
|
||||||
|
Git::users_update();
|
||||||
|
|
||||||
|
log INFO, "Registering a new sync_ssh_keys node...";
|
||||||
|
|
||||||
|
Process::Client::launch("sync_ssh_keys", {"action" => "register", "nodename" => $service."_".$2});
|
||||||
|
|
||||||
|
Process::register("sync_ssh_keys_".$service."_$2", \&process_node);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
log FATAL, "Unknown service '$service', exiting.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elsif ($0 =~ /^(?:.*\/)?sync_ssh_keys/) {
|
||||||
|
log INFO, "Starting sync_ssh_keys.pl as master process";
|
||||||
|
|
||||||
|
Process::register("sync_ssh_keys", \&process_master);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
die ("Bad filename.");
|
||||||
|
}
|
1
process/ldap/sync_ssh_keys_forge.pl
Symbolic link
1
process/ldap/sync_ssh_keys_forge.pl
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
sync_ssh_keys.pl
|
1
process/ldap/sync_ssh_keys_git.pl
Symbolic link
1
process/ldap/sync_ssh_keys_git.pl
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
sync_ssh_keys.pl
|
Reference in New Issue
Block a user