hetzner-api 1.0.0.beta.1 → 1.0.0.beta.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +15 -11
- data/README.rdoc +16 -10
- data/cucumber.yml +2 -1
- data/features/hetzner.feature +13 -3
- data/hetzner-api.gemspec +2 -1
- data/lib/hetzner/api/cli.rb +26 -4
- data/lib/hetzner/api/failover.rb +1 -1
- data/lib/hetzner/api/version.rb +1 -1
- data/spec/api_stubs.rb +11 -0
- data/spec/fixtures/failover/get.raw +23 -0
- data/spec/fixtures/failover/get_with_failover_ip.raw +12 -0
- data/spec/fixtures/failover/post_with_active_server_ip.raw +12 -0
- data/spec/hetzner_api_spec.rb +39 -0
- data/spec/spec_constants.rb +3 -0
- metadata +33 -17
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
hetzner-api (1.0.0.
|
4
|
+
hetzner-api (1.0.0.beta.1)
|
5
5
|
httparty
|
6
6
|
thor
|
7
7
|
|
@@ -12,6 +12,8 @@ GEM
|
|
12
12
|
background_process
|
13
13
|
cucumber (~> 0.9.0)
|
14
14
|
autotest (4.2.10)
|
15
|
+
autotest-fsevent (0.2.3)
|
16
|
+
sys-uname
|
15
17
|
autotest-growl (0.2.4)
|
16
18
|
autotest (>= 4.2.4)
|
17
19
|
background_process (1.2)
|
@@ -31,16 +33,17 @@ GEM
|
|
31
33
|
httparty (0.6.1)
|
32
34
|
crack (= 0.1.8)
|
33
35
|
json (1.4.6)
|
34
|
-
rspec (2.0.0
|
35
|
-
rspec-core (= 2.0.0
|
36
|
-
rspec-expectations (= 2.0.0
|
37
|
-
rspec-mocks (= 2.0.0
|
38
|
-
rspec-core (2.0.0
|
39
|
-
rspec-expectations (2.0.0
|
36
|
+
rspec (2.0.0)
|
37
|
+
rspec-core (= 2.0.0)
|
38
|
+
rspec-expectations (= 2.0.0)
|
39
|
+
rspec-mocks (= 2.0.0)
|
40
|
+
rspec-core (2.0.0)
|
41
|
+
rspec-expectations (2.0.0)
|
40
42
|
diff-lcs (>= 1.1.2)
|
41
|
-
rspec-mocks (2.0.0
|
42
|
-
rspec-core (= 2.0.0
|
43
|
-
rspec-expectations (= 2.0.0
|
43
|
+
rspec-mocks (2.0.0)
|
44
|
+
rspec-core (= 2.0.0)
|
45
|
+
rspec-expectations (= 2.0.0)
|
46
|
+
sys-uname (0.8.4)
|
44
47
|
term-ansicolor (1.0.5)
|
45
48
|
thor (0.14.3)
|
46
49
|
|
@@ -50,11 +53,12 @@ PLATFORMS
|
|
50
53
|
DEPENDENCIES
|
51
54
|
aruba
|
52
55
|
autotest
|
56
|
+
autotest-fsevent
|
53
57
|
autotest-growl
|
54
58
|
bundler (>= 1.0.2)
|
55
59
|
cucumber
|
56
60
|
fakeweb
|
57
61
|
hetzner-api!
|
58
62
|
httparty
|
59
|
-
rspec (
|
63
|
+
rspec (>= 2.0.0)
|
60
64
|
thor
|
data/README.rdoc
CHANGED
@@ -40,28 +40,28 @@ see http://wiki.hetzner.de/index.php?title=Robot_Webservice_en for details.
|
|
40
40
|
should fail for the specific IP if a manual reset is active
|
41
41
|
should fail for the specific IP if reset is unavailable
|
42
42
|
should fail for the specific IP if IP is unknown
|
43
|
-
|
43
|
+
|
44
44
|
Boot
|
45
45
|
query boot configuration
|
46
46
|
should display the boot configuration
|
47
47
|
the rescue system
|
48
48
|
should be able to activate
|
49
49
|
should be able to deactivate
|
50
|
-
|
50
|
+
|
51
51
|
Rdns
|
52
52
|
should query the current rdns status
|
53
53
|
should be able to set a new ptr
|
54
54
|
should be able to remove a new ptr
|
55
|
-
|
55
|
+
|
56
56
|
VNC
|
57
57
|
should be able to query vnc boot status
|
58
58
|
should be able to set vnc boot status
|
59
59
|
should be able to disable vnc boot status
|
60
|
-
|
60
|
+
|
61
61
|
WOL
|
62
62
|
should be able to query WOL status
|
63
63
|
should be able to send a WOL notification
|
64
|
-
|
64
|
+
|
65
65
|
IP
|
66
66
|
information
|
67
67
|
should be able to display all IP addresses of the customer account
|
@@ -70,7 +70,7 @@ see http://wiki.hetzner.de/index.php?title=Robot_Webservice_en for details.
|
|
70
70
|
manage traffic warnings
|
71
71
|
should be able to activate and set traffic warning limits on a specific IP address
|
72
72
|
should be able to deactivate traffic warnings for a specific IP address
|
73
|
-
|
73
|
+
|
74
74
|
Subnet
|
75
75
|
information
|
76
76
|
should be able to display all IP subnets of the customer account
|
@@ -79,22 +79,28 @@ see http://wiki.hetzner.de/index.php?title=Robot_Webservice_en for details.
|
|
79
79
|
manage traffic warnings
|
80
80
|
should be able to activate and set traffic warning limits on a specific IP address
|
81
81
|
should be able to deactivate traffic warnings for a specific IP address
|
82
|
-
|
82
|
+
|
83
83
|
Server
|
84
84
|
information
|
85
85
|
should be able to display all servers of the customer account
|
86
86
|
should be able to display a specific server by its IP address
|
87
|
-
|
87
|
+
|
88
88
|
Plesk
|
89
89
|
should be able to query plesk boot option status
|
90
90
|
should be able to activate plesk boot option
|
91
91
|
should be able to disable plesk boot option
|
92
|
-
|
92
|
+
|
93
|
+
Failover
|
94
|
+
should be able to query the status of all failover IPs
|
95
|
+
should be able to query the status of a single failover IP
|
96
|
+
should be able to set the status of a single failover IP
|
97
|
+
|
93
98
|
Traffic
|
94
99
|
should display the traffic for a specific ip address and a subnet
|
95
100
|
should display the traffic for serveral IP addresse and no subnet
|
96
101
|
should display the traffic for subnets and no ip address
|
97
|
-
|
102
|
+
|
103
|
+
|
98
104
|
|
99
105
|
== Readme (rdoc)
|
100
106
|
|
data/cucumber.yml
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
default: --format
|
1
|
+
default: --format pretty
|
2
|
+
autotest: features -r features --format pretty --color
|
data/features/hetzner.feature
CHANGED
@@ -3,6 +3,16 @@ Feature: Hetzner
|
|
3
3
|
As a CLI
|
4
4
|
I want to provider a decent, objective interface
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
|
7
|
+
Scenario: Display available boot options for a specific server
|
8
|
+
When I run "hetzner boot 11.11.11.111 --username='myusername' --password='mycoolpassword'"
|
9
|
+
Then the output should contain "11.11.11.111"
|
10
|
+
|
11
|
+
Scenario: Display the status of a failover IP
|
12
|
+
When I run "hetzner failover 11.11.11.111 --username='myusername' --password='mycoolpassword'"
|
13
|
+
Then the output should contain "11.11.11.111"
|
14
|
+
|
15
|
+
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"
|
18
|
+
|
data/hetzner-api.gemspec
CHANGED
@@ -19,8 +19,9 @@ Gem::Specification.new do |s|
|
|
19
19
|
|
20
20
|
s.add_development_dependency "bundler", ">= 1.0.2"
|
21
21
|
s.add_development_dependency "autotest"
|
22
|
+
s.add_development_dependency "autotest-fsevent"
|
22
23
|
s.add_development_dependency "autotest-growl"
|
23
|
-
s.add_development_dependency "rspec", "
|
24
|
+
s.add_development_dependency "rspec", ">= 2.0.0"
|
24
25
|
s.add_development_dependency "fakeweb"
|
25
26
|
s.add_development_dependency "cucumber"
|
26
27
|
s.add_development_dependency "aruba"
|
data/lib/hetzner/api/cli.rb
CHANGED
@@ -11,16 +11,38 @@ module Hetzner
|
|
11
11
|
desc "boot ACTION [SERVER_IP]", "'get' available boot options"
|
12
12
|
method_options :username => :string
|
13
13
|
method_options :password => :string
|
14
|
+
method_options :set => 'get'
|
14
15
|
|
15
|
-
def boot(
|
16
|
+
def boot(ip = "")
|
17
|
+
require_ip ip
|
16
18
|
generate_api_instance
|
17
|
-
|
19
|
+
|
20
|
+
case options.set
|
18
21
|
when 'get'
|
19
22
|
require_ip ip
|
20
23
|
result = @api.boot? ip
|
21
24
|
pp result.parsed_response
|
22
|
-
|
23
|
-
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
desc "failover [SERVER_IP]", "get available boot options"
|
30
|
+
method_options :username => :string
|
31
|
+
method_options :password => :string
|
32
|
+
method_options :set => 'get'
|
33
|
+
|
34
|
+
def failover(ip)
|
35
|
+
require_ip ip
|
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
|
24
46
|
end
|
25
47
|
end
|
26
48
|
|
data/lib/hetzner/api/failover.rb
CHANGED
@@ -10,7 +10,7 @@ module Hetzner
|
|
10
10
|
|
11
11
|
# redirects the failover_ip to another server ip
|
12
12
|
def failover!(failover_ip, active_server_ip)
|
13
|
-
path = "/
|
13
|
+
path = "/failover/#{failover_ip}"
|
14
14
|
perform_post path, :query => { :active_server_ip => active_server_ip }
|
15
15
|
end
|
16
16
|
end
|
data/lib/hetzner/api/version.rb
CHANGED
data/spec/api_stubs.rb
CHANGED
@@ -154,5 +154,16 @@ FakeWeb.register_uri :post, uri(nil, "?from=2010-09-01&type=month&ip[]=#{WORKI
|
|
154
154
|
|
155
155
|
FakeWeb.register_uri :post, uri(nil, "?from=2010-01&to=2010-10&type=year&subnet[]=#{WORKING_SUBNET_IP}&subnet[]=#{WORKING_SUBNET_IP_2}"),
|
156
156
|
:response => fixture('post_with_two_subnets_and_no_ip_year.raw')
|
157
|
+
|
158
|
+
|
159
|
+
@resource = 'failover'
|
160
|
+
|
161
|
+
FakeWeb.register_uri :get, uri,
|
162
|
+
:response => fixture('get.raw')
|
157
163
|
|
164
|
+
FakeWeb.register_uri :get, uri("#{FAILOVER_IP}"),
|
165
|
+
:response => fixture('get_with_failover_ip.raw')
|
166
|
+
|
167
|
+
FakeWeb.register_uri :post, uri("#{FAILOVER_IP}?active_server_ip=#{WORKING_IP_2}"),
|
168
|
+
:response => fixture('post_with_active_server_ip.raw')
|
158
169
|
#pp FakeWeb::Registry.instance.uri_map
|
@@ -0,0 +1,23 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Content-Type: application/json
|
3
|
+
|
4
|
+
[
|
5
|
+
{
|
6
|
+
"failover":
|
7
|
+
{
|
8
|
+
"ip":"22.22.22.222",
|
9
|
+
"netmask":"255.255.255.255",
|
10
|
+
"server_ip": "22.22.22.222",
|
11
|
+
"active_server_ip": "22.22.22.222"
|
12
|
+
}
|
13
|
+
},
|
14
|
+
{
|
15
|
+
"failover":
|
16
|
+
{
|
17
|
+
"ip":"22.22.22.223",
|
18
|
+
"netmask":"255.255.255.255",
|
19
|
+
"server_ip": "22.22.22.223",
|
20
|
+
"active_server_ip": "22.22.22.222"
|
21
|
+
}
|
22
|
+
}
|
23
|
+
]
|
data/spec/hetzner_api_spec.rb
CHANGED
@@ -313,6 +313,45 @@ describe "Plesk" do
|
|
313
313
|
end
|
314
314
|
end
|
315
315
|
|
316
|
+
describe "Failover" do
|
317
|
+
before(:all) do
|
318
|
+
@h = Hetzner::API.new API_USERNAME, API_PASSWORD
|
319
|
+
end
|
320
|
+
|
321
|
+
it "should be able to query the status of all failover IPs" do
|
322
|
+
result = @h.failover?
|
323
|
+
result.response.should be_an_instance_of Net::HTTPOK
|
324
|
+
result.parsed_response.should have(2).entries
|
325
|
+
|
326
|
+
# default in mode
|
327
|
+
result[0]['failover']['ip'].should == FAILOVER_IP
|
328
|
+
result[0]['failover']['active_server_ip'].should == FAILOVER_IP
|
329
|
+
|
330
|
+
# currently re-routed
|
331
|
+
result[1]['failover']['ip'].should == FAILOVER_IP_2
|
332
|
+
result[1]['failover']['active_server_ip'].should == FAILOVER_IP
|
333
|
+
end
|
334
|
+
|
335
|
+
it "should be able to query the status of a single failover IP" do
|
336
|
+
result = @h.failover? FAILOVER_IP
|
337
|
+
result.response.should be_an_instance_of Net::HTTPOK
|
338
|
+
result['failover']['ip'].should == FAILOVER_IP
|
339
|
+
result['failover']['netmask'].should == '255.255.255.255'
|
340
|
+
result['failover']['server_ip'].should == FAILOVER_IP
|
341
|
+
result['failover']['active_server_ip'].should == WORKING_IP
|
342
|
+
end
|
343
|
+
|
344
|
+
it "should be able to set the status of a single failover IP" do
|
345
|
+
result = @h.failover! FAILOVER_IP, WORKING_IP_2
|
346
|
+
result.response.should be_an_instance_of Net::HTTPOK
|
347
|
+
result['failover']['ip'].should == FAILOVER_IP
|
348
|
+
result['failover']['netmask'].should == '255.255.255.255'
|
349
|
+
result['failover']['server_ip'].should == FAILOVER_IP
|
350
|
+
result['failover']['active_server_ip'].should == WORKING_IP_2
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
|
316
355
|
describe "Traffic" do
|
317
356
|
before(:all) do
|
318
357
|
@h = Hetzner::API.new API_USERNAME, API_PASSWORD
|
data/spec/spec_constants.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hetzner-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 62196359
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
9
|
- 0
|
10
10
|
- beta
|
11
|
-
-
|
12
|
-
version: 1.0.0.beta.
|
11
|
+
- 2
|
12
|
+
version: 1.0.0.beta.2
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Roland Moriz
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2010-10-
|
20
|
+
date: 2010-10-12 00:00:00 +02:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
@@ -79,7 +79,7 @@ dependencies:
|
|
79
79
|
type: :development
|
80
80
|
version_requirements: *id004
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
|
-
name: autotest-
|
82
|
+
name: autotest-fsevent
|
83
83
|
prerelease: false
|
84
84
|
requirement: &id005 !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
@@ -93,38 +93,37 @@ dependencies:
|
|
93
93
|
type: :development
|
94
94
|
version_requirements: *id005
|
95
95
|
- !ruby/object:Gem::Dependency
|
96
|
-
name:
|
96
|
+
name: autotest-growl
|
97
97
|
prerelease: false
|
98
98
|
requirement: &id006 !ruby/object:Gem::Requirement
|
99
99
|
none: false
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
hash:
|
103
|
+
hash: 3
|
104
104
|
segments:
|
105
|
-
- 2
|
106
|
-
- 0
|
107
105
|
- 0
|
108
|
-
|
109
|
-
version: 2.0.0.rc
|
106
|
+
version: "0"
|
110
107
|
type: :development
|
111
108
|
version_requirements: *id006
|
112
109
|
- !ruby/object:Gem::Dependency
|
113
|
-
name:
|
110
|
+
name: rspec
|
114
111
|
prerelease: false
|
115
112
|
requirement: &id007 !ruby/object:Gem::Requirement
|
116
113
|
none: false
|
117
114
|
requirements:
|
118
115
|
- - ">="
|
119
116
|
- !ruby/object:Gem::Version
|
120
|
-
hash:
|
117
|
+
hash: 15
|
121
118
|
segments:
|
119
|
+
- 2
|
122
120
|
- 0
|
123
|
-
|
121
|
+
- 0
|
122
|
+
version: 2.0.0
|
124
123
|
type: :development
|
125
124
|
version_requirements: *id007
|
126
125
|
- !ruby/object:Gem::Dependency
|
127
|
-
name:
|
126
|
+
name: fakeweb
|
128
127
|
prerelease: false
|
129
128
|
requirement: &id008 !ruby/object:Gem::Requirement
|
130
129
|
none: false
|
@@ -138,7 +137,7 @@ dependencies:
|
|
138
137
|
type: :development
|
139
138
|
version_requirements: *id008
|
140
139
|
- !ruby/object:Gem::Dependency
|
141
|
-
name:
|
140
|
+
name: cucumber
|
142
141
|
prerelease: false
|
143
142
|
requirement: &id009 !ruby/object:Gem::Requirement
|
144
143
|
none: false
|
@@ -151,6 +150,20 @@ dependencies:
|
|
151
150
|
version: "0"
|
152
151
|
type: :development
|
153
152
|
version_requirements: *id009
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: aruba
|
155
|
+
prerelease: false
|
156
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
157
|
+
none: false
|
158
|
+
requirements:
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
hash: 3
|
162
|
+
segments:
|
163
|
+
- 0
|
164
|
+
version: "0"
|
165
|
+
type: :development
|
166
|
+
version_requirements: *id010
|
154
167
|
description: A wrapper for Hetzner.de's server management API
|
155
168
|
email:
|
156
169
|
- roland@moriz.de
|
@@ -198,6 +211,9 @@ files:
|
|
198
211
|
- spec/fixtures/boot/vnc/delete.raw
|
199
212
|
- spec/fixtures/boot/vnc/get.raw
|
200
213
|
- spec/fixtures/boot/vnc/post.raw
|
214
|
+
- spec/fixtures/failover/get.raw
|
215
|
+
- spec/fixtures/failover/get_with_failover_ip.raw
|
216
|
+
- spec/fixtures/failover/post_with_active_server_ip.raw
|
201
217
|
- spec/fixtures/ip/get.raw
|
202
218
|
- spec/fixtures/ip/get_with_ip.raw
|
203
219
|
- spec/fixtures/ip/get_with_server_ip.raw
|