view release on metacpan or search on metacpan
- Fixed bug in service_plan->get method
2.00_3 2011-08-01
- Added site-alias component
- Fixed add and set webspace
- Added tests
- Fixed site component
- Added sitebuilder component
- Added ftp-user component
- Fixed hosting ftp_password bug
- Added dns component
- Added mail component
- Fixed is_connection_error function
- Added set and del opetations to service-plan
- Added test of service-plan component
- Reformated Changes
- Fixed Pod
2.00_2 2011-05-16
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} ) {
API::Plesk::WebUser
COMPATIBILITY WITH VERSION 1.*
This is develover release. Comapatibility with Plesk::API 1.* is not
implemented yet.
METHODS
new(%params)
Create new class instance.
Required params: username password url
Additional params: api_version - default 1.6.3.1 debug - default 0
timeout - default 30 sec.
send($operator, $operation, $data, %params)
This method prepare and sends request to Plesk API.
Returns API::Plesk::Response object.
$operator - name of operator XML section of Plesk API.
lib/API/Plesk.pm view on Meta::CPAN
Domains => [['1.5.0.0', 'Domains']],
);
# constructor
sub new {
my $class = shift;
$class = ref ($class) || $class;
my $self = {
username => '',
password => '',
secret_key => '',
url => '',
api_version => '1.6.3.1',
debug => 0,
timeout => 30,
(@_)
};
if (!$self->{secret_key}) {
confess "Required username!" unless $self->{username};
confess "Required password!" unless $self->{password};
}
confess "Required url!" unless $self->{url};
return bless $self, $class;
}
# sends request to Plesk API
sub send {
my ( $self, $operator, $operation, $data, %params ) = @_;
lib/API/Plesk.pm view on Meta::CPAN
# HTTP::Request undestends only bytes
utf8::encode($xml) if utf8::is_utf8($xml);
my $ua = new LWP::UserAgent( parse_head => 0 );
my $req = new HTTP::Request POST => $self->{url};
if ($self->{secret_key}) {
$req->push_header(':KEY', $self->{secret_key});
} else {
$req->push_header(':HTTP_AUTH_LOGIN', $self->{username});
$req->push_header(':HTTP_AUTH_PASSWD', $self->{password});
}
$req->content_type('text/xml; charset=UTF-8');
$req->content($xml);
# LWP6 hack to prevent verification of hostname
$ua->ssl_opts(verify_hostname => 0) if $ua->can('ssl_opts');
warn $req->as_string if defined $self->{debug} && $self->{debug} > 1;
my $res = eval {
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} ) {
lib/API/Plesk.pm view on Meta::CPAN
=head1 METHODS
=over 3
=item new(%params)
Create new class instance.
Required params:
username
password
url
Additional params:
api_version - default 1.6.3.1
debug - default 0
timeout - default 30 sec.
=item send($operator, $operation, $data, %params)
This method prepare and sends request to Plesk API.
lib/API/Plesk/Component.pm view on Meta::CPAN
}
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/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};
my $data = {
lib/API/Plesk/FTPUser.pm view on Meta::CPAN
use base 'API::Plesk::Component';
#TODO
sub add {
my ( $self, %params ) = @_;
my $bulk_send = delete $params{bulk_send};
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);
}
lib/API/Plesk/FTPUser.pm view on Meta::CPAN
$self->plesk->send('ftp-user', 'get', $data);
}
sub set {
my ( $self, %params ) = @_;
my $bulk_send = delete $params{bulk_send};
my $filter = delete $params{filter} || '';
my @sort_fields = (
'name',
'password',
'home',
'create_non_existent',
'quota',
'permissions',
);
my $data = {
filter => $filter,
values => $self->sort_params(\%params, @sort_fields),
};
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
lib/API/Plesk/WebUser.pm view on Meta::CPAN
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};
my $data = {
lib/API/Plesk/WebUser.pm view on Meta::CPAN
$self->plesk->send('webuser', 'get-prefs', $data);
}
sub set {
my ( $self, %params ) = @_;
my $bulk_send = delete $params{bulk_send};
my $filter = delete $params{filter} || '';
my $data = {
filter => $filter,
values => $self->sort_params(\%params, qw(password password-type ftp-quota services)),
};
return $bulk_send ? $data :
$self->plesk->send('webuser', 'set', $data);
}
sub del {
my ($self, %filter) = @_;
my $bulk_send = delete $filter{bulk_send};
t/TestData.pm view on Meta::CPAN
my $online_plesk_url = 'https://127.0.0.1:8443/enterprise/control/agent.php';
our $online_manual_created_template_name = $ENV{'template_name'};
our $online_manual_created_template_id = $ENV{'template_id'};
our $online_new_tariff_name = $ENV{'new_tariff'};
our %online_plesk_valid_params = (
api_version => $ENV{'plesk_api_version'} || '1.5.0.0',
username => $ENV{'plesk_username'} || 'admin',
password => $ENV{'plesk_password'} || 'qwerty',
url => $ENV{'plesk_url'} || $online_plesk_url,
debug => '',
);
# END online configs
our $test_user_data = {
pname => 'pavel',
login => 'pav_perl',
passwd => 'password',
phone => '8 555 1111111',
email => 'nrg@nrg.name',
country => 'RU' # optional field
};
our $stress_test_data = {
pname => [ # 1 .. 60 symbols
'pavel',
'2342134123412',
t/TestData.pm view on Meta::CPAN
],
};
my $plesk_url = 'https://192.168.1.1:8443/enterprise/control/agent.php';
our %plesk_valid_params = (
api_version => '1.6.3.0',
username => 'admin',
password => 'qwerty',
url => $plesk_url,
debug => 0,
);
my $manual_created_template_name = $ENV{'template_name'} || 'name';
my $manual_created_template_id = $ENV{'template_id'} || 1;
sub iterate {
t/TestData.pm view on Meta::CPAN
my $checked = shift;
my $template = shift;
return '' unless ref $checked eq 'HASH' && ref $template eq 'HASH';
foreach my $key (keys %$template) {
my $key_name_from; # field name in response from Plesk
my $key_name_to; # field name
# in request to Plesk field named "passwd"
# in response from Plesk -- it named "password" :(
if ($key =~ /pass/) {
$key_name_from = 'password';
$key_name_to = 'passwd';
} else {
$key_name_to = $key_name_from = $key;
}
if ($checked->{$key_name_from}) {
return '' unless $template->{$key_name_to} eq
$checked->{$key_name_from};
} else {
t/compoment.t view on Meta::CPAN
{key3 => 3},
{key => 1},
]
);
eval {
$c->check_hosting({
hosting => {
type => 'vrt_hst',
ftp_login => 'ert',
ftp_password => '123',
ip_address => '12.34.56.78',
}
})
};
ok(!$@);
eval {
$c->check_hosting({
hosting => {
type => 'vrt_hst',
ftp_login => 'ert',
ftp_password => '123',
}
})
};
ok(!$@);
eval {
$c->check_hosting({
hosting => {
type => 'vrt_ht',
ftp_login => 'ert',
ftp_password => '123',
}
})
};
like($@, qr/Unknown hosting type!/);
is_deeply(
$c->prepare_filter({id => [qw(1 2 3)], name => 'id'}, sort_keys => [qw(id name)]),
[
{ id => 1 },
{ id => 2 },
t/database.t view on Meta::CPAN
),
{
filter => {name => 'test_db'},
},
'del_db'
);
is_deeply(
$api->database->add_db_user(
'db-id' => 1,
login => 'test_db_user',
password => '12345',
bulk_send => 1
),
[
{'db-id' => 1},
{login => 'test_db_user'},
{password => '12345'},
],
'add_db_user'
);
is_deeply(
$api->database->del_db_user(
'db-id' => 1,
bulk_send => 1
),
{
filter => {'db-id' => 1}
is ( $api->render_xml({ prop => [
{value1 => '0'},
{value2 => ''},
{value3 => undef},
]}), '<?xml version="1.0" encoding="UTF-8"?><packet version="1.6.3.0"><prop><value1>0</value1><value2/><value3/></prop></packet>', 'render_xml');
# compoments
$api = API::Plesk->new(
api_version => '1.6.3.1',
username => 'admin',
password => 'qwerty',
url => 'https://12.34.56.78',
);
my %pkgs = (
customer => 'API::Plesk::Customer',
webspace => 'API::Plesk::Webspace',
);
for my $accessor ( keys %pkgs ) {
isa_ok($api->$accessor(), $pkgs{$accessor}, "$accessor component");
}
t/service-plan.t view on Meta::CPAN
my $api = API::Plesk->new( %TestData::plesk_valid_params );
isa_ok($api->service_plan, 'API::Plesk::ServicePlan');
is_deeply(
$api->service_plan->set(
filter => { name => '123' },
hosting => {
type => 'vrt_hst',
ftp_login => '123',
ftp_password => '123',
ip_address => '123',
},
limits => '',
bulk_send => 1,
),
[
{ filter => { name => '123' } },
{ limits => '' },
{
hosting => {
vrt_hst => [
{ property => [ {name => 'ftp_login'}, {value => '123'} ] },
{ property => [ {name => 'ftp_password'}, {value => '123'} ] },
{ ip_address => '123' },
]
},
},
],
'set'
);
is_deeply(
$api->service_plan->del(
is_deeply(
$api->site->set(
filter => {name => 'test.ru'},
gen_setup => {
name => 'test.ru',
},
hosting => {
type => 'vrt_hst',
ip_address => '12.34.56.78',
ftp_login => 'qwerty',
ftp_password => '12345',
ip_address => '12.34.56.78',
},
bulk_send => 1
),
{
filter => {name => 'test.ru'},
values => [
{gen_setup => {
name => 'test.ru',
}},
{hosting => {
vrt_hst => [
{ property => [
{name => 'ftp_login'},
{value => 'qwerty'}
]},
{ property => [
{name => 'ftp_password'},
{value => '12345'}
]},
{ip_address => '12.34.56.78'},
]
}}
]
},
'set'
);
t/webspace.t view on Meta::CPAN
$api->webspace->add(
'plan-name' => '123',
gen_setup => {
name => '123',
ip_address => '123',
'owner-login' => '123',
},
hosting => {
type => 'vrt_hst',
ftp_login => '123',
ftp_password => '123',
ip_address => '123',
},
prefs => { www => 'true' },
bulk_send => 1,
),
[
{
gen_setup => [
{name => '123'},
{'owner-login' => '123'},
{ip_address => '123'},
],
},
{
hosting => {
vrt_hst => [
{ property => [ {name => 'ftp_login'}, {value => '123'} ] },
{ property => [ {name => 'ftp_password'}, {value => '123'} ] },
{ ip_address => '123' },
]
},
},
{ prefs => { www => 'true' } },
{ 'plan-name' => '123' },
],
'add'
);
t/webspace.t view on Meta::CPAN
$api->webspace->set(
filter => { name => '123' },
gen_setup => {
name => '123',
ip_address => '123',
'owner-login' => '123',
},
hosting => {
type => 'vrt_hst',
ftp_login => '123',
ftp_password => '123',
ip_address => '123',
},
prefs => { www => 'true' },
bulk_send => 1,
),
[
{ filter => { name => '123' } },
{ values => [
{
gen_setup => [
{name => '123'},
{'owner-login' => '123'},
{ip_address => '123'},
],
},
{
hosting => {
vrt_hst => [
{ property => [ {name => 'ftp_login'}, {value => '123'} ] },
{ property => [ {name => 'ftp_password'}, {value => '123'} ] },
{ ip_address => '123' },
]
},
},
{ prefs => { www => 'true' } },
]},
],
'set'
);