From 2c512dbcfa8374e658f98c3112028596578c16a7 Mon Sep 17 00:00:00 2001 From: Xavier Guimard Date: Fri, 1 Jan 2016 19:55:48 +0000 Subject: [PATCH] First Cli : get base keys only for now --- .../lib/Lemonldap/NG/Manager/Cli.pm | 75 +++++++++++++++++++ .../lib/Lemonldap/NG/Manager/Cli/Lib.pm | 22 +++--- lemonldap-ng-manager/scripts/llng-manager-cli | 9 +++ 3 files changed, 96 insertions(+), 10 deletions(-) create mode 100644 lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Cli.pm create mode 100755 lemonldap-ng-manager/scripts/llng-manager-cli diff --git a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Cli.pm b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Cli.pm new file mode 100644 index 000000000..a87357ae8 --- /dev/null +++ b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Cli.pm @@ -0,0 +1,75 @@ +package Lemonldap::NG::Manager::Cli; + +use strict; +use Mouse; +use 5.14.0; +use Data::Dumper; + +extends('Lemonldap::NG::Manager::Cli::Lib'); + +has cfgNum => ( + is => 'rw', + isa => 'Int', + trigger => sub { + $_[0]->{req} = + Lemonldap::NG::Manager::Cli::Request->new( + cfgNum => $_[0]->{cfgNum} ); + } +); + +has req => ( is => 'ro' ); + +sub get { + my ( $self, @values ) = @_; + $self->cfgNum( $self->lastCfg ) unless ( $self->cfgNum ); + die 'get requires at least one key' unless (@values); + L: foreach my $key (@values) { + unless ( $key =~ /^\w+(?:\/[\w\.]+)*$/ ) { + warn "Unknown key $key"; + next L; + } + my $value = $self->mgr->getConfKey( $self->req, $key ); + #$value = Dumper($value); + #$value =~ s/\$VAR1/$key/; + #print $value; + if(ref $value eq 'HASH') { + print "$key has the following keys:\n"; + print " $_\n" foreach(sort keys %$value); + } + else { + print "$key = $value\n"; + } + } +} + +sub lastCfg { + my ($self) = @_; + return $self->jsonResponse('/confs/latest')->{cfgNum}; +} + +sub run { + my $self = shift; + unless (@_) { + die 'nothing to do, aborting'; + } + my $action = shift; + unless ( $action =~ /^(?:get|set)$/ ) { + die "unknown action $action"; + } + $self->$action(@_); +} + +package Lemonldap::NG::Manager::Cli::Request; + +use Mouse; + +has cfgNum => ( is => 'rw' ); + +has error => ( is => 'rw' ); + +sub params { + my ( $self, $key ) = @_; + return $self->{$key}; +} + +1; diff --git a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Cli/Lib.pm b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Cli/Lib.pm index 8ca6fe9fd..6f574f7e5 100644 --- a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Cli/Lib.pm +++ b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Cli/Lib.pm @@ -4,18 +4,20 @@ use JSON::MaybeXS; use Mouse; use Lemonldap::NG::Manager; -has iniFile => ( is => 'ro', isa => 'Str', required => 1 ); +has iniFile => ( is => 'ro', isa => 'Str' ); + +has mgr => ( is => 'ro', isa => 'Lemonldap::NG::Manager' ); has app => ( - is => 'ro', - isa => 'CodeRef', - builder => sub { - return Lemonldap::NG::Manager->run( - { - configStorage => { confFile => $_[0]->{iniFile} }, - protection => 'none', - } - ); + is => 'ro', + isa => 'CodeRef', + builder => sub { + my $args = { protection => 'none' }; + $args->{configStorage} = { confFile => $_[0]->{iniFile} } + if ( $_[0]->{iniFile} ); + $_[0]->{mgr} = Lemonldap::NG::Manager->new($args); + $_[0]->{mgr}->init($args); + return $_[0]->{mgr}->run(); } ); diff --git a/lemonldap-ng-manager/scripts/llng-manager-cli b/lemonldap-ng-manager/scripts/llng-manager-cli new file mode 100755 index 000000000..b0d499954 --- /dev/null +++ b/lemonldap-ng-manager/scripts/llng-manager-cli @@ -0,0 +1,9 @@ +#!/usr/bin/env perl + +use warnings; +use strict; +use Lemonldap::NG::Manager::Cli; + +my $cli = Lemonldap::NG::Manager::Cli->new(iniFile=>'t/lemonldap-ng.ini'); + +$cli->run(@ARGV);