view release on metacpan or search on metacpan
1.09 2009-07-28
- Add Mail/DB/DBUsers/Domains export from Plesk
1.08 2009-07-23
- Patch from Nikolay Shulyakovskiy
1.07 2008-07-31
- Fixed Build.PL (Test::LongString not in prereqs_build list but required )
- Add URI.pm as required module for test stage
1.06 2008-07-13
- More improvements in tests
- Get user domains list by login or client id
1.05 2008-06-15
- Added full support operations with databases and db users
- Fixed errors in pod documentation
NAME
API::Plesk - OO interface to the Plesk XML API
(http://www.parallels.com/en/products/plesk/).
SYNOPSIS
use API::Plesk;
my $api = API::Plesk->new(
username => 'user', # required
password => 'pass', # required
url => 'https://127.0.0.1:8443/enterprise/control/agent.php', # required
api_version => '1.6.3.1',
debug => 0,
timeout => 30,
);
my $res = $api->customer->get();
if ($res->is_success) {
for ( @{$res->data} ) {
print "login: $_->{login}\n";
lib/API/Plesk.pm view on Meta::CPAN
=head1 NAME
API::Plesk - OO interface to the Plesk XML API (http://www.parallels.com/en/products/plesk/).
=head1 SYNOPSIS
use API::Plesk;
my $api = API::Plesk->new(
username => 'user', # required
password => 'pass', # required
url => 'https://127.0.0.1:8443/enterprise/control/agent.php', # required
api_version => '1.6.3.1',
debug => 0,
timeout => 30,
);
my $res = $api->customer->get();
if ($res->is_success) {
for ( @{$res->data} ) {
print "login: $_->{login}\n";
lib/API/Plesk/Component.pm view on Meta::CPAN
$class = ref $class || $class;
confess "Required API::Plesk object!" unless $attrs{plesk};
return bless \%attrs, $class;
}
# API::Plesk object
sub plesk { $_[0]->{plesk} }
sub check_required_params {
my ( $self, $hash, @fields ) = @_;
for my $key ( @fields ) {
if ( ref $key ) {
confess "Required any of this fields: " . join( ", ", @$key) . "!"
unless grep { $hash->{$_} } @$key;
} else {
confess "Required field $key!" unless exists $hash->{$key};
}
}
lib/API/Plesk/Component.pm view on Meta::CPAN
push @sorted, {$key => $params->{$key}}
if exists $params->{$key};
}
return \@sorted;
}
# check hosting xml section
sub check_hosting {
my ( $self, $params, $required ) = @_;
unless ( $params->{hosting} ) {
confess "Required hosting!" if $required;
return;
}
my $hosting = $params->{hosting};
my $type = delete $hosting->{type};
my $ip = delete $hosting->{ip_address};
#confess "Required ip_address" unless $ip;
if ( $type eq 'vrt_hst' ) {
$self->check_required_params($hosting, qw(ftp_login ftp_password));
my @properties;
for my $key ( sort keys %$hosting ) {
push @properties, { property => [
{name => $key},
{value => $hosting->{$key}}
]};
delete $hosting->{$key};
}
push(@properties, { ip_address => $ip }) if $ip;
lib/API/Plesk/Customer.pm view on Meta::CPAN
pcode
country
owner-id
);
sub add {
my ( $self, %params ) = @_;
my $bulk_send = delete $params{bulk_send};
my $gen_info = $params{gen_info} || confess "Required gen_info parameter!";
$self->check_required_params($gen_info, qw(pname login passwd));
my $data = {
gen_info => $self->sort_params($params{gen_info}, @gen_info_fields)
};
return $bulk_send ? $data :
$self->plesk->send('customer', 'add', $data);
}
sub get {
lib/API/Plesk/Customer.pm view on Meta::CPAN
=head1 METHODS
=over 3
=item add(%params)
Method adds customer to Plesk Panel.
%params = (
# required
gen_info => {
pname => 'Mike',
login => 'mike',
passwd => '12345',
...
}
);
=item get(%params)
lib/API/Plesk/DNS.pm view on Meta::CPAN
my ( $self, %params ) = @_;
my $bulk_send = delete $params{bulk_send};
my @fields = (
[qw(site-id site-alias-id)],
'type',
'host',
'value'
);
$self->check_required_params(\%params, @fields);
my $data = $self->sort_params(\%params, @fields, 'opt');
return $bulk_send ? $data :
$self->plesk->send('dns', 'add_rec', $data);
}
sub get_rec {
my ( $self, %filter ) = @_;
my $bulk_send = delete $filter{bulk_send};
my $template = delete $filter{template};
lib/API/Plesk/Database.pm view on Meta::CPAN
use warnings;
use Carp;
use base 'API::Plesk::Component';
sub add_db {
my ( $self, %params ) = @_;
my $bulk_send = delete $params{bulk_send};
$self->check_required_params(\%params, qw(webspace-id name type));
return $bulk_send ? \%params :
$self->plesk->send('database', 'add-db', \%params);
}
sub del_db {
my ($self, %filter) = @_;
my $bulk_send = delete $filter{bulk_send};
my $data = {
lib/API/Plesk/Database.pm view on Meta::CPAN
};
return $bulk_send ? $data :
$self->plesk->send('database', 'del-db', $data);
}
sub add_db_user {
my ( $self, %params ) = @_;
my $bulk_send = delete $params{bulk_send};
$self->check_required_params(\%params, qw(db-id login password));
my $data = $self->sort_params(\%params, qw(db-id login password));
return $bulk_send ? $data :
$self->plesk->send('database', 'add-db-user', $data);
}
sub del_db_user {
my ($self, %filter) = @_;
my $bulk_send = delete $filter{bulk_send};
lib/API/Plesk/FTPUser.pm view on Meta::CPAN
my @sort_fields = (
'name',
'password',
'home',
'create_non_existent',
'quota',
'permissions',
[qw(site-id site-name)],
);
my @required_fields = (
'name',
'password',
[qw(site-id site-name)],
);
$self->check_required_params(\%params, @required_fields);
my $data = $self->sort_params(\%params, @sort_fields);
return $bulk_send ? $data :
$self->plesk->send('ftp-user', 'add', $data);
}
sub get {
my ($self, %filter) = @_;
my $bulk_send = delete $filter{bulk_send};
lib/API/Plesk/Mock.pm view on Meta::CPAN
=head1 NAME
API::Plesk::Mock - Module for testing API::Plesk without sending real requests to Plesk API.
=head1 SYNOPSIS
use API::Plesk::Mock;
my $api = API::Plesk::Mock->new(
username => 'user', # required
password => 'pass', # required
url => 'https://127.0.0.1:8443/enterprise/control/agent.php', # required
api_version => '1.6.3.1',
debug => 0,
timeout => 30,
);
$api->mock_response($some_response_xml);
$api->mock_error($some_error_text);
=head1 DESCRIPTION
Module for testing API::Plesk without sending real requests to Plesk API.
lib/API/Plesk/Site.pm view on Meta::CPAN
sub add {
my ( $self, %params ) = @_;
my $bulk_send = delete $params{bulk_send};
my $gen_setup = $params{gen_setup} || confess "Required gen_setup parameter!";
my @fields = (
'name',
[qw(webspace-name webspace-id webspace-guid)]
);
$self->check_required_params($gen_setup, @fields);
$self->check_hosting(\%params);
$params{gen_setup} = $self->sort_params($gen_setup, @fields);
my $data = $self->sort_params(\%params, qw(gen_setup hosting prefs));
return $bulk_send ? $data :
$self->plesk->send('site', 'add', $data);
}
lib/API/Plesk/SiteAlias.pm view on Meta::CPAN
use Carp;
use base 'API::Plesk::Component';
#TODO
sub create {
my ( $self, %params ) = @_;
my $bulk_send = delete $params{bulk_send};
$self->check_required_params(\%params, [qw(site-id name)]);
return $bulk_send ? \%params :
$self->plesk->send('site-alias', 'create', \%params);
}
sub get {
my ($self, %filter) = @_;
my $bulk_send = delete $filter{bulk_send};
my $data = {
lib/API/Plesk/SiteBuilder.pm view on Meta::CPAN
use Carp;
use Data::Dumper;
use base 'API::Plesk::Component';
#TODO
sub assign_trial_site {
my ( $self, %params ) = @_;
my $bulk_send = delete $params{bulk_send};
$self->check_required_params(\%params, qw(pp-site-guid sb-site-uuid));
return $bulk_send ? \%params :
$self->plesk->send('sitebuilder', 'assign-trial-site', \%params);
}
1;
__END__
=head1 NAME
lib/API/Plesk/User.pm view on Meta::CPAN
status
external-id
);
sub add {
my ( $self, %params ) = @_;
my $bulk_send = delete $params{bulk_send};
my $gen_info = $params{gen_info} || confess "Required gen_info parameter!";
my $roles = $params{roles} || confess "Required roles parameter!";
$self->check_required_params($gen_info, qw(name login passwd));
my $unsorteddata = {
'gen-info' => $self->sort_params($params{gen_info}, @gen_info_fields),
roles => $roles,
};
my $data = $self->sort_params($unsorteddata, qw(gen-info roles));
return $bulk_send ? $data :
$self->plesk->send('user', 'add', $data);
}
lib/API/Plesk/User.pm view on Meta::CPAN
=head1 METHODS
=over 3
=item add(%params)
Method adds users to Plesk Panel.
%params = (
# required
gen_info => {
login => 'mike', # required
passwd => '12345', # required
name => 'Mike', # required
owner-guid => # one of this or
owner-external-id => # this required
...
}
# required
roles => {
name => 'WebMaster',
...
);
=item get(%params)
Method gets user data.
%params = ( %filter );
lib/API/Plesk/WebUser.pm view on Meta::CPAN
use Carp;
use Data::Dumper;
use base 'API::Plesk::Component';
#TODO
sub add {
my ( $self, %params ) = @_;
my $bulk_send = delete $params{bulk_send};
$self->check_required_params(\%params, qw(site-id login));
my $data = $self->sort_params(\%params, qw(site-id login password password-type ftp-quota services));
return $bulk_send ? $data :
$self->plesk->send('webuser', 'add', $data);
}
sub get {
my ($self, %filter) = @_;
my $bulk_send = delete $filter{bulk_send};
lib/API/Plesk/Webspace.pm view on Meta::CPAN
plan-external-id
);
sub add {
my ( $self, %params ) = @_;
my $bulk_send = delete $params{bulk_send};
my $gen_setup = $params{gen_setup} || confess "Required gen_setup parameter!";
$self->check_hosting(\%params);
$self->check_required_params(\%params, [qw(plan-id plan-name plan-guid plan-external-id)]);
$self->check_required_params($gen_setup, qw(name ip_address));
$params{gen_setup} = $self->sort_params($gen_setup, @gen_setup_fields);
my $data = $self->sort_params(\%params, @main_fields);
return $bulk_send ? $data :
$self->plesk->send('webspace', 'add', $data);
}
sub get {
lib/API/Plesk/Webspace.pm view on Meta::CPAN
};
return $bulk_send ? $data :
$self->plesk->send('webspace', 'add-plan-item', $data);
}
sub add_subscription {
my ($self, %params) = @_;
my $bulk_send = delete $params{bulk_send};
$self->check_required_params(\%params, [qw(plan-guid plan-external-id)]);
my $data = $self->sort_params(\%params, 'filter', [qw(plan-guid plan-external-id)]);
return $bulk_send ? $data :
$self->plesk->send('webspace', 'add-subscription', $data);
}
sub remove_subscription {
my ($self, %params) = @_;
my $bulk_send = delete $params{bulk_send};
$params{filter} ||= '';
$self->check_required_params(\%params, [qw(plan-guid plan-external-id)]);
my $data = $self->sort_params(\%params, 'filter', [qw(plan-guid plan-external-id)]);
return $bulk_send ? $data :
$self->plesk->send('webspace', 'remove-subscription', $data);
}
sub switch_subscription {
my ($self, %params) = @_;
my $bulk_send = delete $params{bulk_send};
$params{filter} ||= '';
$self->check_required_params(\%params, [qw(plan-guid plan-external-id no-plan)]);
my $data = $self->sort_params(\%params, 'filter', [qw(plan-guid plan-external-id no-plan)]);
return $bulk_send ? $data :
$self->plesk->send('webspace', 'switch-subscription', $data);
}
1;
t/compoment.t view on Meta::CPAN
BEGIN {
plan tests => 10;
use_ok( 'API::Plesk::Component' );
}
my $c = API::Plesk::Component->new(
plesk => API::Plesk->new(%TestData::plesk_valid_params)
);
eval {
$c->check_required_params({ test => 123}, qw(test));
};
ok(!$@);
eval {
$c->check_required_params({ test => 123, test2 => 123}, [qw(test ddd)]);
};
ok(!$@);
eval {
$c->check_required_params({ test => 123}, qw(qqq));
};
like($@, qr/Required field qqq!/);
eval {
$c->check_required_params({ test => 123}, [qw(qqq ff)]);
};
like($@, qr/Required any of this fields: qqq, ff!/);
is_deeply(
$c->sort_params({key => 1, key2 => 2, key3 => 3, key4 => 4}, [qw(key3 key2)], 'key'),
[
{key3 => 3},
{key => 1},
]
);