fog-oraclecloud 0.1.1 → 0.1.2

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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/lib/fog/oraclecloud/compute.rb +27 -1
  3. data/lib/fog/oraclecloud/database.rb +12 -41
  4. data/lib/fog/oraclecloud/java.rb +17 -45
  5. data/lib/fog/oraclecloud/models/compute/instance.rb +6 -2
  6. data/lib/fog/oraclecloud/models/database/instance.rb +14 -6
  7. data/lib/fog/oraclecloud/models/database/instances.rb +1 -5
  8. data/lib/fog/oraclecloud/models/java/instance.rb +12 -3
  9. data/lib/fog/oraclecloud/models/java/instances.rb +1 -5
  10. data/lib/fog/oraclecloud/requests/compute/create_instance.rb +21 -0
  11. data/lib/fog/oraclecloud/requests/compute/create_orchestration.rb +36 -0
  12. data/lib/fog/oraclecloud/requests/compute/create_ssh_key.rb +19 -0
  13. data/lib/fog/oraclecloud/requests/compute/delete_instance.rb +11 -0
  14. data/lib/fog/oraclecloud/requests/compute/delete_ssh_key.rb +10 -0
  15. data/lib/fog/oraclecloud/requests/compute/get_instance.rb +21 -0
  16. data/lib/fog/oraclecloud/requests/compute/get_orchestration.rb +15 -0
  17. data/lib/fog/oraclecloud/requests/compute/get_ssh_key.rb +15 -0
  18. data/lib/fog/oraclecloud/requests/compute/list_instances.rb +12 -0
  19. data/lib/fog/oraclecloud/requests/compute/list_ssh_keys.rb +13 -0
  20. data/lib/fog/oraclecloud/requests/compute/update_orchestration.rb +31 -0
  21. data/lib/fog/oraclecloud/requests/compute/update_ssh_key.rb +20 -0
  22. data/lib/fog/oraclecloud/requests/database/create_instance.rb +16 -6
  23. data/lib/fog/oraclecloud/requests/database/delete_instance.rb +5 -10
  24. data/lib/fog/oraclecloud/requests/database/get_instance.rb +19 -11
  25. data/lib/fog/oraclecloud/requests/database/list_instances.rb +13 -0
  26. data/lib/fog/oraclecloud/requests/java/create_instance.rb +14 -9
  27. data/lib/fog/oraclecloud/requests/java/delete_instance.rb +4 -9
  28. data/lib/fog/oraclecloud/requests/java/get_instance.rb +19 -12
  29. data/lib/fog/oraclecloud/requests/java/list_instances.rb +13 -0
  30. data/lib/fog/oraclecloud/requests/java/list_servers.rb +1 -12
  31. data/lib/fog/oraclecloud/version.rb +1 -1
  32. data/tests/helper.rb +3 -1
  33. data/tests/helpers/mock_helper.rb +15 -0
  34. data/tests/requests/database_tests.rb +31 -27
  35. data/tests/requests/instance_tests.rb +23 -13
  36. data/tests/requests/java_tests.rb +38 -27
  37. data/tests/requests/orchestrations_tests.rb +1 -0
  38. data/tests/requests/ssh_keys_tests.rb +9 -4
  39. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 723b71ff79264ce5b33642486c3ee7964af90673
4
- data.tar.gz: 9fbd33b824585600ecf73dbccd0730362182b893
3
+ metadata.gz: dfdb853230afc1e89dba20e81a39ef494234917f
4
+ data.tar.gz: 757d5807cbb9f31ec133be9821a51d6b0b6c8cff
5
5
  SHA512:
6
- metadata.gz: ee21600f5d7589284db68160004784d6060351f3852460125ce65766a703bb720dadfe46009c117ccd7df45e73d48c4d2b589e9cb096065aa06c300120f85765
7
- data.tar.gz: 3ea277d567db75726c317d75cce0601b299120a5343769011816f4f619d4a555882e9d3123352f51833a86acba3a1149beda4b502339f038e4a1d4cfcb294bfa
6
+ metadata.gz: 060f7511d4454b87de04176b24488db21088b81a1568faeee3920499af9a928f6f0138f75d36e369e1f401c9641a0c57a0f252f0931faf4fee18cc4da0535e6f
7
+ data.tar.gz: 83395c4a62880b05ff56f18c854538a8c2df526489e2965fb060ff2a65ea0055f4221dbba70c6677a98811c67ba0d01603113bdcf0e09417396c6ed1d9c71070
@@ -94,7 +94,6 @@ module Fog
94
94
  end
95
95
 
96
96
  def authenticate()
97
-
98
97
  begin
99
98
  response = @connection.request({
100
99
  :expects => 204,
@@ -141,6 +140,33 @@ module Fog
141
140
  response
142
141
  end
143
142
  end
143
+
144
+ class Mock
145
+ def initialize(options={})
146
+ @username = options[:oracle_username]
147
+ @password = options[:oracle_password]
148
+ @identity_domain = options[:oracle_domain]
149
+ @api_endpoint = options[:oracle_compute_api]
150
+
151
+ end
152
+
153
+ def self.data
154
+ @data ||= {
155
+ :instances => {},
156
+ :sshkeys => {},
157
+ :orchestrations => {},
158
+ :deleted_at => {}
159
+ }
160
+ end
161
+
162
+ def self.reset
163
+ @data = nil
164
+ end
165
+
166
+ def data
167
+ self.class.data
168
+ end
169
+ end
144
170
  end
145
171
  end
146
172
  end
@@ -42,7 +42,7 @@ module Fog
42
42
  rescue Excon::Errors::HTTPStatusError => error
43
43
  raise case error
44
44
  when Excon::Errors::NotFound
45
- Fog::Oracle::Database::NotFound.slurp(error)
45
+ Fog::OracleCloud::Database::NotFound.slurp(error)
46
46
  else
47
47
  error
48
48
  end
@@ -62,51 +62,22 @@ module Fog
62
62
  @username = options[:oracle_username]
63
63
  @password = options[:oracle_password]
64
64
  @identity_domain = options[:oracle_domain]
65
-
66
- @connection = Fog::XML::Connection.new("https://dbaas.oraclecloud.com")
67
65
  end
68
66
 
69
- def self.data
70
- @data ||= Hash.new do |hash, key|
71
- hash[key] = {
72
- :instances => {}
73
- }
74
- end
67
+ def self.data
68
+ @data ||= {
69
+ :instances => {},
70
+ :deleted_at => {},
71
+ :created_at => {}
72
+ }
75
73
  end
76
74
 
77
- def data
78
- self.class.data[@oracle_username]
79
- end
80
-
81
- # Remove, jsut for testing
82
- def auth_header
83
- auth_header ||= 'Basic ' + Base64.encode64("#{@username}:#{@password}").gsub("\n",'')
75
+ def self.reset
76
+ @data = nil
84
77
  end
85
- def request(params, parse_json = true, &block)
86
- begin
87
- response = @connection.request(params.merge!({
88
- :headers => {
89
- 'Authorization' => auth_header,
90
- 'X-ID-TENANT-NAME' => @identity_domain,
91
- 'Content-Type' => 'application/json',
92
- #'Accept' => 'application/json'
93
- }.merge!(params[:headers] || {})
94
- }), &block)
95
- rescue Excon::Errors::HTTPStatusError => error
96
- raise case error
97
- when Excon::Errors::NotFound
98
- Fog::OracleCloud::Database::NotFound.slurp(error)
99
- else
100
- error
101
- end
102
- end
103
- #https://jaas.oraclecloud.com/paas/service/jcs/api/v1.1/instances/agriculture/status/create/job/2781084
104
- if !response.body.empty? && parse_json
105
- # The Oracle Cloud doesn't return the Content-Type header as application/json, rather as application/vnd.com.oracle.oracloud.provisioning.Pod+json
106
- # Should add check here to validate, but not sure if this might change in future
107
- response.body = Fog::JSON.decode(response.body)
108
- end
109
- response
78
+
79
+ def data
80
+ self.class.data
110
81
  end
111
82
  end
112
83
  end
@@ -59,56 +59,28 @@ module Fog
59
59
  end
60
60
 
61
61
  class Mock
62
- def initialize(options={})
63
- @username = options[:oracle_username]
64
- @password = options[:oracle_password]
65
- @identity_domain = options[:oracle_domain]
66
-
67
- @connection = Fog::XML::Connection.new("https://jaas.oraclecloud.com")
68
- end
62
+ def initialize(options={})
63
+ @username = options[:oracle_username]
64
+ @password = options[:oracle_password]
65
+ @identity_domain = options[:oracle_domain]
66
+ end
69
67
 
70
- def self.data
71
- @data ||= Hash.new do |hash, key|
72
- hash[key] = {
73
- :instances => {}
74
- }
75
- end
68
+ def self.data
69
+ @data ||= {
70
+ :instances => {},
71
+ :deleted_at => {},
72
+ :created_at => {}
73
+ }
76
74
  end
77
75
 
78
- def data
79
- self.class.data[@oracle_username]
76
+ def self.reset
77
+ @data = nil
80
78
  end
81
-
82
- # Remove, jsut for testing
83
- def auth_header
84
- auth_header ||= 'Basic ' + Base64.encode64("#{@username}:#{@password}").gsub("\n",'')
85
- end
86
- def request(params, parse_json = true, &block)
87
- begin
88
- response = @connection.request(params.merge!({
89
- :headers => {
90
- 'Authorization' => auth_header,
91
- 'X-ID-TENANT-NAME' => @identity_domain,
92
- 'Content-Type' => 'application/json',
93
- #'Accept' => 'application/json'
94
- }.merge!(params[:headers] || {})
95
- }), &block)
96
- rescue Excon::Errors::HTTPStatusError => error
97
- raise case error
98
- when Excon::Errors::NotFound
99
- Fog::Errors::NotFound.new("Instance not found")
100
- else
101
- error
102
- end
103
- end
104
- if !response.body.empty? && parse_json
105
- # The Oracle Cloud doesn't return the Content-Type header as application/json, rather as application/vnd.com.oracle.oracloud.provisioning.Pod+json
106
- # Should add check here to validate, but not sure if this might change in future
107
- response.body = Fog::JSON.decode(response.body)
108
- end
109
- response
79
+
80
+ def data
81
+ self.class.data
110
82
  end
111
- end
83
+ end
112
84
  end
113
85
  end
114
86
  end
@@ -37,12 +37,16 @@ module Fog
37
37
  attribute :uri
38
38
  attribute :vcable_id
39
39
  attribute :virtio
40
- attribute :vnc
41
-
40
+ attribute :vnc
41
+
42
42
  def ready?
43
43
  state == 'running'
44
44
  end
45
45
 
46
+ def clean_name
47
+ name.sub %r{\/.*\/}, ''
48
+ end
49
+
46
50
  def save
47
51
  #identity ? update : create
48
52
  create
@@ -6,7 +6,6 @@ module Fog
6
6
  class Instance < Fog::Model
7
7
  identity :service_name
8
8
 
9
- attribute :service_name, :aliases => 'display_name'
10
9
  attribute :version
11
10
  attribute :status
12
11
  attribute :description
@@ -45,6 +44,9 @@ module Fog
45
44
  attribute :vmPublicKey
46
45
  attribute :parameters
47
46
 
47
+ def clean_name
48
+ name.sub %r{\/.*\/}, ''
49
+ end
48
50
 
49
51
  def save
50
52
  #identity ? update : create
@@ -55,6 +57,14 @@ module Fog
55
57
  status == "Running"
56
58
  end
57
59
 
60
+ def stopping?
61
+ status == 'Maintenance' || status == 'Terminating'
62
+ end
63
+
64
+ def stopped?
65
+ status == 'Stopped'
66
+ end
67
+
58
68
  def ip_address
59
69
  # TODO: Replace with regex
60
70
  content_url.sub('http://', '')
@@ -68,14 +78,12 @@ module Fog
68
78
  private
69
79
 
70
80
  def create
71
- requires :service_name, :edition, :vmPublicKey, :parameters
72
- data = service.create_instance(service_name, edition, vmPublicKey, parameters,
81
+ requires :service_name, :edition, :vmPublicKey, :shape, :version
82
+ data = service.create_instance(service_name, edition, vmPublicKey, shape, version,
73
83
  :level => level,
74
84
  :subscriptionType => subscriptionType,
75
85
  :description => description,
76
- :version => version,
77
- :edition => edition,
78
- :shape => shape)
86
+ :edition => edition)
79
87
 
80
88
  end
81
89
  end
@@ -13,11 +13,7 @@ module Fog
13
13
  end
14
14
 
15
15
  def get(id)
16
- begin
17
- new(service.get_instance(id).body)
18
- rescue Fog::OracleCloud::Database::NotFound
19
- nil
20
- end
16
+ new(service.get_instance(id).body)
21
17
  end
22
18
 
23
19
  end
@@ -57,6 +57,7 @@ module Fog
57
57
  attribute :cloud_storage_user, :aliases=>'cloudStorageUser'
58
58
  attribute :cloud_storage_password, :aliases=>'cloudStoragePassword'
59
59
  attribute :admin_user_name, :aliases=>'adminUserName'
60
+ attribute :vm_public_key, :aliases=>'vmPublicKey'
60
61
 
61
62
  # The following are used to delete an instance and are not returned in the list action
62
63
  attribute :dba_name
@@ -80,6 +81,14 @@ module Fog
80
81
  status == "Running"
81
82
  end
82
83
 
84
+ def stopping?
85
+ status == 'Maintenance' || status == 'Terminating'
86
+ end
87
+
88
+ def stopped?
89
+ status == 'Stopped'
90
+ end
91
+
83
92
  def servers
84
93
  service.servers.all(service_name)
85
94
  end
@@ -92,11 +101,11 @@ module Fog
92
101
  private
93
102
 
94
103
  def create
95
- requires :service_name, :cloudStorageContainer, :cloudStorageUser, :cloudStoragePassword, :parameters
104
+ requires :service_name, :cloud_storage_container, :cloud_storage_user, :cloud_storage_password
96
105
 
97
- data = service.create_instance(service_name, cloudStorageContainer, cloudStorageUser, cloudStoragePassword, parameters,
106
+ data = service.create_instance(service_name, cloud_storage_container, cloud_storage_user, cloud_storage_password, dba_name, dba_password, db_servicename, shape, version, vm_public_key,
98
107
  :level => level,
99
- :subscriptionType => subscriptionType,
108
+ :subscriptionType => subscription_type,
100
109
  :description => description)
101
110
 
102
111
  end
@@ -13,11 +13,7 @@ module Fog
13
13
  end
14
14
 
15
15
  def get(service_name)
16
- begin
17
- new(service.get_instance(service_name).body)
18
- rescue Fog::OracleCloud::Java::NotFound
19
- nil
20
- end
16
+ new(service.get_instance(service_name).body)
21
17
  end
22
18
 
23
19
  end
@@ -27,6 +27,27 @@ module Fog
27
27
  )
28
28
  end
29
29
  end
30
+
31
+ class Mock
32
+ def create_instance (name, shape, imagelist, label, sshkeys)
33
+ response = Excon::Response.new
34
+ name.sub! "/Compute-#{@identity_domain}/#{@username}/", ''
35
+
36
+ self.data[:instances][name] = {
37
+ 'name' => "/Compute-#{@identity_domain}/#{@username}/#{name}",
38
+ 'shape' => shape,
39
+ 'imagelist' => imagelist,
40
+ 'label' => label,
41
+ 'sshkeys' => sshkeys,
42
+ 'state' => 'running'
43
+ }
44
+ response.status = 201
45
+ response.body = {
46
+ 'instances' => [self.data[:instances][name]]
47
+ }
48
+ response
49
+ end
50
+ end
30
51
  end
31
52
  end
32
53
  end
@@ -41,6 +41,42 @@ module Fog
41
41
  )
42
42
  end
43
43
  end
44
+
45
+ class Mock
46
+ def create_orchestration (name, oplans, options={})
47
+ response = Excon::Response.new
48
+ # Clean up names in case they haven't provided the fully resolved names
49
+ name.sub! "/Compute-#{@identity_domain}/#{@username}/", ''
50
+ oplans.map do |oplan|
51
+ oplan['objects'].map do |object|
52
+ if oplan['obj_type'] == 'launchplan' then
53
+ object['instances'].map do |instance|
54
+ if !instance['name'].start_with?("/Compute-") then
55
+ instance['name'] = "/Compute-#{@identity_domain}/#{@username}/#{instance['name']}"
56
+ end
57
+ end
58
+ else
59
+ if !object['name'].start_with?("/Compute-") then
60
+ object['name'] = "/Compute-#{@identity_domain}/#{@username}/#{object['name']}"
61
+ end
62
+ end
63
+ end
64
+ end
65
+ self.data[:orchestrations][name] = {
66
+ 'name' => "/Compute-#{@identity_domain}/#{@username}/#{name}",
67
+ 'oplans' => oplans,
68
+ 'relationships' => options[:relationships],
69
+ 'description' => options[:description],
70
+ 'account' => options[:account],
71
+ 'schedule' => options[:schedule],
72
+ 'status' => 'stopped',
73
+ 'uri' => "#{@api_endpoint}orchestration/Compute-#{@identity_domain}/#{@username}/#{name}"
74
+ }
75
+ response.status = 201
76
+ response.body = self.data[:orchestrations][name]
77
+ response
78
+ end
79
+ end
44
80
  end
45
81
  end
46
82
  end
@@ -22,6 +22,25 @@ module Fog
22
22
  )
23
23
  end
24
24
  end
25
+
26
+ class Mock
27
+ def create_ssh_key (name, enabled, key)
28
+ response = Excon::Response.new
29
+ name.sub! "/Compute-#{@identity_domain}/#{@username}/", ''
30
+
31
+ data = {
32
+ 'name' => "/Compute-#{@identity_domain}/#{@username}/#{name}",
33
+ 'enabled' => enabled,
34
+ 'key' => key,
35
+ 'uri' => "#{@api_endpoint}sshkey/#{name}"
36
+ }
37
+ self.data[:sshkeys][name] = data
38
+
39
+ response.status = 201
40
+ response.body = self.data[:sshkeys][name]
41
+ response
42
+ end
43
+ end
25
44
  end
26
45
  end
27
46
  end
@@ -17,6 +17,17 @@ module Fog
17
17
  )
18
18
  end
19
19
  end
20
+
21
+ class Mock
22
+ def delete_instance(name)
23
+ response = Excon::Response.new
24
+ clean_name = name.sub "/Compute-#{@identity_domain}/#{@username}/", ''
25
+ self.data[:instances][clean_name]['state'] = 'stopping'
26
+ self.data[:deleted_at][clean_name] = Time.now
27
+ response.status = 204
28
+ response
29
+ end
30
+ end
20
31
  end
21
32
  end
22
33
  end
@@ -17,6 +17,16 @@ module Fog
17
17
  )
18
18
  end
19
19
  end
20
+
21
+ class Mock
22
+ def delete_ssh_key (name)
23
+ response = Excon::Response.new
24
+ clean_name = name.sub "/Compute-#{@identity_domain}/#{@username}/", ''
25
+ self.data[:sshkeys].delete(clean_name)
26
+ response.status = 204
27
+ response
28
+ end
29
+ end
20
30
  end
21
31
  end
22
32
  end
@@ -19,6 +19,27 @@ module Fog
19
19
  response
20
20
  end
21
21
  end
22
+
23
+ class Mock
24
+ def get_instance(name)
25
+ response = Excon::Response.new
26
+ clean_name = name.sub "/Compute-#{@identity_domain}/#{@username}/", ''
27
+
28
+ if instance = self.data[:instances][clean_name]
29
+ if instance['state'] == 'stopping'
30
+ if Time.now - self.data[:deleted_at][clean_name] >= Fog::Mock.delay
31
+ self.data[:deleted_at].delete(clean_name)
32
+ self.data[:instances].delete(clean_name)
33
+ end
34
+ end
35
+ response.status = 200
36
+ response.body = instance
37
+ response
38
+ else;
39
+ raise Fog::Compute::OracleCloud::NotFound.new("Instance #{name} does not exist");
40
+ end
41
+ end
42
+ end
22
43
  end
23
44
  end
24
45
  end
@@ -19,6 +19,21 @@ module Fog
19
19
  response
20
20
  end
21
21
  end
22
+
23
+ class Mock
24
+ def get_orchestration(name)
25
+ response = Excon::Response.new
26
+ clean_name = name.sub "/Compute-#{@identity_domain}/#{@username}/", ''
27
+
28
+ if instance = self.data[:orchestrations][clean_name]
29
+ response.status = 200
30
+ response.body = instance
31
+ response
32
+ else;
33
+ raise Fog::Compute::OracleCloud::NotFound.new("Orchestration #{name} does not exist");
34
+ end
35
+ end
36
+ end
22
37
  end
23
38
  end
24
39
  end
@@ -19,6 +19,21 @@ module Fog
19
19
  response
20
20
  end
21
21
  end
22
+
23
+ class Mock
24
+ def get_ssh_key(name)
25
+ response = Excon::Response.new
26
+ clean_name = name.sub "/Compute-#{@identity_domain}/#{@username}/", ''
27
+
28
+ if sshkey = self.data[:sshkeys][clean_name]
29
+ response.status = 200
30
+ response.body = sshkey
31
+ response
32
+ else;
33
+ raise Fog::Compute::OracleCloud::NotFound.new("SSHKey #{name} does not exist");
34
+ end
35
+ end
36
+ end
22
37
  end
23
38
  end
24
39
  end
@@ -11,6 +11,18 @@ module Fog
11
11
  response
12
12
  end
13
13
  end
14
+ class Mock
15
+ def list_instances
16
+ response = Excon::Response.new
17
+
18
+ instances = self.data[:instances].values
19
+
20
+ response.body = {
21
+ 'result' => instances
22
+ }
23
+ response
24
+ end
25
+ end
14
26
  end
15
27
  end
16
28
  end
@@ -11,6 +11,19 @@ module Fog
11
11
  response
12
12
  end
13
13
  end
14
+
15
+ class Mock
16
+ def list_ssh_keys
17
+ response = Excon::Response.new
18
+
19
+ sshkeys = self.data[:sshkeys].values
20
+
21
+ response.body = {
22
+ 'result' => sshkeys
23
+ }
24
+ response
25
+ end
26
+ end
14
27
  end
15
28
  end
16
29
  end
@@ -44,6 +44,37 @@ module Fog
44
44
  )
45
45
  end
46
46
  end
47
+
48
+ class Mock
49
+ def update_orchestration (name, oplans, options={})
50
+ response = Excon::Response.new
51
+ clean_name = name.sub "/Compute-#{@identity_domain}/#{@username}/", ''
52
+ if orchestration = self.data[:orchestrations][clean_name]
53
+ oplans.map do |oplan|
54
+ oplan['objects'].map do |object|
55
+ if oplan['obj_type'] == 'launchplan' then
56
+ object['instances'].map do |instance|
57
+ if !instance['name'].start_with?("/Compute-") then
58
+ instance['name'] = "/Compute-#{@identity_domain}/#{@username}/#{instance['name']}"
59
+ end
60
+ end
61
+ else
62
+ if !object['name'].start_with?("/Compute-") then
63
+ object['name'] = "/Compute-#{@identity_domain}/#{@username}/#{object['name']}"
64
+ end
65
+ end
66
+ end
67
+ end
68
+ self.data[:orchestrations][clean_name].merge!(options)
69
+ self.data[:orchestrations][clean_name]['oplans'] = oplans
70
+ response.status = 200
71
+ response.body = self.data[:orchestrations][clean_name]
72
+ response
73
+ else;
74
+ raise Fog::Compute::OracleCloud::NotFound.new("Orchestration #{name} does not exist");
75
+ end
76
+ end
77
+ end
47
78
  end
48
79
  end
49
80
  end
@@ -24,6 +24,26 @@ module Fog
24
24
  )
25
25
  end
26
26
  end
27
+
28
+ class Mock
29
+ def update_ssh_key (name, enabled, key)
30
+ response = Excon::Response.new
31
+ clean_name = name.sub "/Compute-#{@identity_domain}/#{@username}/", ''
32
+ if sshkey = self.data[:sshkeys][clean_name]
33
+ self.data[:sshkeys][clean_name].merge!({
34
+ 'name' => "/Compute-#{@identity_domain}/#{@username}/#{clean_name}",
35
+ 'enabled' => enabled,
36
+ 'key' => key,
37
+ 'uri' => "#{@api_endpoint}sshkey/#{clean_name}"
38
+ })
39
+ response.status = 200
40
+ response.body = self.data[:sshkeys][clean_name]
41
+ response
42
+ else;
43
+ raise Fog::Compute::OracleCloud::NotFound.new("SSHKey #{name} does not exist");
44
+ end
45
+ end
46
+ end
27
47
  end
28
48
  end
29
49
  end
@@ -3,7 +3,7 @@ module Fog
3
3
  class Database
4
4
  class Real
5
5
 
6
- def create_instance(service_name, edition, vmPublicKey, parameters, options={})
6
+ def create_instance(service_name, edition, vmPublicKey, shape, version, options={})
7
7
  body_data = {
8
8
  'serviceName' => service_name,
9
9
  'version' => options[:version],
@@ -13,7 +13,10 @@ module Fog
13
13
  'description' => options[:description],
14
14
  'shape' => options[:shape],
15
15
  'vmPublicKeyText' => vmPublicKey,
16
- 'parameters' => parameters
16
+ 'parameters' => {
17
+ 'shape' => shape,
18
+ 'version' => version
19
+ }
17
20
  }
18
21
  body_data = body_data.reject {|key, value| value.nil?}
19
22
 
@@ -31,13 +34,20 @@ module Fog
31
34
  end
32
35
 
33
36
  class Mock
34
- def create_instance(service_name, edition, vmPublicKey, parameters, options={})
37
+ def create_instance(service_name, edition, vmPublicKey, shape, version, options={})
35
38
  response = Excon::Response.new
36
39
 
37
- instance = Fog::OracleCloud::Mock.create_database_instance(service_name)
38
- self.data[:instances][service_name] = instance
40
+ data = {
41
+ 'service_name' => service_name,
42
+ 'shape' => shape,
43
+ 'edition' => edition,
44
+ 'version' => version,
45
+ 'status' => 'In Progress'
46
+ }.merge(options.select {|key, value| ["description"].include?(key) })
39
47
 
40
- response.status = 202
48
+ self.data[:instances][service_name] = data
49
+ self.data[:created_at][service_name] = Time.now
50
+ response.status = 202
41
51
  response
42
52
  end
43
53
  end
@@ -12,17 +12,12 @@ module Fog
12
12
  end
13
13
  end
14
14
 
15
- class Mock
16
- def delete_instance(service_name)
15
+ class Mock
16
+ def delete_instance(name)
17
17
  response = Excon::Response.new
18
- # remove from memoreeeez.
19
- self.data[:instances].delete service_name
20
- response.body = {
21
- 'service_name' => service_name,
22
- 'status' => 'Terminating'
23
- }
24
- response.status = 202
25
-
18
+ self.data[:instances][name]['status'] = 'Terminating'
19
+ self.data[:deleted_at][name] = Time.now
20
+ response.status = 204
26
21
  response
27
22
  end
28
23
  end
@@ -14,22 +14,30 @@ module Fog
14
14
  end
15
15
 
16
16
  class Mock
17
- def get_instance(instance_id)
17
+ def get_instance(name)
18
18
  response = Excon::Response.new
19
- if instance_exists? instance_id
19
+
20
+ if instance = self.data[:instances][name]
21
+ case instance['status']
22
+ when 'Terminating'
23
+ if Time.now - self.data[:deleted_at][name] >= Fog::Mock.delay
24
+ self.data[:deleted_at].delete(name)
25
+ self.data[:instances].delete(name)
26
+ end
27
+ when 'In Progress'
28
+ if Time.now - self.data[:created_at][name] >= Fog::Mock.delay
29
+ self.data[:instances][name]['status'] = 'Running'
30
+ instance = self.data[:instances][name]
31
+ self.data[:created_at].delete(name)
32
+ end
33
+ end
20
34
  response.status = 200
21
- response.body = self.data[:instances][instance_id]
35
+ response.body = instance
36
+ response
22
37
  else
23
- raise Fog::Oracle::Database::NotFound
38
+ raise Fog::OracleCloud::Database::NotFound.new("Database #{name} does not exist");
24
39
  end
25
- response
26
- end
27
-
28
- # Checks if an instance exists
29
- def instance_exists?(instance_id)
30
- self.data[:instances].key? instance_id
31
40
  end
32
-
33
41
  end
34
42
  end
35
43
  end
@@ -11,6 +11,19 @@ module Fog
11
11
  response
12
12
  end
13
13
  end
14
+
15
+ class Mock
16
+ def list_instances
17
+ response = Excon::Response.new
18
+
19
+ instances = self.data[:instances].values
20
+
21
+ response.body = {
22
+ 'services' => instances
23
+ }
24
+ response
25
+ end
26
+ end
14
27
  end
15
28
  end
16
29
  end
@@ -3,7 +3,7 @@ module Fog
3
3
  class Java
4
4
  class Real
5
5
 
6
- def create_instance(service_name, cloudStorageContainer, cloudStorageUser, cloudStoragePassword, parameters, options={})
6
+ def create_instance(service_name, cloudStorageContainer, cloudStorageUser, cloudStoragePassword, dbaName, dbaPassword, dbServiceName, shape, version, vmPublicKey, options={})
7
7
  if !cloudStorageContainer.start_with?("/Storage-") then
8
8
  # They haven't provided a well formed container name, add their details in
9
9
  name = "/Storage-#{@identity_domain}/#{@username}/#{cloudStorageContainer}"
@@ -33,18 +33,23 @@ module Fog
33
33
  end
34
34
 
35
35
  end
36
-
37
36
  class Mock
38
- def create_instance(service_name, cloudStorageContainer, cloudStorageUser, cloudStoragePassword, parameters, options={})
39
- response = Excon::Response.new
37
+ def create_instance(service_name, cloudStorageContainer, cloudStorageUser, cloudStoragePassword, dbaName, dbaPassword, dbServiceName, shape, version, vmPublicKey, options={})
38
+ response = Excon::Response.new
40
39
 
41
- instance = Fog::OracleCloud::Mock.create_java_instance(service_name, parameters)
42
- self.data[:instances][service_name] = instance
40
+ data = {
41
+ 'service_name' => service_name,
42
+ 'db_service_name' => dbServiceName,
43
+ 'shape' => shape,
44
+ 'version' => version,
45
+ 'status' => 'In Progress'
46
+ }.merge(options.select {|key, value| ["description"].include?(key) })
43
47
 
44
- response.status = 202
45
- response.headers['Location'] = "https://jaas.oraclecloud.com/paas/service/jcs/api/v1.1/instances/agriculture/status/create/job/2781084"
48
+ self.data[:instances][service_name] = data
49
+ self.data[:created_at][service_name] = Time.now
50
+ response.status = 202
46
51
  response
47
- end
52
+ end
48
53
  end
49
54
  end
50
55
  end
@@ -24,16 +24,11 @@ module Fog
24
24
  end
25
25
 
26
26
  class Mock
27
- def delete_instance(service_name, dba_name, dba_password, options={})
27
+ def delete_instance(name, dba_name, dba_password, options={})
28
28
  response = Excon::Response.new
29
- # remove from memoreeeez.
30
- self.data[:instances].delete service_name
31
- response.body = {
32
- 'service_name' => service_name,
33
- 'status' => 'Terminating'
34
- }
35
- response.status = 202
36
-
29
+ self.data[:instances][name]['status'] = 'Terminating'
30
+ self.data[:deleted_at][name] = Time.now
31
+ response.status = 204
37
32
  response
38
33
  end
39
34
  end
@@ -14,23 +14,30 @@ module Fog
14
14
  end
15
15
 
16
16
  class Mock
17
- def get_instance(instance_id)
18
-
17
+ def get_instance(name)
19
18
  response = Excon::Response.new
20
- if instance_exists? instance_id
19
+
20
+ if instance = self.data[:instances][name]
21
+ case instance['status']
22
+ when 'Terminating'
23
+ if Time.now - self.data[:deleted_at][name] >= Fog::Mock.delay
24
+ self.data[:deleted_at].delete(name)
25
+ self.data[:instances].delete(name)
26
+ end
27
+ when 'In Progress'
28
+ if Time.now - self.data[:created_at][name] >= Fog::Mock.delay
29
+ self.data[:instances][name]['status'] = 'Running'
30
+ instance = self.data[:instances][name]
31
+ self.data[:created_at].delete(name)
32
+ end
33
+ end
21
34
  response.status = 200
22
- response.body = self.data[:instances][instance_id]
35
+ response.body = instance
36
+ response
23
37
  else
24
- raise Fog::OracleCloud::Java::NotFound
38
+ raise Fog::OracleCloud::Java::NotFound.new("Java #{name} does not exist");
25
39
  end
26
- response
27
- end
28
-
29
- # Checks if an instance exists
30
- def instance_exists?(instance_id)
31
- self.data[:instances].key? instance_id
32
40
  end
33
-
34
41
  end
35
42
  end
36
43
  end
@@ -11,6 +11,19 @@ module Fog
11
11
  response
12
12
  end
13
13
  end
14
+
15
+ class Mock
16
+ def list_instances
17
+ response = Excon::Response.new
18
+
19
+ instances = self.data[:instances].values
20
+
21
+ response.body = {
22
+ 'services' => instances
23
+ }
24
+ response
25
+ end
26
+ end
14
27
  end
15
28
  end
16
29
  end
@@ -12,18 +12,7 @@ module Fog
12
12
  end
13
13
  end
14
14
 
15
- class Mock
16
- def list_servers(service_name)
17
- # TODO: Remove, implement proper Mock
18
- response = request(
19
- :expects => 200,
20
- :method => 'GET',
21
- :path => "/paas/service/jcs/api/v1.1/instances/#{@identity_domain}/#{service_name}/servers"
22
- )
23
- response
24
- end
25
-
26
- end
15
+
27
16
  end
28
17
  end
29
18
  end
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module OracleCloud
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
  end
5
5
  end
data/tests/helper.rb CHANGED
@@ -1 +1,3 @@
1
- require File.expand_path('../../lib/fog/oraclecloud', __FILE__)
1
+ require File.expand_path('../../lib/fog/oraclecloud', __FILE__)
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helpers', 'mock_helper'))
@@ -0,0 +1,15 @@
1
+ # Use so you can run in mock mode from the command line
2
+ #
3
+ # FOG_MOCK=true fog
4
+
5
+ if ENV["FOG_MOCK"] == "true"
6
+ Fog.mock!
7
+ end
8
+
9
+ puts "Mock: #{Fog.mock?}"
10
+ # if in mocked mode, fill in some fake credentials for us
11
+ if Fog.mock?
12
+ Fog.credentials = {
13
+ :oracle_compute_api => 'https://api.compute.us0.oraclecloud.com'
14
+ }.merge(Fog.credentials)
15
+ end
@@ -2,33 +2,28 @@ require 'pp'
2
2
 
3
3
  Shindo.tests('Fog::Database[oraclecloud] | database requests', 'database') do
4
4
 
5
- #tests("#java-create", "create") do
6
- # sshkey = Fog::Compute[:oracle].ssh_keys.first.name
7
- # new_instance = Fog::Compute[:oracle].instances.create(
8
- # :name=>'Test123',
9
- # :shape=>'oc3',
10
- # :imagelist=>'/oracle/public/oel_6.4_2GB_v1',
11
- # :label=>'dev-vm',
12
- # :sshkeys=>[sshkey]
13
- # )
14
- # test "can create an instance" do
15
- # new_instance.is_a? Fog::Compute::Oracle::Instance
16
- # end
17
- # test "is being built" do
18
- # new_instance.state != "running"
19
- # end
20
- # new_instance.wait_for { ready? }
21
- #
22
- # test "is built" do
23
- # new_instance.state == 'running'
24
- # end
25
- #
26
- # new_instance.destroy()
27
- # test "can delete instance" do
28
- # check = Fog::Compute[:oracle].instances.get(new_instance.name)
29
- # check.state == 'stopping'
30
- # end
31
- #end
5
+ tests("#database-create", "create") do
6
+ db = Fog::OracleCloud[:database].instances.create(
7
+ :service_name => 'TestDB',
8
+ :description => 'A new database',
9
+ :edition => 'SE',
10
+ :vmPublicKey => 'ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAkNNQ4ri2oUW46mBO/4CHMGCOALciumwGvFEMDLGNnlDbUSqU4IRrqgj+znLClfb29Oer0devdarM6DilsZVgZ2YbI5ZD5vICR/O9J0c28dArwbtFeIjcV2TCWyj5xKEXF1r+OrJMexHQa0fW1URGrU8QODpJNC/9eCVGcEXddL31xTZYpjoVOCVx66kNa6lSHEVV3T4zaCby9Oe5QI4gZe1+xyxHPNEW5wogwS3dlKSyL2CfBP0aUKOmJ5Nrl8+y0GqJQXdGjZ9FIknmwWueRW/6qPQvZocjOZ8YiPZgAP0RNy6lL+u8mnAazj/mrEdmB5QUzpDAllIr5Tn/xaddZQ==',
11
+ :shape => 'oc3',
12
+ :version => '12.1.0.2'
13
+ )
14
+ test "can create a database" do
15
+ db.is_a? Fog::OracleCloud::Database::Instance
16
+ end
17
+
18
+ test "is being built" do
19
+ !db.ready?
20
+ end
21
+ db.wait_for { ready? }
22
+
23
+ test "is built" do
24
+ db.ready?
25
+ end
26
+ end
32
27
 
33
28
  tests('#database-read') do
34
29
  instances = Fog::OracleCloud[:database].instances
@@ -49,4 +44,13 @@ Shindo.tests('Fog::Database[oraclecloud] | database requests', 'database') do
49
44
  instance.service_name.is_a? String
50
45
  end
51
46
  end
47
+
48
+ tests("#database-delete", "create") do
49
+ db = Fog::OracleCloud[:database].instances.get('TestDB')
50
+ db.destroy()
51
+ db.wait_for { stopping? }
52
+ tests("should actually delete instance").raises(Fog::OracleCloud::Database::NotFound) do
53
+ db.wait_for { stopped? }
54
+ end
55
+ end
52
56
  end
@@ -3,31 +3,32 @@ require 'pp'
3
3
  Shindo.tests('Fog::Compute[oraclecloud] | instance requests', 'instances') do
4
4
 
5
5
  tests("#instance-create", "create") do
6
- sshkey = Fog::Compute[:oraclecloud].ssh_keys.first.name
6
+ #sshkey = Fog::Compute[:oraclecloud].ssh_keys.first.name
7
+ begin
8
+ sshkey = Fog::Compute[:oraclecloud].ssh_keys.get('Test123Key')
9
+ rescue Fog::Compute::OracleCloud::NotFound
10
+ sshkey = Fog::Compute[:oraclecloud].ssh_keys.create(
11
+ :name => 'TestSSHKey2',
12
+ :enabled => false,
13
+ :key => 'ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAkNNQ4ri2oUW46mBO/4CHMGCOALciumwGvFEMDLGNnlDbUSqU4IRrqgj+znLClfb29Oer0devdarM6DilsZVgZ2YbI5ZD5vICR/O9J0c28dArwbtFeIjcV2TCWyj5xKEXF1r+OrJMexHQa0fW1URGrU8QODpJNC/9eCVGcEXddL31xTZYpjoVOCVx66kNa6lSHEVV3T4zaCby9Oe5QI4gZe1+xyxHPNEW5wogwS3dlKSyL2CfBP0aUKOmJ5Nrl8+y0GqJQXdGjZ9FIknmwWueRW/6qPQvZocjOZ8YiPZgAP0RNy6lL+u8mnAazj/mrEdmB5QUzpDAllIr5Tn/xaddZQ=='
14
+ )
15
+ end
16
+
7
17
  new_instance = Fog::Compute[:oraclecloud].instances.create(
8
18
  :name=>'Test123',
9
19
  :shape=>'oc3',
10
20
  :imagelist=>'/oracle/public/oel_6.4_2GB_v1',
11
21
  :label=>'dev-vm',
12
- :sshkeys=>[sshkey]
22
+ :sshkeys=>[sshkey.name]
13
23
  )
14
24
  test "can create an instance" do
15
- new_instance.is_a? Fog::Compute::Oracle::Instance
16
- end
17
- test "is being built" do
18
- new_instance.state != "running"
25
+ new_instance.is_a? Fog::Compute::OracleCloud::Instance
19
26
  end
20
27
  new_instance.wait_for { ready? }
21
28
 
22
29
  test "is built" do
23
30
  new_instance.state == 'running'
24
31
  end
25
-
26
- new_instance.destroy()
27
- test "can delete instance" do
28
- check = Fog::Compute[:oraclecloud].instances.get(new_instance.name)
29
- check.state == 'stopping'
30
- end
31
32
  end
32
33
 
33
34
  tests('#instances-read') do
@@ -36,7 +37,7 @@ Shindo.tests('Fog::Compute[oraclecloud] | instance requests', 'instances') do
36
37
  instances.is_a? Array
37
38
  end
38
39
  instances.each do |ins|
39
- puts "#{ins.name} - #{ins.state}"
40
+ puts "#{ins.clean_name} - #{ins.state}"
40
41
  end
41
42
  test "should return records" do
42
43
  instances.size >= 1
@@ -51,4 +52,13 @@ Shindo.tests('Fog::Compute[oraclecloud] | instance requests', 'instances') do
51
52
  instance.name.is_a? String
52
53
  end
53
54
  end
55
+
56
+ tests("#instance-delete", "create") do
57
+ instance = Fog::Compute[:oraclecloud].instances.get('Test123')
58
+ instance.destroy()
59
+ instance.wait_for { state == 'stopping' }
60
+ tests("should actually delete instance").raises(Fog::Compute::OracleCloud::NotFound) do
61
+ instance.wait_for { state == 'stopped' }
62
+ end
63
+ end
54
64
  end
@@ -2,33 +2,33 @@ require 'pp'
2
2
 
3
3
  Shindo.tests('Fog::Java[oraclecloud] | java requests', 'java') do
4
4
 
5
- #tests("#java-create", "create") do
6
- # sshkey = Fog::Compute[:oracle].ssh_keys.first.name
7
- # new_instance = Fog::Compute[:oracle].instances.create(
8
- # :name=>'Test123',
9
- # :shape=>'oc3',
10
- # :imagelist=>'/oracle/public/oel_6.4_2GB_v1',
11
- # :label=>'dev-vm',
12
- # :sshkeys=>[sshkey]
13
- # )
14
- # test "can create an instance" do
15
- # new_instance.is_a? Fog::Compute::Oracle::Instance
16
- # end
17
- # test "is being built" do
18
- # new_instance.state != "running"
19
- # end
20
- # new_instance.wait_for { ready? }
21
- #
22
- # test "is built" do
23
- # new_instance.state == 'running'
24
- # end
25
- #
26
- # new_instance.destroy()
27
- # test "can delete instance" do
28
- # check = Fog::Compute[:oracle].instances.get(new_instance.name)
29
- # check.state == 'stopping'
30
- # end
31
- #end
5
+ tests("#database-create", "create") do
6
+ instance = Fog::OracleCloud[:java].instances.create(
7
+ :service_name => 'TestWLS',
8
+ :description => 'A new weblogic instance',
9
+ :cloud_storage_container => 'todo',
10
+ :cloud_storage_user => 'admin',
11
+ :cloud_storage_password => 'password',
12
+ :dbaName => 'SYS',
13
+ :dbaPassword => 'password',
14
+ :dbServiceName => 'TestDB',
15
+ :shape => 'oc3',
16
+ :version => '12.2.1',
17
+ :vmPublicKey => 'ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAkNNQ4ri2oUW46mBO/4CHMGCOALciumwGvFEMDLGNnlinstanceUSqU4IRrqgj+znLClfb29Oer0devdarM6DilsZVgZ2YbI5ZD5vICR/O9J0c28dArwbtFeIjcV2TCWyj5xKEXF1r+OrJMexHQa0fW1URGrU8QODpJNC/9eCVGcEXddL31xTZYpjoVOCVx66kNa6lSHEVV3T4zaCby9Oe5QI4gZe1+xyxHPNEW5wogwS3dlKSyL2CfBP0aUKOmJ5Nrl8+y0GqJQXdGjZ9FIknmwWueRW/6qPQvZocjOZ8YiPZgAP0RNy6lL+u8mnAazj/mrEdmB5QUzpDAllIr5Tn/xaddZQ==',
18
+ )
19
+ test "can create a java instance" do
20
+ instance.is_a? Fog::OracleCloud::Java::Instance
21
+ end
22
+
23
+ test "is being built" do
24
+ !instance.ready?
25
+ end
26
+ instance.wait_for { ready? }
27
+
28
+ test "is built" do
29
+ instance.ready?
30
+ end
31
+ end
32
32
 
33
33
  tests('#java-read') do
34
34
  instances = Fog::OracleCloud[:java].instances
@@ -49,4 +49,15 @@ Shindo.tests('Fog::Java[oraclecloud] | java requests', 'java') do
49
49
  instance.service_name.is_a? String
50
50
  end
51
51
  end
52
+
53
+ tests("#java-delete", "create") do
54
+ instance = Fog::OracleCloud[:java].instances.get('TestWLS')
55
+ instance.dba_name = 'Admin',
56
+ instance.dba_password = 'password'
57
+ instance.destroy()
58
+ instance.wait_for { stopping? }
59
+ tests("should actually delete instance").raises(Fog::OracleCloud::Java::NotFound) do
60
+ instance.wait_for { stopped? }
61
+ end
62
+ end
52
63
  end
@@ -18,6 +18,7 @@ Shindo.tests('Fog::Compute[oraclecloud] | orchestration requests', 'orchestratio
18
18
  }]
19
19
  }]
20
20
  )
21
+
21
22
  test "can create an orchestration" do
22
23
  orchestration.is_a? Fog::Compute::OracleCloud::Orchestration
23
24
  end
@@ -23,10 +23,7 @@ Shindo.tests('Fog::Compute[oraclecloud] | ssh_keys requests', 'ssh_keys') do
23
23
  check = Fog::Compute[:oraclecloud].ssh_keys.get(sshkey.name)
24
24
  check.enabled == true
25
25
  end
26
- sshkey.destroy()
27
- tests("can delete ssh key").raises(Excon::Error::NotFound) do
28
- check = Fog::Compute[:oraclecloud].ssh_keys.get(sshkey.name)
29
- end
26
+
30
27
  end
31
28
 
32
29
  tests("#sshkeys-read") do
@@ -46,4 +43,12 @@ Shindo.tests('Fog::Compute[oraclecloud] | ssh_keys requests', 'ssh_keys') do
46
43
  sshkey.name.is_a? String
47
44
  end
48
45
  end
46
+
47
+ tests("#sshkeys-delete", "create") do
48
+ sshkey = Fog::Compute[:oraclecloud].ssh_keys.get('TestSSHKey2')
49
+ sshkey.destroy()
50
+ tests("should delete key").raises(Fog::Compute::OracleCloud::NotFound) do
51
+ sshkey = Fog::Compute[:oraclecloud].ssh_keys.get('TestSSHKey2')
52
+ end
53
+ end
49
54
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fog-oraclecloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Nation
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-24 00:00:00.000000000 Z
11
+ date: 2016-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -219,6 +219,7 @@ files:
219
219
  - lib/fog/oraclecloud/storage.rb
220
220
  - lib/fog/oraclecloud/version.rb
221
221
  - tests/helper.rb
222
+ - tests/helpers/mock_helper.rb
222
223
  - tests/requests/database_tests.rb
223
224
  - tests/requests/instance_tests.rb
224
225
  - tests/requests/java_tests.rb