profitbricks 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +23 -0
- data/.gemtest +0 -0
- data/.rspec +3 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +53 -0
- data/Manifest.txt +106 -0
- data/README.md +70 -0
- data/Rakefile +31 -0
- data/bin/profitbricks +3 -0
- data/examples/create_datacenter.rb +57 -0
- data/lib/profitbricks/config.rb +16 -0
- data/lib/profitbricks/data_center.rb +100 -0
- data/lib/profitbricks/extensions.rb +9 -0
- data/lib/profitbricks/image.rb +47 -0
- data/lib/profitbricks/ip_block.rb +49 -0
- data/lib/profitbricks/model.rb +102 -0
- data/lib/profitbricks/nic.rb +103 -0
- data/lib/profitbricks/profitbricks.rb +86 -0
- data/lib/profitbricks/server.rb +83 -0
- data/lib/profitbricks/storage.rb +84 -0
- data/lib/profitbricks.rb +15 -0
- data/profitbricks.gemspec +34 -0
- data/spec/fixtures/add_public_ip_to_nic/success.json +10 -0
- data/spec/fixtures/add_public_ip_to_nic/success.xml +1 -0
- data/spec/fixtures/clear_data_center/success.json +10 -0
- data/spec/fixtures/clear_data_center/success.xml +1 -0
- data/spec/fixtures/connect_storage_to_server/success.json +10 -0
- data/spec/fixtures/connect_storage_to_server/success.xml +1 -0
- data/spec/fixtures/create_data_center/success.json +10 -0
- data/spec/fixtures/create_data_center/success.xml +1 -0
- data/spec/fixtures/create_nic/success.json +11 -0
- data/spec/fixtures/create_nic/success.xml +1 -0
- data/spec/fixtures/create_server/minimal.json +11 -0
- data/spec/fixtures/create_server/minimal.xml +1 -0
- data/spec/fixtures/create_storage/success.json +11 -0
- data/spec/fixtures/create_storage/success.xml +1 -0
- data/spec/fixtures/delete_data_center/success.json +8 -0
- data/spec/fixtures/delete_data_center/success.xml +1 -0
- data/spec/fixtures/delete_nic/success.json +10 -0
- data/spec/fixtures/delete_nic/success.xml +1 -0
- data/spec/fixtures/delete_server/success.json +10 -0
- data/spec/fixtures/delete_server/success.xml +1 -0
- data/spec/fixtures/delete_storage/failture.json +16 -0
- data/spec/fixtures/delete_storage/failture.xml +1 -0
- data/spec/fixtures/delete_storage/success.json +10 -0
- data/spec/fixtures/delete_storage/success.xml +1 -0
- data/spec/fixtures/disconnect_storage_from_server/failture.json +16 -0
- data/spec/fixtures/disconnect_storage_from_server/failture.xml +1 -0
- data/spec/fixtures/disconnect_storage_from_server/success.json +10 -0
- data/spec/fixtures/disconnect_storage_from_server/success.xml +1 -0
- data/spec/fixtures/get_all_data_centers/empty.json +1 -0
- data/spec/fixtures/get_all_data_centers/empty.xml +1 -0
- data/spec/fixtures/get_all_data_centers/test_datacenter.json +10 -0
- data/spec/fixtures/get_all_data_centers/test_datacenter.xml +1 -0
- data/spec/fixtures/get_all_images/success.json +100 -0
- data/spec/fixtures/get_all_images/success.xml +1 -0
- data/spec/fixtures/get_all_public_ip_blocks/success.json +16 -0
- data/spec/fixtures/get_all_public_ip_blocks/success.xml +1 -0
- data/spec/fixtures/get_data_center/create.json +147 -0
- data/spec/fixtures/get_data_center/create.xml +1 -0
- data/spec/fixtures/get_data_center/two_servers_with_storage.json +147 -0
- data/spec/fixtures/get_data_center/two_servers_with_storage.xml +1 -0
- data/spec/fixtures/get_data_center_state/in_process.json +1 -0
- data/spec/fixtures/get_data_center_state/in_process.xml +1 -0
- data/spec/fixtures/get_data_center_state/success.json +1 -0
- data/spec/fixtures/get_data_center_state/success.xml +1 -0
- data/spec/fixtures/get_image/success.json +15 -0
- data/spec/fixtures/get_image/success.xml +1 -0
- data/spec/fixtures/get_nic/success.json +16 -0
- data/spec/fixtures/get_nic/success.xml +1 -0
- data/spec/fixtures/get_nic/two_ips.json +19 -0
- data/spec/fixtures/get_nic/two_ips.xml +1 -0
- data/spec/fixtures/get_server/after_create.json +17 -0
- data/spec/fixtures/get_server/after_create.xml +1 -0
- data/spec/fixtures/get_server/connected_storage.json +26 -0
- data/spec/fixtures/get_server/connected_storage.xml +1 -0
- data/spec/fixtures/get_storage/success.json +14 -0
- data/spec/fixtures/get_storage/success.xml +1 -0
- data/spec/fixtures/reboot_server/success.json +1 -0
- data/spec/fixtures/reboot_server/success.xml +1 -0
- data/spec/fixtures/release_public_ip_block/success.json +1 -0
- data/spec/fixtures/release_public_ip_block/success.xml +1 -0
- data/spec/fixtures/remove_public_ip_from_nic/success.json +10 -0
- data/spec/fixtures/remove_public_ip_from_nic/success.xml +1 -0
- data/spec/fixtures/reserve_public_ip_block/success.json +13 -0
- data/spec/fixtures/reserve_public_ip_block/success.xml +1 -0
- data/spec/fixtures/set_image_os_type/success.json +1 -0
- data/spec/fixtures/set_image_os_type/success.xml +1 -0
- data/spec/fixtures/set_internet_access/success.json +10 -0
- data/spec/fixtures/set_internet_access/success.xml +1 -0
- data/spec/fixtures/update_data_center/success.json +10 -0
- data/spec/fixtures/update_data_center/success.xml +1 -0
- data/spec/fixtures/update_nic/success.json +10 -0
- data/spec/fixtures/update_nic/success.xml +1 -0
- data/spec/fixtures/update_server/basic.json +10 -0
- data/spec/fixtures/update_server/basic.xml +1 -0
- data/spec/fixtures/update_storage/success.json +10 -0
- data/spec/fixtures/update_storage/success.xml +1 -0
- data/spec/profitbricks/data_center_spec.rb +95 -0
- data/spec/profitbricks/image_spec.rb +23 -0
- data/spec/profitbricks/ip_block_spec.rb +26 -0
- data/spec/profitbricks/model_spec.rb +68 -0
- data/spec/profitbricks/nic_spec.rb +55 -0
- data/spec/profitbricks/server_spec.rb +41 -0
- data/spec/profitbricks/storage_spec.rb +47 -0
- data/spec/spec_helper.rb +45 -0
- metadata +193 -0
data/.autotest
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'autotest/restart'
|
4
|
+
|
5
|
+
# Autotest.add_hook :initialize do |at|
|
6
|
+
# at.extra_files << "../some/external/dependency.rb"
|
7
|
+
#
|
8
|
+
# at.libs << ":../some/external"
|
9
|
+
#
|
10
|
+
# at.add_exception 'vendor'
|
11
|
+
#
|
12
|
+
# at.add_mapping(/dependency.rb/) do |f, _|
|
13
|
+
# at.files_matching(/test_.*rb$/)
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# %w(TestA TestB).each do |klass|
|
17
|
+
# at.extra_class_map[klass] = "test/test_misc.rb"
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
|
21
|
+
# Autotest.add_hook :run_command do |at|
|
22
|
+
# system "rake build"
|
23
|
+
# end
|
data/.gemtest
ADDED
File without changes
|
data/.rspec
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
akami (1.0.0)
|
5
|
+
gyoku (>= 0.4.0)
|
6
|
+
builder (3.0.0)
|
7
|
+
diff-lcs (1.1.3)
|
8
|
+
gyoku (0.4.4)
|
9
|
+
builder (>= 2.1.2)
|
10
|
+
httpi (0.9.6)
|
11
|
+
rack
|
12
|
+
metaclass (0.0.1)
|
13
|
+
mocha (0.10.5)
|
14
|
+
metaclass (~> 0.0.1)
|
15
|
+
multi_json (1.1.0)
|
16
|
+
nokogiri (1.5.0)
|
17
|
+
nori (1.1.0)
|
18
|
+
rack (1.4.1)
|
19
|
+
rspec (2.8.0)
|
20
|
+
rspec-core (~> 2.8.0)
|
21
|
+
rspec-expectations (~> 2.8.0)
|
22
|
+
rspec-mocks (~> 2.8.0)
|
23
|
+
rspec-core (2.8.0)
|
24
|
+
rspec-expectations (2.8.0)
|
25
|
+
diff-lcs (~> 1.1.2)
|
26
|
+
rspec-mocks (2.8.0)
|
27
|
+
savon (0.9.9)
|
28
|
+
akami (~> 1.0)
|
29
|
+
builder (>= 2.1.2)
|
30
|
+
gyoku (>= 0.4.0)
|
31
|
+
httpi (~> 0.9)
|
32
|
+
nokogiri (>= 1.4.0)
|
33
|
+
nori (~> 1.1)
|
34
|
+
wasabi (~> 2.1)
|
35
|
+
savon_spec (0.1.6)
|
36
|
+
mocha (>= 0.9.8)
|
37
|
+
rspec (>= 2.0.0)
|
38
|
+
savon (>= 0.8.0)
|
39
|
+
simplecov (0.6.1)
|
40
|
+
multi_json (~> 1.0)
|
41
|
+
simplecov-html (~> 0.5.3)
|
42
|
+
simplecov-html (0.5.3)
|
43
|
+
wasabi (2.1.0)
|
44
|
+
nokogiri (>= 1.4.0)
|
45
|
+
|
46
|
+
PLATFORMS
|
47
|
+
ruby
|
48
|
+
|
49
|
+
DEPENDENCIES
|
50
|
+
rspec
|
51
|
+
savon
|
52
|
+
savon_spec
|
53
|
+
simplecov
|
data/Manifest.txt
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
.autotest
|
2
|
+
.rspec
|
3
|
+
CHANGELOG.md
|
4
|
+
Gemfile
|
5
|
+
Gemfile.lock
|
6
|
+
Manifest.txt
|
7
|
+
README.md
|
8
|
+
Rakefile
|
9
|
+
bin/profitbricks
|
10
|
+
examples/create_datacenter.rb
|
11
|
+
lib/profitbricks.rb
|
12
|
+
lib/profitbricks/config.rb
|
13
|
+
lib/profitbricks/data_center.rb
|
14
|
+
lib/profitbricks/extensions.rb
|
15
|
+
lib/profitbricks/image.rb
|
16
|
+
lib/profitbricks/ip_block.rb
|
17
|
+
lib/profitbricks/model.rb
|
18
|
+
lib/profitbricks/nic.rb
|
19
|
+
lib/profitbricks/profitbricks.rb
|
20
|
+
lib/profitbricks/server.rb
|
21
|
+
lib/profitbricks/storage.rb
|
22
|
+
profitbricks.gemspec
|
23
|
+
spec/fixtures/add_public_ip_to_nic/success.json
|
24
|
+
spec/fixtures/add_public_ip_to_nic/success.xml
|
25
|
+
spec/fixtures/clear_data_center/success.json
|
26
|
+
spec/fixtures/clear_data_center/success.xml
|
27
|
+
spec/fixtures/connect_storage_to_server/success.json
|
28
|
+
spec/fixtures/connect_storage_to_server/success.xml
|
29
|
+
spec/fixtures/create_data_center/success.json
|
30
|
+
spec/fixtures/create_data_center/success.xml
|
31
|
+
spec/fixtures/create_nic/success.json
|
32
|
+
spec/fixtures/create_nic/success.xml
|
33
|
+
spec/fixtures/create_server/minimal.json
|
34
|
+
spec/fixtures/create_server/minimal.xml
|
35
|
+
spec/fixtures/create_storage/success.json
|
36
|
+
spec/fixtures/create_storage/success.xml
|
37
|
+
spec/fixtures/delete_data_center/success.json
|
38
|
+
spec/fixtures/delete_data_center/success.xml
|
39
|
+
spec/fixtures/delete_nic/success.json
|
40
|
+
spec/fixtures/delete_nic/success.xml
|
41
|
+
spec/fixtures/delete_server/success.json
|
42
|
+
spec/fixtures/delete_server/success.xml
|
43
|
+
spec/fixtures/delete_storage/failture.json
|
44
|
+
spec/fixtures/delete_storage/failture.xml
|
45
|
+
spec/fixtures/delete_storage/success.json
|
46
|
+
spec/fixtures/delete_storage/success.xml
|
47
|
+
spec/fixtures/disconnect_storage_from_server/failture.json
|
48
|
+
spec/fixtures/disconnect_storage_from_server/failture.xml
|
49
|
+
spec/fixtures/disconnect_storage_from_server/success.json
|
50
|
+
spec/fixtures/disconnect_storage_from_server/success.xml
|
51
|
+
spec/fixtures/get_all_data_centers/empty.json
|
52
|
+
spec/fixtures/get_all_data_centers/empty.xml
|
53
|
+
spec/fixtures/get_all_data_centers/test_datacenter.json
|
54
|
+
spec/fixtures/get_all_data_centers/test_datacenter.xml
|
55
|
+
spec/fixtures/get_all_images/success.json
|
56
|
+
spec/fixtures/get_all_images/success.xml
|
57
|
+
spec/fixtures/get_all_public_ip_blocks/success.json
|
58
|
+
spec/fixtures/get_all_public_ip_blocks/success.xml
|
59
|
+
spec/fixtures/get_data_center/create.json
|
60
|
+
spec/fixtures/get_data_center/create.xml
|
61
|
+
spec/fixtures/get_data_center/two_servers_with_storage.json
|
62
|
+
spec/fixtures/get_data_center/two_servers_with_storage.xml
|
63
|
+
spec/fixtures/get_data_center_state/in_process.json
|
64
|
+
spec/fixtures/get_data_center_state/in_process.xml
|
65
|
+
spec/fixtures/get_data_center_state/success.json
|
66
|
+
spec/fixtures/get_data_center_state/success.xml
|
67
|
+
spec/fixtures/get_image/success.json
|
68
|
+
spec/fixtures/get_image/success.xml
|
69
|
+
spec/fixtures/get_nic/success.json
|
70
|
+
spec/fixtures/get_nic/success.xml
|
71
|
+
spec/fixtures/get_nic/two_ips.json
|
72
|
+
spec/fixtures/get_nic/two_ips.xml
|
73
|
+
spec/fixtures/get_server/after_create.json
|
74
|
+
spec/fixtures/get_server/after_create.xml
|
75
|
+
spec/fixtures/get_server/connected_storage.json
|
76
|
+
spec/fixtures/get_server/connected_storage.xml
|
77
|
+
spec/fixtures/get_storage/success.json
|
78
|
+
spec/fixtures/get_storage/success.xml
|
79
|
+
spec/fixtures/reboot_server/success.json
|
80
|
+
spec/fixtures/reboot_server/success.xml
|
81
|
+
spec/fixtures/release_public_ip_block/success.json
|
82
|
+
spec/fixtures/release_public_ip_block/success.xml
|
83
|
+
spec/fixtures/remove_public_ip_from_nic/success.json
|
84
|
+
spec/fixtures/remove_public_ip_from_nic/success.xml
|
85
|
+
spec/fixtures/reserve_public_ip_block/success.json
|
86
|
+
spec/fixtures/reserve_public_ip_block/success.xml
|
87
|
+
spec/fixtures/set_image_os_type/success.json
|
88
|
+
spec/fixtures/set_image_os_type/success.xml
|
89
|
+
spec/fixtures/set_internet_access/success.json
|
90
|
+
spec/fixtures/set_internet_access/success.xml
|
91
|
+
spec/fixtures/update_data_center/success.json
|
92
|
+
spec/fixtures/update_data_center/success.xml
|
93
|
+
spec/fixtures/update_nic/success.json
|
94
|
+
spec/fixtures/update_nic/success.xml
|
95
|
+
spec/fixtures/update_server/basic.json
|
96
|
+
spec/fixtures/update_server/basic.xml
|
97
|
+
spec/fixtures/update_storage/success.json
|
98
|
+
spec/fixtures/update_storage/success.xml
|
99
|
+
spec/profitbricks/data_center_spec.rb
|
100
|
+
spec/profitbricks/image_spec.rb
|
101
|
+
spec/profitbricks/ip_block_spec.rb
|
102
|
+
spec/profitbricks/model_spec.rb
|
103
|
+
spec/profitbricks/nic_spec.rb
|
104
|
+
spec/profitbricks/server_spec.rb
|
105
|
+
spec/profitbricks/storage_spec.rb
|
106
|
+
spec/spec_helper.rb
|
data/README.md
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# Profitbricks
|
2
|
+
|
3
|
+
## DESCRIPTION
|
4
|
+
A Ruby client for the ProfitBricks API.
|
5
|
+
|
6
|
+
BE AWARE: This software is in a very early state of development, the methods and responses will very likely change over time.
|
7
|
+
|
8
|
+
## Dependencies
|
9
|
+
A Ruby interpreter.
|
10
|
+
Currently only tested on MRI 1.9.3, more implementations will follow once the tests pass on TravisCI
|
11
|
+
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
gem install profitbricks
|
15
|
+
|
16
|
+
|
17
|
+
## Synopsis
|
18
|
+
require 'profitbricks'
|
19
|
+
Profitbricks.configure do |config|
|
20
|
+
username = "username"
|
21
|
+
password = "password"
|
22
|
+
end
|
23
|
+
|
24
|
+
Get a list of all your Datacenters
|
25
|
+
|
26
|
+
DataCenter.all
|
27
|
+
|
28
|
+
Create a new Datacenter
|
29
|
+
|
30
|
+
dc = DataCenter.create('Name')
|
31
|
+
|
32
|
+
Find a Datacenter by name
|
33
|
+
|
34
|
+
dc = DataCenter.find(:name => 'Name')
|
35
|
+
|
36
|
+
Create a new Server
|
37
|
+
|
38
|
+
dc.create_server(:cores => 1, :ram => 256, :name => 'Test Server')
|
39
|
+
|
40
|
+
or
|
41
|
+
|
42
|
+
Server.create(:cores => 1, :ram => 256, :name => 'Test Server')
|
43
|
+
|
44
|
+
Check out the examples directory for more detailed usage information.
|
45
|
+
|
46
|
+
## License
|
47
|
+
This might also change!
|
48
|
+
|
49
|
+
(The MIT License)
|
50
|
+
|
51
|
+
Copyright (c) 2012 Dominik Sander
|
52
|
+
|
53
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
54
|
+
a copy of this software and associated documentation files (the
|
55
|
+
'Software'), to deal in the Software without restriction, including
|
56
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
57
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
58
|
+
permit persons to whom the Software is furnished to do so, subject to
|
59
|
+
the following conditions:
|
60
|
+
|
61
|
+
The above copyright notice and this permission notice shall be
|
62
|
+
included in all copies or substantial portions of the Software.
|
63
|
+
|
64
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
65
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
66
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
67
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
68
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
69
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
70
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hoe'
|
5
|
+
require "rspec/core/rake_task"
|
6
|
+
|
7
|
+
# Hoe.plugin :compiler
|
8
|
+
# Hoe.plugin :gem_prelude_sucks
|
9
|
+
# Hoe.plugin :inline
|
10
|
+
# Hoe.plugin :racc
|
11
|
+
# Hoe.plugin :rubyforge
|
12
|
+
Hoe.plugin :git
|
13
|
+
Hoe.plugin :gemspec
|
14
|
+
Hoe.plugin :bundler
|
15
|
+
Hoe.plugin :gemcutter
|
16
|
+
Hoe.plugins.delete :rubyforge
|
17
|
+
|
18
|
+
Hoe.spec 'profitbricks' do
|
19
|
+
developer('Dominik Sander', 'git@dsander.de')
|
20
|
+
|
21
|
+
self.readme_file = 'README.md'
|
22
|
+
self.history_file = 'CHANGELOG.md'
|
23
|
+
self.extra_deps << ["savon"]
|
24
|
+
end
|
25
|
+
|
26
|
+
task :prerelease => [:clobber, :check_manifest, :test]
|
27
|
+
|
28
|
+
RSpec::Core::RakeTask.new
|
29
|
+
|
30
|
+
task :default => :spec
|
31
|
+
task :test => :spec
|
data/bin/profitbricks
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'pp'
|
2
|
+
require 'profitbricks'
|
3
|
+
|
4
|
+
Profitbricks.configure do |config|
|
5
|
+
config.username = "username"
|
6
|
+
config.password = "password"
|
7
|
+
end
|
8
|
+
|
9
|
+
# An example how to use the Profitbricks API
|
10
|
+
#
|
11
|
+
# We will create a small DataCenter with two Servers
|
12
|
+
# * one webserver connected to the internet
|
13
|
+
# * and a database server
|
14
|
+
#
|
15
|
+
|
16
|
+
dc = DataCenter.create('Example Project')
|
17
|
+
dc.wait_for_provisioning
|
18
|
+
|
19
|
+
debian = Image.find(:name => "profitbricks-debian-squeeze-EN-6.0.1a-amd64.img")
|
20
|
+
dc.wait_for_provisioning
|
21
|
+
|
22
|
+
hdd1 = Storage.create(:name => "Debian Webserver", :size => 10, :mount_image_id => debian.id, :data_center_id => dc.id)
|
23
|
+
dc.wait_for_provisioning
|
24
|
+
|
25
|
+
webserver = dc.create_server(:cores => 1, :ram => 256, :name => "Webserver", :boot_from_storage_id => hdd1.id, :lan_id => 2)
|
26
|
+
dc.wait_for_provisioning
|
27
|
+
webserver.reload
|
28
|
+
|
29
|
+
webserver_private_nic = webserver.nics.first
|
30
|
+
webserver_private_nic.update(:ip => "192.168.0.10")
|
31
|
+
|
32
|
+
ipblock = IpBlock.reserve(1)
|
33
|
+
ip = ipblock.ips.first
|
34
|
+
|
35
|
+
dc.wait_for_provisioning
|
36
|
+
|
37
|
+
public_nic = Nic.create(:server_id => webserver.id, :lan_id => 1, :ip => ip, :name => "Public")
|
38
|
+
dc.wait_for_provisioning
|
39
|
+
|
40
|
+
public_nic.set_internet_access = true
|
41
|
+
dc.wait_for_provisioning
|
42
|
+
|
43
|
+
|
44
|
+
hdd2 = Storage.create(:name => "Debian Database Server", :size => 10, :mount_image_id => debian.id, :data_center_id => dc.id)
|
45
|
+
dc.wait_for_provisioning
|
46
|
+
|
47
|
+
db_server = dc.create_server(:cores => 1, :ram => 256, :name => "Database Server", :lan_id => 2, :boot_from_storage_id => hdd2.id, :data_center_id => dc.id)
|
48
|
+
dc.wait_for_provisioning
|
49
|
+
db_server.reload
|
50
|
+
|
51
|
+
db_server_private_nic = db_server.nics.first
|
52
|
+
db_server_private_nic.update(:ip => "192.168.0.11")
|
53
|
+
dc.wait_for_provisioning
|
54
|
+
|
55
|
+
dc.reload
|
56
|
+
|
57
|
+
pp dc
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Profitbricks
|
2
|
+
class Config
|
3
|
+
class << self
|
4
|
+
# Your Profitbricks username (required)
|
5
|
+
attr_accessor :username
|
6
|
+
# Your Profitbricks password (required)
|
7
|
+
attr_accessor :password
|
8
|
+
# Disable namespacing the classes, set to false to avoid name conflicts, default: true
|
9
|
+
attr_accessor :global_classes
|
10
|
+
# Development only, saves SOAP responses on disk, default: false
|
11
|
+
attr_accessor :save_responses
|
12
|
+
# Set to true to enable Savons request/response logging, default: false
|
13
|
+
attr_accessor :log
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
module Profitbricks
|
2
|
+
class DataCenter < Profitbricks::Model
|
3
|
+
has_many :servers
|
4
|
+
has_many :storages
|
5
|
+
|
6
|
+
# Deletes an empty Virtual Data Center. All components must be removed first.
|
7
|
+
# @return [Boolean] true on success, false otherwise
|
8
|
+
def delete
|
9
|
+
response = Profitbricks.request :delete_data_center, "<dataCenterId>#{self.id}</dataCenterId>"
|
10
|
+
response.to_hash[:delete_data_center_response][:return] ? true : false
|
11
|
+
end
|
12
|
+
|
13
|
+
# Removes all components from the current Virtual Data Center.
|
14
|
+
# @return The current Virtual Data Center
|
15
|
+
def clear
|
16
|
+
response = Profitbricks.request :clear_data_center, "<dataCenterId>#{self.id}</dataCenterId>"
|
17
|
+
@provisioning_state = nil
|
18
|
+
@servers = []
|
19
|
+
@storages = []
|
20
|
+
return self if response.to_hash[:clear_data_center_response][:return]
|
21
|
+
end
|
22
|
+
|
23
|
+
# Renames the Virtual Data Center.
|
24
|
+
#
|
25
|
+
# @param [String] Name
|
26
|
+
# @return [DataCenter] The renamed DataCenter
|
27
|
+
def rename(name)
|
28
|
+
response = Profitbricks.request :update_data_center,
|
29
|
+
"<arg0><dataCenterId>#{self.id}</dataCenterId><dataCenterName>#{name}</dataCenterName></arg0>"
|
30
|
+
if response.to_hash[:update_data_center_response][:return]
|
31
|
+
@name = name
|
32
|
+
end
|
33
|
+
self
|
34
|
+
end
|
35
|
+
alias_method :name=, :rename
|
36
|
+
|
37
|
+
# This is a lightweight function for pooling the current provisioning state of the Virtual Data
|
38
|
+
# Center. It is recommended to use this function for large Virtual Data Centers to query request
|
39
|
+
# results.
|
40
|
+
#
|
41
|
+
# @return [String] Provisioning State of the target Virtual Data Center (INACTIVE, INPROCESS, AVAILABLE, DELETED)
|
42
|
+
def update_state
|
43
|
+
response = Profitbricks.request :get_data_center_state, "<dataCenterId>#{self.id}</dataCenterId>"
|
44
|
+
@provisioning_state = response.to_hash[:get_data_center_state_response][:return]
|
45
|
+
self.provisioning_state
|
46
|
+
end
|
47
|
+
|
48
|
+
# Creates a Server in the current Virtual Data Center, automatically sets the :data_center_id
|
49
|
+
# @see Profitbricks::Server#create
|
50
|
+
def create_server(options)
|
51
|
+
Server.create(options.merge(:data_center_id => self.id))
|
52
|
+
end
|
53
|
+
|
54
|
+
def wait_for_provisioning
|
55
|
+
self.update_state
|
56
|
+
while @provisioning_state != 'AVAILABLE'
|
57
|
+
self.update_state
|
58
|
+
sleep 1
|
59
|
+
end
|
60
|
+
self.reload
|
61
|
+
end
|
62
|
+
|
63
|
+
class << self
|
64
|
+
# Returns a list of all Virtual Data Centers created by the user, including ID, name and version number.
|
65
|
+
#
|
66
|
+
# @return [Array <DataCenter>] Array of all available DataCenter
|
67
|
+
def all
|
68
|
+
resp = Profitbricks.request :get_all_data_centers
|
69
|
+
datacenters = resp.to_hash[:get_all_data_centers_response][:return]
|
70
|
+
[datacenters].flatten.compact.collect do |dc|
|
71
|
+
PB::DataCenter.find(:id => PB::DataCenter.new(dc).id)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Creates and saves a new, empty Virtual Data Center.
|
76
|
+
#
|
77
|
+
# @param [String] Name of the Virtual Data Center (can not start with or contain (@, /, \\, |, ", '))
|
78
|
+
# @return [DataCenter] The newly created Virtual Data Center
|
79
|
+
def create(name)
|
80
|
+
response = Profitbricks.request :create_data_center, "<dataCenterName>#{name}</dataCenterName>"
|
81
|
+
self.find(:id => response.to_hash[:create_data_center_response][:return][:data_center_id] )
|
82
|
+
end
|
83
|
+
|
84
|
+
# Finds a Virtual Data Center
|
85
|
+
# @param [Hash] options either name or id of the Virtual Data Center
|
86
|
+
# @option options [String] :name The name of the Virtual Data Center
|
87
|
+
# @option options [String] :id The id of the Virtual Data Center
|
88
|
+
def find(options = {})
|
89
|
+
if options[:name]
|
90
|
+
dc = PB::DataCenter.all().select { |d| d.name == options[:name] }.first
|
91
|
+
options[:id] = dc.id if dc
|
92
|
+
end
|
93
|
+
raise "Unable to locate the datacenter named '#{options[:name]}'" unless options[:id]
|
94
|
+
response = Profitbricks.request :get_data_center, "<dataCenterId>#{options[:id]}</dataCenterId>"
|
95
|
+
PB::DataCenter.new(response.to_hash[:get_data_center_response][:return])
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|