API-ISPManager

 view release on metacpan or  search on metacpan

MANIFEST  view on Meta::CPAN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
add_database.pl
add_mailbox.pl
add_www_domain.pl
Changes
lib/API/ISPManager.pm
lib/API/ISPManager/backup.pm
lib/API/ISPManager/db.pm
lib/API/ISPManager/diskpreset.pm
lib/API/ISPManager/dns.pm
lib/API/ISPManager/domain.pm
lib/API/ISPManager/file.pm
lib/API/ISPManager/ftp.pm
lib/API/ISPManager/ip.pm
lib/API/ISPManager/mailbox.pm
lib/API/ISPManager/misc.pm
lib/API/ISPManager/order.pm
lib/API/ISPManager/preset.pm
lib/API/ISPManager/services.pm
lib/API/ISPManager/software.pm
lib/API/ISPManager/stat.pm
lib/API/ISPManager/user.pm
lib/API/ISPManager/vds.pm
lib/API/ISPManager/vdspreset.pm
Makefile.PL
MANIFEST                        This list of files
README
runtests.sh
t/01-test.t
t/02-files.t
upload_file.pl
vdsmanager.pl
META.yml                                 Module meta-data (added by MakeMaker)

lib/API/ISPManager.pm  view on Meta::CPAN

12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Main packages
 
# Addition packages
use API::ISPManager::stat;
 
# VDSManager
 
# BillManager
 
our @EXPORT    = qw/get_auth_id refs is_success get_data query_abstract is_ok get_error/;
our @EXPORT_OK = qw//;
our $VERSION   = 0.07;
our $DEBUG     = '';

lib/API/ISPManager.pm  view on Meta::CPAN

63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
}
 
my $ip  = $ip_list->[0];
my $dname  = 'perlaround.ru';
 
my $client_creation_result = API::ISPManager::user::create( {
   %{ $connection_params },
   name      => 'user_login',
   passwd    => 'user_password',
   ip        => '11.11.22.33',
   preset    => 'template_name',
   domain    => $dname,
});
 
# Switch off account:
my $suspend_result = API::ISPManager::user::disable( {
   %{ $connection_params },
   elid => $use_login,
} );
 
unless ( $suspend_result ) {

lib/API/ISPManager/diskpreset.pm  view on Meta::CPAN

1
2
3
4
5
6
7
8
9
10
11
 
 
sub create {
 
 
}
 
 
sub edit {

lib/API/ISPManager/order.pm  view on Meta::CPAN

21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    return $result;
}
 
# Создать клиента (возможно, вместе с доменом)
sub create {
    my $params = shift;
 
    my $result = API::ISPManager::query_abstract(
        params => { %$params, sok => 'yes' }, # чтобы создание разрешить
        func   => 'user.edit',
        allowed_fields => [  qw( host path allow_http     sok name domain email preset ip passwd ) ],
    );
 
    $API::ISPManager::last_answer = $result;
 
    if ($result &&
        ref $result eq 'HASH' &&
        (
            $result->{ok} or
            ( $result->{error} && ref $result->{error} eq 'HASH' && $result->{error}->{code} eq '2' # already exists
        )

lib/API/ISPManager/preset.pm  view on Meta::CPAN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
 
sub create {
 
 
}
 
 
sub edit {
 
 
}
 
sub get {
    my $params = shift;
    
    my $result = API::ISPManager::query_abstract(
        params => $params,
        func   => 'preset.edit'
        allowed_fields => [  qw( host path allow_http  elid) ],
    );
   
    if (ref $result->{php} eq 'HASH' ) {
        $result->{php} = 'on';
    }
  
    if (ref $result->{phpmod} eq 'HASH' ) {
        $result->{phpmod} = 'on';
    }

lib/API/ISPManager/preset.pm  view on Meta::CPAN

33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
    return '' if $result->{error};
 
    return $result;
}
 
 
sub list {
    my $params = shift;
    my $result = API::ISPManager::query_abstract(
        params => $params,
        func   => 'preset',
        allowed_fields => [  qw( host path allow_http ) ],
    );
 
    my $plans = $result->{elem};
     
    for (keys %$plans) {
        for my $param ( 'ssl', 'ssi', 'php' ) {
            my $val = $plans->{$_}->{$param};
 
            if ( $val && ref $val eq 'HASH' ) {

lib/API/ISPManager/software.pm  view on Meta::CPAN

60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
    return $result;
}
 
# Создать клиента (возможно, вместе с доменом)
sub create {
    my $params = shift;
 
    my $result = API::ISPManager::query_abstract(
        params => { %$params, sok => 'yes' }, # чтобы создание разрешить
        func   => 'user.edit',
        allowed_fields => [  qw( host path allow_http     sok name domain email preset ip passwd ) ],
    );
 
    $API::ISPManager::last_answer = $result;
 
    if ($result &&
        ref $result eq 'HASH' &&
        (
            $result->{ok} or
            ( $result->{error} && ref $result->{error} eq 'HASH' && $result->{error}->{code} eq '2' # already exists
        )

lib/API/ISPManager/user.pm  view on Meta::CPAN

28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
    return $result;
}
 
# Создать клиента (возможно, вместе с доменом)
sub create {
    my $params = shift;
 
    my $result = API::ISPManager::query_abstract(
        params => { %$params, sok => 'yes' }, # чтобы создание разрешить
        func   => 'user.edit',
        allowed_fields => [  qw( host path allow_http     sok name domain email preset ip passwd ) ],
    );
 
    $API::ISPManager::last_answer = $result;
    #warn Dumper($API::ISPManager::last_answer);
 
    if ($result &&
        ref $result eq 'HASH' &&
        (
            $result->{ok} or
            ( $result->{error} && ref $result->{error} eq 'HASH' && $result->{error}->{code} eq '2' && $result->{error}->{obj} eq 'user' # already exists

lib/API/ISPManager/user.pm  view on Meta::CPAN

56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#&sok=yes&func=user.edit&name=nrgxxx&ip=78.47.76.69&passwd=qwerty&ftplimit=100&disklimit=200
}
 
# Edit user data
sub edit {
    my $params = shift;
     
    my $result = API::ISPManager::query_abstract(
        params => $params,
        func   => 'user.edit',
        allowed_fields => [  qw( host path allow_http     sok elid name domain email preset ip passwd ftplimit disklimit ssl ssi phpmod safemode  maillimit domainlimit webdomainlimit maildomainlimit baselimit baseuserlimit bandwidthlimit phpfcgi) ],
    );
 
    return $result;
}
 
# Delete user from panel
sub delete {
    my $params = shift;
 
    my $result = abstract_bool_manipulate($params, 'user.delete');

lib/API/ISPManager/vds.pm  view on Meta::CPAN

18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
}
 
# Создать клиента (возможно, вместе с доменом)
sub create {
    my $params = shift;
 
    my $result = API::ISPManager::query_abstract(
        params => { %$params, sok => 'yes' }, # чтобы создание разрешить
        func   => 'vds.edit',
        allowed_fields => [  qw( host path allow_http    
            sok name id ip passwd confirm owner vdspreset disktempl pvtdisk extns ispmgr
            disk mem  cpu proc desc traf note
        ) ],
    );
 
    $API::ISPManager::last_answer = $result;
 
    return $result;
 
    if ($result &&
        ref $result eq 'HASH' &&

lib/API/ISPManager/vds.pm  view on Meta::CPAN

49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#&sok=yes&func=user.edit&name=nrgxxx&ip=78.47.76.69&passwd=qwerty&ftplimit=100&disklimit=200
}
 
# Edit user data
sub edit {
    my $params = shift;
     
    my $result = API::ISPManager::query_abstract(
        params => $params,
        func   => 'vds.edit',
        allowed_fields => [  qw( host path allow_http     sok elid name domain email preset ip passwd ftplimit disklimit ssl ssi phpmod safemode  maillimit domainlimit webdomainlimit maildomainlimit baselimit baseuserlimit bandwidthlimit) ],
    );
 
    return $result;
}
 
# Delete user from panel
sub delete {
    my $params = shift;
 
    my $result = abstract_bool_manipulate($params, 'user.delete');

lib/API/ISPManager/vdspreset.pm  view on Meta::CPAN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
 
sub create {
 
 
}
 
 
sub edit {
 
 
}
 
sub get {
    my $params = shift;
    
    my $result = API::ISPManager::query_abstract(
        params => $params,
        func   => 'vdspreset.edit'
        allowed_fields => [  qw( host path allow_http  elid) ],
    );
   
    return $result;
}
 
 
sub list {
    my $params = shift;
    my $result = API::ISPManager::query_abstract(
        params => $params,
        func   => 'vdspreset',
        allowed_fields => [  qw( host path allow_http ) ],
    );
 
    my $plans = $result->{elem};
     
    return $plans;
}
 
 
sub delete {

runtests.sh  view on Meta::CPAN

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
 
./add_database.pl server5.hosting.reg.ru user_0000434578 oBffquIb db_name111 db_usersss45555 pass
#./add_www_domain.pl server5.hosting.reg.ru user_0000434578 oBffquIb suxx777.us
#./add_mailbox.pl server5.hosting.reg.ru user_0000434578 oBffquIb t1est@server6-host1.regrutestuser.ru qqqq
exit 0
 
perl -Ilib ./vdsmanager.pl --host=127.0.0.1 --username=admin  --password=qqqq  \
 --nodeid=1 --vpspassword=qwerty --owner=admin --preset=OVZ-1 --os=centos-5-x86_64 \
 --name=mymegavps7.ru

t/01-test.t  view on Meta::CPAN

362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
my $ip  = $ip_list->[0];
 
if ($ip) {
    diag $ip;
 
    diag Dumper( API::ISPManager::user::create( {
        %correct_params,
        name      => 'nrgxxxxxapi',
        passwd    => 'qwerty',
        ip        => $ip,
        preset    => 'Host-1',
        domain    => 'nrg.name',
    } ) );
 
    diag Dumper( API::ISPManager::ftp::list( {
        %correct_params,
        authinfo => 'username:password',
        su       => 'su_as_username',
    } ) );

vdsmanager.pl  view on Meta::CPAN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/usr/bin/perl
 
use strict;
 
 
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;
    return '' unless $preset_name;
 
    my $vds_template_details = API::ISPManager::vdspreset::get( {
        %$connection_params ,
        elid => $preset_name
    } );
 
    # Фильтруем только нужные параметры тарифа
    my $clean_plan_details = { };
    my @required_params = qw(disk mem cpu proc desc traf);
 
 
    for (@required_params) {
 
        unless ( $vds_template_details->{$_} ) {

vdsmanager.pl  view on Meta::CPAN

172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
}
 
# Создаем ВПС
sub create_vps {
    my %params = @_;
 
    my $all_params_ok =
        $params{password} &&
        $params{os}       &&
        $params{owner}    &&
        $params{preset}   &&
        $params{node_id};
     
    unless ($all_params_ok)  {
        warn "Required parameter missing!\n";
        return '';
    }
 
    # Блок проверки входных параметров
 
    my $disk_preset = $params{os};
 
    unless ( check_disk_preset($disk_preset) ) {
        warn "Disk preset incorrect!\n";
        return '';
    }
 
 
    my $vps_preset = $params{preset};
 
    unless ( check_vps_preset($vps_preset) ) {
        warn "VPS preset incorrect!\n";
        return '';
    }
 
 
    # Выгружаем подробности тарифа
    my $vps_preset_details = get_vps_preset_details( $vps_preset );
 
    unless ($vps_preset_details && ref $vps_preset_details eq 'HASH') {
        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 '';
    }

vdsmanager.pl  view on Meta::CPAN

242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
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 '';
}



( run in 0.759 second using v1.01-cache-2.11-cpan-95122f20152 )