fog 0.1.8 → 0.1.9
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.
- data/Gemfile +2 -2
- data/Gemfile.lock +5 -5
- data/README.rdoc +29 -29
- data/fog.gemspec +24 -2
- data/lib/fog.rb +4 -15
- data/lib/fog/aws.rb +2 -2
- data/lib/fog/aws/ec2.rb +64 -101
- data/lib/fog/aws/elb.rb +19 -27
- data/lib/fog/aws/models/ec2/addresses.rb +1 -9
- data/lib/fog/aws/models/ec2/flavors.rb +1 -7
- data/lib/fog/aws/models/ec2/images.rb +1 -7
- data/lib/fog/aws/models/ec2/key_pairs.rb +1 -7
- data/lib/fog/aws/models/ec2/security_groups.rb +1 -7
- data/lib/fog/aws/models/ec2/servers.rb +1 -7
- data/lib/fog/aws/models/ec2/snapshots.rb +1 -9
- data/lib/fog/aws/models/ec2/volumes.rb +1 -9
- data/lib/fog/aws/models/s3/directories.rb +1 -7
- data/lib/fog/aws/models/s3/file.rb +5 -0
- data/lib/fog/aws/requests/ec2/allocate_address.rb +2 -0
- data/lib/fog/aws/requests/ec2/attach_volume.rb +2 -0
- data/lib/fog/aws/requests/ec2/create_key_pair.rb +2 -0
- data/lib/fog/aws/requests/ec2/create_snapshot.rb +2 -0
- data/lib/fog/aws/requests/ec2/create_volume.rb +2 -0
- data/lib/fog/aws/requests/ec2/describe_addresses.rb +2 -0
- data/lib/fog/aws/requests/ec2/describe_availability_zones.rb +2 -0
- data/lib/fog/aws/requests/ec2/describe_images.rb +2 -0
- data/lib/fog/aws/requests/ec2/describe_instances.rb +2 -0
- data/lib/fog/aws/requests/ec2/describe_key_pairs.rb +2 -0
- data/lib/fog/aws/requests/ec2/describe_regions.rb +2 -0
- data/lib/fog/aws/requests/ec2/describe_reserved_instances.rb +2 -0
- data/lib/fog/aws/requests/ec2/describe_security_groups.rb +2 -0
- data/lib/fog/aws/requests/ec2/describe_snapshots.rb +2 -0
- data/lib/fog/aws/requests/ec2/describe_volumes.rb +2 -0
- data/lib/fog/aws/requests/ec2/detach_volume.rb +2 -0
- data/lib/fog/aws/requests/ec2/get_console_output.rb +2 -0
- data/lib/fog/aws/requests/ec2/run_instances.rb +2 -0
- data/lib/fog/aws/requests/ec2/terminate_instances.rb +2 -0
- data/lib/fog/aws/requests/elb/create_load_balancer.rb +2 -0
- data/lib/fog/aws/requests/elb/delete_load_balancer.rb +2 -0
- data/lib/fog/aws/requests/elb/deregister_instances_from_load_balancer.rb +2 -0
- data/lib/fog/aws/requests/elb/describe_instance_health.rb +2 -0
- data/lib/fog/aws/requests/elb/describe_load_balancers.rb +2 -0
- data/lib/fog/aws/requests/elb/disable_availability_zones_for_load_balancer.rb +2 -0
- data/lib/fog/aws/requests/elb/enable_availability_zones_for_load_balancer.rb +2 -0
- data/lib/fog/aws/requests/elb/register_instances_with_load_balancer.rb +2 -0
- data/lib/fog/aws/requests/s3/copy_object.rb +2 -0
- data/lib/fog/aws/requests/s3/get_bucket.rb +2 -0
- data/lib/fog/aws/requests/s3/get_bucket_acl.rb +2 -0
- data/lib/fog/aws/requests/s3/get_bucket_location.rb +2 -0
- data/lib/fog/aws/requests/s3/get_bucket_logging.rb +2 -0
- data/lib/fog/aws/requests/s3/get_bucket_object_versions.rb +2 -0
- data/lib/fog/aws/requests/s3/get_bucket_versioning.rb +2 -0
- data/lib/fog/aws/requests/s3/get_object_acl.rb +2 -0
- data/lib/fog/aws/requests/s3/get_request_payment.rb +2 -0
- data/lib/fog/aws/requests/s3/get_service.rb +2 -0
- data/lib/fog/aws/requests/s3/put_object.rb +2 -2
- data/lib/fog/aws/requests/simpledb/domain_metadata.rb +2 -0
- data/lib/fog/aws/requests/simpledb/get_attributes.rb +2 -0
- data/lib/fog/aws/requests/simpledb/list_domains.rb +2 -0
- data/lib/fog/aws/requests/simpledb/select.rb +2 -0
- data/lib/fog/aws/s3.rb +68 -85
- data/lib/fog/aws/simpledb.rb +15 -29
- data/lib/fog/bluebox.rb +23 -40
- data/lib/fog/bluebox/models/flavors.rb +1 -7
- data/lib/fog/bluebox/models/images.rb +1 -9
- data/lib/fog/bluebox/models/servers.rb +1 -7
- data/lib/fog/credentials.rb +2 -0
- data/lib/fog/errors.rb +20 -0
- data/lib/fog/hmac.rb +48 -0
- data/lib/fog/local.rb +9 -22
- data/lib/fog/local/models/directories.rb +1 -7
- data/lib/fog/rackspace.rb +2 -6
- data/lib/fog/rackspace/files.rb +46 -48
- data/lib/fog/rackspace/models/files/directories.rb +1 -7
- data/lib/fog/rackspace/models/servers/flavors.rb +1 -7
- data/lib/fog/rackspace/models/servers/images.rb +1 -9
- data/lib/fog/rackspace/models/servers/server.rb +37 -1
- data/lib/fog/rackspace/models/servers/servers.rb +8 -7
- data/lib/fog/rackspace/requests/files/put_object.rb +1 -1
- data/lib/fog/rackspace/servers.rb +33 -45
- data/lib/fog/service.rb +82 -0
- data/lib/fog/slicehost.rb +28 -42
- data/lib/fog/slicehost/models/flavors.rb +1 -7
- data/lib/fog/slicehost/models/images.rb +1 -9
- data/lib/fog/slicehost/models/servers.rb +1 -7
- data/lib/fog/ssh.rb +1 -1
- data/lib/fog/vcloud.rb +20 -3
- data/lib/fog/vcloud/collection.rb +25 -5
- data/lib/fog/vcloud/model.rb +4 -0
- data/lib/fog/vcloud/parsers/get_organization.rb +2 -2
- data/lib/fog/vcloud/parsers/get_vdc.rb +2 -2
- data/lib/fog/vcloud/parsers/get_versions.rb +1 -1
- data/lib/fog/vcloud/parsers/login.rb +2 -2
- data/lib/fog/vcloud/parsers/network.rb +53 -0
- data/lib/fog/vcloud/requests/get_network.rb +54 -0
- data/lib/fog/vcloud/requests/get_organization.rb +1 -2
- data/lib/fog/vcloud/terremark/ecloud.rb +17 -4
- data/lib/fog/vcloud/terremark/ecloud/models/internet_service.rb +35 -0
- data/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb +9 -9
- data/lib/fog/vcloud/terremark/ecloud/models/ip.rb +18 -0
- data/lib/fog/vcloud/terremark/ecloud/models/ips.rb +36 -0
- data/lib/fog/vcloud/terremark/ecloud/models/network.rb +32 -0
- data/lib/fog/vcloud/terremark/ecloud/models/networks.rb +38 -0
- data/lib/fog/vcloud/terremark/ecloud/models/public_ip.rb +3 -1
- data/lib/fog/vcloud/terremark/ecloud/models/public_ips.rb +1 -1
- data/lib/fog/vcloud/terremark/ecloud/models/vdc.rb +9 -0
- data/lib/fog/vcloud/terremark/ecloud/models/vdcs.rb +2 -0
- data/lib/fog/vcloud/terremark/ecloud/parsers/network.rb +28 -0
- data/lib/fog/vcloud/terremark/ecloud/parsers/network_ips.rb +31 -0
- data/lib/fog/vcloud/terremark/ecloud/requests/add_internet_service.rb +10 -7
- data/lib/fog/vcloud/terremark/ecloud/requests/configure_internet_service.rb +99 -0
- data/lib/fog/vcloud/terremark/ecloud/requests/get_network.rb +54 -0
- data/lib/fog/vcloud/terremark/ecloud/requests/get_network_ips.rb +51 -0
- data/spec/aws/models/s3/file_spec.rb +15 -0
- data/spec/vcloud/requests/get_network_spec.rb +55 -0
- data/spec/vcloud/spec_helper.rb +1 -0
- data/spec/vcloud/terremark/ecloud/models/internet_service_spec.rb +15 -0
- data/spec/vcloud/terremark/ecloud/models/ip_spec.rb +35 -0
- data/spec/vcloud/terremark/ecloud/models/ips_spec.rb +28 -0
- data/spec/vcloud/terremark/ecloud/models/network_spec.rb +65 -0
- data/spec/vcloud/terremark/ecloud/models/networks_spec.rb +26 -0
- data/spec/vcloud/terremark/ecloud/models/public_ip_spec.rb +0 -2
- data/spec/vcloud/terremark/ecloud/requests/configure_internet_service_spec.rb +44 -0
- data/spec/vcloud/terremark/ecloud/requests/get_network_ips_spec.rb +54 -0
- data/spec/vcloud/terremark/ecloud/requests/get_network_spec.rb +63 -0
- data/tests/aws/requests/ec2/volume_tests.rb +2 -2
- data/tests/helper.rb +2 -0
- metadata +25 -3
@@ -9,7 +9,6 @@ module Fog
|
|
9
9
|
identity :id
|
10
10
|
|
11
11
|
attribute :addresses
|
12
|
-
attribute :password, 'adminPass'
|
13
12
|
attribute :flavor_id, 'flavorId'
|
14
13
|
attribute :host_id, 'hostId'
|
15
14
|
attribute :image_id, 'imageId'
|
@@ -19,6 +18,8 @@ module Fog
|
|
19
18
|
attribute :progress
|
20
19
|
attribute :status
|
21
20
|
|
21
|
+
attr_accessor :password, :private_key_path, :public_key_path
|
22
|
+
|
22
23
|
def destroy
|
23
24
|
requires :id
|
24
25
|
connection.delete_server(@id)
|
@@ -50,6 +51,14 @@ module Fog
|
|
50
51
|
true
|
51
52
|
end
|
52
53
|
|
54
|
+
def private_key_path
|
55
|
+
@private_key_path || Fog.credentials[:private_key_path]
|
56
|
+
end
|
57
|
+
|
58
|
+
def public_key_path
|
59
|
+
@public_key_path || Fog.credentials[:public_key_path]
|
60
|
+
end
|
61
|
+
|
53
62
|
def save
|
54
63
|
requires :flavor_id, :image_id
|
55
64
|
options = {
|
@@ -63,8 +72,35 @@ module Fog
|
|
63
72
|
true
|
64
73
|
end
|
65
74
|
|
75
|
+
def ssh(commands)
|
76
|
+
requires :addresses, :identity, :private_key_path
|
77
|
+
@ssh ||= Fog::SSH.new(@addresses['public'].first, 'root', :keys => [private_key_path])
|
78
|
+
@ssh.run(commands)
|
79
|
+
end
|
80
|
+
|
81
|
+
def setup
|
82
|
+
requires :addresses, :identity, :password, :public_key_path
|
83
|
+
Fog::SSH.new(@addresses['public'].first, 'root', :password => password).run([
|
84
|
+
%{mkdir .ssh},
|
85
|
+
%{echo "#{File.read(File.expand_path(public_key_path))}" >> ~/.ssh/authorized_keys},
|
86
|
+
%{passwd -l root},
|
87
|
+
%{echo "#{attributes.to_json}" >> ~/attributes.json},
|
88
|
+
%{echo "#{metadata.to_json}" >> ~/metadata.json}
|
89
|
+
])
|
90
|
+
rescue Errno::ECONNREFUSED
|
91
|
+
sleep(1)
|
92
|
+
retry
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def adminPass=(new_admin_pass)
|
98
|
+
@password = new_admin_pass
|
99
|
+
end
|
100
|
+
|
66
101
|
end
|
67
102
|
|
68
103
|
end
|
69
104
|
end
|
105
|
+
|
70
106
|
end
|
@@ -5,13 +5,7 @@ module Fog
|
|
5
5
|
module Rackspace
|
6
6
|
module Servers
|
7
7
|
|
8
|
-
|
9
|
-
def servers
|
10
|
-
Fog::Rackspace::Servers::Servers.new(:connection => self)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
class Real
|
8
|
+
module Collections
|
15
9
|
def servers
|
16
10
|
Fog::Rackspace::Servers::Servers.new(:connection => self)
|
17
11
|
end
|
@@ -26,6 +20,13 @@ module Fog
|
|
26
20
|
load(data)
|
27
21
|
end
|
28
22
|
|
23
|
+
def bootstrap(new_attributes = {})
|
24
|
+
server = create(new_attributes)
|
25
|
+
server.wait_for { ready? }
|
26
|
+
server.setup
|
27
|
+
server
|
28
|
+
end
|
29
|
+
|
29
30
|
def get(server_id)
|
30
31
|
if server = connection.get_server_details(server_id).body['server']
|
31
32
|
new(server)
|
@@ -9,7 +9,7 @@ module Fog
|
|
9
9
|
# * container<~String> - Name for container, should be < 256 bytes and must not contain '/'
|
10
10
|
#
|
11
11
|
def put_object(container, object, data)
|
12
|
-
data =
|
12
|
+
data = parse_data(data)
|
13
13
|
response = storage_request(
|
14
14
|
:body => data[:body],
|
15
15
|
:expects => 201,
|
@@ -1,52 +1,40 @@
|
|
1
1
|
module Fog
|
2
2
|
module Rackspace
|
3
3
|
module Servers
|
4
|
+
extend Fog::Service
|
4
5
|
|
5
|
-
|
6
|
-
class NotFound < Fog::Errors::NotFound; end
|
6
|
+
requires :rackspace_api_key, :rackspace_username
|
7
7
|
|
8
|
-
|
8
|
+
model_path 'fog/rackspace/models/servers'
|
9
|
+
model 'flavor'
|
10
|
+
model 'flavors'
|
11
|
+
model 'image'
|
12
|
+
model 'images'
|
13
|
+
model 'server'
|
14
|
+
model 'servers'
|
9
15
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
require 'fog/rackspace/requests/servers/list_images'
|
30
|
-
require 'fog/rackspace/requests/servers/list_images_detail'
|
31
|
-
require 'fog/rackspace/requests/servers/list_servers'
|
32
|
-
require 'fog/rackspace/requests/servers/list_servers_detail'
|
33
|
-
require 'fog/rackspace/requests/servers/reboot_server'
|
34
|
-
require 'fog/rackspace/requests/servers/update_server'
|
35
|
-
@required = true
|
36
|
-
end
|
37
|
-
|
38
|
-
if Fog.mocking?
|
39
|
-
Fog::Rackspace::Servers::Mock.new(options)
|
40
|
-
else
|
41
|
-
Fog::Rackspace::Servers::Real.new(options)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def self.reset_data(keys=Mock.data.keys)
|
46
|
-
Mock.reset_data(keys)
|
47
|
-
end
|
16
|
+
request_path 'fog/rackspace/requests/servers'
|
17
|
+
request 'create_image'
|
18
|
+
request 'create_server'
|
19
|
+
request 'delete_image'
|
20
|
+
request 'delete_server'
|
21
|
+
request 'get_flavor_details'
|
22
|
+
request 'get_image_details'
|
23
|
+
request 'get_server_details'
|
24
|
+
request 'list_addresses'
|
25
|
+
request 'list_private_addresses'
|
26
|
+
request 'list_public_addresses'
|
27
|
+
request 'list_flavors'
|
28
|
+
request 'list_flavors_detail'
|
29
|
+
request 'list_images'
|
30
|
+
request 'list_images_detail'
|
31
|
+
request 'list_servers'
|
32
|
+
request 'list_servers_detail'
|
33
|
+
request 'reboot_server'
|
34
|
+
request 'update_server'
|
48
35
|
|
49
36
|
class Mock
|
37
|
+
include Collections
|
50
38
|
|
51
39
|
def self.data
|
52
40
|
@data ||= Hash.new do |hash, key|
|
@@ -75,6 +63,7 @@ module Fog
|
|
75
63
|
end
|
76
64
|
|
77
65
|
class Real
|
66
|
+
include Collections
|
78
67
|
|
79
68
|
def initialize(options={})
|
80
69
|
credentials = Fog::Rackspace.authenticate(options)
|
@@ -88,7 +77,6 @@ module Fog
|
|
88
77
|
|
89
78
|
def request(params)
|
90
79
|
@connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}")
|
91
|
-
|
92
80
|
begin
|
93
81
|
response = @connection.request(params.merge!({
|
94
82
|
:headers => {
|
@@ -99,11 +87,11 @@ module Fog
|
|
99
87
|
:path => "#{@path}/#{params[:path]}"
|
100
88
|
}))
|
101
89
|
rescue Excon::Errors::Error => error
|
102
|
-
case error
|
90
|
+
raise case error
|
103
91
|
when Excon::Errors::NotFound
|
104
|
-
|
92
|
+
Fog::Rackspace::Servers::NotFound.slurp(error)
|
105
93
|
else
|
106
|
-
|
94
|
+
error
|
107
95
|
end
|
108
96
|
end
|
109
97
|
unless response.body.empty?
|
data/lib/fog/service.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
module Fog
|
2
|
+
module Service
|
3
|
+
|
4
|
+
def self.extended(other)
|
5
|
+
super
|
6
|
+
other.module_eval <<-EOS, __FILE__, __LINE__
|
7
|
+
class Error < Fog::Errors::Error; end
|
8
|
+
class NotFound < Fog::Errors::NotFound; end
|
9
|
+
|
10
|
+
module Collections; end
|
11
|
+
|
12
|
+
def self.new(options={})
|
13
|
+
missing = []
|
14
|
+
for requirement in requirements
|
15
|
+
missing << requirement unless options[requirement]
|
16
|
+
end
|
17
|
+
unless missing.empty?
|
18
|
+
if missing.length == 1
|
19
|
+
raise(ArgumentError, [missing.first, "is required for this service"].join(' '))
|
20
|
+
else
|
21
|
+
raise(ArgumentError, [missing[0...-1].join(", "), 'and', missing[-1], 'are required for this service'].join(' '))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
unless @required
|
26
|
+
for model in models
|
27
|
+
require [@model_path, model].join('/')
|
28
|
+
end
|
29
|
+
for request in requests
|
30
|
+
require [@request_path, request].join('/')
|
31
|
+
end
|
32
|
+
@required = true
|
33
|
+
end
|
34
|
+
|
35
|
+
if Fog.mocking?
|
36
|
+
Mock.new(options)
|
37
|
+
else
|
38
|
+
Real.new(options)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
EOS
|
42
|
+
end
|
43
|
+
|
44
|
+
def model_path(new_path)
|
45
|
+
@model_path = new_path
|
46
|
+
end
|
47
|
+
|
48
|
+
def model(new_model)
|
49
|
+
models << new_model
|
50
|
+
end
|
51
|
+
|
52
|
+
def models
|
53
|
+
@models ||= []
|
54
|
+
end
|
55
|
+
|
56
|
+
def request_path(new_path)
|
57
|
+
@request_path = new_path
|
58
|
+
end
|
59
|
+
|
60
|
+
def request(new_request)
|
61
|
+
requests << new_request
|
62
|
+
end
|
63
|
+
|
64
|
+
def requests
|
65
|
+
@requests ||= []
|
66
|
+
end
|
67
|
+
|
68
|
+
def requires(*args)
|
69
|
+
requirements.concat(args)
|
70
|
+
end
|
71
|
+
|
72
|
+
def requirements
|
73
|
+
@requirements ||= []
|
74
|
+
end
|
75
|
+
|
76
|
+
def reset_data(keys=Mock.data.keys)
|
77
|
+
Mock.reset_data(keys)
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
data/lib/fog/slicehost.rb
CHANGED
@@ -1,46 +1,31 @@
|
|
1
1
|
module Fog
|
2
2
|
module Slicehost
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
@required = true
|
27
|
-
end
|
28
|
-
|
29
|
-
unless options[:slicehost_password]
|
30
|
-
raise ArgumentError.new('slicehost_password is required to access slicehost')
|
31
|
-
end
|
32
|
-
if Fog.mocking?
|
33
|
-
Fog::Slicehost::Mock.new(options)
|
34
|
-
else
|
35
|
-
Fog::Slicehost::Real.new(options)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.reset_data(keys=Mock.data.keys)
|
40
|
-
Mock.reset_data(keys)
|
41
|
-
end
|
3
|
+
extend Fog::Service
|
4
|
+
|
5
|
+
requires :slicehost_password
|
6
|
+
|
7
|
+
model_path 'fog/slicehost/models'
|
8
|
+
model 'flavor'
|
9
|
+
model 'flavors'
|
10
|
+
model 'image'
|
11
|
+
model 'images'
|
12
|
+
model 'server'
|
13
|
+
model 'servers'
|
14
|
+
|
15
|
+
request_path 'fog/slicehost/requests'
|
16
|
+
request 'create_slice'
|
17
|
+
request 'delete_slice'
|
18
|
+
request 'get_backups'
|
19
|
+
request 'get_flavor'
|
20
|
+
request 'get_flavors'
|
21
|
+
request 'get_image'
|
22
|
+
request 'get_images'
|
23
|
+
request 'get_slice'
|
24
|
+
request 'get_slices'
|
25
|
+
request 'reboot_slice'
|
42
26
|
|
43
27
|
class Mock
|
28
|
+
include Collections
|
44
29
|
|
45
30
|
def self.data
|
46
31
|
@data ||= Hash.new do |hash, key|
|
@@ -62,6 +47,7 @@ module Fog
|
|
62
47
|
end
|
63
48
|
|
64
49
|
class Real
|
50
|
+
include Collections
|
65
51
|
|
66
52
|
def initialize(options={})
|
67
53
|
@slicehost_password = options[:slicehost_password]
|
@@ -86,11 +72,11 @@ module Fog
|
|
86
72
|
begin
|
87
73
|
response = @connection.request(params.merge!({:host => @host}))
|
88
74
|
rescue Excon::Errors::Error => error
|
89
|
-
case error
|
75
|
+
raise case error
|
90
76
|
when Excon::Errors::NotFound
|
91
|
-
|
77
|
+
Fog::Slicehost::NotFound.slurp(error)
|
92
78
|
else
|
93
|
-
|
79
|
+
error
|
94
80
|
end
|
95
81
|
end
|
96
82
|
|
@@ -4,13 +4,7 @@ require 'fog/slicehost/models/flavor'
|
|
4
4
|
module Fog
|
5
5
|
module Slicehost
|
6
6
|
|
7
|
-
|
8
|
-
def flavors
|
9
|
-
Fog::Slicehost::Flavors.new(:connection => self)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
class Real
|
7
|
+
module Collections
|
14
8
|
def flavors
|
15
9
|
Fog::Slicehost::Flavors.new(:connection => self)
|
16
10
|
end
|
@@ -4,15 +4,7 @@ require 'fog/slicehost/models/image'
|
|
4
4
|
module Fog
|
5
5
|
module Slicehost
|
6
6
|
|
7
|
-
|
8
|
-
def images(attributes = {})
|
9
|
-
Fog::Slicehost::Images.new({
|
10
|
-
:connection => self
|
11
|
-
}.merge!(attributes))
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
class Real
|
7
|
+
module Collections
|
16
8
|
def images(attributes = {})
|
17
9
|
Fog::Slicehost::Images.new({
|
18
10
|
:connection => self
|
@@ -4,13 +4,7 @@ require 'fog/slicehost/models/server'
|
|
4
4
|
module Fog
|
5
5
|
module Slicehost
|
6
6
|
|
7
|
-
|
8
|
-
def servers
|
9
|
-
Fog::Slicehost::Servers.new(:connection => self)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
class Real
|
7
|
+
module Collections
|
14
8
|
def servers
|
15
9
|
Fog::Slicehost::Servers.new(:connection => self)
|
16
10
|
end
|
data/lib/fog/ssh.rb
CHANGED
@@ -54,7 +54,7 @@ module Fog
|
|
54
54
|
sudoable_command = command.sub(/^sudo/, %{sudo -p 'fog sudo password:'})
|
55
55
|
escaped_command = sudoable_command.sub(/'/, %{'"'"'})
|
56
56
|
channel.request_pty
|
57
|
-
result = Result.new(
|
57
|
+
result = Result.new(escaped_command)
|
58
58
|
channel.exec(%{bash -lc '#{escaped_command}'}) do |channel, success|
|
59
59
|
unless success
|
60
60
|
raise "Could not execute command: #{command.inspect}"
|