84 lines
2.2 KiB
Perl
84 lines
2.2 KiB
Perl
#!/usr/bin/env perl
|
|
use strict;
|
|
use warnings;
|
|
use FindBin;
|
|
use lib "$FindBin::Bin/../../kenaito-conf-perl-client/lib";
|
|
use JSON::PP;
|
|
use Kenaito::Conf::Config;
|
|
use Kenaito::Conf::Client;
|
|
|
|
my %config_values = (
|
|
'database.host' => $ENV{DATABASE_HOST} // '192.168.1.1',
|
|
'database.port' => $ENV{DATABASE_PORT} // '8888',
|
|
'database.name' => $ENV{DATABASE_NAME} // 'xxxx',
|
|
'database.user' => $ENV{DATABASE_USER} // 'xxxx',
|
|
'database.password' => $ENV{DATABASE_PASSWORD} // 'xxxxxxxx',
|
|
);
|
|
|
|
sub get_env {
|
|
my ($key, $default) = @_;
|
|
return defined $ENV{$key} && $ENV{$key} ne '' ? $ENV{$key} : $default;
|
|
}
|
|
|
|
my $cfg = Kenaito::Conf::Config->new(
|
|
base_url => get_env('KENAITO_BASE_URL', 'http://localhost:8080'),
|
|
app_name => get_env('KENAITO_APP_NAME', 'kenaito-springboot-demo'),
|
|
env => get_env('KENAITO_ENV', 'daily'),
|
|
version => get_env('KENAITO_VERSION', 'latest'),
|
|
token => get_env('KENAITO_TOKEN', ''),
|
|
sync_interval => int(get_env('KENAITO_SYNC_INTERVAL', '10')),
|
|
cache_dir => get_env('KENAITO_CACHE_DIR', '.'),
|
|
);
|
|
|
|
my $client = Kenaito::Conf::Client->new(config => $cfg);
|
|
|
|
$client->on_change(sub {
|
|
my ($changed) = @_;
|
|
print "Config changed:\n";
|
|
for my $k (sort keys %$changed) {
|
|
my $v = $changed->{$k};
|
|
print " $k = $v\n";
|
|
if (exists $config_values{$k}) {
|
|
$config_values{$k} = $v;
|
|
print " [updated] $k = $v\n";
|
|
}
|
|
}
|
|
});
|
|
|
|
eval {
|
|
$client->start();
|
|
1;
|
|
} or do {
|
|
warn "Failed to init config client, using local defaults: $@\n";
|
|
};
|
|
|
|
my $remote = $client->get_all();
|
|
for my $k (keys %config_values) {
|
|
if (exists $remote->{$k}) {
|
|
$config_values{$k} = $remote->{$k};
|
|
}
|
|
}
|
|
|
|
my $count = scalar keys %$remote;
|
|
print "loaded $count configs from remote\n\n";
|
|
|
|
print "Current configs:\n";
|
|
for my $k (sort keys %config_values) {
|
|
print " $k = $config_values{$k}\n";
|
|
}
|
|
|
|
print "\nListening for config changes... (press Ctrl+C to stop)\n";
|
|
|
|
$SIG{INT} = sub {
|
|
print "\nShutting down...\n";
|
|
$client->stop();
|
|
exit 0;
|
|
};
|
|
|
|
# sync loop
|
|
while (1) {
|
|
sleep $cfg->{sync_interval};
|
|
last if $client->{stop};
|
|
$client->sync_once();
|
|
}
|