ultradns_updater 0.0.15

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.
@@ -0,0 +1,25 @@
1
+ # Copyright 2012 NeuStar, Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+
16
+ module UltraDNSUpdater::Preconditions
17
+
18
+ def precondition
19
+ self
20
+ end
21
+
22
+ def not_empty(arg, msg = "Argument may not empty")
23
+ raise msg if arg == nil || arg == ''
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ # Copyright 2012 NeuStar, Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module UltraDNSUpdater::Strategies
16
+ class Configured < UpdateStrategy
17
+ def update(strategy_config)
18
+ hostname = strategy_config[:name]
19
+ precondition.not_empty(hostname)
20
+
21
+ ip = iface_ip(strategy_config)
22
+ precondition.not_empty(ip)
23
+
24
+ strategy_config[:logger].debug("Mapping #{hostname} to #{ip}")
25
+
26
+ ultradns.create_or_update_a(hostname, ip)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,38 @@
1
+ # Copyright 2012 NeuStar, Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module UltraDNSUpdater::Strategies
16
+ class Ec2 < UpdateStrategy
17
+
18
+ def update(strategy_config)
19
+ ec2 = Ec2UltraDNSUpdater::Ec2.new(strategy_config)
20
+ name_tag_value = ec2.get_name_tag
21
+
22
+ result = false
23
+ if ec2.get_instance_public_hostname != ''
24
+ result = ultradns.create_or_update_cname(name_tag_value, ec2.get_instance_public_hostname)
25
+ else
26
+ ip = iface_ip(strategy_config)
27
+
28
+ unless ip.nil?
29
+ # try using an ip that reaches the internet
30
+ result = ultradns.create_or_update_a(name_tag_value, ip)
31
+ end
32
+ end
33
+
34
+ result ? name_tag_value : nil
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,24 @@
1
+ # Copyright 2012 NeuStar, Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'socket'
16
+ require 'ultradns_updater/strategies/configured'
17
+
18
+ module UltraDNSUpdater::Strategies
19
+ class Hostname < Configured
20
+ def update(strategy_config)
21
+ super(strategy_config.merge({:name => Socket::gethostname()}))
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,39 @@
1
+ # Copyright 2012 NeuStar, Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ class UltraDNSUpdater::Strategies::UpdateStrategy
16
+ include UltraDNSUpdater::Preconditions
17
+
18
+ def initialize(ultradns)
19
+ @ultradns = ultradns
20
+ end
21
+
22
+ # update ultradns based on the configuration provided
23
+ # returns: the hostname applied or else nil
24
+ def update(strategy_config); end
25
+
26
+ def ultradns
27
+ @ultradns
28
+ end
29
+
30
+ def iface_ip(strategy_config)
31
+ ip = nil
32
+ if strategy_config[:iface] == 'auto'
33
+ ip = UltraDNSUpdater::IpInfo.local_ipv4
34
+ else
35
+ ip = UltraDNSUpdater::IpInfo.ipv4_for_iface(strategy_config[:iface])
36
+ end
37
+ ip
38
+ end
39
+ end
@@ -0,0 +1,39 @@
1
+ # Copyright 2012 NeuStar, Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ #fwd decl
16
+ module UltraDNSUpdater::Strategies; end
17
+
18
+ require 'ultradns_updater/strategies/update_strategy'
19
+ require 'ultradns_updater/strategies/ec2'
20
+ require 'ultradns_updater/strategies/configured'
21
+ require 'ultradns_updater/strategies/hostname'
22
+
23
+ module UltraDNSUpdater::Strategies
24
+
25
+ def self.strategy(strategy_name)
26
+ case strategy_name
27
+ when :ec2
28
+ UltraDNSUpdater::Strategies::Ec2
29
+ when :hostname
30
+ UltraDNSUpdater::Strategies::Hostname
31
+ when :configured
32
+ UltraDNSUpdater::Strategies::Configured
33
+ else
34
+ raise "No strategy found for: #{strategy_name}"
35
+ end
36
+ end
37
+
38
+ end
39
+
@@ -0,0 +1,218 @@
1
+ # Copyright 2012 NeuStar, Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+
16
+ class UltraDNSUpdater::UltraDNS
17
+ include UltraDNSUpdater::Preconditions
18
+
19
+ ULTRADNS_WSDL_URL = "http://ultra-api.ultradns.com:8008/UltraDNS_WS/v01?wsdl"
20
+ DEFAULT_TTL = 60
21
+
22
+ module TYPE
23
+ ANY = ALL = 0
24
+ A = 1
25
+ CNAME = 5
26
+ AAAA = 28
27
+ end
28
+
29
+ def initialize(opts = {})
30
+ @logger = opts[:logger] || Logger.new(STDOUT)
31
+
32
+ Savon.configure do |config|
33
+ config.logger = @logger
34
+ config.raise_errors = false
35
+ end
36
+ # also configure HTTPI
37
+ HTTPI.logger = @logger
38
+
39
+ @username = opts[:username]
40
+ @password = opts[:password]
41
+ @zone = fix_zone_name(opts[:zone] || '')
42
+
43
+ precondition.not_empty(@username)
44
+ precondition.not_empty(@password)
45
+ precondition.not_empty(@zone)
46
+ end
47
+
48
+
49
+ def get_cname_guid(cname)
50
+ get_guid_by_label_and_type(cname, TYPE::CNAME)
51
+ end
52
+
53
+ def create_or_update_cname(cname, to_hostname)
54
+ create_or_update_info1(TYPE::CNAME, cname, fix_zone_name(to_hostname))
55
+ end
56
+
57
+ def get_a_guid(node_label)
58
+ get_guid_by_label_and_type(node_label, TYPE::A)
59
+ end
60
+
61
+ def create_or_update_a(node_label, to_ip)
62
+ create_or_update_info1(TYPE::A, node_label, to_ip)
63
+ end
64
+
65
+ def network_status?
66
+ resp = client.request(:get_neustar_network_status)
67
+ @logger.debug(resp)
68
+ log_error(resp)
69
+ resp.success?
70
+ end
71
+
72
+ def delete_record_by_guid(guid)
73
+ resp = client.request(:delete_resource_record) {
74
+ soap.body do |xml|
75
+ xml.transactionID()
76
+ xml.guid(guid)
77
+ end
78
+ }
79
+ log_error(resp)
80
+ resp.success?
81
+ end
82
+
83
+
84
+ def get_records_by_label(label)
85
+ get_record_by_label_and_type(label, TYPE::ALL)
86
+ end
87
+
88
+ def delete_record_by_label(label)
89
+ recs = get_records_by_label(label)
90
+ unless recs.nil?
91
+ guid = (recs[:resource_record][:@guid] rescue '') || ''
92
+ delete_record_by_guid(guid) unless guid == ''
93
+ end
94
+ end
95
+
96
+ def delete_record_by_label_not_matching_type(label, type)
97
+ recs = get_records_by_label(label)
98
+ unless recs.nil?
99
+ guid = (recs[:resource_record][:@guid] rescue '') || ''
100
+ rec_type = (recs[:resource_record][:@type] rescue '') || ''
101
+ if guid != '' && rec_type != type
102
+ delete_record_by_guid(guid)
103
+ end
104
+ end
105
+ end
106
+
107
+ #############
108
+
109
+ def create_or_update_info1(type, label, to_value)
110
+ precondition.not_empty(label)
111
+ precondition.not_empty(to_value)
112
+
113
+ zone = @zone
114
+ fixed_label = fix_zone_name(label)
115
+
116
+ guid = get_guid_by_label_and_type(label, type) || ''
117
+
118
+ change_method = :create_resource_record
119
+ record_opts = {'Type' => type, 'DName' => fixed_label, 'TTL' => DEFAULT_TTL}
120
+
121
+ if guid != ''
122
+ @logger.info "Updating Record Mapping: #{fixed_label} => #{to_value}"
123
+ change_method = :update_resource_record # update it
124
+ record_opts['Guid'] = guid;
125
+ else
126
+ # make sure there isn't another record at this label of a different type
127
+ delete_record_by_label_not_matching_type(label, type)
128
+ @logger.info "Creating Record Mapping: #{fixed_label} => #{to_value}"
129
+ record_opts['ZoneName'] = zone;
130
+ end
131
+
132
+ begin
133
+ resp = client.request(change_method) {
134
+ ns = ''
135
+ soap.namespaces.each do |k, v|
136
+ ns = k.gsub(/xmlns:/,'') if v =~ /schema\.ultraservice\.neustar\.com/
137
+ end
138
+ soap.body do |xml|
139
+ xml.transactionID()
140
+ xml.resourceRecord(record_opts) {
141
+ xml.tag!("#{ns}:InfoValues", {"Info1Value" => to_value})
142
+ }
143
+ end
144
+ }
145
+
146
+ log_error(resp)
147
+ resp.success?
148
+ rescue
149
+ false
150
+ end
151
+ end
152
+
153
+ def get_guid_by_label_and_type(label, type)
154
+ zone = @zone
155
+ fixed_label = fix_zone_name(label)
156
+
157
+ guids_resp = client.request(:get_resource_record_guid_list) {
158
+ soap.body do |xml|
159
+ xml.resourceRecord({
160
+ "ZoneName" => zone, 'Type' => type, 'DName' => fixed_label
161
+ })
162
+ end
163
+ }
164
+
165
+ log_error(guids_resp)
166
+
167
+ begin
168
+ guid = guids_resp[:get_resource_record_guid_list_response][:resource_record_guid_list][:guid]
169
+ @logger.debug("guid found: #{guid}")
170
+ rescue
171
+ @logger.debug("guid not found")
172
+ end
173
+ guid
174
+ end
175
+
176
+
177
+ def get_record_by_label_and_type(label, type)
178
+ zone = @zone
179
+ fixed_label = fix_zone_name(label)
180
+
181
+ begin
182
+ records_resp = client.request('getResourceRecordsOfDNameByType'.snakecase.to_sym) {
183
+ soap.body do |xml|
184
+ xml.zoneName(zone)
185
+ xml.rrType(type)
186
+ xml.hostName(fixed_label)
187
+ end
188
+ }
189
+ log_error(records_resp)
190
+
191
+ records_resp.to_hash[:get_resource_records_of_d_name_by_type_response][:resource_record_list]
192
+ rescue
193
+ @logger.debug("Resource Record list is empty")
194
+ end
195
+ end
196
+
197
+
198
+ def client
199
+ soap_username = @username
200
+ soap_password = @password
201
+
202
+ @client ||= Savon::Client.new do
203
+ wsdl.document = ULTRADNS_WSDL_URL
204
+ wsse.credentials soap_username, soap_password
205
+ end
206
+
207
+ @client
208
+ end
209
+
210
+ def log_error(response)
211
+ @logger.error {response.to_xml} unless response.success?
212
+ end
213
+
214
+ # ..Must end with a &apos;.&apos;
215
+ def fix_zone_name(name)
216
+ (name != nil && name.strip != '' && name[-1] != '.') ? "#{name}." : name
217
+ end
218
+ end
@@ -0,0 +1,17 @@
1
+ # Copyright 2012 NeuStar, Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module UltraDNSUpdater
16
+ VERSION = "0.0.15"
17
+ end
@@ -0,0 +1,32 @@
1
+ # Copyright 2012 NeuStar, Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'rubygems'
16
+
17
+ require 'aws-sdk'
18
+ require 'savon'
19
+ require 'net/http'
20
+
21
+
22
+ module UltraDNSUpdater
23
+
24
+ end
25
+
26
+ require "ultradns_updater/preconditions"
27
+ require "ultradns_updater/strategies"
28
+ require "ultradns_updater/cli"
29
+ require "ultradns_updater/ec2"
30
+ require "ultradns_updater/ip_info"
31
+ require "ultradns_updater/ultradns"
32
+ require "ultradns_updater/version"
@@ -0,0 +1,38 @@
1
+ # Copyright 2012 NeuStar, Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'spec_helper'
16
+ require 'fakeweb'
17
+ require 'ostruct'
18
+
19
+
20
+ describe UltraDNSUpdater::Strategies::Configured do
21
+ it "should update ultradns with the configure name and ip address" do
22
+ begin
23
+ name = 'test.biz'
24
+ ip_addr = '192.168.1.1'
25
+
26
+ ultradns = Object.new
27
+ ultradns.should_receive(:create_or_update_a).with(name, ip_addr)
28
+ configured_strategy = UltraDNSUpdater::Strategies::Configured.new(ultradns)
29
+ configured_strategy.stub(:iface_ip).and_return(ip_addr)
30
+
31
+ configured_strategy.update({:iface => 'eth0', :name => name})
32
+
33
+ ensure
34
+
35
+ end
36
+ end
37
+ end
38
+
@@ -0,0 +1,74 @@
1
+ # Copyright 2012 NeuStar, Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'spec_helper'
16
+ require 'fakeweb'
17
+ require 'ostruct'
18
+
19
+ describe UltraDNSUpdater::Ec2 do
20
+
21
+ it "should return the instance id" do
22
+ begin
23
+ fake_id = "i-ffffffff"
24
+ FakeWeb.register_uri(:get, UltraDNSUpdater::Ec2::EC2_META_DATA_URL + "/instance-id", :body => fake_id)
25
+ ec2 = UltraDNSUpdater::Ec2.new
26
+ ec2.get_instance_id.should == fake_id
27
+ ec2.get_instance_id.should == fake_id # check memoize
28
+ ensure
29
+ FakeWeb.clean_registry
30
+ end
31
+ end
32
+
33
+ it "should return the public hostname" do
34
+ begin
35
+ fake_name = "ec2-111-111-111-111.compute-1.amazonaws.com"
36
+ FakeWeb.register_uri(:get, UltraDNSUpdater::Ec2::EC2_META_DATA_URL + "/public-hostname", :body => fake_name)
37
+ ec2 = UltraDNSUpdater::Ec2.new
38
+ ec2.get_instance_public_hostname.should == fake_name
39
+ ec2.get_instance_public_hostname.should == fake_name # check memoize
40
+ ensure
41
+ FakeWeb.clean_registry
42
+ end
43
+ end
44
+
45
+ it "should return the dns tag name" do
46
+ begin
47
+ tag = OpenStruct.new
48
+ tag.name = "Testname" # it expects "Name", but we configure it explictly below as an example
49
+ tag.value = "tag.test.biz"
50
+ tag.resource = 'i-eeeeee'
51
+
52
+ tags = Object.new
53
+ tags.stub(:filter).and_return([tag])
54
+
55
+ # AWS::EC2.any_instance.stub(:tags).and_return(tags)
56
+
57
+
58
+ fake_name = "ec2-111-111-111-111.compute-1.amazonaws.com"
59
+ FakeWeb.register_uri(:get, UltraDNSUpdater::Ec2::EC2_META_DATA_URL + "/public-hostname", :body => fake_name)
60
+ FakeWeb.register_uri(:get, UltraDNSUpdater::Ec2::EC2_META_DATA_URL + "/instance-id", :body => tag.resource)
61
+
62
+ ec2 = UltraDNSUpdater::Ec2.new({:access_key_id => 123, :secret_access_key => 'abc', :name_tag => 'Testname'})
63
+ ec2_stub = Object.new
64
+ ec2_stub.stub(:tags).and_return(tags)
65
+ ec2.stub(:ec2).and_return(ec2_stub)
66
+ ec2.get_name_tag.should == tag.value
67
+
68
+ ensure
69
+ #AWS::EC2.any_instance.unstub(:tags)
70
+ FakeWeb.clean_registry
71
+ end
72
+ end
73
+ end
74
+
@@ -0,0 +1,39 @@
1
+ # Copyright 2012 NeuStar, Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'spec_helper'
16
+ require 'fakeweb'
17
+ require 'ostruct'
18
+
19
+
20
+ describe UltraDNSUpdater::Strategies::Hostname do
21
+ it "should return the hostname and ip address" do
22
+ begin
23
+ hostname = 'test.biz'
24
+ ip_addr = '192.168.1.1'
25
+
26
+ ultradns = Object.new
27
+ ultradns.should_receive(:create_or_update_a).with(hostname, ip_addr)
28
+ hostname_strategy = UltraDNSUpdater::Strategies::Hostname.new(ultradns)
29
+ hostname_strategy.stub(:iface_ip).and_return(ip_addr)
30
+ Socket.stub(:gethostname).and_return(hostname)
31
+ Socket.gethostname.should == hostname
32
+ hostname_strategy.update({:iface => 'eth0'})
33
+
34
+ ensure
35
+ Socket.unstub(:gethostname)
36
+ end
37
+ end
38
+ end
39
+
@@ -0,0 +1,47 @@
1
+ # Copyright 2012 NeuStar, Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'spec_helper'
16
+ require 'fakeweb'
17
+ require 'yaml'
18
+
19
+ describe UltraDNSUpdater::IpInfo do
20
+
21
+ it "should get an ipv4 address" do
22
+ UltraDNSUpdater::IpInfo.local_ipv4().should_not == ''
23
+ UltraDNSUpdater::IpInfo.local_ipv4().should match(/\d+\.\d+\.\d+\.\d+/)
24
+ end
25
+
26
+ it "should get an ipv4 address from ifconfig" do
27
+
28
+ iface = "eth0"
29
+ if RUBY_PLATFORM =~ /darwin/
30
+ iface = "en1"
31
+ end
32
+
33
+ UltraDNSUpdater::IpInfo.ipv4_for_iface(iface).should_not == ''
34
+ UltraDNSUpdater::IpInfo.ipv4_for_iface(iface).should match(/\d+\.\d+\.\d+\.\d+/)
35
+ end
36
+
37
+ it "should get an ipv6 address from ifconfig" do
38
+
39
+ iface = "eth0" # probably have eth0 on linux..
40
+ if RUBY_PLATFORM =~ /darwin/
41
+ iface = "en1"
42
+ end
43
+
44
+ UltraDNSUpdater::IpInfo.ipv6_for_iface(iface).should_not == ''
45
+ UltraDNSUpdater::IpInfo.ipv6_for_iface(iface).should match(/.*:.*:.*:.*:.*:/)
46
+ end
47
+ end