#!/usr/bin/perl use strict; use warnings; use English; use Getopt::Long; use Pod::Usage; use NGCP::API::Client; use Readonly; Readonly my @required => qw(domain); my $opts = { reseller_id => 1, skip_xmpp => 0, skip_sip => 0, verbose => 0, }; # XXX: Remove after mr10.5. sub old_option { my ($name, $value) = @_; my $newname = $name =~ tr/_/-/r; $opts->{$name} = $value; warn "$0: option --$name is deprecated; use --$newname instead\n"; } sub parse_option { my ($name, $value) = @_; $name =~ tr/-/_/; $opts->{$name} = $value; } GetOptions($opts, 'help|h' => sub { usage() }, 'domain=s', 'reseller_id=i' => \&old_option, 'reseller-id=i' => \&parse_option, 'skip_xmpp' => \&old_option, 'skip-xmpp' => \&parse_option, 'skip_sip' => \&old_option, 'skip-sip' => \&parse_option, 'verbose', ) or usage(); sub check_params { my @missing; foreach my $arg (@ARGV) { if ($arg =~ /^[^-]/) { $opts->{domain} = $arg; last; } } foreach my $param (@required) { push @missing, $param unless $opts->{$param}; } usage(join(' ', @missing)) if scalar @missing; return; } sub usage { my $missing = shift; pod2usage( -exitval => $missing ? 1 : 0, -verbose => 99, -sections => 'SYNOPSIS|REQUIRED ARGUMENTS|OPTIONS', -message => $missing ? "Missing parameters: $missing" : '', ); return; } sub main { check_params(); my $client = NGCP::API::Client->new(verbose => $opts->{verbose}); my $uri = '/api/domains/'; my %data = map { $_ => $opts->{$_} } qw(reseller_id domain); foreach my $elem (qw(skip_xmpp skip_sip)) { $data{'_' . $elem . '_reload'} = $opts->{$elem}; } my $res = $client->request('POST', $uri, \%data); print $res->result . "\n"; return !$res->is_success; } exit main(); __END__ =head1 NAME ngcp-create-domain - create an NGCP domain =head1 SYNOPSIS B<ngcp-create-domain> [I<options>...] I<required-arguments>... =head1 DESCRIPTION B<This program> creates a domain on the NGCP platform. =head1 REQUIRED ARGUMENTS =over 8 =item B<--domain> I<domain> The domain to create. =back =head1 OPTIONS =over 8 =item B<--reseller-id> I<rid> Reseller id. Default 1. =item B<--skip-sip> Skip reloading SIP services. If true, changes will not be effective immedeately until the respective service is restarted or properly notified. Default false. =item B<--skip-xmpp> Skip reloading XMPP services. If true, changes will not be effective immedeately until the respective service is restarted or properly notified. Default false. =item B<--verbose> Show additional debug information. Default false. =item B<--help> Print a brief help message. =back =head1 EXIT STATUS =over =item B<0> Command completed successfully. =item B<1> Command failed with errors. =back =head1 SEE ALSO NGCP::API::Client =head1 BUGS AND LIMITATIONS Please report problems you notice to the Sipwise Development Team <support@sipwise.com>. =head1 AUTHOR Victor Seva <vseva@sipwise.com> =head1 LICENSE Copyright (C) 2016 Sipwise GmbH, Austria This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. =cut