infoblox 0.0.11 → 0.1.0
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.
- data/README.md +8 -7
- data/lib/infoblox/client.rb +10 -6
- data/lib/infoblox/resource.rb +11 -19
- data/lib/infoblox/version.rb +1 -1
- data/spec/host_spec.rb +3 -3
- data/spec/resource_spec.rb +6 -8
- metadata +2 -2
data/README.md
CHANGED
@@ -24,30 +24,31 @@ querying, adding, and removing host names from dns records:
|
|
24
24
|
|
25
25
|
|
26
26
|
## Ruby client usage
|
27
|
-
|
28
|
-
base Resource class.
|
27
|
+
The Client class has a few helper methods to make certain operations easier. Creating a host record:
|
29
28
|
|
30
29
|
client = Infoblox::Client.new(:username => "foo",
|
31
30
|
:password => "bar",
|
32
31
|
:host => "https://foo-bar-dns.example.com")
|
33
32
|
|
34
|
-
The client class has a few helper methods to make certain operations easier. Creating a host record:
|
35
33
|
|
36
34
|
client.create_host("build-machine.internal", "10.10.3.3")
|
37
35
|
client.delete_host("build-machine.internal")
|
38
36
|
client.find_host_by_name("build-")
|
39
37
|
|
40
|
-
One can also use the resource classes directly to run arbitrary query logic
|
38
|
+
One can also use the resource classes directly to run arbitrary query logic. An instance
|
39
|
+
of the Infoblox::Connection class is necessary:
|
41
40
|
|
42
|
-
Infoblox::
|
41
|
+
connection = Infoblox::Connection.new(:username => '', :password => '', :host => '')
|
42
|
+
|
43
|
+
Infoblox::Network.find(connection, {"_return_fields" => "extensible_attributes"})
|
43
44
|
# => [...]
|
44
45
|
|
45
|
-
Infoblox::Host.find({"name~" => "demo[0-9]{1,}-web.domain"})
|
46
|
+
Infoblox::Host.find(connection, {"name~" => "demo[0-9]{1,}-web.domain"})
|
46
47
|
# => [...]
|
47
48
|
|
48
49
|
The Resource sub-classes also support `get`, `post`, `put`, and `delete`. For example, creating a network is pretty straightforward:
|
49
50
|
|
50
|
-
network = Infoblox::Network.new
|
51
|
+
network = Infoblox::Network.new(:connection => connection)
|
51
52
|
network.network = "10.20.30.0/24"
|
52
53
|
network.extensible_attributes = {"VLAN" => "my_vlan"}
|
53
54
|
network.auto_create_reversezone = true
|
data/lib/infoblox/client.rb
CHANGED
@@ -5,18 +5,18 @@ module Infoblox
|
|
5
5
|
# :password
|
6
6
|
# :host (host if infoblox appliance, including protocol)
|
7
7
|
def initialize(options={})
|
8
|
-
|
8
|
+
self.connection = Connection.new(options)
|
9
9
|
end
|
10
10
|
|
11
11
|
def all_hosts
|
12
|
-
Host.all
|
12
|
+
Host.all(connection)
|
13
13
|
end
|
14
14
|
|
15
15
|
##
|
16
16
|
# Find all host records by wildcard name.
|
17
17
|
#
|
18
18
|
def find_host_by_name(name)
|
19
|
-
Host.find(:"name~" => name)
|
19
|
+
Host.find(connection, :"name~" => name)
|
20
20
|
end
|
21
21
|
|
22
22
|
##
|
@@ -24,20 +24,24 @@ module Infoblox
|
|
24
24
|
# ex: find_ips('10.10.2') => [#<Infoblox::Ipv4addr>...]
|
25
25
|
#
|
26
26
|
def find_ips(ip_fragment)
|
27
|
-
Ipv4addr.find(:"ipv4addr~" => ip_fragment)
|
27
|
+
Ipv4addr.find(connection, :"ipv4addr~" => ip_fragment)
|
28
28
|
end
|
29
29
|
|
30
30
|
##
|
31
|
+
# Create a host record for the given IP address
|
31
32
|
# hostname : string
|
32
33
|
# ip : ipv4 string, i.e. "10.40.20.3"
|
33
34
|
def create_host(hostname, ip, dns=true)
|
34
|
-
host = Host.new(:name => hostname, :configure_for_dns => true)
|
35
|
+
host = Host.new(:name => hostname, :configure_for_dns => true, :connection => connection)
|
35
36
|
host.add_ipv4addr(ip)
|
36
37
|
host.create
|
37
38
|
end
|
38
39
|
|
40
|
+
##
|
41
|
+
# Remove all host entries for a given host
|
42
|
+
#
|
39
43
|
def delete_host(hostname)
|
40
|
-
if !(hosts = Host.find(:name => hostname)).empty?
|
44
|
+
if !(hosts = Host.find(connection, :name => hostname)).empty?
|
41
45
|
hosts.map(&:delete)
|
42
46
|
hosts
|
43
47
|
else
|
data/lib/infoblox/resource.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Infoblox
|
2
2
|
class Resource
|
3
|
-
attr_accessor :_ref
|
3
|
+
attr_accessor :_ref, :connection
|
4
4
|
|
5
5
|
def self.wapi_object(obj=nil)
|
6
6
|
obj.nil? ? @wapi_object : @wapi_object = obj
|
@@ -61,9 +61,9 @@ module Infoblox
|
|
61
61
|
##
|
62
62
|
# Return an array of all records for this resource.
|
63
63
|
#
|
64
|
-
def self.all
|
64
|
+
def self.all(connection)
|
65
65
|
JSON.parse(connection.get(resource_uri, default_params).body).map do |item|
|
66
|
-
new(item)
|
66
|
+
new(item.merge({:connection => connection}))
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
@@ -76,21 +76,13 @@ module Infoblox
|
|
76
76
|
# Example: filter resources by name.
|
77
77
|
# {"name~" => "foo.*bar"}
|
78
78
|
#
|
79
|
-
def self.find(params)
|
79
|
+
def self.find(connection, params)
|
80
80
|
params = default_params.merge(params)
|
81
81
|
JSON.parse(connection.get(resource_uri, params).body).map do |item|
|
82
|
-
new(item)
|
82
|
+
new(item.merge({:connection => connection}))
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
|
-
def self.connection
|
87
|
-
@@connection
|
88
|
-
end
|
89
|
-
|
90
|
-
def self.connection=(con)
|
91
|
-
@@connection = con
|
92
|
-
end
|
93
|
-
|
94
86
|
def self.resource_uri
|
95
87
|
BASE_PATH + self.wapi_object
|
96
88
|
end
|
@@ -102,7 +94,7 @@ module Infoblox
|
|
102
94
|
end
|
103
95
|
|
104
96
|
def post
|
105
|
-
self._ref = connection.post(resource_uri, remote_attribute_hash(write = true, post = true)).body
|
97
|
+
self._ref = unquote(connection.post(resource_uri, remote_attribute_hash(write = true, post = true)).body)
|
106
98
|
true
|
107
99
|
end
|
108
100
|
alias_method :create, :post
|
@@ -116,7 +108,8 @@ module Infoblox
|
|
116
108
|
end
|
117
109
|
|
118
110
|
def put
|
119
|
-
connection.put(resource_uri, remote_attribute_hash(write = true))
|
111
|
+
self._ref = unquote(connection.put(resource_uri, remote_attribute_hash(write = true)).body)
|
112
|
+
true
|
120
113
|
end
|
121
114
|
|
122
115
|
def resource_uri
|
@@ -138,10 +131,9 @@ module Infoblox
|
|
138
131
|
end
|
139
132
|
|
140
133
|
private
|
141
|
-
|
142
|
-
|
143
|
-
self.class.connection
|
134
|
+
def unquote(str)
|
135
|
+
str.gsub(/\A['"]+|['"]+\Z/, "")
|
144
136
|
end
|
145
|
-
|
146
137
|
end
|
138
|
+
|
147
139
|
end
|
data/lib/infoblox/version.rb
CHANGED
data/spec/host_spec.rb
CHANGED
@@ -17,13 +17,13 @@ describe Infoblox::Host, "#add_ipv4addr" do
|
|
17
17
|
:ipv4addrs => [{:ipv4addr => "10.10.10.10"}],
|
18
18
|
:name => "test-server.test.ing",
|
19
19
|
:configure_for_dns => nil,
|
20
|
-
:extensible_attributes => nil}).and_return(HostResponse.new("hey"))
|
20
|
+
:extensible_attributes => nil}).and_return(HostResponse.new("\"hey\""))
|
21
21
|
|
22
|
-
Infoblox::Host.connection
|
23
|
-
h = Infoblox::Host.new
|
22
|
+
h = Infoblox::Host.new(:connection => conn)
|
24
23
|
h.add_ipv4addr("10.10.10.10")
|
25
24
|
h.name = "test-server.test.ing"
|
26
25
|
h.post
|
26
|
+
h._ref.should eq("hey")
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
data/spec/resource_spec.rb
CHANGED
@@ -32,30 +32,28 @@ describe Infoblox::Resource, "#add_ipv4addr" do
|
|
32
32
|
conn = double
|
33
33
|
uri = Infoblox::BASE_PATH + "foo:animal"
|
34
34
|
allow(conn).to receive(:get).with(uri, {:_return_fields => "name,junction"}).and_return(FooResponse.new("[]"))
|
35
|
-
FooResource.
|
36
|
-
FooResource.all.should eq([])
|
35
|
+
FooResource.all(conn).should eq([])
|
37
36
|
end
|
38
37
|
|
39
38
|
it "should put with the right attributes" do
|
40
39
|
conn = double
|
41
40
|
uri = Infoblox::BASE_PATH + "abcd"
|
42
|
-
allow(conn).to receive(:put).with(uri, {:name => "jerry", :junction => "32", :do_it => false}).and_return(FooResponse.new("
|
43
|
-
FooResource.connection
|
44
|
-
f = FooResource.new
|
41
|
+
allow(conn).to receive(:put).with(uri, {:name => "jerry", :junction => "32", :do_it => false}).and_return(FooResponse.new("\"foobar\""))
|
42
|
+
f = FooResource.new(:connection => conn)
|
45
43
|
f._ref = "abcd"
|
46
44
|
f.do_it = false
|
47
45
|
f.junction = "32"
|
48
46
|
f.name = "jerry"
|
49
47
|
f.sect = :fulburns
|
50
48
|
f.put
|
49
|
+
f._ref.should eq("foobar")
|
51
50
|
end
|
52
51
|
|
53
52
|
it "should post with the right attributes" do
|
54
53
|
conn = double
|
55
54
|
uri = Infoblox::BASE_PATH + "foo:animal"
|
56
|
-
allow(conn).to receive(:post).with(uri, {:name => "jerry", :junction => "32", :do_it => false, :sect => :fulburns}).and_return(FooResponse.new("abcdefg"))
|
57
|
-
FooResource.connection
|
58
|
-
f = FooResource.new
|
55
|
+
allow(conn).to receive(:post).with(uri, {:name => "jerry", :junction => "32", :do_it => false, :sect => :fulburns}).and_return(FooResponse.new("\"abcdefg\""))
|
56
|
+
f = FooResource.new(:connection => conn)
|
59
57
|
f.do_it = false
|
60
58
|
f.junction = "32"
|
61
59
|
f.name = "jerry"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: infoblox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
12
|
+
date: 2013-08-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|