# Copyright 2015, Alexander Axenov. rolex@colocat.ru # # This library is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. package Session; our $VERSION = qw("v0.6.0"); BEGIN { use Exporter (); use LWP::UserAgent; use JSON::XS; use Encode; @ISA = "Exporter"; @EXPORT = qw(new); } my $apipath='https://my.imserver.ru/api'; ####################################################################################################################### ####################################################################################################################### sub new{ my $session = shift; my $class = ref($session) || $session; my $self = { @_ }; bless($self, $class); my $response = Session::cnt("$apipath?cmd=login&loginUsername=".$self->{login}."&loginPassword=".$self->{password}); if ($response->is_success){ my $answer = $response->content; my $data = decode_json Encode::encode( 'utf8', $answer ); delete $self->{login}; delete $self->{password}; $self->{data}=$data->{data}; if ($data->{success}){$self->{sess} = $data->{sess};} $self->{success} = $data->{success}; } $self->{err} = $response->status_line; return $self; } ####################################################################################################################### ####################################################################################################################### sub listservers{ my $self = shift; my @keys = @_ ? @_ : sort keys %$self; my $data; my $response = Session::cnt("$apipath?cmd=list_server&sess=".$self->{sess}); if ($response->is_success) { my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); } $data->{err} = $response->status_line; return $data; } ####################################################################################################################### ####################################################################################################################### sub listtemplates{ my $self = shift; my $data; my $response = Session::cnt("$apipath?cmd=list_templates&sess=".$self->{sess}); if ($response->is_success) { my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); } $data->{err} = $response->status_line; return $data; # возвращаем объект } ####################################################################################################################### ####################################################################################################################### sub listiso{ my $self = shift; my $data; my $response = Session::cnt("$apipath?cmd=list_iso&sess=".$self->{sess}); if ($response->is_success) { my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); } $data->{err} = $response->status_line; return $data; } ####################################################################################################################### ####################################################################################################################### sub listvlan{ my $self = shift; my $data; my $response = Session::cnt("$apipath?cmd=get_vlan_list&sess=".$self->{sess}); if ($response->is_success) { my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); } $data->{err} = $response->status_line; return $data; } ####################################################################################################################### ####################################################################################################################### sub addvlan{ my $self = shift; my $keys = { @_ }; my $data; my $param; foreach my $key (keys %{$keys}) { my $a=$keys->{$key}; $param .="&$key=".$a; } my $response = Session::cnt("$apipath?cmd=vlan_action&vlanaction=add&sess=".$self->{sess}.$param); if ($response->is_success) { my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); } $data->{err} = $response->status_line; return $data; } ####################################################################################################################### ####################################################################################################################### sub listerrors{ my $self = shift; my $keys = { @_ }; my $data; my $param; foreach my $key (keys %{$keys}) { my $a=$keys->{$key}; $param .="&$key=".$a; } my $response = Session::cnt("$apipath?cmd=get_error_list&sess=".$self->{sess}.$param); if ($response->is_success) { my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); my $return; foreach my $eid (@{$data->{data}}){ $return->{$eid->{id}}=$eid->{text}; } $data=$return; } $data->{err} = $response->status_line; return $data; } ####################################################################################################################### ####################################################################################################################### sub liststorages{ my $self = shift; my $data; my $response = Session::cnt("$apipath?cmd=get_storage_list&sess=".$self->{sess}); if ($response->is_success) { my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); foreach my $eid (@{$data->{data}}){ $return->{$eid->{id}}=$eid->{name}; } $data=$return; } $data->{err} = $response->status_line; return $data; } ####################################################################################################################### ####################################################################################################################### sub add{ my $self = shift; my $keys = { @_ }; my $data; my $param; foreach my $key (keys %{$keys}) { my $a=$keys->{$key}; $param .="&$key=".$a; } my $response = Session::cnt("$apipath?cmd=add_server&sess=".$self->{sess}.$param); if ($response->is_success) { my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); } $data->{err} = $response->status_line; return $data; } ####################################################################################################################### ####################################################################################################################### sub changepass{ my $self = shift; my $keys = { @_ }; my $data; my $param; foreach my $key (keys %{$keys}) { my $a=$keys->{$key}; $param .="&$key=".$a; } my $response = Session::cnt("$apipath?cmd=changepass&sess=".$self->{sess}.$param); if ($response->is_success) { my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); } $data->{err} = $response->status_line; return $data; } ####################################################################################################################### ####################################################################################################################### sub cnt{ my $url=$_[0]; my $request = HTTP::Request->new(GET => $url); my $connect = LWP::UserAgent->new(timeout => 10); my $response = $connect->request($request); return $response; } END { } ############################################################################################################################# ############################################################################################################################# ############################################################################################################################# package Server; BEGIN { use Exporter (); use LWP::UserAgent; use JSON::XS; use Encode; @ISA = "Exporter"; @EXPORT = qw(new); } sub new{ my $session = shift; my $class = ref($session) || $session; my $self = { @_ }; bless($self, $class); return $self; } ####################################################################################################################### ####################################################################################################################### sub do{ my $self = shift; my $keys = { @_ }; my $data; my $param; foreach my $key (keys %{$keys}) { my $a=$keys->{$key}; $param .="&$key=".$a; } my $response = Session::cnt("$apipath?sess=".$self->{session}->{sess}."&id=".$self->{id}.$param); if ($response->is_success) { my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); } $data->{err} = $response->status_line; return $data; } ####################################################################################################################### ####################################################################################################################### sub get_status{ my $self = shift; my $response = Session::cnt("$apipath?cmd=get_servers_status&sess=".$self->{session}->{sess}); my $data; if ($response->is_success){ my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); foreach my $sid (@{$data->{data}}){ if ($sid->{id} eq $self->{id}){ return $sid->{status}; } } } $data->{err} = $response->status_line; return undef; } ####################################################################################################################### ####################################################################################################################### sub listeth{ my $self = shift; my $data; my $response = Session::cnt("$apipath?cmd=get_eth_list&sess=".$self->{session}->{sess}."&id=".$self->{id}.$param); if ($response->is_success) { my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); } $data->{err} = $response->status_line; return $data; } ####################################################################################################################### ####################################################################################################################### sub listhdd { my $self = shift; my $data; my $response = Session::cnt("$apipath?cmd=get_hdd_list&sess=".$self->{session}->{sess}."&sid=".$self->{id}.$param); if ($response->is_success) { my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); } $data->{err} = $response->status_line; return $data; } ####################################################################################################################### ####################################################################################################################### sub get_dl_url { my $self = shift; my $keys = { @_ }; my $data; my $param; foreach my $key (keys %{$keys}) { my $a=$keys->{$key}; $param .="&$key=".$a; } my $data; my $response = Session::cnt("$apipath?cmd=get_dl_url&sess=".$self->{session}->{sess}."&id=".$self->{id}.$param); if ($response->is_success){ my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); } $data->{err} = $response->status_line; return $data; } ####################################################################################################################### ####################################################################################################################### sub ethdo{ my $self = shift; my $keys = { @_ }; my $data; my $param; foreach my $key (keys %{$keys}) { my $a=$keys->{$key}; $param .="&$key=".$a; } my $response = Session::cnt("$apipath?cmd=eth_action&sess=".$self->{session}->{sess}."&id=".$self->{id}.$param); if ($response->is_success) { my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); } $data->{err} = $response->status_line; return $data; } ####################################################################################################################### ####################################################################################################################### END { } package Vlan; BEGIN { use Exporter (); use LWP::UserAgent; use JSON::XS; use Encode; @ISA = "Exporter"; @EXPORT = qw(new); } ####################################################################################################################### ####################################################################################################################### sub new{ my $session = shift; my $class = ref($session) || $session; my $self = { @_ }; bless($self, $class); return $self; } ####################################################################################################################### ####################################################################################################################### sub do{ my $self = shift; my $keys = { @_ }; my $data; my $param; foreach my $key (keys %{$keys}) { my $a=$keys->{$key}; $param .="&$key=".$a; } my $response = Session::cnt("$apipath?cmd=vlan_action&sess=".$self->{session}->{sess}."&vlanid=".$self->{id}.$param); if ($response->is_success) { my $answer = $response->content; $data = decode_json Encode::encode( 'utf8', $answer ); } $data->{err} = $response->status_line; return $data; } ####################################################################################################################### ####################################################################################################################### END { }