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.
- checksums.yaml +7 -0
- data/fog-brightbox.gemspec +28 -0
- data/lib/fog/brightbox/compute/image_selector.rb +45 -0
- data/lib/fog/brightbox/compute/shared.rb +230 -0
- data/lib/fog/brightbox/compute.rb +305 -0
- data/lib/fog/brightbox/core.rb +11 -0
- data/lib/fog/brightbox/models/compute/account.rb +69 -0
- data/lib/fog/brightbox/models/compute/accounts.rb +29 -0
- data/lib/fog/brightbox/models/compute/api_client.rb +37 -0
- data/lib/fog/brightbox/models/compute/api_clients.rb +24 -0
- data/lib/fog/brightbox/models/compute/application.rb +24 -0
- data/lib/fog/brightbox/models/compute/applications.rb +28 -0
- data/lib/fog/brightbox/models/compute/cloud_ip.rb +68 -0
- data/lib/fog/brightbox/models/compute/cloud_ips.rb +34 -0
- data/lib/fog/brightbox/models/compute/collaboration.rb +49 -0
- data/lib/fog/brightbox/models/compute/collaborations.rb +47 -0
- data/lib/fog/brightbox/models/compute/database_server.rb +97 -0
- data/lib/fog/brightbox/models/compute/database_servers.rb +28 -0
- data/lib/fog/brightbox/models/compute/database_snapshot.rb +52 -0
- data/lib/fog/brightbox/models/compute/database_snapshots.rb +24 -0
- data/lib/fog/brightbox/models/compute/database_type.rb +19 -0
- data/lib/fog/brightbox/models/compute/database_types.rb +26 -0
- data/lib/fog/brightbox/models/compute/firewall_policies.rb +29 -0
- data/lib/fog/brightbox/models/compute/firewall_policy.rb +63 -0
- data/lib/fog/brightbox/models/compute/firewall_rule.rb +54 -0
- data/lib/fog/brightbox/models/compute/firewall_rules.rb +24 -0
- data/lib/fog/brightbox/models/compute/flavor.rb +32 -0
- data/lib/fog/brightbox/models/compute/flavors.rb +28 -0
- data/lib/fog/brightbox/models/compute/image.rb +64 -0
- data/lib/fog/brightbox/models/compute/images.rb +28 -0
- data/lib/fog/brightbox/models/compute/load_balancer.rb +107 -0
- data/lib/fog/brightbox/models/compute/load_balancers.rb +28 -0
- data/lib/fog/brightbox/models/compute/server.rb +217 -0
- data/lib/fog/brightbox/models/compute/server_group.rb +94 -0
- data/lib/fog/brightbox/models/compute/server_groups.rb +29 -0
- data/lib/fog/brightbox/models/compute/servers.rb +61 -0
- data/lib/fog/brightbox/models/compute/user.rb +43 -0
- data/lib/fog/brightbox/models/compute/user_collaboration.rb +44 -0
- data/lib/fog/brightbox/models/compute/user_collaborations.rb +31 -0
- data/lib/fog/brightbox/models/compute/users.rb +27 -0
- data/lib/fog/brightbox/models/compute/zone.rb +22 -0
- data/lib/fog/brightbox/models/compute/zones.rb +29 -0
- data/lib/fog/brightbox/oauth2.rb +166 -0
- data/lib/fog/brightbox/requests/compute/accept_user_collaboration.rb +21 -0
- data/lib/fog/brightbox/requests/compute/activate_console_server.rb +21 -0
- data/lib/fog/brightbox/requests/compute/add_listeners_load_balancer.rb +24 -0
- data/lib/fog/brightbox/requests/compute/add_nodes_load_balancer.rb +24 -0
- data/lib/fog/brightbox/requests/compute/add_servers_server_group.rb +34 -0
- data/lib/fog/brightbox/requests/compute/apply_to_firewall_policy.rb +24 -0
- data/lib/fog/brightbox/requests/compute/create_api_client.rb +23 -0
- data/lib/fog/brightbox/requests/compute/create_application.rb +23 -0
- data/lib/fog/brightbox/requests/compute/create_cloud_ip.rb +24 -0
- data/lib/fog/brightbox/requests/compute/create_collaboration.rb +23 -0
- data/lib/fog/brightbox/requests/compute/create_database_server.rb +25 -0
- data/lib/fog/brightbox/requests/compute/create_firewall_policy.rb +26 -0
- data/lib/fog/brightbox/requests/compute/create_firewall_rule.rb +29 -0
- data/lib/fog/brightbox/requests/compute/create_image.rb +30 -0
- data/lib/fog/brightbox/requests/compute/create_load_balancer.rb +26 -0
- data/lib/fog/brightbox/requests/compute/create_server.rb +29 -0
- data/lib/fog/brightbox/requests/compute/create_server_group.rb +23 -0
- data/lib/fog/brightbox/requests/compute/delete_api_client.rb +28 -0
- data/lib/fog/brightbox/requests/compute/delete_application.rb +28 -0
- data/lib/fog/brightbox/requests/compute/delete_cloud_ip.rb +28 -0
- data/lib/fog/brightbox/requests/compute/delete_collaboration.rb +28 -0
- data/lib/fog/brightbox/requests/compute/delete_database_server.rb +26 -0
- data/lib/fog/brightbox/requests/compute/delete_database_snapshot.rb +26 -0
- data/lib/fog/brightbox/requests/compute/delete_firewall_policy.rb +28 -0
- data/lib/fog/brightbox/requests/compute/delete_firewall_rule.rb +28 -0
- data/lib/fog/brightbox/requests/compute/delete_image.rb +28 -0
- data/lib/fog/brightbox/requests/compute/delete_load_balancer.rb +28 -0
- data/lib/fog/brightbox/requests/compute/delete_server.rb +28 -0
- data/lib/fog/brightbox/requests/compute/delete_server_group.rb +28 -0
- data/lib/fog/brightbox/requests/compute/delete_user_collaboration.rb +28 -0
- data/lib/fog/brightbox/requests/compute/get_account.rb +29 -0
- data/lib/fog/brightbox/requests/compute/get_api_client.rb +21 -0
- data/lib/fog/brightbox/requests/compute/get_application.rb +21 -0
- data/lib/fog/brightbox/requests/compute/get_authenticated_user.rb +17 -0
- data/lib/fog/brightbox/requests/compute/get_cloud_ip.rb +21 -0
- data/lib/fog/brightbox/requests/compute/get_collaboration.rb +21 -0
- data/lib/fog/brightbox/requests/compute/get_database_server.rb +19 -0
- data/lib/fog/brightbox/requests/compute/get_database_snapshot.rb +19 -0
- data/lib/fog/brightbox/requests/compute/get_database_type.rb +21 -0
- data/lib/fog/brightbox/requests/compute/get_firewall_policy.rb +21 -0
- data/lib/fog/brightbox/requests/compute/get_firewall_rule.rb +21 -0
- data/lib/fog/brightbox/requests/compute/get_image.rb +21 -0
- data/lib/fog/brightbox/requests/compute/get_interface.rb +21 -0
- data/lib/fog/brightbox/requests/compute/get_load_balancer.rb +21 -0
- data/lib/fog/brightbox/requests/compute/get_scoped_account.rb +15 -0
- data/lib/fog/brightbox/requests/compute/get_server.rb +21 -0
- data/lib/fog/brightbox/requests/compute/get_server_group.rb +21 -0
- data/lib/fog/brightbox/requests/compute/get_server_type.rb +21 -0
- data/lib/fog/brightbox/requests/compute/get_user.rb +29 -0
- data/lib/fog/brightbox/requests/compute/get_user_collaboration.rb +21 -0
- data/lib/fog/brightbox/requests/compute/get_zone.rb +21 -0
- data/lib/fog/brightbox/requests/compute/list_accounts.rb +17 -0
- data/lib/fog/brightbox/requests/compute/list_api_clients.rb +19 -0
- data/lib/fog/brightbox/requests/compute/list_applications.rb +19 -0
- data/lib/fog/brightbox/requests/compute/list_cloud_ips.rb +19 -0
- data/lib/fog/brightbox/requests/compute/list_collaborations.rb +19 -0
- data/lib/fog/brightbox/requests/compute/list_database_servers.rb +17 -0
- data/lib/fog/brightbox/requests/compute/list_database_snapshots.rb +17 -0
- data/lib/fog/brightbox/requests/compute/list_database_types.rb +19 -0
- data/lib/fog/brightbox/requests/compute/list_firewall_policies.rb +19 -0
- data/lib/fog/brightbox/requests/compute/list_images.rb +19 -0
- data/lib/fog/brightbox/requests/compute/list_load_balancers.rb +19 -0
- data/lib/fog/brightbox/requests/compute/list_server_groups.rb +19 -0
- data/lib/fog/brightbox/requests/compute/list_server_types.rb +19 -0
- data/lib/fog/brightbox/requests/compute/list_servers.rb +19 -0
- data/lib/fog/brightbox/requests/compute/list_user_collaborations.rb +19 -0
- data/lib/fog/brightbox/requests/compute/list_users.rb +19 -0
- data/lib/fog/brightbox/requests/compute/list_zones.rb +19 -0
- data/lib/fog/brightbox/requests/compute/map_cloud_ip.rb +24 -0
- data/lib/fog/brightbox/requests/compute/move_servers_server_group.rb +36 -0
- data/lib/fog/brightbox/requests/compute/reject_user_collaboration.rb +21 -0
- data/lib/fog/brightbox/requests/compute/remove_firewall_policy.rb +24 -0
- data/lib/fog/brightbox/requests/compute/remove_listeners_load_balancer.rb +24 -0
- data/lib/fog/brightbox/requests/compute/remove_nodes_load_balancer.rb +24 -0
- data/lib/fog/brightbox/requests/compute/remove_servers_server_group.rb +34 -0
- data/lib/fog/brightbox/requests/compute/resend_collaboration.rb +21 -0
- data/lib/fog/brightbox/requests/compute/reset_ftp_password_account.rb +32 -0
- data/lib/fog/brightbox/requests/compute/reset_ftp_password_scoped_account.rb +18 -0
- data/lib/fog/brightbox/requests/compute/reset_password_database_server.rb +19 -0
- data/lib/fog/brightbox/requests/compute/reset_secret_api_client.rb +25 -0
- data/lib/fog/brightbox/requests/compute/reset_secret_application.rb +21 -0
- data/lib/fog/brightbox/requests/compute/shutdown_server.rb +21 -0
- data/lib/fog/brightbox/requests/compute/snapshot_database_server.rb +19 -0
- data/lib/fog/brightbox/requests/compute/snapshot_server.rb +21 -0
- data/lib/fog/brightbox/requests/compute/start_server.rb +21 -0
- data/lib/fog/brightbox/requests/compute/stop_server.rb +21 -0
- data/lib/fog/brightbox/requests/compute/unmap_cloud_ip.rb +21 -0
- data/lib/fog/brightbox/requests/compute/update_account.rb +61 -0
- data/lib/fog/brightbox/requests/compute/update_api_client.rb +26 -0
- data/lib/fog/brightbox/requests/compute/update_application.rb +26 -0
- data/lib/fog/brightbox/requests/compute/update_cloud_ip.rb +27 -0
- data/lib/fog/brightbox/requests/compute/update_database_server.rb +25 -0
- data/lib/fog/brightbox/requests/compute/update_database_snapshot.rb +26 -0
- data/lib/fog/brightbox/requests/compute/update_firewall_policy.rb +26 -0
- data/lib/fog/brightbox/requests/compute/update_firewall_rule.rb +31 -0
- data/lib/fog/brightbox/requests/compute/update_image.rb +31 -0
- data/lib/fog/brightbox/requests/compute/update_load_balancer.rb +29 -0
- data/lib/fog/brightbox/requests/compute/update_scoped_account.rb +31 -0
- data/lib/fog/brightbox/requests/compute/update_server.rb +28 -0
- data/lib/fog/brightbox/requests/compute/update_server_group.rb +26 -0
- data/lib/fog/brightbox/requests/compute/update_user.rb +29 -0
- data/lib/fog/brightbox/version.rb +5 -0
- data/lib/fog/brightbox.rb +1 -0
- metadata +261 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'fog/core/collection'
|
|
2
|
+
require 'fog/brightbox/models/compute/image'
|
|
3
|
+
|
|
4
|
+
module Fog
|
|
5
|
+
module Compute
|
|
6
|
+
class Brightbox
|
|
7
|
+
|
|
8
|
+
class Images < Fog::Collection
|
|
9
|
+
|
|
10
|
+
model Fog::Compute::Brightbox::Image
|
|
11
|
+
|
|
12
|
+
def all
|
|
13
|
+
data = service.list_images
|
|
14
|
+
load(data)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get(identifier)
|
|
18
|
+
data = service.get_image(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,107 @@
|
|
|
1
|
+
require 'fog/core/model'
|
|
2
|
+
|
|
3
|
+
module Fog
|
|
4
|
+
module Compute
|
|
5
|
+
class Brightbox
|
|
6
|
+
|
|
7
|
+
class LoadBalancer < Fog::Model
|
|
8
|
+
|
|
9
|
+
identity :id
|
|
10
|
+
attribute :url
|
|
11
|
+
attribute :resource_type
|
|
12
|
+
|
|
13
|
+
attribute :name
|
|
14
|
+
attribute :status
|
|
15
|
+
|
|
16
|
+
attribute :policy
|
|
17
|
+
attribute :nodes
|
|
18
|
+
attribute :healthcheck
|
|
19
|
+
attribute :listeners
|
|
20
|
+
|
|
21
|
+
# These SSL attributes act only as setters. You can not read certs or keys via the API
|
|
22
|
+
attribute :certificate_pem
|
|
23
|
+
attribute :certificate_private_key
|
|
24
|
+
|
|
25
|
+
# These SSL attributes act only as getters for metadata
|
|
26
|
+
attribute :certificate_valid_from
|
|
27
|
+
attribute :certificate_expires_at
|
|
28
|
+
attribute :certificate_issuer
|
|
29
|
+
attribute :certificate_subject
|
|
30
|
+
|
|
31
|
+
# Times
|
|
32
|
+
attribute :created_at, :type => :time
|
|
33
|
+
attribute :deleted_at, :type => :time
|
|
34
|
+
|
|
35
|
+
# Links - to be replaced
|
|
36
|
+
attribute :account
|
|
37
|
+
attribute :server
|
|
38
|
+
attribute :cloud_ip
|
|
39
|
+
|
|
40
|
+
def ready?
|
|
41
|
+
status == 'active'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def save
|
|
45
|
+
raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
|
|
46
|
+
requires :nodes, :listeners, :healthcheck
|
|
47
|
+
options = {
|
|
48
|
+
:nodes => nodes,
|
|
49
|
+
:listeners => listeners,
|
|
50
|
+
:healthcheck => healthcheck,
|
|
51
|
+
:policy => policy,
|
|
52
|
+
:name => name,
|
|
53
|
+
:certificate_pem => certificate_pem,
|
|
54
|
+
:certificate_private_key => certificate_private_key
|
|
55
|
+
}.delete_if { |k, v| v.nil? || v == "" }
|
|
56
|
+
data = service.create_load_balancer(options)
|
|
57
|
+
merge_attributes(data)
|
|
58
|
+
true
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def destroy
|
|
62
|
+
requires :identity
|
|
63
|
+
service.destroy_load_balancer(identity)
|
|
64
|
+
true
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# SSL cert metadata for expiration of certificate
|
|
68
|
+
def certificate_expires_at
|
|
69
|
+
attributes[:certificate_expires_at]
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# SSL cert metadata for subject
|
|
73
|
+
def certificate_subject
|
|
74
|
+
attributes[:certificate_subject]
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Sets the certificate metadata from the JSON object that contains it.
|
|
78
|
+
#
|
|
79
|
+
# It is used by fog's attribute setting and should not be used for attempting to set a
|
|
80
|
+
# certificate on a load balancer.
|
|
81
|
+
#
|
|
82
|
+
# @private
|
|
83
|
+
def certificate=(cert_metadata)
|
|
84
|
+
if cert_metadata
|
|
85
|
+
attributes[:certificate_valid_from] = time_or_original(cert_metadata["valid_from"])
|
|
86
|
+
attributes[:certificate_expires_at] = time_or_original(cert_metadata["expires_at"])
|
|
87
|
+
attributes[:certificate_issuer] = cert_metadata["issuer"]
|
|
88
|
+
attributes[:certificate_subject] = cert_metadata["subject"]
|
|
89
|
+
else
|
|
90
|
+
attributes[:certificate_valid_from] = nil
|
|
91
|
+
attributes[:certificate_expires_at] = nil
|
|
92
|
+
attributes[:certificate_issuer] = nil
|
|
93
|
+
attributes[:certificate_subject] = nil
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
private
|
|
98
|
+
|
|
99
|
+
def time_or_original(value)
|
|
100
|
+
Time.parse(value)
|
|
101
|
+
rescue TypeError, ArgumentError
|
|
102
|
+
value
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'fog/core/collection'
|
|
2
|
+
require 'fog/brightbox/models/compute/load_balancer'
|
|
3
|
+
|
|
4
|
+
module Fog
|
|
5
|
+
module Compute
|
|
6
|
+
class Brightbox
|
|
7
|
+
|
|
8
|
+
class LoadBalancers < Fog::Collection
|
|
9
|
+
|
|
10
|
+
model Fog::Compute::Brightbox::LoadBalancer
|
|
11
|
+
|
|
12
|
+
def all
|
|
13
|
+
data = service.list_load_balancers
|
|
14
|
+
load(data)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get(identifier)
|
|
18
|
+
data = service.get_load_balancer(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,217 @@
|
|
|
1
|
+
require 'fog/compute/models/server'
|
|
2
|
+
|
|
3
|
+
module Fog
|
|
4
|
+
module Compute
|
|
5
|
+
class Brightbox
|
|
6
|
+
|
|
7
|
+
class Server < Fog::Compute::Server
|
|
8
|
+
|
|
9
|
+
identity :id
|
|
10
|
+
attribute :resource_type
|
|
11
|
+
attribute :url
|
|
12
|
+
|
|
13
|
+
attribute :name
|
|
14
|
+
attribute :state, :aliases => 'status'
|
|
15
|
+
|
|
16
|
+
attribute :hostname
|
|
17
|
+
attribute :fqdn
|
|
18
|
+
attribute :user_data
|
|
19
|
+
attribute :console_url
|
|
20
|
+
attribute :fqdn
|
|
21
|
+
attribute :console_token
|
|
22
|
+
|
|
23
|
+
# Times
|
|
24
|
+
attribute :created_at, :type => :time
|
|
25
|
+
attribute :started_at, :type => :time
|
|
26
|
+
attribute :console_token_expires, :type => :time
|
|
27
|
+
attribute :deleted_at, :type => :time
|
|
28
|
+
|
|
29
|
+
# Links - to be replaced
|
|
30
|
+
attribute :account_id, :aliases => "account", :squash => "id"
|
|
31
|
+
attribute :image_id, :aliases => "image", :squash => "id"
|
|
32
|
+
|
|
33
|
+
attribute :snapshots
|
|
34
|
+
attribute :cloud_ips
|
|
35
|
+
attribute :interfaces
|
|
36
|
+
attribute :server_groups
|
|
37
|
+
attribute :zone
|
|
38
|
+
attribute :server_type
|
|
39
|
+
|
|
40
|
+
def initialize(attributes = {})
|
|
41
|
+
# Call super first to initialize the service object for our default image
|
|
42
|
+
super
|
|
43
|
+
self.image_id ||= service.default_image
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def zone_id
|
|
47
|
+
if t_zone_id = attributes[:zone_id]
|
|
48
|
+
t_zone_id
|
|
49
|
+
elsif zone
|
|
50
|
+
zone[:id] || zone['id']
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def flavor_id
|
|
55
|
+
if t_flavour_id = attributes[:flavor_id]
|
|
56
|
+
t_flavour_id
|
|
57
|
+
elsif server_type
|
|
58
|
+
server_type[:id] || server_type['id']
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def zone_id=(incoming_zone_id)
|
|
63
|
+
attributes[:zone_id] = incoming_zone_id
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def flavor_id=(incoming_flavour_id)
|
|
67
|
+
attributes[:flavor_id] = incoming_flavour_id
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def snapshot
|
|
71
|
+
requires :identity
|
|
72
|
+
service.snapshot_server(identity)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Directly requesting a server reboot is not supported in the API
|
|
76
|
+
# so needs to attempt a shutdown/stop, wait and start again.
|
|
77
|
+
#
|
|
78
|
+
# Default behaviour is a hard reboot because it is more reliable
|
|
79
|
+
# because the state of the server's OS is irrelevant.
|
|
80
|
+
#
|
|
81
|
+
# @param [Boolean] use_hard_reboot
|
|
82
|
+
# @return [Boolean]
|
|
83
|
+
def reboot(use_hard_reboot = true)
|
|
84
|
+
requires :identity
|
|
85
|
+
if ready?
|
|
86
|
+
if use_hard_reboot
|
|
87
|
+
hard_reboot
|
|
88
|
+
else
|
|
89
|
+
soft_reboot
|
|
90
|
+
end
|
|
91
|
+
else
|
|
92
|
+
# Not able to reboot if not ready in the first place
|
|
93
|
+
false
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def start
|
|
98
|
+
requires :identity
|
|
99
|
+
service.start_server(identity)
|
|
100
|
+
true
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def stop
|
|
104
|
+
requires :identity
|
|
105
|
+
service.stop_server(identity)
|
|
106
|
+
true
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def shutdown
|
|
110
|
+
requires :identity
|
|
111
|
+
service.shutdown_server(identity)
|
|
112
|
+
true
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def destroy
|
|
116
|
+
requires :identity
|
|
117
|
+
service.destroy_server(identity)
|
|
118
|
+
true
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def flavor
|
|
122
|
+
requires :flavor_id
|
|
123
|
+
service.flavors.get(flavor_id)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def image
|
|
127
|
+
requires :image_id
|
|
128
|
+
service.images.get(image_id)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Returns the public DNS name of the server
|
|
132
|
+
#
|
|
133
|
+
# @return [String]
|
|
134
|
+
#
|
|
135
|
+
def dns_name
|
|
136
|
+
["public", fqdn].join(".")
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def private_ip_address
|
|
140
|
+
if interfaces.empty?
|
|
141
|
+
nil
|
|
142
|
+
else
|
|
143
|
+
interfaces.first["ipv4_address"]
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def public_ip_address
|
|
148
|
+
if cloud_ips.empty?
|
|
149
|
+
nil
|
|
150
|
+
else
|
|
151
|
+
cloud_ips.first["public_ip"]
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def ready?
|
|
156
|
+
state == "active"
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def activate_console
|
|
160
|
+
requires :identity
|
|
161
|
+
response = service.activate_console_server(identity)
|
|
162
|
+
[response["console_url"], response["console_token"], response["console_token_expires"]]
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def save
|
|
166
|
+
raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
|
|
167
|
+
requires :image_id
|
|
168
|
+
options = {
|
|
169
|
+
:image => image_id,
|
|
170
|
+
:name => name,
|
|
171
|
+
:zone => zone_id,
|
|
172
|
+
:user_data => user_data,
|
|
173
|
+
:server_groups => server_groups
|
|
174
|
+
}.delete_if { |k, v| v.nil? || v == "" }
|
|
175
|
+
|
|
176
|
+
options.merge!(:server_type => flavor_id) unless flavor_id.nil? || flavor_id == ""
|
|
177
|
+
|
|
178
|
+
data = service.create_server(options)
|
|
179
|
+
merge_attributes(data)
|
|
180
|
+
true
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# Replaces the server's identifier with it's interface's identifier for Cloud IP mapping
|
|
184
|
+
#
|
|
185
|
+
# @return [String] the identifier to pass to a Cloud IP mapping request
|
|
186
|
+
def mapping_identity
|
|
187
|
+
interfaces.first["id"]
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
private
|
|
191
|
+
|
|
192
|
+
# Hard reboots are fast, avoiding the OS by doing a "power off"
|
|
193
|
+
def hard_reboot
|
|
194
|
+
stop
|
|
195
|
+
wait_for { !ready? }
|
|
196
|
+
start
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# Soft reboots often timeout if the OS missed the request so we do more
|
|
200
|
+
# error checking trying to detect the timeout
|
|
201
|
+
#
|
|
202
|
+
# @todo Needs cleaner error handling when the OS times out
|
|
203
|
+
def soft_reboot
|
|
204
|
+
shutdown
|
|
205
|
+
# FIXME: Using side effect of wait_for's (evaluated block) to detect timeouts
|
|
206
|
+
begin
|
|
207
|
+
wait_for(20) { !ready? }
|
|
208
|
+
start
|
|
209
|
+
rescue Fog::Errors::Timeout
|
|
210
|
+
false
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
require 'fog/core/model'
|
|
2
|
+
|
|
3
|
+
module Fog
|
|
4
|
+
module Compute
|
|
5
|
+
class Brightbox
|
|
6
|
+
# A server group is a collection of servers
|
|
7
|
+
#
|
|
8
|
+
# Certain actions can accept a server group and affect all members
|
|
9
|
+
class ServerGroup < Fog::Model
|
|
10
|
+
|
|
11
|
+
identity :id
|
|
12
|
+
|
|
13
|
+
attribute :url
|
|
14
|
+
attribute :resource_type
|
|
15
|
+
attribute :name
|
|
16
|
+
attribute :description
|
|
17
|
+
attribute :default
|
|
18
|
+
attribute :created_at, :type => :time
|
|
19
|
+
|
|
20
|
+
attribute :server_ids, :aliases => "servers"
|
|
21
|
+
|
|
22
|
+
def save
|
|
23
|
+
options = {
|
|
24
|
+
:name => name,
|
|
25
|
+
:description => description
|
|
26
|
+
}.delete_if { |k, v| v.nil? || v == "" }
|
|
27
|
+
data = service.create_server_group(options)
|
|
28
|
+
merge_attributes(data)
|
|
29
|
+
true
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def servers
|
|
33
|
+
srv_ids = server_ids.map { |srv| srv["id"] }
|
|
34
|
+
srv_ids.map do |srv_id|
|
|
35
|
+
service.servers.get(srv_id)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Adds specified servers to this server group
|
|
40
|
+
#
|
|
41
|
+
# @param [Array] identifiers array of server identifier strings to add
|
|
42
|
+
# @return [Fog::Compute::ServerGroup]
|
|
43
|
+
def add_servers(identifiers)
|
|
44
|
+
requires :identity
|
|
45
|
+
options = {
|
|
46
|
+
:servers => server_references(identifiers)
|
|
47
|
+
}
|
|
48
|
+
data = service.add_servers_server_group identity, options
|
|
49
|
+
merge_attributes data
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Removes specified servers from this server group
|
|
53
|
+
#
|
|
54
|
+
# @param [Array] identifiers array of server identifier strings to remove
|
|
55
|
+
# @return [Fog::Compute::ServerGroup]
|
|
56
|
+
def remove_servers(identifiers)
|
|
57
|
+
requires :identity
|
|
58
|
+
options = {
|
|
59
|
+
:servers => server_references(identifiers)
|
|
60
|
+
}
|
|
61
|
+
data = service.remove_servers_server_group identity, options
|
|
62
|
+
merge_attributes data
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Moves specified servers from this server group to the specified destination server group
|
|
66
|
+
#
|
|
67
|
+
# @param [Array] identifiers array of server identifier strings to move
|
|
68
|
+
# @param [String] destination_group_id destination server group identifier
|
|
69
|
+
# @return [Fog::Compute::ServerGroup]
|
|
70
|
+
def move_servers(identifiers, destination_group_id)
|
|
71
|
+
requires :identity
|
|
72
|
+
options = {
|
|
73
|
+
:servers => server_references(identifiers),
|
|
74
|
+
:destination => destination_group_id
|
|
75
|
+
}
|
|
76
|
+
data = service.move_servers_server_group identity, options
|
|
77
|
+
merge_attributes data
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def destroy
|
|
81
|
+
requires :identity
|
|
82
|
+
service.destroy_server_group(identity)
|
|
83
|
+
true
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
protected
|
|
87
|
+
|
|
88
|
+
def server_references(identifiers)
|
|
89
|
+
identifiers.map { |id| { "server" => id } }
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|