API-ISPManager
view release on metacpan or search on metacpan
vdsmanager.pl view on Meta::CPAN
use API::ISPManager;
use Data::Dumper;
use Getopt::Long;
my ($username, $password, $host);
my ($var_node_id, $name, $vps_password, $os, $owner, $preset);
my $result = GetOptions (
'username=s' => \$username,
'password=s' => \$password,
'host=s' => \$host,
'nodeid=s' => \$var_node_id,
'vpspassword=s' => \$vps_password,
'owner=s' => \$owner,
'preset=s' => \$preset,
'os=s' => \$os,
'name=s' => \$name,
);
die 'Required command line parameter missing!' unless $result;
# ÐонÑигÑÑаÑÐ¸Ñ ÑкÑипÑа
my $connection_params = {
username => $username,
password => $password,
host => $host,
path => 'manager/vdsmgr',
};
#
# name => 'mymegavps6.ru', # ÑÑÑ Ñ
оÑÐµÑ Ð´Ð¾Ð¼ÐµÐ½ÐºÑ Ð¸ ниÑего дÑÑгого
# password => 'qwerty',
# os => 'centos-5-x86_64',
# owner => 'admin',
# preset => 'OVZ-1',
# node_id => '1', # Ð½Ð¾Ð¼ÐµÑ ÐодÑ
#
# Создаем ÐÐС
# ÐобавиÑÑ Ð°Ð²ÑоÑоÑмиÑование veid
# N -- Ð½Ð¾Ð¼ÐµÑ Ð²Ð¿Ñа
# N001, N002, N003.... N999
# пÑоÑÑо пеÑедаем паÑамеÑÑом Ð½Ð¾Ð¼ÐµÑ Ð¸ вÑе, оÑделÑнÑй паÑамеÑÑ ÐºÐ°Ðº и паÑÐ¾Ð»Ñ Ð¸ вÑе Ñакое
my $create_result = create_vps(
name => $name, # ÑÑÑ Ñ
оÑÐµÑ Ð´Ð¾Ð¼ÐµÐ½ÐºÑ Ð¸ ниÑего дÑÑгого
password => $vps_password,
os => $os,
owner => $owner,
preset => $preset,
node_id => $var_node_id, # Ð½Ð¾Ð¼ÐµÑ ÐодÑ
);
### warn Dumper($create_result);
if ( $create_result && $create_result->{ok} && $create_result->{ip} && $create_result->{veid} ) {
print "$create_result->{ip}|$create_result->{veid}\n";
exit 0; # вÑÑ Ð¾ÐºÐµÐ¹!
} else {
print "error\n";
exit 1;
}
# ÐÑовеÑка ÑÑÑеÑÑÐ²Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¸Ñкового Ñаблона
sub check_disk_preset {
my $disk_preset_name = shift;
return '' unless $disk_preset_name;
my $disk_templates =
API::ISPManager::diskpreset::list( $connection_params );
return '' unless $disk_templates && ref $disk_templates eq 'HASH';
# List all disk templates
my @list = keys %$disk_templates;
for (@list) {
# If this preset exists and ok:
my $preset_ok =
$disk_preset_name eq $_ &&
$disk_templates->{$_} &&
$disk_templates->{$_}->{state} &&
$disk_templates->{$_}->{state} eq 'ok';
return 1 if $preset_ok;
}
return '';
}
# ÐÑовеÑÑем коÑÑекÑноÑÑÑ Ð¿ÐµÑеданного Ñаблона ÐÐС
sub check_vps_preset {
my $disk_preset_name = shift;
return '' unless $disk_preset_name;
my $disk_templates =
API::ISPManager::vdspreset::list( $connection_params );
return '' unless $disk_templates && ref $disk_templates eq 'HASH';
# List all VPS templates
my @list = keys %$disk_templates;
for (@list) {
# If this preset exists:
my $preset_ok =
$disk_preset_name eq $_ &&
$disk_templates->{$_};
return 1 if $preset_ok;
}
return '';
}
# ÐолÑÑаем деÑализаÑÐ¸Ñ ÑаÑиÑа ÐÐС
sub get_vps_preset_details {
my $preset_name = shift;
vdsmanager.pl view on Meta::CPAN
warn "Cannot get preset details!\n";
return '';
}
my $node_id = $params{node_id};
unless ($node_id =~ m/^\d$/) {
warn "In Node ID only numbers allowed!\n";
return '';
}
my $veid = get_next_veid( $node_id );
unless ($veid) {
warn "Cannot get next VEID!\n";
return '';
}
my $vps_name = $params{name}; # ÑÑÑ Ñ
оÑÐµÑ Ð´Ð¾Ð¼ÐµÐ½ÐºÑ Ð¸ ниÑего дÑÑгого
unless ($vps_name) {
$vps_name = "ovz${veid}.fastvps.ru"
}
# ÐÑи паÑамеÑÑÑ Ð¿Ð¾ÐºÐ° пÑовеÑÑÑÑ Ð½Ðµ бÑдем
my $server_password = $params{password};
my $owner = $params{owner};
my $create_vps_result = API::ISPManager::vds::create( {
%$connection_params,
name => $vps_name,
id => $veid,
passwd => $server_password,
confirm => $server_password,
owner => $owner,
vdspreset => $vps_preset,
disktempl => $disk_preset,
%$vps_preset_details, # паÑамеÑÑÑ ÐÐС ÑаÑиÑа
} );
if ($create_vps_result && ref $create_vps_result eq 'HASH' ) {
return {
%$create_vps_result,
veid => $veid,
}
} else {
return '';
}
}
__DATA__
оÑÑÑпало оÑибкÑ:
'error' => {
'content' => 'Can\'t change pos in edit mode',
'code' => '1'
},
бÑло из-за Ñого, ÑÑо ÑÑÐ°Ñ Ð½Ðµ пеÑедавал
( run in 0.969 second using v1.01-cache-2.11-cpan-9288abcf80b )