hetzner-api 1.0.0.beta.2 → 1.0.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/Gemfile.lock CHANGED
@@ -1,9 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hetzner-api (1.0.0.beta.1)
4
+ hetzner-api (1.0.0.beta.2)
5
5
  httparty
6
+ json
6
7
  thor
8
+ xml-simple
7
9
 
8
10
  GEM
9
11
  remote: http://rubygems.org/
@@ -46,6 +48,7 @@ GEM
46
48
  sys-uname (0.8.4)
47
49
  term-ansicolor (1.0.5)
48
50
  thor (0.14.3)
51
+ xml-simple (1.0.12)
49
52
 
50
53
  PLATFORMS
51
54
  ruby
@@ -60,5 +63,7 @@ DEPENDENCIES
60
63
  fakeweb
61
64
  hetzner-api!
62
65
  httparty
66
+ json
63
67
  rspec (>= 2.0.0)
64
68
  thor
69
+ xml-simple
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2010 Roland Moriz, http://moriz.de
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ --
23
+ <a href="http://moriz.de/opensource">a Moriz GmbH OpenSource project.</a>
@@ -8,11 +8,15 @@ Feature: Hetzner
8
8
  When I run "hetzner boot 11.11.11.111 --username='myusername' --password='mycoolpassword'"
9
9
  Then the output should contain "11.11.11.111"
10
10
 
11
+ Scenario: Display the status of all failover IPs
12
+ When I run "hetzner failover --username='myusername' --password='mycoolpassword'"
13
+ Then the output should contain "active_server_ip"
14
+
11
15
  Scenario: Display the status of a failover IP
12
16
  When I run "hetzner failover 11.11.11.111 --username='myusername' --password='mycoolpassword'"
13
17
  Then the output should contain "11.11.11.111"
14
18
 
15
19
  Scenario: Update the failover delegation of an ip
16
- When I run "hetzner failover 11.11.11.111 --set --username='myusername' --password='mycoolpassword'"
17
- Then the output should contain "11.11.11.111"
20
+ When I run "hetzner failover 22.22.22.222 --to 11.11.11.112 --username='myusername' --password='mycoolpassword'"
21
+ Then the output should contain "active_server_ip"
18
22
 
data/hetzner-api.gemspec CHANGED
@@ -16,6 +16,8 @@ Gem::Specification.new do |s|
16
16
 
17
17
  s.add_dependency 'httparty'
18
18
  s.add_dependency 'thor'
19
+ s.add_dependency 'json'
20
+ s.add_dependency 'xml-simple'
19
21
 
20
22
  s.add_development_dependency "bundler", ">= 1.0.2"
21
23
  s.add_development_dependency "autotest"
@@ -2,13 +2,14 @@ require 'thor'
2
2
  require 'ipaddr'
3
3
  require 'pp'
4
4
  require 'json'
5
+ require 'xmlsimple'
5
6
 
6
7
  module Hetzner
7
8
  class API
8
9
  class CLI < Thor
9
10
  attr_accessor :api
10
11
 
11
- desc "boot ACTION [SERVER_IP]", "'get' available boot options"
12
+ desc "boot ACTION [SERVER_IP]", "get available boot options"
12
13
  method_options :username => :string
13
14
  method_options :password => :string
14
15
  method_options :set => 'get'
@@ -21,33 +22,47 @@ module Hetzner
21
22
  when 'get'
22
23
  require_ip ip
23
24
  result = @api.boot? ip
24
- pp result.parsed_response
25
25
  end
26
+
27
+ output(result)
26
28
  end
27
29
 
28
-
29
- desc "failover [SERVER_IP]", "get available boot options"
30
+ desc "failover [SERVER_IP] (--to [FAILOVER_IP])", "get/set failover of SERVER_IP (to FAILOVER_IP)"
30
31
  method_options :username => :string
31
32
  method_options :password => :string
32
- method_options :set => 'get'
33
-
34
- def failover(ip)
35
- require_ip ip
33
+ method_options :to => :string
34
+
35
+ def failover(ip = nil)
36
36
  generate_api_instance
37
-
38
- case options.set
39
- when 'set'
40
- result = @api.failover! ip
41
- pp result.parsed_response
42
- # raise UnknownArgumentError, "'#{action}' is not a valid action!"
43
- when 'get'
44
- result = @api.failover? ip
45
- pp result.parsed_response
37
+
38
+ if options.to
39
+ require_ip ip
40
+ require_ip options.to
41
+ result = @api.failover! ip, options.to
42
+ else
43
+ result = @api.failover? ip
46
44
  end
45
+
46
+ output(result)
47
47
  end
48
48
 
49
49
  private
50
50
 
51
+ def output(result)
52
+ @render = 'xml'
53
+ case @render
54
+ when 'pp'
55
+ pp result.parsed_response
56
+ when 'yaml'
57
+ puts result.parsed_response.to_yaml
58
+ when 'xml'
59
+ puts XmlSimple.xml_out result.parsed_response, 'RootName' => 'result', 'AnonymousTag' => '' # dirty
60
+ when 'json'
61
+ else
62
+ jj JSON.parse result.response.body
63
+ end
64
+ end
65
+
51
66
  def require_ip(ip)
52
67
  ip = IPAddr.new ip
53
68
  rescue ArgumentError
@@ -1,5 +1,5 @@
1
1
  module Hetzner
2
2
  class API
3
- VERSION = "1.0.0.beta.2"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,15 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hetzner-api
3
3
  version: !ruby/object:Gem::Version
4
- hash: 62196359
5
- prerelease: true
4
+ hash: 23
5
+ prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
9
  - 0
10
- - beta
11
- - 2
12
- version: 1.0.0.beta.2
10
+ version: 1.0.0
13
11
  platform: ruby
14
12
  authors:
15
13
  - Roland Moriz
@@ -17,7 +15,7 @@ autorequire:
17
15
  bindir: bin
18
16
  cert_chain: []
19
17
 
20
- date: 2010-10-12 00:00:00 +02:00
18
+ date: 2010-10-15 00:00:00 +02:00
21
19
  default_executable:
22
20
  dependencies:
23
21
  - !ruby/object:Gem::Dependency
@@ -49,9 +47,37 @@ dependencies:
49
47
  type: :runtime
50
48
  version_requirements: *id002
51
49
  - !ruby/object:Gem::Dependency
52
- name: bundler
50
+ name: json
53
51
  prerelease: false
54
52
  requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :runtime
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: xml-simple
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ type: :runtime
76
+ version_requirements: *id004
77
+ - !ruby/object:Gem::Dependency
78
+ name: bundler
79
+ prerelease: false
80
+ requirement: &id005 !ruby/object:Gem::Requirement
55
81
  none: false
56
82
  requirements:
57
83
  - - ">="
@@ -63,11 +89,11 @@ dependencies:
63
89
  - 2
64
90
  version: 1.0.2
65
91
  type: :development
66
- version_requirements: *id003
92
+ version_requirements: *id005
67
93
  - !ruby/object:Gem::Dependency
68
94
  name: autotest
69
95
  prerelease: false
70
- requirement: &id004 !ruby/object:Gem::Requirement
96
+ requirement: &id006 !ruby/object:Gem::Requirement
71
97
  none: false
72
98
  requirements:
73
99
  - - ">="
@@ -77,11 +103,11 @@ dependencies:
77
103
  - 0
78
104
  version: "0"
79
105
  type: :development
80
- version_requirements: *id004
106
+ version_requirements: *id006
81
107
  - !ruby/object:Gem::Dependency
82
108
  name: autotest-fsevent
83
109
  prerelease: false
84
- requirement: &id005 !ruby/object:Gem::Requirement
110
+ requirement: &id007 !ruby/object:Gem::Requirement
85
111
  none: false
86
112
  requirements:
87
113
  - - ">="
@@ -91,11 +117,11 @@ dependencies:
91
117
  - 0
92
118
  version: "0"
93
119
  type: :development
94
- version_requirements: *id005
120
+ version_requirements: *id007
95
121
  - !ruby/object:Gem::Dependency
96
122
  name: autotest-growl
97
123
  prerelease: false
98
- requirement: &id006 !ruby/object:Gem::Requirement
124
+ requirement: &id008 !ruby/object:Gem::Requirement
99
125
  none: false
100
126
  requirements:
101
127
  - - ">="
@@ -105,11 +131,11 @@ dependencies:
105
131
  - 0
106
132
  version: "0"
107
133
  type: :development
108
- version_requirements: *id006
134
+ version_requirements: *id008
109
135
  - !ruby/object:Gem::Dependency
110
136
  name: rspec
111
137
  prerelease: false
112
- requirement: &id007 !ruby/object:Gem::Requirement
138
+ requirement: &id009 !ruby/object:Gem::Requirement
113
139
  none: false
114
140
  requirements:
115
141
  - - ">="
@@ -121,11 +147,11 @@ dependencies:
121
147
  - 0
122
148
  version: 2.0.0
123
149
  type: :development
124
- version_requirements: *id007
150
+ version_requirements: *id009
125
151
  - !ruby/object:Gem::Dependency
126
152
  name: fakeweb
127
153
  prerelease: false
128
- requirement: &id008 !ruby/object:Gem::Requirement
154
+ requirement: &id010 !ruby/object:Gem::Requirement
129
155
  none: false
130
156
  requirements:
131
157
  - - ">="
@@ -135,11 +161,11 @@ dependencies:
135
161
  - 0
136
162
  version: "0"
137
163
  type: :development
138
- version_requirements: *id008
164
+ version_requirements: *id010
139
165
  - !ruby/object:Gem::Dependency
140
166
  name: cucumber
141
167
  prerelease: false
142
- requirement: &id009 !ruby/object:Gem::Requirement
168
+ requirement: &id011 !ruby/object:Gem::Requirement
143
169
  none: false
144
170
  requirements:
145
171
  - - ">="
@@ -149,11 +175,11 @@ dependencies:
149
175
  - 0
150
176
  version: "0"
151
177
  type: :development
152
- version_requirements: *id009
178
+ version_requirements: *id011
153
179
  - !ruby/object:Gem::Dependency
154
180
  name: aruba
155
181
  prerelease: false
156
- requirement: &id010 !ruby/object:Gem::Requirement
182
+ requirement: &id012 !ruby/object:Gem::Requirement
157
183
  none: false
158
184
  requirements:
159
185
  - - ">="
@@ -163,7 +189,7 @@ dependencies:
163
189
  - 0
164
190
  version: "0"
165
191
  type: :development
166
- version_requirements: *id010
192
+ version_requirements: *id012
167
193
  description: A wrapper for Hetzner.de's server management API
168
194
  email:
169
195
  - roland@moriz.de
@@ -177,6 +203,7 @@ files:
177
203
  - .gitignore
178
204
  - Gemfile
179
205
  - Gemfile.lock
206
+ - LICENSE
180
207
  - README.rdoc
181
208
  - Rakefile
182
209
  - bin/hetzner