vnet_api_client 0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +47 -0
- data/lib/vnet_api_client.rb +26 -0
- data/lib/vnet_api_client/api_resource.rb +112 -0
- data/lib/vnet_api_client/api_resources.rb +164 -0
- data/lib/vnet_api_client/response_format.rb +28 -0
- metadata +49 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2c9692d1d0c36a83f2f96cae9f4c04cb87d829a2
|
4
|
+
data.tar.gz: 615a548f72bab017dad951798ddeb543ca419773
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 79379cf32e11fdaf7941ba3ab44201c3ec83cae9aab7dc474fcea5512d847ee033a2bd1f8035f23192ea4e32df4f972442908130197aabdfc6a88cc6b35a5cb8
|
7
|
+
data.tar.gz: 2191645275d2879000c6b185df515de69526ef1a8a4572e0d33d970132ab99d7b1c1dde7f08bc61e921814fa917c3c3c92400f786fd3cc0feeb64247a5654ec0
|
data/README.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
A Ruby library for accessing the OpenVNet WebAPI. All this library does is call Ruby's built in `Net::HTTP`. No further external libraries required.
|
2
|
+
|
3
|
+
The JSON responses from the API are returned as Ruby hashes.
|
4
|
+
|
5
|
+
Installation:
|
6
|
+
|
7
|
+
```bash
|
8
|
+
gem install vnet_api_client
|
9
|
+
```
|
10
|
+
|
11
|
+
Usage:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
require 'rubygems'
|
15
|
+
require 'vnet_api_client'
|
16
|
+
|
17
|
+
# This is the default value. If your OpenVNet WebAPI is located at localhost
|
18
|
+
# port 9090, you don't have to include this line.
|
19
|
+
VNetAPIClient.uri = 'http://localhost:9090'
|
20
|
+
|
21
|
+
# Creates a new network
|
22
|
+
VNetAPIClient::Network.create(display_name: 'my_network',
|
23
|
+
ipv4_network: '192.168.3.0',
|
24
|
+
ipv4_prefix: 24)
|
25
|
+
|
26
|
+
# Enables routing and changes display name for an interface
|
27
|
+
VNetAPIClient::Interface.update('i-abcdefg', enable_routing: true,
|
28
|
+
display_name: 'my new name')
|
29
|
+
|
30
|
+
# Retrieves all datapaths
|
31
|
+
VNetAPIClient::Datapath.index
|
32
|
+
|
33
|
+
# Retrieves one interface
|
34
|
+
VNetAPIClient::Interface.show('i-abcdefg')
|
35
|
+
|
36
|
+
# Deletes one ip lease
|
37
|
+
VNetAPIClient::IpLease.delete('il-begone')
|
38
|
+
|
39
|
+
# Adds an interface to a security group
|
40
|
+
VNetAPIClient::SecurityGroup.add_interface('sg-enter', 'i-getin')
|
41
|
+
|
42
|
+
# Shows all networks in a datapath
|
43
|
+
VNetAPIClient::Datapath.show_networks('dp-mypath')
|
44
|
+
|
45
|
+
# Deletes a static address from a translation
|
46
|
+
VNetAPIClient::Translation.remove_static_address('tr-xxxxx')
|
47
|
+
```
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'net/http'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
require_relative 'vnet_api_client/api_resource'
|
7
|
+
require_relative 'vnet_api_client/api_resources'
|
8
|
+
require_relative 'vnet_api_client/response_format'
|
9
|
+
|
10
|
+
module VNetAPIClient
|
11
|
+
def self.uri=(u)
|
12
|
+
ApiResource.api_uri = u
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.version=(v)
|
16
|
+
ApiResource.api_version = v
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.format=(f)
|
20
|
+
ApiResource.api_format = f
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Set default values
|
25
|
+
VNetAPIClient.uri = 'http://localhost:9090'
|
26
|
+
VNetAPIClient.format = :json
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module VNetAPIClient
|
4
|
+
|
5
|
+
class ApiResource
|
6
|
+
class << self
|
7
|
+
attr_accessor :api_uri
|
8
|
+
attr_accessor :api_format
|
9
|
+
|
10
|
+
def api_full_uri(suffix)
|
11
|
+
u = ApiResource.api_uri
|
12
|
+
f = ApiResource.api_format
|
13
|
+
|
14
|
+
uri = "#{u}/api/1.0"
|
15
|
+
uri += "/#{suffix}" if suffix
|
16
|
+
uri += ".#{f}"
|
17
|
+
|
18
|
+
URI(uri)
|
19
|
+
end
|
20
|
+
|
21
|
+
def send_request(verb, suffix, params = nil)
|
22
|
+
uri = api_full_uri(suffix)
|
23
|
+
uri.query = URI.encode_www_form(params) if params
|
24
|
+
|
25
|
+
response = Net::HTTP.start(uri.host, uri.port) do |http|
|
26
|
+
request = verb.new(uri.request_uri)
|
27
|
+
http.request(request)
|
28
|
+
end
|
29
|
+
|
30
|
+
response_format = ApiResource.api_format.to_sym
|
31
|
+
|
32
|
+
ResponseFormats[response_format].parse(response)
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# Metaprogramming to define common methods
|
37
|
+
#
|
38
|
+
def api_suffix(suffix)
|
39
|
+
@api_suffix = suffix
|
40
|
+
end
|
41
|
+
|
42
|
+
def metaclass
|
43
|
+
class << self
|
44
|
+
self
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def define_standard_crud_methods
|
49
|
+
metaclass.instance_eval do
|
50
|
+
define_method(:create) do |params = nil|
|
51
|
+
send_request(Net::HTTP::Post, @api_suffix, params)
|
52
|
+
end
|
53
|
+
|
54
|
+
define_method(:update) do |uuid, params = nil|
|
55
|
+
send_request(Net::HTTP::Put, "#{@api_suffix}/#{uuid}", params)
|
56
|
+
end
|
57
|
+
|
58
|
+
define_method(:delete) do |uuid|
|
59
|
+
send_request(Net::HTTP::Delete, "#{@api_suffix}/#{uuid}")
|
60
|
+
end
|
61
|
+
|
62
|
+
define_method(:show) do |uuid|
|
63
|
+
send_request(Net::HTTP::Get, "#{@api_suffix}/#{uuid}")
|
64
|
+
end
|
65
|
+
|
66
|
+
define_method(:index) do
|
67
|
+
send_request(Net::HTTP::Get, @api_suffix)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def define_relation_methods(relation_name)
|
73
|
+
define_add_relation(relation_name)
|
74
|
+
define_show_relation(relation_name)
|
75
|
+
define_remove_relation(relation_name)
|
76
|
+
end
|
77
|
+
|
78
|
+
def define_add_relation(relation_name)
|
79
|
+
metaclass.instance_eval do
|
80
|
+
singular_name = relation_name.to_s.chomp('s')
|
81
|
+
|
82
|
+
define_method("add_#{singular_name}") do |uuid, relation_uuid, params = nil|
|
83
|
+
suffix = "#{@api_suffix}/#{uuid}/#{relation_name}/#{relation_uuid}"
|
84
|
+
send_request(Net::HTTP::Post, suffix, params)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def define_show_relation(relation_name)
|
90
|
+
metaclass.instance_eval do
|
91
|
+
define_method("show_#{relation_name}") do |uuid|
|
92
|
+
send_request(Net::HTTP::Get, "#{@api_suffix}/#{uuid}/#{relation_name}")
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def define_remove_relation(relation_name)
|
98
|
+
metaclass.instance_eval do
|
99
|
+
singular_name = relation_name.to_s.chomp('s')
|
100
|
+
|
101
|
+
define_method("remove_#{singular_name}") do |uuid, relation_uuid|
|
102
|
+
suffix = "#{@api_suffix}/#{uuid}/#{relation_name}/#{relation_uuid}"
|
103
|
+
send_request(Net::HTTP::Delete, suffix)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
@@ -0,0 +1,164 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module VNetAPIClient
|
4
|
+
|
5
|
+
class Datapath < ApiResource
|
6
|
+
api_suffix :datapaths
|
7
|
+
|
8
|
+
define_standard_crud_methods
|
9
|
+
define_relation_methods(:networks)
|
10
|
+
define_relation_methods(:route_links)
|
11
|
+
end
|
12
|
+
|
13
|
+
class DnsService < ApiResource
|
14
|
+
api_suffix :dns_services
|
15
|
+
|
16
|
+
define_standard_crud_methods
|
17
|
+
|
18
|
+
define_show_relation(:dns_records)
|
19
|
+
define_remove_relation(:dns_records)
|
20
|
+
|
21
|
+
def self.add_dns_record(dns_service_uuid, params = nil)
|
22
|
+
send_request(Net::HTTP::Post,
|
23
|
+
"#{@api_suffix}/#{dns_service_uuid}/dns_records",
|
24
|
+
params)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class Interface < ApiResource
|
29
|
+
api_suffix :interfaces
|
30
|
+
|
31
|
+
define_standard_crud_methods
|
32
|
+
define_relation_methods(:security_groups)
|
33
|
+
|
34
|
+
define_show_relation(:ports)
|
35
|
+
|
36
|
+
def self.rename(interface_uuid, params = nil)
|
37
|
+
send_request(Net::HTTP::Put, "#{@api_suffix}/#{interface_uuid}/rename", params)
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.add_port(interface_uuid, params = nil)
|
41
|
+
send_request(Net::HTTP::Post, "#{@api_suffix}/#{interface_uuid}/ports", params)
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.remove_port(interface_uuid, params = nil)
|
45
|
+
send_request(Net::HTTP::Delete, "#{@api_suffix}/#{interface_uuid}/ports", params)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class IpLease < ApiResource
|
50
|
+
api_suffix :ip_leases
|
51
|
+
|
52
|
+
define_standard_crud_methods
|
53
|
+
end
|
54
|
+
|
55
|
+
class IpRangeGroup < ApiResource
|
56
|
+
api_suffix :ip_range_groups
|
57
|
+
|
58
|
+
define_standard_crud_methods
|
59
|
+
|
60
|
+
define_show_relation(:ip_ranges)
|
61
|
+
define_remove_relation(:ip_ranges)
|
62
|
+
|
63
|
+
def self.add_range(ip_range_group_uuid, params = nil)
|
64
|
+
send_request(Net::HTTP::Post,
|
65
|
+
"#{@api_suffix}/#{ip_range_group_uuid}/ip_ranges",
|
66
|
+
params)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
class IpLeaseContainer < ApiResource
|
71
|
+
api_suffix :ip_lease_containers
|
72
|
+
|
73
|
+
define_standard_crud_methods
|
74
|
+
|
75
|
+
define_show_relation(:ip_leases)
|
76
|
+
end
|
77
|
+
|
78
|
+
class IpRetentionContainer < ApiResource
|
79
|
+
api_suffix :ip_retention_containers
|
80
|
+
|
81
|
+
define_standard_crud_methods
|
82
|
+
|
83
|
+
define_show_relation(:ip_retentions)
|
84
|
+
end
|
85
|
+
|
86
|
+
class LeasePolicy < ApiResource
|
87
|
+
api_suffix :lease_policies
|
88
|
+
|
89
|
+
define_standard_crud_methods
|
90
|
+
define_relation_methods(:ip_lease_containers)
|
91
|
+
define_relation_methods(:ip_retention_containers)
|
92
|
+
define_relation_methods(:networks)
|
93
|
+
define_relation_methods(:interfaces)
|
94
|
+
|
95
|
+
def self.add_lease(lease_policy_uuid, params = nil)
|
96
|
+
send_request(Net::HTTP::Post,
|
97
|
+
"#{@api_suffix}/#{lease_policy_uuid}/ip_leases",
|
98
|
+
params)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
class MacLease < ApiResource
|
103
|
+
api_suffix :mac_leases
|
104
|
+
|
105
|
+
define_standard_crud_methods
|
106
|
+
end
|
107
|
+
|
108
|
+
class Network < ApiResource
|
109
|
+
api_suffix :networks
|
110
|
+
|
111
|
+
define_standard_crud_methods
|
112
|
+
end
|
113
|
+
|
114
|
+
class NetworkService < ApiResource
|
115
|
+
api_suffix :network_services
|
116
|
+
|
117
|
+
define_standard_crud_methods
|
118
|
+
end
|
119
|
+
|
120
|
+
class Route < ApiResource
|
121
|
+
api_suffix :routes
|
122
|
+
|
123
|
+
define_standard_crud_methods
|
124
|
+
end
|
125
|
+
|
126
|
+
class RouteLink < ApiResource
|
127
|
+
api_suffix :route_links
|
128
|
+
|
129
|
+
define_standard_crud_methods
|
130
|
+
end
|
131
|
+
|
132
|
+
class SecurityGroup < ApiResource
|
133
|
+
api_suffix :security_groups
|
134
|
+
|
135
|
+
define_standard_crud_methods
|
136
|
+
define_relation_methods(:interfaces)
|
137
|
+
end
|
138
|
+
|
139
|
+
class Translation < ApiResource
|
140
|
+
api_suffix :translations
|
141
|
+
|
142
|
+
define_standard_crud_methods
|
143
|
+
|
144
|
+
def self.add_static_address(translation_uuid, params = nil)
|
145
|
+
send_request(Net::HTTP::Post,
|
146
|
+
"#{@api_suffix}/#{translation_uuid}/static_address",
|
147
|
+
params)
|
148
|
+
end
|
149
|
+
|
150
|
+
def self.remove_static_address(translation_uuid, params = nil)
|
151
|
+
send_request(Net::HTTP::Delete,
|
152
|
+
"#{@api_suffix}/#{translation_uuid}/static_address",
|
153
|
+
params)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
class VlanTranslation < ApiResource
|
158
|
+
api_suffix :vlan_translations
|
159
|
+
|
160
|
+
define_standard_crud_methods
|
161
|
+
end
|
162
|
+
|
163
|
+
end
|
164
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module VNetAPIClient
|
4
|
+
module ResponseFormats
|
5
|
+
|
6
|
+
def self.[](format)
|
7
|
+
case format
|
8
|
+
when :json
|
9
|
+
Json.new
|
10
|
+
else
|
11
|
+
raise "Unknown response format: #{format}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Format
|
16
|
+
def parse(response)
|
17
|
+
raise NotImplementedError
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Json < Format
|
22
|
+
def parse(response)
|
23
|
+
JSON.parse(response.body) if response.body
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vnet_api_client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.7'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Axsh Co. LTD
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-09 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Ruby wrapper for OpenVNet's RESTful API
|
14
|
+
email: dev@axsh.net
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/vnet_api_client.rb
|
20
|
+
- lib/vnet_api_client/api_resources.rb
|
21
|
+
- lib/vnet_api_client/response_format.rb
|
22
|
+
- lib/vnet_api_client/api_resource.rb
|
23
|
+
- README.md
|
24
|
+
homepage: http://openvnet.org
|
25
|
+
licenses:
|
26
|
+
- LGPLv3
|
27
|
+
metadata: {}
|
28
|
+
post_install_message:
|
29
|
+
rdoc_options: []
|
30
|
+
require_paths:
|
31
|
+
- lib
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - '>='
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 2.1.1
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubyforge_project:
|
44
|
+
rubygems_version: 2.0.3
|
45
|
+
signing_key:
|
46
|
+
specification_version: 4
|
47
|
+
summary: Ruby wrapper for OpenVNet's RESTful API
|
48
|
+
test_files: []
|
49
|
+
has_rdoc:
|