fog-brightbox 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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