ultradns_updater 0.0.19 → 0.0.20

Sign up to get free protection for your applications and to get access to all the features.
data/apiary.apib ADDED
@@ -0,0 +1,34 @@
1
+ HOST: http://www.google.com/
2
+
3
+ --- Sample API v2 ---
4
+ ---
5
+ Welcome to the our sample API documentation. All comments can be written in (support [Markdown](http://daringfireball.net/projects/markdown/syntax) syntax)
6
+ ---
7
+
8
+ --
9
+ Shopping Cart Resources
10
+ The following is a section of resources related to the shopping cart
11
+ --
12
+ List products added into your shopping-cart. (comment block again in Markdown)
13
+ GET /shopping-cart
14
+ < 200
15
+ < Content-Type: application/json
16
+ { "items": [
17
+ { "url": "/shopping-cart/1", "product":"2ZY48XPZ", "quantity": 1, "name": "New socks", "price": 1.25 }
18
+ ] }
19
+
20
+ Save new products in your shopping cart
21
+ POST /shopping-cart
22
+ > Content-Type: application/json
23
+ { "product":"1AB23ORM", "quantity": 2 }
24
+ < 201
25
+ < Content-Type: application/json
26
+ { "status": "created", "url": "/shopping-cart/2" }
27
+
28
+
29
+ -- Payment Resources --
30
+ This resource allows you to submit payment information to process your *shopping cart* items
31
+ POST /payment
32
+ { "cc": "12345678900", "cvc": "123", "expiry": "0112" }
33
+ < 200
34
+ { "receipt": "/payment/receipt/1" }
@@ -1,11 +1,15 @@
1
1
  ---
2
2
  update_strategy:
3
- use: 'ec2' # choose strategy to use
3
+ use: 'ec2' # choose strategy to use: ec2, hostname, configured, or more than one to attempt: ['ec2', 'openstack']
4
+ # strategies follow:
5
+ # Other strategies defined below:
4
6
  ec2: # read from ec2
5
7
  access_key_id : 'ACCESS KEY ID'
6
8
  secret_access_key : 'ACCESS KEY'
7
9
  name_tag : 'Name' # tag to use in AWS for the DNS CNAME or A & hostname (fqdn)
8
10
  iface: 'auto' # for VPC, the interface to use if no public hostname is available
11
+ openstack:
12
+ dhcp_domain: '.novalocal'
9
13
  hostname: # read from the hostname (fqdn)
10
14
  iface: 'eth0' # interface to use to use the IP to map to the hostname
11
15
  # 'auto' is also possible pick the interface that has connectivity
@@ -22,11 +22,13 @@ class UltraDNSUpdater::CLI
22
22
  def self.run
23
23
  opts = parse(ARGV)
24
24
 
25
- strategy_name = opts[:force_strategy] || opts[:update_strategy][:use]
26
- strategy_klass = UltraDNSUpdater::Strategies.strategy(strategy_name)
27
-
28
- ultradns = UltraDNSUpdater::UltraDNS.new(opts[:ultradns])
29
- hostname = strategy_klass.new(ultradns).update(opts[:update_strategy][strategy_name.to_sym].merge({:logger => @logger}))
25
+ if opts[:force_strategy]
26
+ opts[:update_strategy][:use] = opts[:force_strategy]
27
+ end
28
+
29
+ ultradns = UltraDNSUpdater::UltraDNS.new(opts[:ultradns])
30
+ strategy_klass = UltraDNSUpdater::Strategies.strategy(opts[:update_strategy][:use])
31
+ hostname = strategy_klass.new(ultradns, opts[:update_strategy], @logger).update()
30
32
 
31
33
  if hostname.nil?
32
34
  error_text = "Error Creating or Updating CNAME for hostname: #{hostname} using: #{strategy_name}"
@@ -47,6 +47,15 @@ class UltraDNSUpdater::Ec2
47
47
  @public_hostname
48
48
  end
49
49
 
50
+ def get_instance_public_ipv4
51
+ @public_ipv4 ||= begin
52
+ response = HTTPI.get(URI("#{EC2_META_DATA_URL}/public-ipv4").to_s)
53
+ response.code == 200 ? response.body : ''
54
+ end
55
+ @logger.debug("Public IPv4 = #{@public_ipv4}")
56
+ @public_ipv4
57
+ end
58
+
50
59
  def get_name_tag
51
60
  dns_cname = ''
52
61
  ec2.tags.filter('resource-id', get_instance_id()).each do |tag|
@@ -14,8 +14,8 @@
14
14
 
15
15
  module UltraDNSUpdater::Strategies
16
16
  class Configured < UpdateStrategy
17
- def update(strategy_config)
18
- hostname = strategy_config[:name]
17
+ def update()
18
+ hostname = strategy_config()[:name]
19
19
  precondition.not_empty(hostname)
20
20
 
21
21
  ip = iface_ip(strategy_config)
@@ -15,7 +15,7 @@
15
15
  module UltraDNSUpdater::Strategies
16
16
  class Ec2 < UpdateStrategy
17
17
 
18
- def update(strategy_config)
18
+ def update()
19
19
  ec2 = UltraDNSUpdater::Ec2.new(strategy_config)
20
20
  name_tag_value = ec2.get_name_tag
21
21
 
@@ -17,8 +17,10 @@ require 'ultradns_updater/strategies/configured'
17
17
 
18
18
  module UltraDNSUpdater::Strategies
19
19
  class Hostname < Configured
20
- def update(strategy_config)
21
- super(strategy_config.merge({:name => Socket::gethostname()}))
20
+
21
+ def strategy_config
22
+ super().merge({:name => Socket::gethostname()})
22
23
  end
24
+
23
25
  end
24
26
  end
@@ -0,0 +1,50 @@
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 Multiple < UpdateStrategy
17
+ def self.factory(strategies)
18
+ clazz = Class.new(UltraDNSUpdater::Strategies::Multiple)
19
+ clazz.send(:define_method, :strategies) {strategies}
20
+ clazz
21
+ end
22
+
23
+ def initialize(ultradns, strategy_section, logger = ::Logger.new(STDOUT))
24
+ super(ultradns, strategy_section, logger)
25
+ @strategy_instances = []
26
+ strategies.each do |strategy|
27
+ @strategy_instances << strategy.new(ultradns, strategy_section, logger)
28
+ end
29
+ end
30
+
31
+ # should be overwritten
32
+ def strategies; []; end
33
+
34
+ def update()
35
+ @strategy_instances.each do |strategy|
36
+ begin
37
+ strategy_config[:logger].info("Trying strategy #{strategy.class.name}") if strategy_config[:logger]
38
+ result = strategy.update()
39
+ return result if result
40
+ rescue
41
+ # ignore, try next
42
+ end
43
+ end
44
+ nil
45
+ end
46
+
47
+ end
48
+ end
49
+
50
+
@@ -0,0 +1,37 @@
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 Openstack < UpdateStrategy
17
+
18
+ def update()
19
+ opts = {:access_key_id => nil,
20
+ :secret_access_key => nil,
21
+ :logger => strategy_config()[:logger]
22
+ }
23
+ ec2 = UltraDNSUpdater::Ec2.new(opts)
24
+
25
+ dhcp_domain = strategy_config()[:dhcp_domain]
26
+ name_value = ec2.get_instance_public_hostname.gsub(/#{dhcp_domain}/, '')
27
+ ip = ec2.get_instance_public_ipv4
28
+
29
+ result = nil
30
+ if name_value && ip && ultradns.create_or_update_a(name_value, ip)
31
+ result = name_value
32
+ end
33
+ result
34
+ end
35
+
36
+ end
37
+ end
@@ -15,18 +15,28 @@
15
15
  class UltraDNSUpdater::Strategies::UpdateStrategy
16
16
  include UltraDNSUpdater::Preconditions
17
17
 
18
- def initialize(ultradns)
18
+ def initialize(ultradns, strategy_section, logger = ::Logger.new(STDOUT))
19
19
  @ultradns = ultradns
20
+ @strategy_section = strategy_section
21
+ @logger = logger
20
22
  end
21
23
 
22
24
  # update ultradns based on the configuration provided
23
25
  # returns: the hostname applied or else nil
24
- def update(strategy_config); end
26
+ def update(); end
25
27
 
26
28
  def ultradns
27
29
  @ultradns
28
30
  end
29
31
 
32
+ def strategy_to_use
33
+ @strategy_section[:use]
34
+ end
35
+
36
+ def strategy_config
37
+ @strategy_section[strategy_to_use.to_sym].merge({:logger => @logger}) rescue nil
38
+ end
39
+
30
40
  def iface_ip(strategy_config)
31
41
  ip = nil
32
42
  if strategy_config[:iface] == 'auto'
@@ -17,22 +17,34 @@ module UltraDNSUpdater::Strategies; end
17
17
 
18
18
  require 'ultradns_updater/strategies/update_strategy'
19
19
  require 'ultradns_updater/strategies/ec2'
20
+ require 'ultradns_updater/strategies/openstack'
21
+ require 'ultradns_updater/strategies/multiple'
20
22
  require 'ultradns_updater/strategies/configured'
21
23
  require 'ultradns_updater/strategies/hostname'
22
24
 
23
25
  module UltraDNSUpdater::Strategies
24
26
 
25
27
  def self.strategy(strategy_name)
26
- strategy_sym = strategy_name.to_sym rescue nil
27
- case strategy_sym
28
- when :ec2
29
- UltraDNSUpdater::Strategies::Ec2
30
- when :hostname
31
- UltraDNSUpdater::Strategies::Hostname
32
- when :configured
33
- UltraDNSUpdater::Strategies::Configured
28
+ if strategy_name.kind_of?(Array)
29
+ strategies = []
30
+ strategy_name.each do |strategy_item|
31
+ strategies << strategy(strategy_item)
32
+ end
33
+ UltraDNSUpdater::Strategies::Multiple.factory(strategies)
34
34
  else
35
- raise "No strategy found for: #{strategy_name}"
35
+ strategy_sym = strategy_name.to_sym rescue nil
36
+ case strategy_sym
37
+ when :ec2
38
+ UltraDNSUpdater::Strategies::Ec2
39
+ when :openstack
40
+ UltraDNSUpdater::Strategies::Openstack
41
+ when :hostname
42
+ UltraDNSUpdater::Strategies::Hostname
43
+ when :configured
44
+ UltraDNSUpdater::Strategies::Configured
45
+ else
46
+ raise "No strategy found for: #{strategy_name}"
47
+ end
36
48
  end
37
49
  end
38
50
 
@@ -13,5 +13,5 @@
13
13
  # limitations under the License.
14
14
 
15
15
  module UltraDNSUpdater
16
- VERSION = "0.0.19"
16
+ VERSION = "0.0.20"
17
17
  end
@@ -25,10 +25,11 @@ describe UltraDNSUpdater::Strategies::Configured do
25
25
 
26
26
  ultradns = Object.new
27
27
  ultradns.should_receive(:create_or_update_a).with(name, ip_addr)
28
- configured_strategy = UltraDNSUpdater::Strategies::Configured.new(ultradns)
28
+ configured_strategy = UltraDNSUpdater::Strategies::Configured.new(ultradns,
29
+ {:use => 'conf', :conf => {:iface => 'eth0', :name => name}})
29
30
  configured_strategy.stub(:iface_ip).and_return(ip_addr)
30
31
 
31
- configured_strategy.update({:iface => 'eth0', :name => name})
32
+ configured_strategy.update()
32
33
 
33
34
  ensure
34
35
 
@@ -25,12 +25,12 @@ describe UltraDNSUpdater::Strategies::Hostname do
25
25
 
26
26
  ultradns = Object.new
27
27
  ultradns.should_receive(:create_or_update_a).with(hostname, ip_addr)
28
- hostname_strategy = UltraDNSUpdater::Strategies::Hostname.new(ultradns)
28
+ hostname_strategy = UltraDNSUpdater::Strategies::Hostname.new(ultradns,
29
+ {:use => 'host', :host => {:iface => 'eth0'}})
29
30
  hostname_strategy.stub(:iface_ip).and_return(ip_addr)
30
31
  Socket.stub(:gethostname).and_return(hostname)
31
32
  Socket.gethostname.should == hostname
32
- hostname_strategy.update({:iface => 'eth0'})
33
-
33
+ hostname_strategy.update()
34
34
  ensure
35
35
  Socket.unstub(:gethostname)
36
36
  end
@@ -27,9 +27,9 @@ describe UltraDNSUpdater::IpInfo do
27
27
 
28
28
  iface = "eth0"
29
29
  if RUBY_PLATFORM =~ /darwin/
30
- iface = "en1"
30
+ iface = "en0"
31
31
  end
32
-
32
+
33
33
  UltraDNSUpdater::IpInfo.ipv4_for_iface(iface).should_not == ''
34
34
  UltraDNSUpdater::IpInfo.ipv4_for_iface(iface).should match(/\d+\.\d+\.\d+\.\d+/)
35
35
  end
@@ -38,7 +38,7 @@ describe UltraDNSUpdater::IpInfo do
38
38
 
39
39
  iface = "eth0" # probably have eth0 on linux..
40
40
  if RUBY_PLATFORM =~ /darwin/
41
- iface = "en1"
41
+ iface = "en0"
42
42
  end
43
43
 
44
44
  UltraDNSUpdater::IpInfo.ipv6_for_iface(iface).should_not == ''
@@ -0,0 +1,49 @@
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::Multiple do
21
+ it "should try multiple strategies" do
22
+ begin
23
+ fake_name = "openstack-iad01-az02.neustar.biz"
24
+ FakeWeb.register_uri(:get, UltraDNSUpdater::Ec2::EC2_META_DATA_URL + "/public-hostname", :body => fake_name)
25
+ fake_ipv4 = "10.1.2.3"
26
+ FakeWeb.register_uri(:get, UltraDNSUpdater::Ec2::EC2_META_DATA_URL + "/public-ipv4", :body => fake_ipv4)
27
+
28
+
29
+ ultradns = Object.new
30
+ ultradns.should_receive(:create_or_update_a).with(fake_name, fake_ipv4).and_return()
31
+
32
+ clazz_bad = Class.new(UltraDNSUpdater::Strategies::UpdateStrategy) do
33
+ def update()
34
+ raise "Fake Error"
35
+ end
36
+ end
37
+
38
+ multiple_factory = UltraDNSUpdater::Strategies::Multiple.factory(
39
+ [clazz_bad, UltraDNSUpdater::Strategies::Openstack])
40
+
41
+ openstack_strategy = multiple_factory.new(ultradns,
42
+ { :use => 'conf', :conf => {} }
43
+ )
44
+ openstack_strategy.update().should == fake_name
45
+ ensure
46
+ FakeWeb.clean_registry
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,42 @@
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::Openstack do
21
+ it "should update ultradns openstack information" do
22
+ begin
23
+ dhcp_domain = '.novalocal'
24
+ fake_name = "openstack-iad01-az02.neustar.biz"
25
+ FakeWeb.register_uri(:get, UltraDNSUpdater::Ec2::EC2_META_DATA_URL + "/public-hostname",
26
+ :body => (fake_name + dhcp_domain))
27
+ fake_ipv4 = "10.1.2.3"
28
+ FakeWeb.register_uri(:get, UltraDNSUpdater::Ec2::EC2_META_DATA_URL + "/public-ipv4", :body => fake_ipv4)
29
+
30
+
31
+ ultradns = Object.new
32
+ ultradns.should_receive(:create_or_update_a).with(fake_name, fake_ipv4).and_return()
33
+ openstack_strategy = UltraDNSUpdater::Strategies::Openstack.new(ultradns,
34
+ { :use => 'conf', :conf => {:dhcp_domain => dhcp_domain } }
35
+ )
36
+ openstack_strategy.update().should == fake_name
37
+ ensure
38
+ FakeWeb.clean_registry
39
+ end
40
+ end
41
+ end
42
+
@@ -27,5 +27,13 @@ describe UltraDNSUpdater::Strategies do
27
27
  expect { UltraDNSUpdater::Strategies.strategy(nil) }.to raise_error(RuntimeError)
28
28
  expect { UltraDNSUpdater::Strategies.strategy(:blah) }.to raise_error(RuntimeError)
29
29
  end
30
+
31
+ it "should support multiple strategies" do
32
+ UltraDNSUpdater::Strategies.strategy(['ec2', 'openstack']).should_not == nil
33
+ multiple = UltraDNSUpdater::Strategies.strategy(['ec2', 'openstack'])
34
+ multiple.new(nil, nil).strategies.should ==
35
+ [UltraDNSUpdater::Strategies::Ec2, UltraDNSUpdater::Strategies::Openstack]
36
+ end
37
+
30
38
  end
31
39
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ultradns_updater
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.19
4
+ version: 0.0.20
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-05 00:00:00.000000000 Z
12
+ date: 2012-11-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk
16
- requirement: &2156070900 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,32 +21,47 @@ dependencies:
21
21
  version: 1.5.6
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2156070900
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.5.6
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: wasabi
27
- requirement: &2156069800 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
- - - =
35
+ - - '='
31
36
  - !ruby/object:Gem::Version
32
37
  version: 2.5.0
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *2156069800
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - '='
44
+ - !ruby/object:Gem::Version
45
+ version: 2.5.0
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: savon
38
- requirement: &2156068980 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
- - - =
51
+ - - '='
42
52
  - !ruby/object:Gem::Version
43
53
  version: 1.1.0
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *2156068980
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.1.0
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: rake
49
- requirement: &2156067920 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *2156067920
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: rspec
60
- requirement: &2156066900 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '0'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *2156066900
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: fakeweb
71
- requirement: &2156066400 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ! '>='
@@ -76,7 +101,12 @@ dependencies:
76
101
  version: '0'
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *2156066400
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
80
110
  description: Update your UltraDNS configured A, AAAA, or CNAMEs to point to an instance
81
111
  public hostnames
82
112
  email:
@@ -91,6 +121,7 @@ files:
91
121
  - LICENSE
92
122
  - README.md
93
123
  - Rakefile
124
+ - apiary.apib
94
125
  - bin/ultradns_updater
95
126
  - config/sample.config.yaml
96
127
  - lib/ultradns_updater.rb
@@ -102,6 +133,8 @@ files:
102
133
  - lib/ultradns_updater/strategies/configured.rb
103
134
  - lib/ultradns_updater/strategies/ec2.rb
104
135
  - lib/ultradns_updater/strategies/hostname.rb
136
+ - lib/ultradns_updater/strategies/multiple.rb
137
+ - lib/ultradns_updater/strategies/openstack.rb
105
138
  - lib/ultradns_updater/strategies/update_strategy.rb
106
139
  - lib/ultradns_updater/ultradns.rb
107
140
  - lib/ultradns_updater/version.rb
@@ -109,6 +142,8 @@ files:
109
142
  - spec/lib/ec2_spec.rb
110
143
  - spec/lib/hostname_spec.rb
111
144
  - spec/lib/ip_info_spec.rb
145
+ - spec/lib/multiple_spec.rb
146
+ - spec/lib/openstack_spec.rb
112
147
  - spec/lib/strategies_spec.rb
113
148
  - spec/lib/ultradns_spec.rb
114
149
  - spec/spec_helper.rb
@@ -128,7 +163,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
128
163
  version: '0'
129
164
  segments:
130
165
  - 0
131
- hash: 2236748956179911852
166
+ hash: -3951190794668498878
132
167
  required_rubygems_version: !ruby/object:Gem::Requirement
133
168
  none: false
134
169
  requirements:
@@ -137,10 +172,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
172
  version: '0'
138
173
  segments:
139
174
  - 0
140
- hash: 2236748956179911852
175
+ hash: -3951190794668498878
141
176
  requirements: []
142
177
  rubyforge_project: ultradns_updater
143
- rubygems_version: 1.8.15
178
+ rubygems_version: 1.8.24
144
179
  signing_key:
145
180
  specification_version: 3
146
181
  summary: Update UltraDNS from an instance with EC2 support
@@ -149,6 +184,8 @@ test_files:
149
184
  - spec/lib/ec2_spec.rb
150
185
  - spec/lib/hostname_spec.rb
151
186
  - spec/lib/ip_info_spec.rb
187
+ - spec/lib/multiple_spec.rb
188
+ - spec/lib/openstack_spec.rb
152
189
  - spec/lib/strategies_spec.rb
153
190
  - spec/lib/ultradns_spec.rb
154
191
  - spec/spec_helper.rb