fog-ecloud 0.1.3 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 459d2651c0917b467a2109cc810310357389222d
4
- data.tar.gz: f5acec7647a8e21e9f6673ca50b2c32d4692db7d
3
+ metadata.gz: 46a64b15ab3ff353edc6229933d67550309b34d7
4
+ data.tar.gz: b681e30075993fd7082e217c3b7e2fb6d7e6dc99
5
5
  SHA512:
6
- metadata.gz: 881243ebcd9138ec3cd4bd8c1caf94411cef534e27780459b15b93c95e6d8e402298dca795d8896885729dbb3e2ad10849f077fb1afa43b989d676edcb762bae
7
- data.tar.gz: ddf645d726fc3d5539a4da82c203718ada9d2d8d436c466cf7ce0ca79aab13e35b58c65d9c4a2a2521b8b67d0bebd40aae753ce00067a2f04a518ec2f9deec12
6
+ metadata.gz: c6dcd86fb9737e4c468698f515957f1861ca438d588c4b0f94ac06815f7e3ff733a2d28bd44711d5562c521765ed9040bdd187d477a0718b7bc75d3a72fe7337
7
+ data.tar.gz: 7d23e7506ae33631fbd4680916dd23d0d56ded1f7e0b51f14bc6617e9c7778464879c059f85c8bead278b09d3d902135141fc4d81d0692905efd908161b4f25a
@@ -229,6 +229,9 @@ module Fog
229
229
  request :rows_edit
230
230
  request :rows_movedown
231
231
  request :rows_moveup
232
+ request :ssh_key_create
233
+ request :ssh_key_delete
234
+ request :ssh_key_edit
232
235
  request :trusted_network_groups_create
233
236
  request :trusted_network_groups_delete
234
237
  request :trusted_network_groups_edit
@@ -287,7 +290,7 @@ module Fog
287
290
  @connection_options = options[:connection_options] || {}
288
291
  @host = options[:ecloud_host] || API_URL
289
292
  @persistent = options[:persistent] || false
290
- @version = options[:ecloud_version] || "2013-06-01"
293
+ @version = options[:ecloud_version] || "2015-05-01"
291
294
  @authentication_method = options[:ecloud_authentication_method] || :cloud_api_auth
292
295
  @access_key = options[:ecloud_access_key]
293
296
  @private_key = options[:ecloud_private_key]
@@ -352,10 +355,18 @@ module Fog
352
355
 
353
356
  # if Authorization and x-tmrk-authorization are used, the x-tmrk-authorization takes precendence.
354
357
  def set_extra_headers_for(params)
358
+ length_required = ["PUT", "POST", "DELETE"]
355
359
  params[:headers] = {
356
360
  "x-tmrk-version" => @version,
357
361
  "Date" => Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S GMT"),
358
362
  }.merge(params[:headers] || {})
363
+ if length_required.include?(params[:method]) && !params[:headers]["Content-Length"]
364
+ body_size = 0
365
+ if params[:body]
366
+ body_size = params[:body].size
367
+ end
368
+ params[:headers].merge!("Content-Length" => body_size)
369
+ end
359
370
  if params[:method] == "POST" || params[:method] == "PUT"
360
371
  params[:headers].merge!("Content-Type" => "application/xml") unless params[:headers]["Content-Type"]
361
372
  params[:headers].merge!("Accept" => "application/xml")
@@ -9,6 +9,30 @@ module Fog
9
9
  attribute :other_links, :aliases => :Links
10
10
  attribute :default, :aliases => :Default, :type => :boolean
11
11
  attribute :finger_print, :aliases => :FingerPrint
12
+ attribute :private_key, :aliases => :PrivateKey
13
+
14
+ def delete
15
+ service.ssh_key_delete(href).body
16
+ end
17
+ alias_method :destroy, :delete
18
+
19
+ def edit(options = {})
20
+ # Make sure we only pass what we should
21
+ new_options = {}
22
+ new_options[:uri] = href
23
+ if options[:Name].nil?
24
+ new_options[:Name] = name
25
+ else
26
+ new_options[:Name] = options[:Name]
27
+ end
28
+ if options[:Default].nil?
29
+ new_options[:Default] = default
30
+ else
31
+ new_options[:Default] = options[:Default]
32
+ end
33
+
34
+ service.ssh_key_edit(new_options)
35
+ end
12
36
 
13
37
  def id
14
38
  href.scan(/\d+/)[0]
@@ -14,12 +14,28 @@ module Fog
14
14
  end
15
15
 
16
16
  def get(uri)
17
- if data = service.get_ssh_key(uri)
18
- new(data.body)
17
+ if data = service.get_ssh_key(uri).body
18
+ new(data)
19
19
  end
20
- rescue Fog::Errors::NotFound
20
+ rescue Excon::Errors::NotFound
21
21
  nil
22
22
  end
23
+
24
+ def create(options = {})
25
+ # Make sure we only pass what we should
26
+ new_options = {}
27
+ new_options[:Name] = options[:Name] unless options[:Name].nil?
28
+ new_options[:Default] = options[:Default] || false
29
+ new_options[:uri] = href + "/action/createSshKey"
30
+
31
+ data = service.ssh_key_create(new_options)
32
+ object = service.ssh_keys.new(data)
33
+ object
34
+ end
35
+
36
+ def environment_id
37
+ href.scan(/\d+/)[0]
38
+ end
23
39
  end
24
40
  end
25
41
  end
@@ -12,7 +12,7 @@ module Fog
12
12
 
13
13
  if ssh_key
14
14
  response(:body => Fog::Ecloud.slice(ssh_key, :id, :admin_organization))
15
- else response(:status => 404) # ?
15
+ else response(:expects => 200, :status => 404) # ?
16
16
  end
17
17
  end
18
18
  end
@@ -0,0 +1,77 @@
1
+ module Fog
2
+ module Compute
3
+ class Ecloud
4
+ class Real
5
+ include Shared
6
+
7
+ def ssh_key_create(data)
8
+ validate_data([:Name], data)
9
+
10
+ request(
11
+ :body => generate_ssh_key_create_request(data),
12
+ :expects => 201,
13
+ :method => "POST",
14
+ :headers => {},
15
+ :uri => data[:uri],
16
+ :parse => true
17
+ ).body
18
+ end
19
+
20
+ private
21
+
22
+ def generate_ssh_key_create_request(data)
23
+ xml = Builder::XmlMarkup.new
24
+ xml.CreateSshKey(:name => data[:Name]) do
25
+ xml.Default data[:Default]
26
+ end
27
+ end
28
+ end
29
+
30
+ class Mock
31
+ include Shared
32
+
33
+ def ssh_key_create(data)
34
+ validate_data([:Name], data)
35
+ ssh_key_id = Fog::Mock.random_numbers(7).to_i
36
+ ssh_key_fingerprint = ""
37
+ (1..15).each do
38
+ ssh_key_fingerprint = ssh_key_fingerprint + Fog::Mock.random_hex(2) + ":"
39
+ end
40
+ ssh_key_fingerprint = ssh_key_fingerprint + Fog::Mock.random_hex(2)
41
+ ssh_private_key = Fog::Mock.random_base64(512)
42
+ org_id = self.data[:organization_id]
43
+ org_name = self.data[:organization_name]
44
+
45
+ ssh_key = {
46
+ :href => "/cloudapi/ecloud/admin/sshKeys/#{ssh_key_id}",
47
+ :Name => data[:Name],
48
+ :type => "application/vnd.tmrk.cloud.admin.sshKey",
49
+ :Links => {
50
+ :Link => {
51
+ :href => "/cloudapi/ecloud/admin/organizations/#{org_id}",
52
+ :name => org_name,
53
+ :type => "application/vnd.tmrk.cloud.admin.organization",
54
+ :rel => "up",
55
+ },
56
+ :Link => {
57
+ :href => "/cloudapi/ecloud/organizations/#{org_id}",
58
+ :name => org_name,
59
+ :type => "application/vnd.tmrk.cloud.organization",
60
+ :rel => "up",
61
+ },
62
+ },
63
+ :Default => data[:Default] || false,
64
+ :FingerPrint => ssh_key_fingerprint,
65
+ :PrivateKey => ssh_private_key,
66
+ }
67
+
68
+ ssh_key_response = response(:body => ssh_key)
69
+
70
+ self.data[:ssh_keys][ssh_key_id] = ssh_key
71
+
72
+ ssh_key_response.body
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,18 @@
1
+ module Fog
2
+ module Compute
3
+ class Ecloud
4
+ class Real
5
+ basic_request :ssh_key_delete, 204, "DELETE"
6
+ end
7
+
8
+ class Mock
9
+ def ssh_key_delete(uri)
10
+ ssh_key_id = id_from_uri(uri)
11
+
12
+ data[:ssh_keys].delete(ssh_key_id)
13
+ response(:body => nil, :status => 204)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,43 @@
1
+ module Fog
2
+ module Compute
3
+ class Ecloud
4
+ class Real
5
+ include Shared
6
+
7
+ def ssh_key_edit(data)
8
+ request(
9
+ :body => generate_ssh_key_edit_request(data),
10
+ :expects => 200,
11
+ :method => "PUT",
12
+ :headers => {},
13
+ :uri => data[:uri],
14
+ :parse => true
15
+ ).body
16
+ end
17
+
18
+ private
19
+
20
+ def generate_ssh_key_edit_request(data)
21
+ xml = Builder::XmlMarkup.new
22
+ xml.SshKey(:name => data[:Name]) do
23
+ xml.Default data[:Default]
24
+ end
25
+ end
26
+ end
27
+
28
+ class Mock
29
+ def ssh_key_edit(options)
30
+ ssh_key_id = id_from_uri(options[:uri]).to_i
31
+ if data[:ssh_keys][ssh_key_id]
32
+ data[:ssh_keys][ssh_key_id][:Name] = options[:Name]
33
+ data[:ssh_keys][ssh_key_id][:Default] = options[:Default]
34
+ ssh_key = data[:ssh_keys][ssh_key_id]
35
+ response(:body => Fog::Ecloud.slice(ssh_key, :id, :admin_organization)).body
36
+ else
37
+ response(:expects => 200, :status => 404)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module Ecloud
3
- VERSION = "0.1.3"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -7,13 +7,42 @@ Shindo.tests("Fog::Compute[:#{provider}] | ssh_keys", [provider.to_s]) do
7
7
  @admin_organization.reload
8
8
  @ssh_keys = @admin_organization.ssh_keys
9
9
 
10
- tests('#all').succeeds do
10
+ tests("#all").succeeds do
11
11
  returns(false) { @ssh_keys.empty? }
12
12
  end
13
13
 
14
- tests('#get').succeeds do
14
+ tests("#get").succeeds do
15
15
  ssh_key = @ssh_keys.first
16
16
 
17
17
  returns(false) { @ssh_keys.get(ssh_key.href).nil? }
18
+ returns(false) { @ssh_keys.get("/notfound" + ssh_key.href).nil? }
19
+ end
20
+
21
+ tests("#create").succeeds do
22
+ new_key = @ssh_keys.create(:Name => "testing")
23
+ @key_id = new_key.id || nil
24
+ returns(false) { new_key.nil? }
25
+ raises(ArgumentError) { @ssh_keys.create }
26
+ end
27
+
28
+ tests("#edit").succeeds do
29
+ the_key = @ssh_keys.get(@key_id)
30
+ returns(false) { the_key.nil? }
31
+
32
+ the_key.edit(:Name => "more testing")
33
+ the_key.reload
34
+ returns(false) { the_key.name != "more testing" }
35
+
36
+ the_key.edit(:Default => true)
37
+ the_key.reload
38
+ returns(true) { the_key.default }
39
+ end
40
+
41
+ tests("#delete").succeeds do
42
+ the_key = @ssh_keys.get(@key_id)
43
+ returns(false) { the_key.nil? }
44
+ the_key.delete
45
+ the_key = @ssh_keys.get(@key_id)
46
+ returns(false) { !the_key.nil? }
18
47
  end
19
48
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fog-ecloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paulo Henrique Lopes Ribeiro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-11 00:00:00.000000000 Z
11
+ date: 2015-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fog-core
@@ -382,6 +382,9 @@ files:
382
382
  - lib/fog/compute/ecloud/requests/rows_edit.rb
383
383
  - lib/fog/compute/ecloud/requests/rows_movedown.rb
384
384
  - lib/fog/compute/ecloud/requests/rows_moveup.rb
385
+ - lib/fog/compute/ecloud/requests/ssh_key_create.rb
386
+ - lib/fog/compute/ecloud/requests/ssh_key_delete.rb
387
+ - lib/fog/compute/ecloud/requests/ssh_key_edit.rb
385
388
  - lib/fog/compute/ecloud/requests/trusted_network_groups_create.rb
386
389
  - lib/fog/compute/ecloud/requests/trusted_network_groups_delete.rb
387
390
  - lib/fog/compute/ecloud/requests/trusted_network_groups_edit.rb