fog-brightbox 0.0.1

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.
Files changed (147) hide show
  1. checksums.yaml +7 -0
  2. data/fog-brightbox.gemspec +28 -0
  3. data/lib/fog/brightbox/compute/image_selector.rb +45 -0
  4. data/lib/fog/brightbox/compute/shared.rb +230 -0
  5. data/lib/fog/brightbox/compute.rb +305 -0
  6. data/lib/fog/brightbox/core.rb +11 -0
  7. data/lib/fog/brightbox/models/compute/account.rb +69 -0
  8. data/lib/fog/brightbox/models/compute/accounts.rb +29 -0
  9. data/lib/fog/brightbox/models/compute/api_client.rb +37 -0
  10. data/lib/fog/brightbox/models/compute/api_clients.rb +24 -0
  11. data/lib/fog/brightbox/models/compute/application.rb +24 -0
  12. data/lib/fog/brightbox/models/compute/applications.rb +28 -0
  13. data/lib/fog/brightbox/models/compute/cloud_ip.rb +68 -0
  14. data/lib/fog/brightbox/models/compute/cloud_ips.rb +34 -0
  15. data/lib/fog/brightbox/models/compute/collaboration.rb +49 -0
  16. data/lib/fog/brightbox/models/compute/collaborations.rb +47 -0
  17. data/lib/fog/brightbox/models/compute/database_server.rb +97 -0
  18. data/lib/fog/brightbox/models/compute/database_servers.rb +28 -0
  19. data/lib/fog/brightbox/models/compute/database_snapshot.rb +52 -0
  20. data/lib/fog/brightbox/models/compute/database_snapshots.rb +24 -0
  21. data/lib/fog/brightbox/models/compute/database_type.rb +19 -0
  22. data/lib/fog/brightbox/models/compute/database_types.rb +26 -0
  23. data/lib/fog/brightbox/models/compute/firewall_policies.rb +29 -0
  24. data/lib/fog/brightbox/models/compute/firewall_policy.rb +63 -0
  25. data/lib/fog/brightbox/models/compute/firewall_rule.rb +54 -0
  26. data/lib/fog/brightbox/models/compute/firewall_rules.rb +24 -0
  27. data/lib/fog/brightbox/models/compute/flavor.rb +32 -0
  28. data/lib/fog/brightbox/models/compute/flavors.rb +28 -0
  29. data/lib/fog/brightbox/models/compute/image.rb +64 -0
  30. data/lib/fog/brightbox/models/compute/images.rb +28 -0
  31. data/lib/fog/brightbox/models/compute/load_balancer.rb +107 -0
  32. data/lib/fog/brightbox/models/compute/load_balancers.rb +28 -0
  33. data/lib/fog/brightbox/models/compute/server.rb +217 -0
  34. data/lib/fog/brightbox/models/compute/server_group.rb +94 -0
  35. data/lib/fog/brightbox/models/compute/server_groups.rb +29 -0
  36. data/lib/fog/brightbox/models/compute/servers.rb +61 -0
  37. data/lib/fog/brightbox/models/compute/user.rb +43 -0
  38. data/lib/fog/brightbox/models/compute/user_collaboration.rb +44 -0
  39. data/lib/fog/brightbox/models/compute/user_collaborations.rb +31 -0
  40. data/lib/fog/brightbox/models/compute/users.rb +27 -0
  41. data/lib/fog/brightbox/models/compute/zone.rb +22 -0
  42. data/lib/fog/brightbox/models/compute/zones.rb +29 -0
  43. data/lib/fog/brightbox/oauth2.rb +166 -0
  44. data/lib/fog/brightbox/requests/compute/accept_user_collaboration.rb +21 -0
  45. data/lib/fog/brightbox/requests/compute/activate_console_server.rb +21 -0
  46. data/lib/fog/brightbox/requests/compute/add_listeners_load_balancer.rb +24 -0
  47. data/lib/fog/brightbox/requests/compute/add_nodes_load_balancer.rb +24 -0
  48. data/lib/fog/brightbox/requests/compute/add_servers_server_group.rb +34 -0
  49. data/lib/fog/brightbox/requests/compute/apply_to_firewall_policy.rb +24 -0
  50. data/lib/fog/brightbox/requests/compute/create_api_client.rb +23 -0
  51. data/lib/fog/brightbox/requests/compute/create_application.rb +23 -0
  52. data/lib/fog/brightbox/requests/compute/create_cloud_ip.rb +24 -0
  53. data/lib/fog/brightbox/requests/compute/create_collaboration.rb +23 -0
  54. data/lib/fog/brightbox/requests/compute/create_database_server.rb +25 -0
  55. data/lib/fog/brightbox/requests/compute/create_firewall_policy.rb +26 -0
  56. data/lib/fog/brightbox/requests/compute/create_firewall_rule.rb +29 -0
  57. data/lib/fog/brightbox/requests/compute/create_image.rb +30 -0
  58. data/lib/fog/brightbox/requests/compute/create_load_balancer.rb +26 -0
  59. data/lib/fog/brightbox/requests/compute/create_server.rb +29 -0
  60. data/lib/fog/brightbox/requests/compute/create_server_group.rb +23 -0
  61. data/lib/fog/brightbox/requests/compute/delete_api_client.rb +28 -0
  62. data/lib/fog/brightbox/requests/compute/delete_application.rb +28 -0
  63. data/lib/fog/brightbox/requests/compute/delete_cloud_ip.rb +28 -0
  64. data/lib/fog/brightbox/requests/compute/delete_collaboration.rb +28 -0
  65. data/lib/fog/brightbox/requests/compute/delete_database_server.rb +26 -0
  66. data/lib/fog/brightbox/requests/compute/delete_database_snapshot.rb +26 -0
  67. data/lib/fog/brightbox/requests/compute/delete_firewall_policy.rb +28 -0
  68. data/lib/fog/brightbox/requests/compute/delete_firewall_rule.rb +28 -0
  69. data/lib/fog/brightbox/requests/compute/delete_image.rb +28 -0
  70. data/lib/fog/brightbox/requests/compute/delete_load_balancer.rb +28 -0
  71. data/lib/fog/brightbox/requests/compute/delete_server.rb +28 -0
  72. data/lib/fog/brightbox/requests/compute/delete_server_group.rb +28 -0
  73. data/lib/fog/brightbox/requests/compute/delete_user_collaboration.rb +28 -0
  74. data/lib/fog/brightbox/requests/compute/get_account.rb +29 -0
  75. data/lib/fog/brightbox/requests/compute/get_api_client.rb +21 -0
  76. data/lib/fog/brightbox/requests/compute/get_application.rb +21 -0
  77. data/lib/fog/brightbox/requests/compute/get_authenticated_user.rb +17 -0
  78. data/lib/fog/brightbox/requests/compute/get_cloud_ip.rb +21 -0
  79. data/lib/fog/brightbox/requests/compute/get_collaboration.rb +21 -0
  80. data/lib/fog/brightbox/requests/compute/get_database_server.rb +19 -0
  81. data/lib/fog/brightbox/requests/compute/get_database_snapshot.rb +19 -0
  82. data/lib/fog/brightbox/requests/compute/get_database_type.rb +21 -0
  83. data/lib/fog/brightbox/requests/compute/get_firewall_policy.rb +21 -0
  84. data/lib/fog/brightbox/requests/compute/get_firewall_rule.rb +21 -0
  85. data/lib/fog/brightbox/requests/compute/get_image.rb +21 -0
  86. data/lib/fog/brightbox/requests/compute/get_interface.rb +21 -0
  87. data/lib/fog/brightbox/requests/compute/get_load_balancer.rb +21 -0
  88. data/lib/fog/brightbox/requests/compute/get_scoped_account.rb +15 -0
  89. data/lib/fog/brightbox/requests/compute/get_server.rb +21 -0
  90. data/lib/fog/brightbox/requests/compute/get_server_group.rb +21 -0
  91. data/lib/fog/brightbox/requests/compute/get_server_type.rb +21 -0
  92. data/lib/fog/brightbox/requests/compute/get_user.rb +29 -0
  93. data/lib/fog/brightbox/requests/compute/get_user_collaboration.rb +21 -0
  94. data/lib/fog/brightbox/requests/compute/get_zone.rb +21 -0
  95. data/lib/fog/brightbox/requests/compute/list_accounts.rb +17 -0
  96. data/lib/fog/brightbox/requests/compute/list_api_clients.rb +19 -0
  97. data/lib/fog/brightbox/requests/compute/list_applications.rb +19 -0
  98. data/lib/fog/brightbox/requests/compute/list_cloud_ips.rb +19 -0
  99. data/lib/fog/brightbox/requests/compute/list_collaborations.rb +19 -0
  100. data/lib/fog/brightbox/requests/compute/list_database_servers.rb +17 -0
  101. data/lib/fog/brightbox/requests/compute/list_database_snapshots.rb +17 -0
  102. data/lib/fog/brightbox/requests/compute/list_database_types.rb +19 -0
  103. data/lib/fog/brightbox/requests/compute/list_firewall_policies.rb +19 -0
  104. data/lib/fog/brightbox/requests/compute/list_images.rb +19 -0
  105. data/lib/fog/brightbox/requests/compute/list_load_balancers.rb +19 -0
  106. data/lib/fog/brightbox/requests/compute/list_server_groups.rb +19 -0
  107. data/lib/fog/brightbox/requests/compute/list_server_types.rb +19 -0
  108. data/lib/fog/brightbox/requests/compute/list_servers.rb +19 -0
  109. data/lib/fog/brightbox/requests/compute/list_user_collaborations.rb +19 -0
  110. data/lib/fog/brightbox/requests/compute/list_users.rb +19 -0
  111. data/lib/fog/brightbox/requests/compute/list_zones.rb +19 -0
  112. data/lib/fog/brightbox/requests/compute/map_cloud_ip.rb +24 -0
  113. data/lib/fog/brightbox/requests/compute/move_servers_server_group.rb +36 -0
  114. data/lib/fog/brightbox/requests/compute/reject_user_collaboration.rb +21 -0
  115. data/lib/fog/brightbox/requests/compute/remove_firewall_policy.rb +24 -0
  116. data/lib/fog/brightbox/requests/compute/remove_listeners_load_balancer.rb +24 -0
  117. data/lib/fog/brightbox/requests/compute/remove_nodes_load_balancer.rb +24 -0
  118. data/lib/fog/brightbox/requests/compute/remove_servers_server_group.rb +34 -0
  119. data/lib/fog/brightbox/requests/compute/resend_collaboration.rb +21 -0
  120. data/lib/fog/brightbox/requests/compute/reset_ftp_password_account.rb +32 -0
  121. data/lib/fog/brightbox/requests/compute/reset_ftp_password_scoped_account.rb +18 -0
  122. data/lib/fog/brightbox/requests/compute/reset_password_database_server.rb +19 -0
  123. data/lib/fog/brightbox/requests/compute/reset_secret_api_client.rb +25 -0
  124. data/lib/fog/brightbox/requests/compute/reset_secret_application.rb +21 -0
  125. data/lib/fog/brightbox/requests/compute/shutdown_server.rb +21 -0
  126. data/lib/fog/brightbox/requests/compute/snapshot_database_server.rb +19 -0
  127. data/lib/fog/brightbox/requests/compute/snapshot_server.rb +21 -0
  128. data/lib/fog/brightbox/requests/compute/start_server.rb +21 -0
  129. data/lib/fog/brightbox/requests/compute/stop_server.rb +21 -0
  130. data/lib/fog/brightbox/requests/compute/unmap_cloud_ip.rb +21 -0
  131. data/lib/fog/brightbox/requests/compute/update_account.rb +61 -0
  132. data/lib/fog/brightbox/requests/compute/update_api_client.rb +26 -0
  133. data/lib/fog/brightbox/requests/compute/update_application.rb +26 -0
  134. data/lib/fog/brightbox/requests/compute/update_cloud_ip.rb +27 -0
  135. data/lib/fog/brightbox/requests/compute/update_database_server.rb +25 -0
  136. data/lib/fog/brightbox/requests/compute/update_database_snapshot.rb +26 -0
  137. data/lib/fog/brightbox/requests/compute/update_firewall_policy.rb +26 -0
  138. data/lib/fog/brightbox/requests/compute/update_firewall_rule.rb +31 -0
  139. data/lib/fog/brightbox/requests/compute/update_image.rb +31 -0
  140. data/lib/fog/brightbox/requests/compute/update_load_balancer.rb +29 -0
  141. data/lib/fog/brightbox/requests/compute/update_scoped_account.rb +31 -0
  142. data/lib/fog/brightbox/requests/compute/update_server.rb +28 -0
  143. data/lib/fog/brightbox/requests/compute/update_server_group.rb +26 -0
  144. data/lib/fog/brightbox/requests/compute/update_user.rb +29 -0
  145. data/lib/fog/brightbox/version.rb +5 -0
  146. data/lib/fog/brightbox.rb +1 -0
  147. metadata +261 -0
@@ -0,0 +1,11 @@
1
+ require 'fog/core'
2
+ require 'fog/json'
3
+
4
+ module Fog
5
+ module Brightbox
6
+ extend Fog::Provider
7
+
8
+ service(:compute, 'Compute')
9
+
10
+ end
11
+ end
@@ -0,0 +1,69 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class Brightbox
6
+
7
+ class Account < Fog::Model
8
+
9
+ identity :id
10
+ attribute :url
11
+ attribute :resource_type
12
+
13
+ attribute :name
14
+ attribute :status
15
+
16
+ attribute :address_1
17
+ attribute :address_2
18
+ attribute :city
19
+ attribute :county
20
+ attribute :postcode
21
+ attribute :country_code
22
+ attribute :country_name
23
+ attribute :vat_registration_number
24
+ attribute :telephone_number
25
+ attribute :verified_telephone
26
+ attribute :verified_ip
27
+ attribute :ram_limit
28
+ attribute :ram_used
29
+ attribute :cloud_ips_limit
30
+ attribute :cloud_ips_used
31
+ attribute :load_balancers_limit
32
+ attribute :load_balancers_used
33
+ attribute :library_ftp_host
34
+ attribute :library_ftp_user
35
+ # This is always returned as nil unless after a call to reset_ftp_password
36
+ attribute :library_ftp_password
37
+
38
+ # Boolean flags
39
+ attribute :valid_credit_card
40
+ attribute :telephone_verified
41
+
42
+ # Times
43
+ attribute :created_at, :type => :time
44
+ attribute :verified_at, :type => :time
45
+
46
+ # Links - to be replaced
47
+ attribute :owner_id, :aliases => "owner", :squash => "id"
48
+ attribute :clients
49
+ attribute :images
50
+ attribute :servers
51
+ attribute :users
52
+ attribute :zones
53
+
54
+ # Resets the account's image library FTP password returning the new value
55
+ #
56
+ # @return [String] Newly issue FTP password
57
+ #
58
+ def reset_ftp_password
59
+ requires :identity
60
+ data = service.reset_ftp_password_account(identity)
61
+ merge_attributes(data)
62
+ library_ftp_password
63
+ end
64
+
65
+ end
66
+
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,29 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/brightbox/models/compute/account'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Brightbox
7
+
8
+ class Accounts < Fog::Collection
9
+
10
+ model Fog::Compute::Brightbox::Account
11
+
12
+ def all
13
+ data = service.list_accounts
14
+ load(data)
15
+ end
16
+
17
+ def get(identifier)
18
+ return nil if identifier.nil? || identifier == ""
19
+ data = service.get_account(identifier)
20
+ new(data)
21
+ rescue Excon::Errors::NotFound
22
+ nil
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,37 @@
1
+ module Fog
2
+ module Compute
3
+ class Brightbox
4
+ class ApiClient < Fog::Model
5
+ identity :id
6
+ attribute :name
7
+ attribute :description
8
+ attribute :secret
9
+ attribute :revoked_at, :type => :time
10
+ attribute :account_id
11
+
12
+ def save
13
+ raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
14
+ options = {
15
+ :name => name,
16
+ :description => description
17
+ }.delete_if { |k, v| v.nil? || v == "" }
18
+ data = service.create_api_client(options)
19
+ merge_attributes(data)
20
+ true
21
+ end
22
+
23
+ def destroy
24
+ requires :identity
25
+ service.destroy_api_client(identity)
26
+ true
27
+ end
28
+
29
+ def reset_secret
30
+ requires :identity
31
+ service.reset_secret_api_client(identity)
32
+ true
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,24 @@
1
+ require "fog/core/collection"
2
+ require "fog/brightbox/models/compute/api_client"
3
+
4
+ module Fog
5
+ module Compute
6
+ class Brightbox
7
+ class ApiClients < Fog::Collection
8
+ model Fog::Compute::Brightbox::ApiClient
9
+
10
+ def all
11
+ data = service.list_api_clients
12
+ load(data)
13
+ end
14
+
15
+ def get(identifier = nil)
16
+ data = service.get_api_client(identifier)
17
+ new(data)
18
+ rescue Excon::Errors::NotFound
19
+ nil
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class Brightbox
6
+ class Application < Fog::Model
7
+ identity :id
8
+ attribute :url
9
+ attribute :name
10
+ attribute :secret
11
+
12
+ def save
13
+ raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
14
+ options = {
15
+ :name => name
16
+ }.delete_if { |k, v| v.nil? || v == "" }
17
+ data = service.create_application(options)
18
+ merge_attributes(data)
19
+ true
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,28 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/brightbox/models/compute/application'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Brightbox
7
+
8
+ class Applications < Fog::Collection
9
+
10
+ model Fog::Compute::Brightbox::Application
11
+
12
+ def all
13
+ data = service.list_applications
14
+ load(data)
15
+ end
16
+
17
+ def get(identifier)
18
+ data = service.get_application(identifier)
19
+ new(data)
20
+ rescue Excon::Errors::NotFound
21
+ nil
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,68 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class Brightbox
6
+
7
+ class CloudIp < Fog::Model
8
+
9
+ identity :id
10
+ attribute :url
11
+ attribute :resource_type
12
+
13
+ attribute :name
14
+ attribute :status
15
+ attribute :description
16
+
17
+ attribute :reverse_dns
18
+ attribute :public_ip
19
+
20
+ # Links - to be replaced
21
+ attribute :account_id, :aliases => "account", :squash => "id"
22
+ attribute :interface_id, :aliases => "interface", :squash => "id"
23
+ attribute :server_id, :aliases => "server", :squash => "id"
24
+ attribute :load_balancer, :alias => "load_balancer", :squash => "id"
25
+ attribute :server_group, :alias => "server_group", :squash => "id"
26
+ attribute :database_server, :alias => "database_server", :squash => "id"
27
+ attribute :port_translators
28
+ attribute :name
29
+
30
+ # Attempt to map or point the Cloud IP to the destination resource.
31
+ #
32
+ # @param [Object] destination
33
+ #
34
+ def map(destination)
35
+ requires :identity
36
+ if destination.respond_to?(:mapping_identity)
37
+ final_destination = destination.mapping_identity
38
+ elsif destination.respond_to?(:identity)
39
+ final_destination = destination.identity
40
+ else
41
+ final_destination = destination
42
+ end
43
+ service.map_cloud_ip(identity, :destination => final_destination)
44
+ end
45
+
46
+ def mapped?
47
+ status == "mapped"
48
+ end
49
+
50
+ def unmap
51
+ requires :identity
52
+ service.unmap_cloud_ip(identity)
53
+ end
54
+
55
+ def destroy
56
+ requires :identity
57
+ service.destroy_cloud_ip(identity)
58
+ end
59
+
60
+ def destination_id
61
+ server_id || load_balancer || server_group || database_server || interface_id
62
+ end
63
+
64
+ end
65
+
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,34 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/brightbox/models/compute/cloud_ip'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Brightbox
7
+
8
+ class CloudIps < Fog::Collection
9
+
10
+ model Fog::Compute::Brightbox::CloudIp
11
+
12
+ def all
13
+ data = service.list_cloud_ips
14
+ load(data)
15
+ end
16
+
17
+ def get(identifier)
18
+ return nil if identifier.nil? || identifier == ""
19
+ data = service.get_cloud_ip(identifier)
20
+ new(data)
21
+ rescue Excon::Errors::NotFound
22
+ nil
23
+ end
24
+
25
+ def allocate
26
+ data = service.create_cloud_ip
27
+ new(data)
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,49 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class Brightbox
6
+ class Collaboration < Fog::Model
7
+ identity :id
8
+ attribute :status
9
+ attribute :email
10
+ attribute :role
11
+ attribute :role_label
12
+ attribute :account
13
+ attribute :user
14
+ attribute :inviter
15
+
16
+ def account_id
17
+ account['id'] || account[:id]
18
+ end
19
+
20
+ def save
21
+ raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if identity
22
+
23
+ options = {
24
+ :role => role,
25
+ :email => email
26
+ }.delete_if { |k, v| v.nil? || v == "" }
27
+
28
+ data = service.create_collaboration(options)
29
+ merge_attributes(data)
30
+ true
31
+ end
32
+
33
+ def resend
34
+ requires :identity
35
+ data = service.resend_collaboration(identity)
36
+ merge_attributes(data)
37
+ true
38
+ end
39
+
40
+ def destroy
41
+ requires :identity
42
+ data = service.destroy_collaboration(identity)
43
+ merge_attributes(data)
44
+ true
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,47 @@
1
+ require "fog/core/collection"
2
+ require "fog/brightbox/models/compute/collaboration"
3
+
4
+ module Fog
5
+ module Compute
6
+ class Brightbox
7
+ class Collaborations < Fog::Collection
8
+ model Fog::Compute::Brightbox::Collaboration
9
+
10
+ def all
11
+ data = service.list_collaborations
12
+ load(data)
13
+ end
14
+
15
+ def get(identifier)
16
+ return nil if identifier.nil? || identifier == ""
17
+ data = service.get_collaboration(identifier)
18
+ new(data)
19
+ rescue Excon::Errors::NotFound
20
+ nil
21
+ end
22
+
23
+ # Invites a user (via an email) to collaborate on the currently scoped
24
+ # account at the +role+ level.
25
+ #
26
+ # @param [String] email The email address to use for the invitation
27
+ # @param [String] role The role being granted. Only (+admin+ is
28
+ # currently supported
29
+ # @return [Fog::Compute::Brightbox::Collaboration]
30
+ #
31
+ def invite(email, role)
32
+ return nil if email.nil? || email == ""
33
+ return nil if role.nil? || role == ""
34
+ options = { :email => email, :role => role }
35
+ data = service.create_collaboration(options)
36
+ new(data)
37
+ end
38
+
39
+ def destroy
40
+ requires :identity
41
+ service.destroy_collaboration(identity)
42
+ true
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,97 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class Brightbox
6
+ class DatabaseServer < Fog::Model
7
+ identity :id
8
+ attribute :url
9
+ attribute :resource_type
10
+
11
+ attribute :name
12
+ attribute :description
13
+ attribute :state, :aliases => "status"
14
+
15
+ attribute :admin_username
16
+ attribute :admin_password
17
+
18
+ attribute :database_engine
19
+ attribute :database_version
20
+
21
+ attribute :maintenance_weekday
22
+ attribute :maintenance_hour
23
+
24
+ attribute :created_at, :type => :time
25
+ attribute :updated_at, :type => :time
26
+ attribute :deleted_at, :type => :time
27
+
28
+ attribute :allow_access
29
+
30
+ attribute :flavor_id, "alias" => "database_server_type", :squash => "id"
31
+ attribute :zone_id, "alias" => "zone", :squash => "id"
32
+
33
+ attribute :cloud_ips
34
+
35
+ def save
36
+ options = {
37
+ :name => name,
38
+ :description => description
39
+ }
40
+
41
+ options[:allow_access] = allow_access if allow_access
42
+
43
+ # These may be nil which sets them to default values upstream
44
+ # TODO: Dirty track the values so we don't send them when already nil
45
+ options[:maintenance_weekday] = maintenance_weekday
46
+ options[:maintenance_hour] = maintenance_hour
47
+
48
+ if persisted?
49
+ data = update_database_server(options)
50
+ else
51
+ options[:engine] = database_engine if database_engine
52
+ options[:version] = database_version if database_version
53
+ options[:database_type] = flavor_id if flavor_id
54
+ options[:zone] = zone_id if zone_id
55
+
56
+ data = create_database_server(options)
57
+ end
58
+
59
+ merge_attributes(data)
60
+ true
61
+ end
62
+
63
+ def ready?
64
+ state == "active"
65
+ end
66
+
67
+ def snapshot
68
+ requires :identity
69
+ merge_attributes(service.snapshot_database_server(identity))
70
+ true
71
+ end
72
+
73
+ def destroy
74
+ requires :identity
75
+ merge_attributes(service.destroy_database_server(identity))
76
+ true
77
+ end
78
+
79
+ def reset_password
80
+ requires :identity
81
+ merge_attributes(service.reset_password_database_server(identity))
82
+ true
83
+ end
84
+
85
+ private
86
+
87
+ def create_database_server(options)
88
+ service.create_database_server(options)
89
+ end
90
+
91
+ def update_database_server(options)
92
+ service.update_database_server(identity, options)
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end