engineyard-dns 1.0.0 → 1.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.
@@ -1,5 +1,11 @@
1
1
  # ChangeLog
2
2
 
3
+ ## v1.1.0 - 2011-11-27
4
+
5
+ * `ey-dns subdomain.domain.com` now supported using domo-rb.
6
+ * Upgraded version of engineyard gem.
7
+ * Upgraded version of fog gem.
8
+
3
9
  ## v0.5.0 - 2011/5/24
4
10
 
5
11
  * "ey-dns domains" lists the registered domains for each DNS provider (with a count of records for each)
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source "http://rubygems.org"
1
+ source :rubygems
2
2
 
3
3
  # Specify your gem's dependencies in engineyard-dns.gemspec
4
4
  gemspec
@@ -1,16 +1,15 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "engineyard-dns/version"
2
+ require File.join(File.dirname(__FILE__), 'lib', 'engineyard-dns', 'version')
4
3
 
5
4
  Gem::Specification.new do |s|
6
5
  s.name = "engineyard-dns"
7
6
  s.version = EngineYard::DNS::VERSION
8
7
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["Dr Nic Williams"]
10
- s.email = ["drnicwilliams@gmail.com"]
8
+ s.authors = ["Dr Nic Williams", "Martin Emde"]
9
+ s.email = ["drnicwilliams@gmail.com", "memde@engineyard.com"]
11
10
  s.homepage = "https://github.com/engineyard/engineyard-dns#readme"
12
- s.summary = %q{Configure your Engine Yard AppCloud environment and your DNSimple domain.}
13
- s.description = %q{Easily configure your DNS with Engine Yard AppCloud via DNSimple.}
11
+ s.summary = %q{Configure DNS for your Engine Yard AppCloud environment.}
12
+ s.description = %q{Easily configure your DNS with Engine Yard AppCloud via Fog.}
14
13
 
15
14
  s.rubyforge_project = "engineyard-dns"
16
15
 
@@ -19,9 +18,10 @@ Gem::Specification.new do |s|
19
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
19
  s.require_paths = ["lib"]
21
20
 
22
- s.add_dependency("engineyard", "1.3.20")
23
- s.add_dependency("fog", "~> 0.8.2")
21
+ s.add_dependency("engineyard", "1.4.10")
22
+ s.add_dependency("fog", "~> 1.0")
24
23
  s.add_dependency("ipaddress", "~> 0.8")
24
+ s.add_dependency("domo-rb")
25
25
 
26
26
  s.add_development_dependency("rake", ["~> 0.9.0"])
27
27
  s.add_development_dependency("cucumber", ["~> 0.10"])
@@ -6,28 +6,28 @@ Feature: Assign DNS to environment IP address via DNSimple
6
6
  And I have "two apps" in AppCloud
7
7
  And I have setup my fog credentials for "DNSimple"
8
8
  And I have DNS domain "myapp.com" with provider "DNSimple"
9
-
9
+
10
10
  Scenario: Assign new DNS A Record to an environment
11
11
  When I run local executable "ey-dns" with arguments "assign myapp.com --account main --environment giblets"
12
12
  Then I should see exactly
13
13
  """
14
14
  Fetching AppCloud environment information...
15
15
  AppCloud environment main/giblets has IP 127.0.0.0
16
-
17
- Searching for myapp.com amongst your DNS providers...
18
- Found myapp.com in DNSimple account
19
-
16
+
17
+ Searching for myapp.com in your DNS providers...
18
+ Found myapp.com in DNSimple account.
19
+
20
20
  Assigning myapp.com --> 127.0.0.0 (main/giblets)
21
- Created A record for myapp.com
21
+ A record for myapp.com created.
22
22
  Assigning www.myapp.com --> 127.0.0.0 (main/giblets)
23
- Created A record for www.myapp.com
23
+ A record for www.myapp.com created.
24
24
  Complete!
25
-
25
+
26
26
  """
27
27
  # Found 2 records for myapp.com
28
28
  # .myapp.com (A)-> 127.0.0.0 (ttl:60, id:\d+)
29
29
  # www.myapp.com (A)-> 127.0.0.0 (ttl:60, id:\d+)
30
-
30
+
31
31
  Scenario: Resssign DNS A Record to an environment
32
32
  When I run local executable "ey-dns" with arguments "assign myapp.com --account main --environment giblets"
33
33
  And I run local executable "ey-dns" with arguments "assign myapp.com --account main --environment giblets --force"
@@ -35,40 +35,38 @@ Feature: Assign DNS to environment IP address via DNSimple
35
35
  """
36
36
  Fetching AppCloud environment information...
37
37
  AppCloud environment main/giblets has IP 127.0.0.0
38
-
39
- Searching for myapp.com amongst your DNS providers...
40
- Found myapp.com in DNSimple account
41
-
42
- Deleted myapp.com
38
+
39
+ Searching for myapp.com in your DNS providers...
40
+ Found myapp.com in DNSimple account.
41
+
42
+ myapp.com deleted.
43
43
  Assigning myapp.com --> 127.0.0.0 (main/giblets)
44
- Created A record for myapp.com
45
- Deleted www.myapp.com
44
+ A record for myapp.com created.
45
+ www.myapp.com deleted.
46
46
  Assigning www.myapp.com --> 127.0.0.0 (main/giblets)
47
- Created A record for www.myapp.com
47
+ A record for www.myapp.com created.
48
48
  Complete!
49
-
49
+
50
50
  """
51
51
  # Found 2 records for myapp.com
52
52
  # .myapp.com (A)-> 127.0.0.0 (ttl:60, id:\d+)
53
53
  # www.myapp.com (A)-> 127.0.0.0 (ttl:60, id:\d+)
54
54
 
55
55
  Scenario: Assign subdomain A Record to an environment
56
- When I run local executable "ey-dns" with arguments "assign myapp.com staging --account main --environment giblets"
56
+ When I run local executable "ey-dns" with arguments "assign staging.myapp.com --account main --environment giblets"
57
57
  Then I should see exactly
58
58
  """
59
59
  Fetching AppCloud environment information...
60
60
  AppCloud environment main/giblets has IP 127.0.0.0
61
-
62
- Searching for myapp.com amongst your DNS providers...
63
- Found myapp.com in DNSimple account
64
-
61
+
62
+ Searching for myapp.com in your DNS providers...
63
+ Found myapp.com in DNSimple account.
64
+
65
65
  Assigning staging.myapp.com --> 127.0.0.0 (main/giblets)
66
- Created A record for staging.myapp.com
66
+ A record for staging.myapp.com created.
67
67
  Complete!
68
-
68
+
69
69
  """
70
70
  # Found 1 records for myapp.com
71
71
  # staging.myapp.com (A)-> 127.0.0.0 (ttl:60, id:\d+)
72
72
 
73
-
74
-
@@ -11,7 +11,5 @@ Feature: List available domains
11
11
  DNSimple:
12
12
  myapp.com - 0 records
13
13
  myotherapp.com - 0 records
14
-
14
+
15
15
  """
16
-
17
-
@@ -8,10 +8,6 @@ Feature: Missing credentials
8
8
  """
9
9
  ERROR: Missing credentials for DNS providers.
10
10
  An example ~/.fog credentials file has been created for you.
11
-
11
+
12
12
  """
13
13
  And file "~/.fog" is created
14
-
15
-
16
-
17
-
@@ -1,7 +1,6 @@
1
1
  Given /^I have setup my engineyard email\/password for API access$/ do
2
2
  ENV['EYRC'] = File.join(@home_path, ".eyrc")
3
- token = { ENV['CLOUD_URL'] => {
4
- "api_token" => "f81a1706ddaeb148cfb6235ddecfc1cf"} }
3
+ token = { "api_token" => "f81a1706ddaeb148cfb6235ddecfc1cf"}
5
4
  File.open(ENV['EYRC'], "w"){|f| YAML.dump(token, f) }
6
5
  end
7
6
 
@@ -7,7 +7,7 @@ end
7
7
 
8
8
  support = Dir[File.join(EY_ROOT,'/spec/support/*.rb')]
9
9
  support.each{|helper| require helper }
10
- World(Spec::Helpers)
10
+ World(SpecHelpers)
11
11
 
12
12
  require "fakeweb"
13
13
 
@@ -21,4 +21,4 @@ After do
21
21
  ENV.delete('CLOUD_URL')
22
22
  ENV.delete('EYRC')
23
23
  ENV.delete('NO_SSH')
24
- end
24
+ end
@@ -3,9 +3,11 @@ require "engineyard/thor"
3
3
  require "engineyard/cli"
4
4
  require "engineyard/cli/ui"
5
5
  require "engineyard/error"
6
+ require "engineyard-dns/credentials"
6
7
  require "fog"
7
8
  require "fog/bin"
8
9
  require "ipaddress"
10
+ require "domo"
9
11
 
10
12
  module EngineYard
11
13
  module DNS
@@ -18,27 +20,35 @@ module EngineYard
18
20
  super
19
21
  end
20
22
 
21
- desc "assign DOMAIN [SUBDOMAIN]", "Assign DNS domain/tld (or name.tld) to your AppCloud environment"
23
+ desc "assign [SUBDOMAIN.]DOMAIN.TLD", "Assign DNS domain/tld (or name.tld) to your AppCloud environment"
22
24
  method_option :environment, :aliases => ["-e"], :desc => "Environment containing the IP to which to resolve", :type => :string
23
25
  method_option :account, :aliases => ["-c"], :desc => "Name of the account where the environment is found"
24
26
  method_option :force, :aliases => ["-f"], :desc => "Override DNS records if they already exist", :type => :boolean
25
- def assign(domain_name, subdomain = "")
27
+ def assign(full_domain, deprecated_sub_domain = nil)
26
28
  $stdout.sync
27
29
  validate_fog_credentials
28
-
30
+
31
+ if deprecated_sub_domain
32
+ full_domain = combine_domain_name(full_domain, deprecated_sub_domain)
33
+ say "Subdomain as second argument is deprecated. Please use:"
34
+ say "% ey assign #{full_domain}"
35
+ end
36
+
29
37
  say "Fetching AppCloud environment information..."
30
38
  environment = fetch_environment(options[:environment], options[:account])
31
39
 
32
40
  public_ip = fetch_public_ip(environment)
33
41
 
42
+ subdomain, domain_name = split_subdomain(full_domain)
43
+
34
44
  say ""
35
- say "Searching for #{domain_name} amongst your DNS providers..."
45
+ say "Searching for #{domain_name} in your DNS providers..."
36
46
 
37
47
  domain, provider_name = find_domain(domain_name)
38
48
  unless domain
39
- error "Please register domain #{domain_name} with your DNS provider"
49
+ error "Please register domain #{domain_name} with your DNS provider."
40
50
  end
41
- say "Found #{domain_name} in #{provider_name} account"
51
+ say "Found #{domain.domain} in #{provider_name} account."
42
52
  say ""
43
53
 
44
54
  assign_dns(domain, environment.account.name, environment.name, public_ip, subdomain, options[:force])
@@ -109,30 +119,38 @@ module EngineYard
109
119
  def find_domain(domain_name)
110
120
  dns_provider_names.each do |provider|
111
121
  dns_provider = ::Fog::DNS.new({:provider => provider})
112
- if domain = dns_provider.zones.select {|z| z.domain == domain_name}.first
122
+ if domain = dns_provider.zones.detect {|z| z.domain == domain_name}
113
123
  return [domain, provider]
114
124
  end
115
125
  end
116
126
  [nil, nil]
117
127
  end
118
128
 
129
+ def split_subdomain(full_domain)
130
+ domain = Domo.canonize(full_domain)
131
+ subdomain = full_domain.sub(/\.?#{Regexp.escape(domain)}/,'')
132
+ [subdomain, domain]
133
+ end
134
+
119
135
  def assign_dns(domain, account_name, env_name, public_ip, subdomain = "", override = false)
136
+ combined_domain_name = combine_domain_name(domain, subdomain)
137
+
120
138
  if record = domain.records.select {|r| r.name == subdomain}.first
121
139
  if override || ask_override_dns?(domain, subdomain)
122
140
  record.destroy
123
- say "Deleted #{domain_name domain, subdomain}"
141
+ say "#{combined_domain_name} deleted."
124
142
  else
125
- error "Cannot replace existing #{domain_name domain, subdomain} DNS"
143
+ error "Cannot replace existing #{combined_domain_name} DNS."
126
144
  end
127
145
  end
128
146
  say "Assigning "
129
- say "#{domain_name domain, subdomain} ", :green
147
+ say "#{combined_domain_name} ", :green
130
148
  say "--> "
131
149
  say "#{public_ip} ", :green
132
150
  say "(#{account_name}/#{env_name})"
133
151
 
134
- record = domain.records.create(:ip => public_ip, :name => subdomain, :type => record_type(public_ip), :ttl => "60")
135
- say "Created #{record.type} record for #{domain_name domain, subdomain}"
152
+ record = domain.records.create(:value => public_ip, :name => subdomain, :type => record_type(public_ip), :ttl => "60")
153
+ say "#{record.type} record for #{combined_domain_name} created."
136
154
  end
137
155
 
138
156
  # "A" for IPv4 and "AAAA" for IPv6; else display error and exit
@@ -143,7 +161,7 @@ module EngineYard
143
161
  elsif address.ipv6?
144
162
  "AAAA"
145
163
  else
146
- error "Cannot recognize IP #{public_ip} as either IPv4 or IPv6 format"
164
+ error "Cannot recognize IP #{public_ip} as either IPv4 or IPv6 format."
147
165
  end
148
166
  end
149
167
 
@@ -154,12 +172,9 @@ module EngineYard
154
172
 
155
173
  # "myapp.com", "name" => "name.myapp.com"
156
174
  # "myapp.com", "" => "myapp.com"
157
- def domain_name(domain, name = nil)
158
- if name && name.length > 0
159
- "#{name}.#{domain.domain}"
160
- else
161
- domain.domain
162
- end
175
+ def combine_domain_name(domain, subdomain)
176
+ domain_name = domain.respond_to?(:domain) ? domain.domain : domain.to_s
177
+ subdomain && !subdomain.empty? ? "#{subdomain}.#{domain_name}" : domain_name
163
178
  end
164
179
 
165
180
  # Returns the list of DNS providers that the current user has access to
@@ -174,37 +189,22 @@ module EngineYard
174
189
  def fog_dns_provider_names
175
190
  ['AWS', 'Bluebox', 'DNSimple', 'Linode', 'Slicehost', 'Zerigo'] & Fog.available_providers
176
191
  end
177
-
192
+
178
193
  def environment_display(environment)
179
194
  "AppCloud environment #{environment.account.name}/#{environment.name}"
180
195
  end
181
196
 
197
+ def credentials
198
+ EngineYard::DNS::Credentials.new(Fog.credentials_path)
199
+ end
200
+
182
201
  def validate_fog_credentials
183
- return if File.exist?(Fog.credentials_path)
184
-
185
- File.open(Fog.credentials_path, "w") do |file|
186
- file << <<-CREDENTIALS
187
- :default:
188
- :aws_access_key_id: ACCESSKEY
189
- :aws_secret_access_key: SECRETKEY
190
- :bluebox_customer_id: ID
191
- :bluebox_api_key: APITOKEN
192
- :dnsimple_email: EMAIL
193
- :dnsimple_password: PASSWORD
194
- :linode_api_key: APITOKEN
195
- :slicehost_password: APITOKEN
196
- :zerigo_email: EMAIL
197
- :zerigo_token: APITOKEN
198
- CREDENTIALS
199
- end
200
- FileUtils.chmod(0600, Fog.credentials_path)
201
-
202
- pretty_path = Fog.credentials_path
203
- pretty_path = "~/.fog" if Fog.credentials_path == File.expand_path("~/.fog")
204
- error <<-HELP
202
+ credentials.write_if_missing do |path|
203
+ error <<-HELP
205
204
  Missing credentials for DNS providers.
206
- An example #{pretty_path} credentials file has been created for you.
207
- HELP
205
+ An example #{path} credentials file has been created for you.
206
+ HELP
207
+ end
208
208
  end
209
209
  end
210
210
  end
@@ -0,0 +1,73 @@
1
+ require 'pathname'
2
+
3
+ module EngineYard
4
+ module DNS
5
+ #
6
+ # Credentials allows you to take a credentials path and write an example
7
+ # credentials file if the file does not exist.
8
+ #
9
+ # Credentials.new(Fog.credentials_path).write_if_missing do |pretty_path|
10
+ # # only yielded if example file is written
11
+ # puts "We wrote your file to #{pretty_path}"
12
+ # end
13
+ #
14
+ class Credentials
15
+
16
+ EXAMPLE = <<-CREDENTIALS
17
+ :default:
18
+ :aws_access_key_id: ACCESSKEY
19
+ :aws_secret_access_key: SECRETKEY
20
+ :bluebox_customer_id: ID
21
+ :bluebox_api_key: APITOKEN
22
+ :dnsimple_email: EMAIL
23
+ :dnsimple_password: PASSWORD
24
+ :linode_api_key: APITOKEN
25
+ :slicehost_password: APITOKEN
26
+ :zerigo_email: EMAIL
27
+ :zerigo_token: APITOKEN
28
+ CREDENTIALS
29
+
30
+ # fog_creds_path usually comes from Fog.credentials_path
31
+ def initialize(fog_creds_path)
32
+ self.path = fog_creds_path
33
+ end
34
+
35
+ attr_reader :path
36
+
37
+ # Assign the fog credential path.
38
+ #
39
+ # Converts input to a Pathname and expands it.
40
+ def path=(new_path)
41
+ @path = Pathname.new(new_path).expand_path
42
+ end
43
+
44
+ # Writes an example credentials file to the default Fog.credentials_path
45
+ #
46
+ # This method will yield the path to which the example file was written.
47
+ # If the credentials path exists, does nothing and does not yield.
48
+ def write_if_missing
49
+ unless path.exist?
50
+ write_example
51
+ yield pretty_path if block_given?
52
+ end
53
+ end
54
+
55
+ private
56
+
57
+ # Write the example credentials file to the initialized path.
58
+ def write_example
59
+ path.open("w") { |file| file << EXAMPLE }
60
+ path.chmod(0600)
61
+ end
62
+
63
+ # Show the credentials path as ~/.fog instead of expanded /Users/me/.fog
64
+ def pretty_path
65
+ if Pathname.new("~/.fog").expand_path == path
66
+ "~/.fog"
67
+ else
68
+ path.to_s
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -1,5 +1,5 @@
1
1
  module EngineYard
2
2
  module DNS
3
- VERSION = "1.0.0"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,216 +1,169 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: engineyard-dns
3
- version: !ruby/object:Gem::Version
4
- hash: 23
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 0
9
- - 0
10
- version: 1.0.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Dr Nic Williams
9
+ - Martin Emde
14
10
  autorequire:
15
11
  bindir: bin
16
12
  cert_chain: []
17
-
18
- date: 2011-05-27 00:00:00 -07:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- requirement: &id001 !ruby/object:Gem::Requirement
23
- none: false
24
- requirements:
25
- - - "="
26
- - !ruby/object:Gem::Version
27
- hash: 51
28
- segments:
29
- - 1
30
- - 3
31
- - 20
32
- version: 1.3.20
13
+ date: 2011-11-27 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
33
16
  name: engineyard
34
- prerelease: false
17
+ requirement: &70207892889080 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - =
21
+ - !ruby/object:Gem::Version
22
+ version: 1.4.10
35
23
  type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ prerelease: false
25
+ version_requirements: *70207892889080
26
+ - !ruby/object:Gem::Dependency
27
+ name: fog
28
+ requirement: &70207892886560 !ruby/object:Gem::Requirement
39
29
  none: false
40
- requirements:
30
+ requirements:
41
31
  - - ~>
42
- - !ruby/object:Gem::Version
43
- hash: 59
44
- segments:
45
- - 0
46
- - 8
47
- - 2
48
- version: 0.8.2
49
- name: fog
50
- prerelease: false
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
51
34
  type: :runtime
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ prerelease: false
36
+ version_requirements: *70207892886560
37
+ - !ruby/object:Gem::Dependency
38
+ name: ipaddress
39
+ requirement: &70207892908140 !ruby/object:Gem::Requirement
55
40
  none: false
56
- requirements:
41
+ requirements:
57
42
  - - ~>
58
- - !ruby/object:Gem::Version
59
- hash: 27
60
- segments:
61
- - 0
62
- - 8
63
- version: "0.8"
64
- name: ipaddress
43
+ - !ruby/object:Gem::Version
44
+ version: '0.8'
45
+ type: :runtime
65
46
  prerelease: false
47
+ version_requirements: *70207892908140
48
+ - !ruby/object:Gem::Dependency
49
+ name: domo-rb
50
+ requirement: &70207892906480 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
66
56
  type: :runtime
67
- version_requirements: *id003
68
- - !ruby/object:Gem::Dependency
69
- requirement: &id004 !ruby/object:Gem::Requirement
57
+ prerelease: false
58
+ version_requirements: *70207892906480
59
+ - !ruby/object:Gem::Dependency
60
+ name: rake
61
+ requirement: &70207892904920 !ruby/object:Gem::Requirement
70
62
  none: false
71
- requirements:
63
+ requirements:
72
64
  - - ~>
73
- - !ruby/object:Gem::Version
74
- hash: 59
75
- segments:
76
- - 0
77
- - 9
78
- - 0
65
+ - !ruby/object:Gem::Version
79
66
  version: 0.9.0
80
- name: rake
81
- prerelease: false
82
67
  type: :development
83
- version_requirements: *id004
84
- - !ruby/object:Gem::Dependency
85
- requirement: &id005 !ruby/object:Gem::Requirement
68
+ prerelease: false
69
+ version_requirements: *70207892904920
70
+ - !ruby/object:Gem::Dependency
71
+ name: cucumber
72
+ requirement: &70207892922960 !ruby/object:Gem::Requirement
86
73
  none: false
87
- requirements:
74
+ requirements:
88
75
  - - ~>
89
- - !ruby/object:Gem::Version
90
- hash: 31
91
- segments:
92
- - 0
93
- - 10
94
- version: "0.10"
95
- name: cucumber
96
- prerelease: false
76
+ - !ruby/object:Gem::Version
77
+ version: '0.10'
97
78
  type: :development
98
- version_requirements: *id005
99
- - !ruby/object:Gem::Dependency
100
- requirement: &id006 !ruby/object:Gem::Requirement
79
+ prerelease: false
80
+ version_requirements: *70207892922960
81
+ - !ruby/object:Gem::Dependency
82
+ name: rspec
83
+ requirement: &70207892921080 !ruby/object:Gem::Requirement
101
84
  none: false
102
- requirements:
85
+ requirements:
103
86
  - - ~>
104
- - !ruby/object:Gem::Version
105
- hash: 9
106
- segments:
107
- - 2
108
- - 5
109
- version: "2.5"
110
- name: rspec
111
- prerelease: false
87
+ - !ruby/object:Gem::Version
88
+ version: '2.5'
112
89
  type: :development
113
- version_requirements: *id006
114
- - !ruby/object:Gem::Dependency
115
- requirement: &id007 !ruby/object:Gem::Requirement
90
+ prerelease: false
91
+ version_requirements: *70207892921080
92
+ - !ruby/object:Gem::Dependency
93
+ name: json
94
+ requirement: &70207892919820 !ruby/object:Gem::Requirement
116
95
  none: false
117
- requirements:
96
+ requirements:
118
97
  - - ~>
119
- - !ruby/object:Gem::Version
120
- hash: 7
121
- segments:
122
- - 1
123
- - 4
124
- - 0
98
+ - !ruby/object:Gem::Version
125
99
  version: 1.4.0
126
- name: json
127
- prerelease: false
128
100
  type: :development
129
- version_requirements: *id007
130
- - !ruby/object:Gem::Dependency
131
- requirement: &id008 !ruby/object:Gem::Requirement
132
- none: false
133
- requirements:
134
- - - ">="
135
- - !ruby/object:Gem::Version
136
- hash: 3
137
- segments:
138
- - 0
139
- version: "0"
140
- name: awesome_print
141
101
  prerelease: false
102
+ version_requirements: *70207892919820
103
+ - !ruby/object:Gem::Dependency
104
+ name: awesome_print
105
+ requirement: &70207892918660 !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
142
111
  type: :development
143
- version_requirements: *id008
144
- - !ruby/object:Gem::Dependency
145
- requirement: &id009 !ruby/object:Gem::Requirement
112
+ prerelease: false
113
+ version_requirements: *70207892918660
114
+ - !ruby/object:Gem::Dependency
115
+ name: realweb
116
+ requirement: &70207892916720 !ruby/object:Gem::Requirement
146
117
  none: false
147
- requirements:
118
+ requirements:
148
119
  - - ~>
149
- - !ruby/object:Gem::Version
150
- hash: 23
151
- segments:
152
- - 0
153
- - 1
154
- - 6
120
+ - !ruby/object:Gem::Version
155
121
  version: 0.1.6
156
- name: realweb
157
- prerelease: false
158
122
  type: :development
159
- version_requirements: *id009
160
- - !ruby/object:Gem::Dependency
161
- requirement: &id010 !ruby/object:Gem::Requirement
162
- none: false
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- hash: 3
167
- segments:
168
- - 0
169
- version: "0"
170
- name: open4
171
123
  prerelease: false
172
- type: :development
173
- version_requirements: *id010
174
- - !ruby/object:Gem::Dependency
175
- requirement: &id011 !ruby/object:Gem::Requirement
124
+ version_requirements: *70207892916720
125
+ - !ruby/object:Gem::Dependency
126
+ name: open4
127
+ requirement: &70207892915840 !ruby/object:Gem::Requirement
176
128
  none: false
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- hash: 3
181
- segments:
182
- - 0
183
- version: "0"
184
- name: sinatra
129
+ requirements:
130
+ - - ! '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
185
134
  prerelease: false
135
+ version_requirements: *70207892915840
136
+ - !ruby/object:Gem::Dependency
137
+ name: sinatra
138
+ requirement: &70207892930280 !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ! '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
186
144
  type: :development
187
- version_requirements: *id011
188
- - !ruby/object:Gem::Dependency
189
- requirement: &id012 !ruby/object:Gem::Requirement
145
+ prerelease: false
146
+ version_requirements: *70207892930280
147
+ - !ruby/object:Gem::Dependency
148
+ name: fakeweb
149
+ requirement: &70207892929040 !ruby/object:Gem::Requirement
190
150
  none: false
191
- requirements:
151
+ requirements:
192
152
  - - ~>
193
- - !ruby/object:Gem::Version
194
- hash: 27
195
- segments:
196
- - 1
197
- - 3
198
- - 0
153
+ - !ruby/object:Gem::Version
199
154
  version: 1.3.0
200
- name: fakeweb
201
- prerelease: false
202
155
  type: :development
203
- version_requirements: *id012
204
- description: Easily configure your DNS with Engine Yard AppCloud via DNSimple.
205
- email:
156
+ prerelease: false
157
+ version_requirements: *70207892929040
158
+ description: Easily configure your DNS with Engine Yard AppCloud via Fog.
159
+ email:
206
160
  - drnicwilliams@gmail.com
207
- executables:
161
+ - memde@engineyard.com
162
+ executables:
208
163
  - ey-dns
209
164
  extensions: []
210
-
211
165
  extra_rdoc_files: []
212
-
213
- files:
166
+ files:
214
167
  - .gitignore
215
168
  - .rspec
216
169
  - .travis.yml
@@ -233,44 +186,41 @@ files:
233
186
  - features/support/matchers.rb
234
187
  - lib/engineyard-dns.rb
235
188
  - lib/engineyard-dns/cli.rb
189
+ - lib/engineyard-dns/credentials.rb
236
190
  - lib/engineyard-dns/version.rb
237
191
  - posts/engineyard-2011-05-24.md
238
192
  - spec/spec_helper.rb
239
- has_rdoc: true
240
193
  homepage: https://github.com/engineyard/engineyard-dns#readme
241
194
  licenses: []
242
-
243
195
  post_install_message:
244
196
  rdoc_options: []
245
-
246
- require_paths:
197
+ require_paths:
247
198
  - lib
248
- required_ruby_version: !ruby/object:Gem::Requirement
199
+ required_ruby_version: !ruby/object:Gem::Requirement
249
200
  none: false
250
- requirements:
251
- - - ">="
252
- - !ruby/object:Gem::Version
253
- hash: 3
254
- segments:
201
+ requirements:
202
+ - - ! '>='
203
+ - !ruby/object:Gem::Version
204
+ version: '0'
205
+ segments:
255
206
  - 0
256
- version: "0"
257
- required_rubygems_version: !ruby/object:Gem::Requirement
207
+ hash: 2345930780459198008
208
+ required_rubygems_version: !ruby/object:Gem::Requirement
258
209
  none: false
259
- requirements:
260
- - - ">="
261
- - !ruby/object:Gem::Version
262
- hash: 3
263
- segments:
210
+ requirements:
211
+ - - ! '>='
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ segments:
264
215
  - 0
265
- version: "0"
216
+ hash: 2345930780459198008
266
217
  requirements: []
267
-
268
218
  rubyforge_project: engineyard-dns
269
- rubygems_version: 1.5.0
219
+ rubygems_version: 1.8.10
270
220
  signing_key:
271
221
  specification_version: 3
272
- summary: Configure your Engine Yard AppCloud environment and your DNSimple domain.
273
- test_files:
222
+ summary: Configure DNS for your Engine Yard AppCloud environment.
223
+ test_files:
274
224
  - features/assign_dns_to_environment.feature
275
225
  - features/list_available_domains.feature
276
226
  - features/missing_credentials.feature