acos_client 0.1.0.pre.alpha
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/README.md +39 -0
- data/Rakefile +1 -0
- data/acos_client.gemspec +29 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/acos_client/application.rb +91 -0
- data/lib/acos_client/client.rb +58 -0
- data/lib/acos_client/errors.rb +56 -0
- data/lib/acos_client/tools.rb +12 -0
- data/lib/acos_client/v21/action.rb +36 -0
- data/lib/acos_client/v21/axapi_http.rb +142 -0
- data/lib/acos_client/v21/base.rb +63 -0
- data/lib/acos_client/v21/config_file.rb +26 -0
- data/lib/acos_client/v21/device_info.rb +22 -0
- data/lib/acos_client/v21/ha.rb +29 -0
- data/lib/acos_client/v21/log.rb +117 -0
- data/lib/acos_client/v21/monkey_patch_ssl.rb +22 -0
- data/lib/acos_client/v21/nat.rb +53 -0
- data/lib/acos_client/v21/network.rb +167 -0
- data/lib/acos_client/v21/partition.rb +53 -0
- data/lib/acos_client/v21/responses.rb +170 -0
- data/lib/acos_client/v21/session.rb +61 -0
- data/lib/acos_client/v21/slb/aflex.rb +89 -0
- data/lib/acos_client/v21/slb/class_list.rb +67 -0
- data/lib/acos_client/v21/slb/hm.rb +122 -0
- data/lib/acos_client/v21/slb/init.rb +53 -0
- data/lib/acos_client/v21/slb/member.rb +36 -0
- data/lib/acos_client/v21/slb/port.rb +52 -0
- data/lib/acos_client/v21/slb/server.rb +65 -0
- data/lib/acos_client/v21/slb/service_group.rb +75 -0
- data/lib/acos_client/v21/slb/template/init.rb +28 -0
- data/lib/acos_client/v21/slb/template/persistence.rb +79 -0
- data/lib/acos_client/v21/slb/template/template_ssl.rb +56 -0
- data/lib/acos_client/v21/slb/virtual_port.rb +87 -0
- data/lib/acos_client/v21/slb/virtual_server.rb +62 -0
- data/lib/acos_client/v21/slb/virtual_service.rb +61 -0
- data/lib/acos_client/v21/system.rb +84 -0
- data/lib/acos_client/version.rb +3 -0
- data/lib/acos_client.rb +13 -0
- metadata +154 -0
@@ -0,0 +1,117 @@
|
|
1
|
+
require 'acos_client/v21/base'
|
2
|
+
|
3
|
+
module AcosClient
|
4
|
+
module V21
|
5
|
+
|
6
|
+
class Log < AcosClient::V21::BaseV21
|
7
|
+
|
8
|
+
def set(sys_log, **opts)
|
9
|
+
params = {:sys_log => sys_log}
|
10
|
+
self._post('system.log.set', params: params, **opts)
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def get(**opts)
|
15
|
+
self._get('system.log.get', **opts)
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
def clear(sys_log, **opts)
|
20
|
+
self._post('system.log.clear', **opts)
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
def download(**opts)
|
25
|
+
self._get('system.log.download', **opts)
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def backup(**opts)
|
30
|
+
self._post('system.log.backup', **opts)
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def level
|
35
|
+
Level.new(self.client)
|
36
|
+
end
|
37
|
+
|
38
|
+
class Level < AcosClient::V21::BaseV21
|
39
|
+
def get(**opts)
|
40
|
+
self._get('system.log.level.get', **opts)
|
41
|
+
end
|
42
|
+
|
43
|
+
def set(log_level, **opts)
|
44
|
+
params = {:log_level => log_level}
|
45
|
+
self._post('system.log.level.set', params: params, **opts)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
def server
|
51
|
+
Server.new(self.client)
|
52
|
+
end
|
53
|
+
|
54
|
+
class Server < AcosClient::V21::BaseV21
|
55
|
+
def get(**opts)
|
56
|
+
self._get('system.log.server.get', **opts)
|
57
|
+
end
|
58
|
+
|
59
|
+
def set(log_server, **opts)
|
60
|
+
params = {:log_server => log_server}
|
61
|
+
self._post('system.log.server.set', params: params, **opts)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
def buffer
|
67
|
+
Buffer.new(self.client)
|
68
|
+
end
|
69
|
+
|
70
|
+
class Buffer < AcosClient::V21::BaseV21
|
71
|
+
def get(**opts)
|
72
|
+
self._get('system.log.buffer.get', **opts)
|
73
|
+
end
|
74
|
+
|
75
|
+
def set(buff_size, **opts)
|
76
|
+
params = {:buffer_size => buff_size}
|
77
|
+
self._post('system.log.buffer.set', params: params, **opts)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
def smtp
|
83
|
+
Smtp.new(self.client)
|
84
|
+
end
|
85
|
+
|
86
|
+
class Smtp < AcosClient::V21::BaseV21
|
87
|
+
def get(**opts)
|
88
|
+
self._get('system.log.smtp.get', **opts)
|
89
|
+
end
|
90
|
+
|
91
|
+
def set(smtp, **opts)
|
92
|
+
params = {:smtp => smtp}
|
93
|
+
self._post('system.log.smtp.set', params: params, **opts)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
def audit
|
99
|
+
Audit.new(self.client)
|
100
|
+
end
|
101
|
+
|
102
|
+
class Audit < AcosClient::V21::BaseV21
|
103
|
+
def get(**opts)
|
104
|
+
self._get('system.log.audit.get', **opts)
|
105
|
+
end
|
106
|
+
|
107
|
+
def set(audit, **opts)
|
108
|
+
params = {:audit => audit}
|
109
|
+
self._post('system.log.audit.set', params: params, **opts)
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module OpenSSL
|
2
|
+
module SSL
|
3
|
+
class SSLContext
|
4
|
+
remove_const(:DEFAULT_PARAMS)
|
5
|
+
DEFAULT_PARAMS = {
|
6
|
+
:ssl_version => "TLSv1",
|
7
|
+
:verify_mode => OpenSSL::SSL::VERIFY_PEER,
|
8
|
+
:ciphers => %w{
|
9
|
+
DES-CBC3-SHA
|
10
|
+
}.join(":"),
|
11
|
+
:options => -> {
|
12
|
+
opts = OpenSSL::SSL::OP_ALL
|
13
|
+
opts &= ~OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS if defined?(OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS)
|
14
|
+
opts |= OpenSSL::SSL::OP_NO_COMPRESSION if defined?(OpenSSL::SSL::OP_NO_COMPRESSION)
|
15
|
+
opts |= OpenSSL::SSL::OP_NO_SSLv2 if defined?(OpenSSL::SSL::OP_NO_SSLv2)
|
16
|
+
opts |= OpenSSL::SSL::OP_NO_SSLv3 if defined?(OpenSSL::SSL::OP_NO_SSLv3)
|
17
|
+
opts
|
18
|
+
}.call
|
19
|
+
}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'acos_client/v21/base'
|
2
|
+
|
3
|
+
module AcosClient
|
4
|
+
module V21
|
5
|
+
class Nat < AcosClient::V21::BaseV21
|
6
|
+
|
7
|
+
def pool
|
8
|
+
Pool.new(self.client)
|
9
|
+
end
|
10
|
+
|
11
|
+
class Pool < AcosClient::V21::BaseV21
|
12
|
+
|
13
|
+
def _set(action, name, start_ip, end_ip, mask, **opts)
|
14
|
+
|
15
|
+
params = {
|
16
|
+
:name => name,
|
17
|
+
:start_ip_addr => start_ip,
|
18
|
+
:end_ip_addr => end_ip,
|
19
|
+
:netmask => mask,
|
20
|
+
}
|
21
|
+
|
22
|
+
self._post(action, params: params, **opts)
|
23
|
+
end
|
24
|
+
|
25
|
+
def all(**opts)
|
26
|
+
self._get('nat.pool.getAll', **opts)
|
27
|
+
end
|
28
|
+
|
29
|
+
def create(name, start_ip, end_ip, mask, **opts)
|
30
|
+
self._set('nat.pool.create', name, start_ip, end_ip, mask, **opts)
|
31
|
+
end
|
32
|
+
|
33
|
+
def update(name, start_ip, end_ip, mask, **opts)
|
34
|
+
self._set('nat.pool.create', name, start_ip, end_ip, mask, **opts)
|
35
|
+
end
|
36
|
+
|
37
|
+
def delete(name, **opts)
|
38
|
+
self._post('nat.pool.delete', params: {:name => name}, **opts)
|
39
|
+
end
|
40
|
+
|
41
|
+
def stats(name, **opts)
|
42
|
+
self._post('nat.pool.fetchStatistics', params: {:name => name}, **opts)
|
43
|
+
end
|
44
|
+
|
45
|
+
def all_stats(**opts)
|
46
|
+
self._get('nat.pool.fetchALLStatistics', **opts)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'acos_client/v21/base'
|
2
|
+
|
3
|
+
|
4
|
+
module AcosClient
|
5
|
+
module V21
|
6
|
+
|
7
|
+
class Network < AcosClient::V21::BaseV21
|
8
|
+
|
9
|
+
def interface
|
10
|
+
Interface.new(self.client)
|
11
|
+
end
|
12
|
+
|
13
|
+
class Interface < AcosClient::V21::BaseV21
|
14
|
+
|
15
|
+
def all
|
16
|
+
self._get('network.interface.getAll')
|
17
|
+
end
|
18
|
+
|
19
|
+
def get(port_num)
|
20
|
+
# FIXME Broken ?
|
21
|
+
self._get('network.interface.get', params: {:port_num => port_num})
|
22
|
+
end
|
23
|
+
|
24
|
+
def set(port_num, **otps)
|
25
|
+
|
26
|
+
params = {
|
27
|
+
:interface => {
|
28
|
+
:port_num => port_num
|
29
|
+
}
|
30
|
+
}
|
31
|
+
self._post('network.interface.set', params: params, **opts)
|
32
|
+
end
|
33
|
+
|
34
|
+
def ipv4
|
35
|
+
IPV4.new(self.client)
|
36
|
+
end
|
37
|
+
|
38
|
+
class IPV4 < AcosClient::V21::BaseV21
|
39
|
+
|
40
|
+
def _set(action, port_num, ipv4_address, ipv4_mask, **opts)
|
41
|
+
|
42
|
+
params = {
|
43
|
+
:interface => {
|
44
|
+
:ipv4 => {
|
45
|
+
:ipv4_address => ipv4_address,
|
46
|
+
:ipv4_mask => ipv4_mask
|
47
|
+
},
|
48
|
+
:port_num => port_num
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
self._post(action, params: params, **opts)
|
53
|
+
end
|
54
|
+
|
55
|
+
def all_delete(port_num, **opts)
|
56
|
+
self._post('network.interface.ipv4.deleteAll', params: {:port_num => port_num}, **opts)
|
57
|
+
end
|
58
|
+
|
59
|
+
def add(port_num, ipv4_address, ipv4_mask, **opts)
|
60
|
+
self._set('network.interface.ipv4.add', port_num, ipv4_address, ipv4_mask, **opts)
|
61
|
+
end
|
62
|
+
|
63
|
+
def delete(port_num, ipv4_address, ipv4_mask, **opts)
|
64
|
+
self._set('network.interface.ipv4.delete', port_num, ipv4_address, ipv4_mask, **opts)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def acl
|
70
|
+
ACL.new(self.client)
|
71
|
+
end
|
72
|
+
|
73
|
+
class ACL < AcosClient::V21::BaseV21
|
74
|
+
|
75
|
+
def ext
|
76
|
+
Ext.new(self.client)
|
77
|
+
end
|
78
|
+
|
79
|
+
class Ext < AcosClient::V21::BaseV21
|
80
|
+
|
81
|
+
# Protocols
|
82
|
+
ICMP = 0
|
83
|
+
IP = 1
|
84
|
+
TCP = 2
|
85
|
+
UDP = 3
|
86
|
+
|
87
|
+
def _set(action, id, acl_item_list, **opts)
|
88
|
+
|
89
|
+
params = {
|
90
|
+
:ext_acl => {
|
91
|
+
:id => id,
|
92
|
+
:acl_item_list => acl_item_list
|
93
|
+
}
|
94
|
+
}
|
95
|
+
|
96
|
+
# silently fails if 'acl_item_list' is empty
|
97
|
+
self._post(action, params: params, **opts)
|
98
|
+
end
|
99
|
+
|
100
|
+
def all
|
101
|
+
self._get('network.acl.ext.getAll')
|
102
|
+
end
|
103
|
+
|
104
|
+
def search(id)
|
105
|
+
# FIXME not working
|
106
|
+
self._get('network.acl.ext.search', params: {:id => id})
|
107
|
+
end
|
108
|
+
|
109
|
+
def create(id, acl_item_list, **opts)
|
110
|
+
self._set('network.acl.ext.create', id, acl_item_list, **opts)
|
111
|
+
end
|
112
|
+
|
113
|
+
def update(id, acl_item_list, **opts)
|
114
|
+
self._set('network.acl.ext.update', id, acl_item_list,
|
115
|
+
**opts) # FIXME NOT WORKING
|
116
|
+
end
|
117
|
+
|
118
|
+
def delete(id)
|
119
|
+
# FIXME NOT WORKING
|
120
|
+
self._post('network.acl.ext.delete', params: {:id => id})
|
121
|
+
end
|
122
|
+
|
123
|
+
def all_delete(**opts)
|
124
|
+
self._get('network.acl.ext.deleteAll', **opts)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def route
|
130
|
+
Route.new(self.client)
|
131
|
+
end
|
132
|
+
|
133
|
+
class Route < AcosClient::V21::BaseV21
|
134
|
+
|
135
|
+
def _set(action, address, mask, gateway, distance, **opts)
|
136
|
+
params = {
|
137
|
+
:address => address,
|
138
|
+
:mask => mask,
|
139
|
+
:gateway => gateway,
|
140
|
+
:distance => distance
|
141
|
+
}
|
142
|
+
self._post(action, params: params, **opts)
|
143
|
+
end
|
144
|
+
|
145
|
+
def ipv4_all(**opts)
|
146
|
+
self._get('network.route.ipv4static.getAll', **opts)
|
147
|
+
end
|
148
|
+
|
149
|
+
def ipv4_create(address, mask, gateway, distance, **opts)
|
150
|
+
self._set('network.route.ipv4static.create', address, mask, gateway, distance, **opts)
|
151
|
+
end
|
152
|
+
|
153
|
+
def ipv4_update(address, mask, gateway, distance, **opts)
|
154
|
+
# FIXME NOT WORKING
|
155
|
+
self._set('network.route.ipv4static.update', address, mask, gateway, distance, **opts)
|
156
|
+
end
|
157
|
+
|
158
|
+
def ipv4_delete(address, mask, gateway, distance, **opts)
|
159
|
+
# FIXME NOT WORKING
|
160
|
+
self._set('network.route.ipv4static.delete', address, mask, gateway, distance, **opts)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'acos_client/errors'
|
2
|
+
require 'acos_client/v21/base'
|
3
|
+
|
4
|
+
|
5
|
+
module AcosClient
|
6
|
+
module V21
|
7
|
+
|
8
|
+
class Partition < AcosClient::V21::BaseV21
|
9
|
+
|
10
|
+
def exists(name)
|
11
|
+
|
12
|
+
if name == 'shared'
|
13
|
+
return true
|
14
|
+
end
|
15
|
+
|
16
|
+
begin
|
17
|
+
self._post('system.partition.search', params: {:name => name})
|
18
|
+
return true
|
19
|
+
rescue AcosClient::Error::NotFound
|
20
|
+
return false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def active(name='shared')
|
25
|
+
if self.client.current_partition != name
|
26
|
+
self._post('system.partition.active', params: {:name => name})
|
27
|
+
self.client.current_partition = name
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def create(name)
|
32
|
+
params = {
|
33
|
+
:partition => {
|
34
|
+
:max_aflex_file => 32,
|
35
|
+
:network_partition => 0,
|
36
|
+
:name => name
|
37
|
+
}
|
38
|
+
}
|
39
|
+
if name != 'shared'
|
40
|
+
self._post('system.partition.create', params: params)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def delete(name)
|
45
|
+
if name != 'shared'
|
46
|
+
self.client.session.close
|
47
|
+
self._post('system.partition.delete', params: {:name => name})
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,170 @@
|
|
1
|
+
require 'acos_client/errors'
|
2
|
+
|
3
|
+
|
4
|
+
module AcosClient
|
5
|
+
module V21
|
6
|
+
module Responses
|
7
|
+
|
8
|
+
RESPONSE_CODES = {
|
9
|
+
999 => {
|
10
|
+
('*') => AcosClient::Error::NotFound
|
11
|
+
},
|
12
|
+
1002 => {
|
13
|
+
('*') => AcosClient::Error::MemoryFault
|
14
|
+
},
|
15
|
+
1009 => {
|
16
|
+
('session.close') => nil,
|
17
|
+
('*') => AcosClient::Error::InvalidSessionID
|
18
|
+
},
|
19
|
+
1023 => {
|
20
|
+
('slb.service_group.member.delete') => nil,
|
21
|
+
('*') => AcosClient::Error::NotFound
|
22
|
+
},
|
23
|
+
1043 => {
|
24
|
+
('slb.virtual_server.vport.delete') => nil,
|
25
|
+
('*') => AcosClient::Error::NotFound
|
26
|
+
},
|
27
|
+
1076 => {
|
28
|
+
('session.close') => nil,
|
29
|
+
('*') => AcosClient::Error::InvalidPartitionParameter
|
30
|
+
},
|
31
|
+
1163 => {
|
32
|
+
('*') => AcosClient::Error::InvalidParameter
|
33
|
+
},
|
34
|
+
1165 => {
|
35
|
+
('*') => AcosClient::Error::HMMissingHttpPassive
|
36
|
+
},
|
37
|
+
1405 => {
|
38
|
+
('*') => AcosClient::Error::Exists
|
39
|
+
},
|
40
|
+
1406 => {
|
41
|
+
('*') => AcosClient::Error::Exists
|
42
|
+
},
|
43
|
+
1982 => {
|
44
|
+
('*') => AcosClient::Error::Exists
|
45
|
+
},
|
46
|
+
2941 => {
|
47
|
+
('*') => AcosClient::Error::Exists
|
48
|
+
},
|
49
|
+
3602 => {
|
50
|
+
('slb.class_list.update') => AcosClient::Error::NotFound,
|
51
|
+
('*') => AcosClient::Error::NotFound
|
52
|
+
},
|
53
|
+
17039361 => {
|
54
|
+
('slb.aflex.delete') => nil,
|
55
|
+
('*') => AcosClient::Error::NotFound
|
56
|
+
},
|
57
|
+
17039364 => {
|
58
|
+
('slb.aflex.upload') => AcosClient::Error::InUse,
|
59
|
+
('slb.aflex.delete') => AcosClient::Error::InUse,
|
60
|
+
('*') => AcosClient::Error::InUse
|
61
|
+
},
|
62
|
+
33619968 => {
|
63
|
+
('slb.hm.delete') => nil,
|
64
|
+
('*') => AcosClient::Error::NotFound
|
65
|
+
},
|
66
|
+
33619969 => {
|
67
|
+
('*') => AcosClient::Error::InUse,
|
68
|
+
},
|
69
|
+
67174402 => {
|
70
|
+
('slb.server.delete') => nil,
|
71
|
+
('slb.server.port.delete') => nil,
|
72
|
+
('*') => AcosClient::Error::NotFound
|
73
|
+
},
|
74
|
+
67239937 => {
|
75
|
+
('slb.virtual_server.delete') => nil,
|
76
|
+
('slb.virtual_service.delete') => nil,
|
77
|
+
('slb.virtual_service.update') => AcosClient::Error::NotFound,
|
78
|
+
('*') => AcosClient::Error::NotFound
|
79
|
+
},
|
80
|
+
67239947 => {
|
81
|
+
('*') => AcosClient::Error::Exists
|
82
|
+
},
|
83
|
+
67305473 => {
|
84
|
+
('slb.service_group.delete') => nil,
|
85
|
+
('slb.service_group.member.delete') => nil,
|
86
|
+
('slb.service_group.member.create') => AcosClient::Error::NotFound,
|
87
|
+
('slb.service_group.member.update') => AcosClient::Error::NotFound,
|
88
|
+
('*') => AcosClient::Error::NotFound
|
89
|
+
},
|
90
|
+
67371009 => {
|
91
|
+
('slb.template.cookie_persistence.delete') => nil,
|
92
|
+
('slb.template.src_ip_persistence.delete') => nil,
|
93
|
+
('slb.template.client_ssl.delete') => nil,
|
94
|
+
('slb.template.server_ssl.delete') => nil,
|
95
|
+
('*') => AcosClient::Error::NotFound
|
96
|
+
},
|
97
|
+
67371049 => {
|
98
|
+
('slb.class_list.delete') => nil,
|
99
|
+
('*') => AcosClient::Error::NotFound
|
100
|
+
},
|
101
|
+
402653200 => {
|
102
|
+
('*') => AcosClient::Error::Exists
|
103
|
+
},
|
104
|
+
402653201 => {
|
105
|
+
('*') => AcosClient::Error::Exists
|
106
|
+
},
|
107
|
+
402653202 => {
|
108
|
+
('*') => AcosClient::Error::Exists
|
109
|
+
},
|
110
|
+
402653206 => {
|
111
|
+
('*') => AcosClient::Error::Exists
|
112
|
+
},
|
113
|
+
402718800 => {
|
114
|
+
('*') => AcosClient::Error::NotFound
|
115
|
+
},
|
116
|
+
520486915 => {
|
117
|
+
('*') => AcosClient::Error::AuthenticationFailure
|
118
|
+
},
|
119
|
+
520749062 => {
|
120
|
+
('*') => AcosClient::Error::NotFound
|
121
|
+
},
|
122
|
+
654311465 => {
|
123
|
+
('*') => AcosClient::Error::AddressSpecifiedIsInUse
|
124
|
+
},
|
125
|
+
654311495 => {
|
126
|
+
('*') => AcosClient::Error::InUse,
|
127
|
+
},
|
128
|
+
654311496 => {
|
129
|
+
('*') => AcosClient::Error::AddressSpecifiedIsInUse
|
130
|
+
},
|
131
|
+
654376968 => {
|
132
|
+
('nat.pool.delete') => nil,
|
133
|
+
('*') => AcosClient::Error::NotFound
|
134
|
+
},
|
135
|
+
654573574 => {
|
136
|
+
('network.acl.ext.delete') => nil,
|
137
|
+
('*') => AcosClient::Error::NotFound
|
138
|
+
}
|
139
|
+
}
|
140
|
+
|
141
|
+
|
142
|
+
def self.raise_axapi_error(response, action: nil)
|
143
|
+
|
144
|
+
if response.key?(:response) and response[:response].key?(:err)
|
145
|
+
code = response[:response][:err][:code]
|
146
|
+
|
147
|
+
if RESPONSE_CODES.key?(code)
|
148
|
+
error_dict = RESPONSE_CODES[code]
|
149
|
+
|
150
|
+
if !action.nil? and error_dict.key?(action)
|
151
|
+
error = error_dict[action]
|
152
|
+
else
|
153
|
+
error = error_dict['*']
|
154
|
+
end
|
155
|
+
|
156
|
+
if !error.nil?
|
157
|
+
raise error, 'Err: ' + code.to_s + ' ' + response[:response][:err][:msg]
|
158
|
+
else
|
159
|
+
return
|
160
|
+
end
|
161
|
+
end
|
162
|
+
raise RuntimeError, 'Err: ' + code.to_s + ' ' + response[:response][:err][:msg]
|
163
|
+
end
|
164
|
+
|
165
|
+
raise RuntimeError
|
166
|
+
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'acos_client/errors'
|
2
|
+
|
3
|
+
module AcosClient
|
4
|
+
module V21
|
5
|
+
|
6
|
+
class Session
|
7
|
+
|
8
|
+
def initialize(client, username, password)
|
9
|
+
@client = client
|
10
|
+
@http = client.http
|
11
|
+
@username = username
|
12
|
+
@password = password
|
13
|
+
@session_id = nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def id
|
17
|
+
if @session_id.nil?
|
18
|
+
self.authenticate(@username, @password)
|
19
|
+
end
|
20
|
+
@session_id
|
21
|
+
end
|
22
|
+
|
23
|
+
def authenticate(username, password)
|
24
|
+
url = '/services/rest/V2.1/?format=json&method=authenticate'
|
25
|
+
|
26
|
+
options = {
|
27
|
+
:username => username,
|
28
|
+
:password => password
|
29
|
+
}
|
30
|
+
|
31
|
+
if @session_id.nil?
|
32
|
+
self.close
|
33
|
+
end
|
34
|
+
|
35
|
+
r = @http.post(url, params: options)
|
36
|
+
@session_id = r[:session_id]
|
37
|
+
r
|
38
|
+
end
|
39
|
+
|
40
|
+
def close
|
41
|
+
begin
|
42
|
+
@client.partition.active
|
43
|
+
rescue Exception
|
44
|
+
#pass
|
45
|
+
end
|
46
|
+
|
47
|
+
begin
|
48
|
+
url = "/services/rest/v2.1/?format=json&method=session.close&session_id=#{@session_id}"
|
49
|
+
r = @http.post(url, params: {:session_id => @session_id})
|
50
|
+
|
51
|
+
rescue AcosClient::Error::InvalidPartitionParameter
|
52
|
+
#pass
|
53
|
+
ensure
|
54
|
+
@session_id = nil
|
55
|
+
end
|
56
|
+
|
57
|
+
r
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|