fog-oraclecloud 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +21 -0
  5. data/README.md +34 -0
  6. data/Rakefile +2 -0
  7. data/bin/console +14 -0
  8. data/bin/setup +8 -0
  9. data/fog-oracle.gemspec +30 -0
  10. data/lib/fog/oraclecloud/compute.rb +146 -0
  11. data/lib/fog/oraclecloud/database.rb +114 -0
  12. data/lib/fog/oraclecloud/java.rb +114 -0
  13. data/lib/fog/oraclecloud/models/compute/image.rb +43 -0
  14. data/lib/fog/oraclecloud/models/compute/image_list.rb +42 -0
  15. data/lib/fog/oraclecloud/models/compute/image_lists.rb +22 -0
  16. data/lib/fog/oraclecloud/models/compute/images.rb +22 -0
  17. data/lib/fog/oraclecloud/models/compute/instance.rb +65 -0
  18. data/lib/fog/oraclecloud/models/compute/instances.rb +22 -0
  19. data/lib/fog/oraclecloud/models/compute/object_plan.rb +16 -0
  20. data/lib/fog/oraclecloud/models/compute/object_plans.rb +12 -0
  21. data/lib/fog/oraclecloud/models/compute/orchestration.rb +89 -0
  22. data/lib/fog/oraclecloud/models/compute/orchestrations.rb +20 -0
  23. data/lib/fog/oraclecloud/models/compute/security_application.rb +42 -0
  24. data/lib/fog/oraclecloud/models/compute/security_applications.rb +22 -0
  25. data/lib/fog/oraclecloud/models/compute/security_list.rb +26 -0
  26. data/lib/fog/oraclecloud/models/compute/security_lists.rb +22 -0
  27. data/lib/fog/oraclecloud/models/compute/security_rule.rb +41 -0
  28. data/lib/fog/oraclecloud/models/compute/security_rules.rb +22 -0
  29. data/lib/fog/oraclecloud/models/compute/ssh_key.rb +37 -0
  30. data/lib/fog/oraclecloud/models/compute/ssh_keys.rb +22 -0
  31. data/lib/fog/oraclecloud/models/compute/volume.rb +47 -0
  32. data/lib/fog/oraclecloud/models/compute/volumes.rb +20 -0
  33. data/lib/fog/oraclecloud/models/database/instance.rb +84 -0
  34. data/lib/fog/oraclecloud/models/database/instances.rb +26 -0
  35. data/lib/fog/oraclecloud/models/java/instance.rb +107 -0
  36. data/lib/fog/oraclecloud/models/java/instances.rb +27 -0
  37. data/lib/fog/oraclecloud/models/java/server.rb +26 -0
  38. data/lib/fog/oraclecloud/models/java/servers.rb +17 -0
  39. data/lib/fog/oraclecloud/models/soa/instance.rb +65 -0
  40. data/lib/fog/oraclecloud/models/soa/instances.rb +25 -0
  41. data/lib/fog/oraclecloud/models/storage/container.rb +34 -0
  42. data/lib/fog/oraclecloud/models/storage/containers.rb +24 -0
  43. data/lib/fog/oraclecloud/models/storage/object.rb +27 -0
  44. data/lib/fog/oraclecloud/models/storage/objects.rb +27 -0
  45. data/lib/fog/oraclecloud/requests/compute/create_image.rb +30 -0
  46. data/lib/fog/oraclecloud/requests/compute/create_image_list.rb +27 -0
  47. data/lib/fog/oraclecloud/requests/compute/create_instance.rb +32 -0
  48. data/lib/fog/oraclecloud/requests/compute/create_orchestration.rb +46 -0
  49. data/lib/fog/oraclecloud/requests/compute/create_security_application.rb +28 -0
  50. data/lib/fog/oraclecloud/requests/compute/create_security_rule.rb +29 -0
  51. data/lib/fog/oraclecloud/requests/compute/create_ssh_key.rb +27 -0
  52. data/lib/fog/oraclecloud/requests/compute/create_volume.rb +29 -0
  53. data/lib/fog/oraclecloud/requests/compute/delete_image.rb +19 -0
  54. data/lib/fog/oraclecloud/requests/compute/delete_image_list.rb +19 -0
  55. data/lib/fog/oraclecloud/requests/compute/delete_instance.rb +22 -0
  56. data/lib/fog/oraclecloud/requests/compute/delete_orchestration.rb +22 -0
  57. data/lib/fog/oraclecloud/requests/compute/delete_security_application.rb +20 -0
  58. data/lib/fog/oraclecloud/requests/compute/delete_security_rule.rb +20 -0
  59. data/lib/fog/oraclecloud/requests/compute/delete_ssh_key.rb +22 -0
  60. data/lib/fog/oraclecloud/requests/compute/get_image.rb +21 -0
  61. data/lib/fog/oraclecloud/requests/compute/get_image_list.rb +21 -0
  62. data/lib/fog/oraclecloud/requests/compute/get_instance.rb +24 -0
  63. data/lib/fog/oraclecloud/requests/compute/get_orchestration.rb +24 -0
  64. data/lib/fog/oraclecloud/requests/compute/get_security_application.rb +20 -0
  65. data/lib/fog/oraclecloud/requests/compute/get_security_rule.rb +20 -0
  66. data/lib/fog/oraclecloud/requests/compute/get_ssh_key.rb +24 -0
  67. data/lib/fog/oraclecloud/requests/compute/list_image_lists.rb +16 -0
  68. data/lib/fog/oraclecloud/requests/compute/list_images.rb +16 -0
  69. data/lib/fog/oraclecloud/requests/compute/list_instances.rb +16 -0
  70. data/lib/fog/oraclecloud/requests/compute/list_orchestrations.rb +16 -0
  71. data/lib/fog/oraclecloud/requests/compute/list_security_applications.rb +21 -0
  72. data/lib/fog/oraclecloud/requests/compute/list_security_lists.rb +16 -0
  73. data/lib/fog/oraclecloud/requests/compute/list_security_rules.rb +21 -0
  74. data/lib/fog/oraclecloud/requests/compute/list_ssh_keys.rb +16 -0
  75. data/lib/fog/oraclecloud/requests/compute/list_volumes.rb +16 -0
  76. data/lib/fog/oraclecloud/requests/compute/start_orchestration.rb +22 -0
  77. data/lib/fog/oraclecloud/requests/compute/stop_orchestration.rb +22 -0
  78. data/lib/fog/oraclecloud/requests/compute/update_image.rb +27 -0
  79. data/lib/fog/oraclecloud/requests/compute/update_image_list.rb +27 -0
  80. data/lib/fog/oraclecloud/requests/compute/update_orchestration.rb +49 -0
  81. data/lib/fog/oraclecloud/requests/compute/update_ssh_key.rb +29 -0
  82. data/lib/fog/oraclecloud/requests/database/create_instance.rb +46 -0
  83. data/lib/fog/oraclecloud/requests/database/delete_instance.rb +31 -0
  84. data/lib/fog/oraclecloud/requests/database/get_instance.rb +36 -0
  85. data/lib/fog/oraclecloud/requests/database/list_instances.rb +16 -0
  86. data/lib/fog/oraclecloud/requests/java/create_instance.rb +51 -0
  87. data/lib/fog/oraclecloud/requests/java/delete_instance.rb +42 -0
  88. data/lib/fog/oraclecloud/requests/java/get_instance.rb +37 -0
  89. data/lib/fog/oraclecloud/requests/java/get_server.rb +0 -0
  90. data/lib/fog/oraclecloud/requests/java/list_instances.rb +16 -0
  91. data/lib/fog/oraclecloud/requests/java/list_servers.rb +29 -0
  92. data/lib/fog/oraclecloud/requests/soa/create_instance.rb +47 -0
  93. data/lib/fog/oraclecloud/requests/soa/delete_instance.rb +40 -0
  94. data/lib/fog/oraclecloud/requests/soa/get_instance.rb +36 -0
  95. data/lib/fog/oraclecloud/requests/soa/list_instances.rb +16 -0
  96. data/lib/fog/oraclecloud/requests/storage/create_container.rb +21 -0
  97. data/lib/fog/oraclecloud/requests/storage/delete_container.rb +15 -0
  98. data/lib/fog/oraclecloud/requests/storage/get_container.rb +24 -0
  99. data/lib/fog/oraclecloud/requests/storage/list_containers.rb +16 -0
  100. data/lib/fog/oraclecloud/soa.rb +80 -0
  101. data/lib/fog/oraclecloud/storage.rb +80 -0
  102. data/lib/fog/oraclecloud/version.rb +5 -0
  103. data/lib/fog/oraclecloud.rb +29 -0
  104. data/tests/helper.rb +1 -0
  105. data/tests/requests/database_tests.rb +52 -0
  106. data/tests/requests/instance_tests.rb +54 -0
  107. data/tests/requests/java_tests.rb +52 -0
  108. data/tests/requests/orchestrations_tests.rb +86 -0
  109. data/tests/requests/soa_tests.rb +52 -0
  110. data/tests/requests/ssh_keys_tests.rb +49 -0
  111. data/tests/requests/storage_tests.rb +54 -0
  112. metadata +253 -0
@@ -0,0 +1,31 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class Database
4
+ class Real
5
+
6
+ def delete_instance(service_name)
7
+ request(
8
+ :method => 'DELETE',
9
+ :expects => 202,
10
+ :path => "/paas/service/dbcs/api/v1.1/instances/#{@identity_domain}/#{service_name}"
11
+ )
12
+ end
13
+ end
14
+
15
+ class Mock
16
+ def delete_instance(service_name)
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
+
26
+ response
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,36 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class Database
4
+ class Real
5
+
6
+ def get_instance(instance_id)
7
+ response = request(
8
+ :expects => 200,
9
+ :method => 'GET',
10
+ :path => "/paas/service/dbcs/api/v1.1/instances/#{@identity_domain}/#{instance_id}"
11
+ )
12
+ response
13
+ end
14
+ end
15
+
16
+ class Mock
17
+ def get_instance(instance_id)
18
+ response = Excon::Response.new
19
+ if instance_exists? instance_id
20
+ response.status = 200
21
+ response.body = self.data[:instances][instance_id]
22
+ else
23
+ raise Fog::Oracle::Database::NotFound
24
+ 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
+ end
32
+
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,16 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class Database
4
+ class Real
5
+ def list_instances
6
+ response = request(
7
+ :expects => 200,
8
+ :method => 'GET',
9
+ :path => "/paas/service/dbcs/api/v1.1/instances/#{@identity_domain}?outputLevel=verbose"
10
+ )
11
+ response
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,51 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class Java
4
+ class Real
5
+
6
+ def create_instance(service_name, cloudStorageContainer, cloudStorageUser, cloudStoragePassword, parameters, options={})
7
+ if !cloudStorageContainer.start_with?("/Storage-") then
8
+ # They haven't provided a well formed container name, add their details in
9
+ name = "/Storage-#{@identity_domain}/#{@username}/#{cloudStorageContainer}"
10
+ end
11
+ body_data = {
12
+ 'serviceName' => service_name,
13
+ 'cloudStorageContainer' => cloudStorageContainer,
14
+ 'cloudStorageUser' => cloudStorageUser,
15
+ 'cloudStoragePassword' => cloudStoragePassword,
16
+ 'parameters' => parameters,
17
+ 'level' => options[:level],
18
+ 'subscriptionType' => options[:subscriptionType],
19
+ 'description' => options[:description],
20
+ 'provisionOTD' => options[:provisionOTD],
21
+ 'sampleAppDeploymentRequests' => options[:sampleAppDeploymentRequests]
22
+ }
23
+ body_data = body_data.reject {|key, value| value.nil?}
24
+ request(
25
+ :method => 'POST',
26
+ :expects => 202,
27
+ :path => "/paas/service/jcs/api/v1.1/instances/#{@identity_domain}",
28
+ :body => Fog::JSON.encode(body_data),
29
+ :headers => {
30
+ 'Content-Type'=>'application/vnd.com.oracle.oracloud.provisioning.Service+json'
31
+ }
32
+ )
33
+ end
34
+
35
+ end
36
+
37
+ class Mock
38
+ def create_instance(service_name, cloudStorageContainer, cloudStorageUser, cloudStoragePassword, parameters, options={})
39
+ response = Excon::Response.new
40
+
41
+ instance = Fog::OracleCloud::Mock.create_java_instance(service_name, parameters)
42
+ self.data[:instances][service_name] = instance
43
+
44
+ response.status = 202
45
+ response.headers['Location'] = "https://jaas.oraclecloud.com/paas/service/jcs/api/v1.1/instances/agriculture/status/create/job/2781084"
46
+ response
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,42 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class Java
4
+ class Real
5
+
6
+ def delete_instance(service_name, dba_name, dba_password, options={})
7
+ body_data = {
8
+ 'dbaName' => dba_name,
9
+ 'dbaPassword' => dba_password,
10
+ 'forceDelete' => options[:force_delete]
11
+ }
12
+
13
+ body_data = body_data.reject {|key, value| value.nil?}
14
+ request(
15
+ :method => 'PUT',
16
+ :expects => 202,
17
+ :path => "/paas/service/jcs/api/v1.1/instances/#{@identity_domain}/#{service_name}",
18
+ :body => Fog::JSON.encode(body_data),
19
+ :headers => {
20
+ 'Content-Type'=>'application/vnd.com.oracle.oracloud.provisioning.Service+json'
21
+ }
22
+ )
23
+ end
24
+ end
25
+
26
+ class Mock
27
+ def delete_instance(service_name, dba_name, dba_password, options={})
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
+
37
+ response
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,37 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class Java
4
+ class Real
5
+
6
+ def get_instance(service_name)
7
+ response = request(
8
+ :expects => 200,
9
+ :method => 'GET',
10
+ :path => "/paas/service/jcs/api/v1.1/instances/#{@identity_domain}/#{service_name}"
11
+ )
12
+ response
13
+ end
14
+ end
15
+
16
+ class Mock
17
+ def get_instance(instance_id)
18
+
19
+ response = Excon::Response.new
20
+ if instance_exists? instance_id
21
+ response.status = 200
22
+ response.body = self.data[:instances][instance_id]
23
+ else
24
+ raise Fog::OracleCloud::Java::NotFound
25
+ 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
+ end
33
+
34
+ end
35
+ end
36
+ end
37
+ end
File without changes
@@ -0,0 +1,16 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class Java
4
+ class Real
5
+ def list_instances
6
+ response = request(
7
+ :expects => 200,
8
+ :method => 'GET',
9
+ :path => "/paas/service/jcs/api/v1.1/instances/#{@identity_domain}?outputLevel=verbose"
10
+ )
11
+ response
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,29 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class Java
4
+ class Real
5
+ def list_servers(service_name)
6
+ response = request(
7
+ :expects => 200,
8
+ :method => 'GET',
9
+ :path => "/paas/service/jcs/api/v1.1/instances/#{@identity_domain}/#{service_name}/servers"
10
+ )
11
+ response
12
+ end
13
+ end
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
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,47 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class SOA
4
+ class Real
5
+
6
+ def create_instance(service_name, topology, cloudStorageContainer, cloudStorageUser, cloudStoragePassword, parameters, options={})
7
+ body_data = {
8
+ 'serviceName' => service_name,
9
+ 'topology' => topology,
10
+ 'cloudStorageContainer' => cloudStorageContainer,
11
+ 'cloudStorageUser' => cloudStorageUser,
12
+ 'cloudStoragePassword' => cloudStoragePassword,
13
+ 'parameters' => parameters,
14
+ 'level' => options[:level],
15
+ 'subscriptionType' => options[:subscriptionType],
16
+ 'description' => options[:description],
17
+ 'sampleAppDeploymentRequests' => options[:sampleAppDeploymentRequests]
18
+ }
19
+ body_data = body_data.reject {|key, value| value.nil?}
20
+ request(
21
+ :method => 'POST',
22
+ :expects => 202,
23
+ :path => "/paas/service/soa/api/v1.1/instances/#{@identity_domain}",
24
+ :body => Fog::JSON.encode(body_data),
25
+ #:headers => {
26
+ # 'Content-Type'=>'application/vnd.com.oracle.oracloud.provisioning.Service+json'
27
+ #}
28
+ )
29
+ end
30
+
31
+ end
32
+
33
+ class Mock
34
+ def create_instance(service_name, topology, cloudStorageContainer, cloudStorageUser, cloudStoragePassword, parameters, options={})
35
+ response = Excon::Response.new
36
+
37
+ instance = Fog::OracleCloud::Mock.create_instance(service_name)
38
+ self.data[:instances][service_name] = instance
39
+
40
+ response.status = 202
41
+ response.headers['Location'] = "https://jaas.oraclecloud.com/paas/service/dbcs/api/v1.1/instances/agriculture/status/create/job/2781084"
42
+ response
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,40 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class SOA
4
+ class Real
5
+
6
+ def delete_instance(service_name, dba_name, dba_password, options={})
7
+ body_data = {
8
+ 'dbaName' => dba_name,
9
+ 'dbaPassword' => dba_password,
10
+ 'forceDelete' => options[:force_delete],
11
+ 'skipBackupOnTerminate' => options[:skip_backup]
12
+ }
13
+
14
+ body_data = body_data.reject {|key, value| value.nil?}
15
+ request(
16
+ :method => 'PUT',
17
+ :expects => 202,
18
+ :path => "/paas/service/soa/api/v1.1/instances/#{@identity_domain}/#{service_name}",
19
+ :body => Fog::JSON.encode(body_data)
20
+ )
21
+ end
22
+ end
23
+
24
+ class Mock
25
+ def delete_instance(service_name, dba_name, dba_password, options={})
26
+ response = Excon::Response.new
27
+ # remove from memoreeeez.
28
+ self.data[:instances].delete service_name
29
+ response.body = {
30
+ 'service_name' => service_name,
31
+ 'status' => 'Terminating'
32
+ }
33
+ response.status = 202
34
+
35
+ response
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,36 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class SOA
4
+ class Real
5
+
6
+ def get_instance(instance_id)
7
+ response = request(
8
+ :expects => 200,
9
+ :method => 'GET',
10
+ :path => "/paas/service/soa/api/v1.1/instances/#{@identity_domain}/#{instance_id}"
11
+ )
12
+ response
13
+ end
14
+ end
15
+
16
+ class Mock
17
+ def get_instance(instance_id)
18
+ response = Excon::Response.new
19
+ if instance_exists? instance_id
20
+ response.status = 200
21
+ response.body = self.data[:instances][instance_id]
22
+ else
23
+ raise Fog::OracleCloud::SOA::NotFound
24
+ 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
+ end
32
+
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,16 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class SOA
4
+ class Real
5
+ def list_instances
6
+ response = request(
7
+ :expects => 200,
8
+ :method => 'GET',
9
+ :path => "/paas/service/soa/api/v1.1/instances/#{@identity_domain}?outputLevel=verbose"
10
+ )
11
+ response
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ module Fog
2
+ module Storage
3
+ class OracleCloud
4
+ class Real
5
+
6
+ def create_container(name)
7
+ request({
8
+ :method => 'PUT',
9
+ :expects => [201,202],
10
+ :path => "/v1/Storage-#{@identity_domain}/#{name}"
11
+ }, false)
12
+ end
13
+
14
+ end
15
+
16
+ class Mock
17
+
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ module Fog
2
+ module Storage
3
+ class OracleCloud
4
+ class Real
5
+ def delete_container (name)
6
+ request(
7
+ :method => 'DELETE',
8
+ :expects => 204,
9
+ :path => "/v1/Storage-#{@identity_domain}/#{@username}/#{name}"
10
+ )
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,24 @@
1
+ module Fog
2
+ module Storage
3
+ class OracleCloud
4
+ class Real
5
+ def get_container(name)
6
+ response = request(
7
+ :expects => [204],
8
+ :method => 'HEAD',
9
+ :path => "/v1/Storage-#{@identity_domain}/#{name}"
10
+ )
11
+ response
12
+ end
13
+ def get_container_with_objects(name)
14
+ response = request(
15
+ :expects => [204,200],
16
+ :method => 'GET',
17
+ :path => "/v1/Storage-#{@identity_domain}/#{name}?format=json"
18
+ )
19
+ response
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ module Fog
2
+ module Storage
3
+ class OracleCloud
4
+ class Real
5
+ def list_containers
6
+ response = request(
7
+ :expects => 200,
8
+ :method => 'GET',
9
+ :path => "/v1/Storage-#{@identity_domain}?format=json"
10
+ )
11
+ response
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,80 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class SOA < Fog::Service
4
+ requires :oracle_username, :oracle_password, :oracle_domain, :oracle_region
5
+
6
+ model_path 'fog/oraclecloud/models/soa'
7
+ model :instance
8
+ collection :instances
9
+
10
+ request_path 'fog/oraclecloud/requests/soa'
11
+ request :list_instances
12
+ request :create_instance
13
+ request :get_instance
14
+ request :delete_instance
15
+
16
+ class Real
17
+
18
+ def initialize(options={})
19
+ @username = options[:oracle_username]
20
+ @password = options[:oracle_password]
21
+ @identity_domain = options[:oracle_domain]
22
+ region_url = options[:oracle_region] == 'emea' ? 'https://jcs.emea.oraclecloud.com' : 'https://jaas.oraclecloud.com'
23
+ Excon.ssl_verify_peer = false
24
+
25
+ @connection = Fog::XML::Connection.new(region_url)
26
+ end
27
+
28
+ def auth_header
29
+ auth_header ||= 'Basic ' + Base64.encode64("#{@username}:#{@password}").gsub("\n",'')
30
+ end
31
+
32
+ def request(params, parse_json = true, &block)
33
+
34
+ begin
35
+ response = @connection.request(params.merge!({
36
+ :headers => {
37
+ 'Authorization' => auth_header,
38
+ 'X-ID-TENANT-NAME' => @identity_domain,
39
+ 'Content-Type' => 'application/json',
40
+ 'Accept' => 'application/json'
41
+ }.merge!(params[:headers] || {})
42
+ }), &block)
43
+ rescue Excon::Errors::HTTPStatusError => error
44
+ raise case error
45
+ when Excon::Errors::NotFound
46
+ Fog::OracleCloud::SOA::NotFound.slurp(error)
47
+ else
48
+ error
49
+ end
50
+ end
51
+ if !response.body.empty? && parse_json
52
+ # The Oracle Cloud doesn't return the Content-Type header as application/json, rather as application/vnd.com.oracle.oracloud.provisioning.Pod+json
53
+ # Should add check here to validate, but not sure if this might change in future
54
+ response.body = Fog::JSON.decode(response.body)
55
+ end
56
+ response
57
+ end
58
+ end
59
+
60
+ class Mock
61
+
62
+ def initialize(options={})
63
+
64
+ end
65
+
66
+ def self.data
67
+ @data ||= Hash.new do |hash, key|
68
+ hash[key] = {
69
+ :instances => {}
70
+ }
71
+ end
72
+ end
73
+
74
+ def data
75
+ self.class.data[@oracle_username]
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,80 @@
1
+ module Fog
2
+ module Storage
3
+ class OracleCloud < Fog::Service
4
+ requires :oracle_username, :oracle_password, :oracle_domain, :oracle_storage_api
5
+
6
+ model_path 'fog/oraclecloud/models/storage'
7
+ collection :containers
8
+ model :container
9
+ collection :objects
10
+ model :object
11
+
12
+ request_path 'fog/oraclecloud/requests/storage'
13
+ request :list_containers
14
+ request :create_container
15
+ request :get_container
16
+ request :delete_container
17
+
18
+ class Real
19
+ def initialize(options={})
20
+ @username = options[:oracle_username]
21
+ @password = options[:oracle_password]
22
+ @identity_domain = options[:oracle_domain]
23
+ @api_endpoint = options[:oracle_storage_api]
24
+
25
+ @connection = Fog::XML::Connection.new(@api_endpoint)
26
+
27
+ # Get authentication token
28
+ authenticate
29
+ end
30
+
31
+ def authenticate()
32
+
33
+ begin
34
+ response = @connection.request({
35
+ :expects => 200,
36
+ :method => 'GET',
37
+ :path => "auth/v1.0",
38
+ :headers => {
39
+ 'X-Storage-User' => "Storage-#{@identity_domain}:#{@username}",
40
+ 'X-Storage-Pass' => @password
41
+ }
42
+ })
43
+ rescue Excon::Errors::HTTPStatusError => error
44
+ error
45
+ end
46
+ if response.nil? || !response.headers['X-Auth-Token'] then
47
+ raise Error.new('Could not authenticate to Storage Cloud Service. Check your athentication details in your config')
48
+ end
49
+ @auth_token = response.headers['X-Auth-Token']
50
+ end
51
+
52
+ def request(params, parse_json = true, &block)
53
+ begin
54
+ response = @connection.request(params.merge!({
55
+ :headers => {
56
+ 'X-Auth-Token' => @auth_token
57
+ }.merge!(params[:headers] || {})
58
+ }), &block)
59
+ rescue Excon::Errors::HTTPStatusError => error
60
+ raise case error
61
+ when Excon::Errors::Conflict
62
+ data = Fog::JSON.decode(error.response.body)
63
+ raise Error.new(data['message'])
64
+ else
65
+ error
66
+ end
67
+ end
68
+ if !response.body.empty? && parse_json
69
+ response.body = Fog::JSON.decode(response.body)
70
+ end
71
+ response
72
+ end
73
+ end
74
+
75
+ class Mock
76
+
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,5 @@
1
+ module Fog
2
+ module OracleCloud
3
+ VERSION = "0.1.1"
4
+ end
5
+ end