fog-oraclecloud 0.1.13 → 0.1.14

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/fog-oracle.gemspec +3 -2
  3. data/lib/fog/oraclecloud/compute.rb +28 -0
  4. data/lib/fog/oraclecloud/models/compute/ip_network.rb +51 -0
  5. data/lib/fog/oraclecloud/models/compute/ip_networks.rb +22 -0
  6. data/lib/fog/oraclecloud/models/compute/ip_reservation.rb +54 -0
  7. data/lib/fog/oraclecloud/models/compute/ip_reservations.rb +22 -0
  8. data/lib/fog/oraclecloud/models/compute/storage_attachment.rb +41 -0
  9. data/lib/fog/oraclecloud/models/compute/storage_attachments.rb +22 -0
  10. data/lib/fog/oraclecloud/models/java/access_rule.rb +63 -0
  11. data/lib/fog/oraclecloud/models/java/access_rules.rb +32 -0
  12. data/lib/fog/oraclecloud/models/monitoring/metrics_report.rb +12 -0
  13. data/lib/fog/oraclecloud/models/monitoring/metrics_reports.rb +24 -0
  14. data/lib/fog/oraclecloud/monitoring.rb +104 -0
  15. data/lib/fog/oraclecloud/requests/compute/create_ip_network.rb +46 -0
  16. data/lib/fog/oraclecloud/requests/compute/create_ip_reservation.rb +48 -0
  17. data/lib/fog/oraclecloud/requests/compute/create_storage_attachment.rb +55 -0
  18. data/lib/fog/oraclecloud/requests/compute/delete_ip_network.rb +29 -0
  19. data/lib/fog/oraclecloud/requests/compute/delete_ip_reservation.rb +29 -0
  20. data/lib/fog/oraclecloud/requests/compute/get_ip_network.rb +36 -0
  21. data/lib/fog/oraclecloud/requests/compute/get_ip_reservation.rb +36 -0
  22. data/lib/fog/oraclecloud/requests/compute/get_storage_attachment.rb +36 -0
  23. data/lib/fog/oraclecloud/requests/compute/list_ip_networks.rb +28 -0
  24. data/lib/fog/oraclecloud/requests/compute/list_ip_reservations.rb +28 -0
  25. data/lib/fog/oraclecloud/requests/compute/list_storage_attachments.rb +28 -0
  26. data/lib/fog/oraclecloud/requests/compute/update_ip_reservation.rb +39 -0
  27. data/lib/fog/oraclecloud/requests/java/create_access_rule.rb +27 -0
  28. data/lib/fog/oraclecloud/requests/java/delete_access_rule.rb +35 -0
  29. data/lib/fog/oraclecloud/requests/java/enable_access_rule.rb +33 -0
  30. data/lib/fog/oraclecloud/requests/java/list_access_rules.rb +30 -0
  31. data/lib/fog/oraclecloud/requests/monitoring/list_metrics_reports.rb +29 -0
  32. data/lib/fog/oraclecloud/version.rb +1 -1
  33. data/lib/fog/oraclecloud.rb +2 -0
  34. data/tests/requests/compute/auto-storage_tests.rb +32 -0
  35. data/tests/requests/compute/ip_network_tests.rb +42 -0
  36. data/tests/requests/compute/ip_tests.rb +58 -0
  37. data/tests/requests/compute/storage_attachments_tests.rb +42 -0
  38. data/tests/requests/monitoring_tests.rb +11 -0
  39. metadata +57 -10
@@ -0,0 +1,104 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class Monitoring < Fog::Service
4
+ requires :oracle_username, :oracle_password, :oracle_domain
5
+ recognizes :oracle_region
6
+
7
+ model_path 'fog/oraclecloud/models/monitoring'
8
+ model :metrics_report
9
+ collection :metrics_reports
10
+
11
+
12
+ request_path 'fog/oraclecloud/requests/monitoring'
13
+ request :list_metrics_reports
14
+
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 = options[:oracle_region].nil? ? 'us' : options[:oracle_region]
23
+ url = "https://monitoring.#{region}.oraclecloud.com"
24
+ Excon.ssl_verify_peer = false
25
+ @connection = Fog::XML::Connection.new(url)
26
+ end
27
+
28
+ def username
29
+ @username
30
+ end
31
+
32
+ def password
33
+ @password
34
+ end
35
+
36
+
37
+ def auth_header
38
+ auth_header ||= 'Basic ' + Base64.encode64("#{@username}:#{@password}").gsub("\n",'')
39
+ end
40
+
41
+ def request(params, parse_json = true, &block)
42
+ pp @connection
43
+ begin
44
+ response = @connection.request(params.merge!({
45
+ :headers => {
46
+ 'Authorization' => auth_header,
47
+ 'X-ID-TENANT-NAME' => @identity_domain,
48
+ 'Content-Type' => 'application/json',
49
+ #'Accept' => 'application/json'
50
+ }.merge!(params[:headers] || {})
51
+ }), &block)
52
+ rescue Excon::Errors::HTTPStatusError => error
53
+ raise case error
54
+ when Excon::Errors::NotFound
55
+ Fog::OracleCloud::Java::NotFound.slurp(error)
56
+ else
57
+ error
58
+ end
59
+ end
60
+ if !response.body.empty? && parse_json
61
+ # The Oracle Cloud doesn't return the Content-Type header as application/json, rather as application/vnd.com.oracle.oracloud.provisioning.Pod+json
62
+ # Should add check here to validate, but not sure if this might change in future
63
+ response.body = Fog::JSON.decode(response.body)
64
+ end
65
+ response
66
+ end
67
+ end
68
+
69
+ class Mock
70
+ def initialize(options={})
71
+ @username = options[:oracle_username]
72
+ @password = options[:oracle_password]
73
+ @identity_domain = options[:oracle_domain]
74
+ end
75
+
76
+ def username
77
+ @username
78
+ end
79
+
80
+ def password
81
+ @password
82
+ end
83
+
84
+ def region_url
85
+ @region_url
86
+ end
87
+
88
+ def self.data
89
+ @data ||= {
90
+
91
+ }
92
+ end
93
+
94
+ def self.reset
95
+ @data = nil
96
+ end
97
+
98
+ def data
99
+ self.class.data
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,46 @@
1
+ module Fog
2
+ module Compute
3
+ class OracleCloud
4
+ class Real
5
+ def create_ip_network (params)
6
+ if !params[:name].nil? && !params[:name].start_with?("/Compute-") then
7
+ # They haven't provided a well formed name, add their name in
8
+ params[:name] = "/Compute-#{@identity_domain}/#{@username}/#{params[:name]}"
9
+ end
10
+
11
+ params = params.reject {|key, value| value.nil?}
12
+ request(
13
+ :method => 'POST',
14
+ :expects => 201,
15
+ :path => "/network/v1/ipnetwork/",
16
+ :body => Fog::JSON.encode(params),
17
+ :headers => {
18
+ 'Content-Type' => 'application/oracle-compute-v3+json'
19
+ }
20
+ )
21
+ end
22
+ end
23
+
24
+ class Mock
25
+ def create_ip_network (params)
26
+ response = Excon::Response.new
27
+ name = params[:name]
28
+ name.sub! "/Compute-#{@identity_domain}/#{@username}/", ''
29
+
30
+ self.data[:ip_networks][name] = {
31
+ 'name' => "/Compute-#{@identity_domain}/#{@username}/#{name}",
32
+ 'uri' => "#{@api_endpoint}network/v1/ipnetwork/Compute-#{@identity_domain}/#{@username}/#{name}",
33
+ 'description' => nil,
34
+ 'tags' => nil,
35
+ 'ipAddressPrefix' => params[:ipAddressPrefix],
36
+ 'ipNetworkExchange' => params[:ipNetworkExchange],
37
+ 'publicNaptEnabledFlag' => false
38
+ }
39
+ response.status = 201
40
+ response.body = self.data[:ip_networks][name]
41
+ response
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,48 @@
1
+ module Fog
2
+ module Compute
3
+ class OracleCloud
4
+ class Real
5
+ def create_ip_reservation (params)
6
+ if !params[:name].nil? && !params[:name].start_with?("/Compute-") then
7
+ # They haven't provided a well formed name, add their name in
8
+ params[:name] = "/Compute-#{@identity_domain}/#{@username}/#{params[:name]}"
9
+ end
10
+
11
+ params = params.reject {|key, value| value.nil?}
12
+ request(
13
+ :method => 'POST',
14
+ :expects => 201,
15
+ :path => "/ip/reservation/",
16
+ :body => Fog::JSON.encode(params),
17
+ :headers => {
18
+ 'Content-Type' => 'application/oracle-compute-v3+json'
19
+ }
20
+ )
21
+ end
22
+ end
23
+
24
+ class Mock
25
+ def create_ip_reservation (params)
26
+ response = Excon::Response.new
27
+ name = params[:name]
28
+ name.sub! "/Compute-#{@identity_domain}/#{@username}/", ''
29
+
30
+ self.data[:ip_reservations][name] = {
31
+ 'name' => "/Compute-#{@identity_domain}/#{@username}/#{name}",
32
+ 'account' => "/Compute-#{@identity_domain}/#{@username}",
33
+ 'used' => false,
34
+ 'tags' => params[:tags] || [],
35
+ 'ip' => '123.123.123.56',
36
+ 'uri' => "#{@api_endpoint}ip/reservation/Compute-#{@identity_domain}/#{@username}/#{name}",
37
+ 'quota' => nil,
38
+ 'parentpool' => params[:parentpool],
39
+ 'permanent' => params[:permanent]
40
+ }
41
+ response.status = 201
42
+ response.body = self.data[:ip_reservations][name]
43
+ response
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,55 @@
1
+ require 'securerandom'
2
+
3
+ module Fog
4
+ module Compute
5
+ class OracleCloud
6
+ class Real
7
+ def create_storage_attachment (params)
8
+ if !params[:instance_name].start_with?("/Compute-") then
9
+ # They haven't provided a well formed name, add their name in
10
+ params[:instance_name] = "/Compute-#{@identity_domain}/#{@username}/#{params[:instance_name]}"
11
+ end
12
+ if !params[:storage_volume_name].start_with?("/Compute-") then
13
+ # They haven't provided a well formed name, add their name in
14
+ params[:storage_volume_name] = "/Compute-#{@identity_domain}/#{@username}/#{params[:storage_volume_name]}"
15
+ end
16
+
17
+ params = params.reject {|key, value| value.nil?}
18
+ request(
19
+ :method => 'POST',
20
+ :expects => 201,
21
+ :path => "/network/v1/ipnetwork/",
22
+ :body => Fog::JSON.encode(params),
23
+ :headers => {
24
+ 'Content-Type' => 'application/oracle-compute-v3+json'
25
+ }
26
+ )
27
+ end
28
+ end
29
+
30
+ class Mock
31
+ def create_storage_attachment (params)
32
+ response = Excon::Response.new
33
+
34
+ guid = SecureRandom.uuid
35
+ name = "#{params[:instance_name]}/#{guid}"
36
+
37
+ self.data[:storage_attachments][name] = {
38
+ 'index' => params[:index],
39
+ 'account' => nil,
40
+ 'storage_volume_name' => params[:storage_volume_name],
41
+ 'hypervisor' => nil,
42
+ 'uri' => "#{@api_endpoint}/storage/attachment/#{name}",
43
+ 'instance_name' => params[:instance_name],
44
+ 'state' => 'attaching',
45
+ 'readonly' => false,
46
+ 'name' => name
47
+ }
48
+ response.status = 201
49
+ response.body = self.data[:storage_attachments][name]
50
+ response
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,29 @@
1
+ module Fog
2
+ module Compute
3
+ class OracleCloud
4
+ class Real
5
+ def delete_ip_network (name)
6
+ name.sub! "/Compute-#{@identity_domain}/#{@username}/", ''
7
+ request(
8
+ :method => 'DELETE',
9
+ :expects => 204,
10
+ :path => "/network/v1/ipnetwork/Compute-#{@identity_domain}/#{@username}/#{name}",
11
+ :headers => {
12
+ 'Content-Type' => 'application/oracle-compute-v3+json'
13
+ }
14
+ )
15
+ end
16
+ end
17
+
18
+ class Mock
19
+ def delete_ip_network(name)
20
+ response = Excon::Response.new
21
+ clean_name = name.sub "/Compute-#{@identity_domain}/#{@username}/", ''
22
+ self.data[:ip_networks].delete(clean_name)
23
+ response.status = 204
24
+ response
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ module Fog
2
+ module Compute
3
+ class OracleCloud
4
+ class Real
5
+ def delete_ip_reservation (name)
6
+ name.sub! "/Compute-#{@identity_domain}/#{@username}/", ''
7
+ request(
8
+ :method => 'DELETE',
9
+ :expects => 204,
10
+ :path => "/ip/reservation/Compute-#{@identity_domain}/#{@username}/#{name}",
11
+ :headers => {
12
+ 'Content-Type' => 'application/oracle-compute-v3+json'
13
+ }
14
+ )
15
+ end
16
+ end
17
+
18
+ class Mock
19
+ def delete_ip_reservation(name)
20
+ response = Excon::Response.new
21
+ clean_name = name.sub "/Compute-#{@identity_domain}/#{@username}/", ''
22
+ self.data[:ip_reservations].delete(clean_name)
23
+ response.status = 204
24
+ response
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,36 @@
1
+ module Fog
2
+ module Compute
3
+ class OracleCloud
4
+ class Real
5
+ def get_ip_reservation(name)
6
+ name.sub! "/Compute-#{@identity_domain}/#{@username}/", ''
7
+ response = request(
8
+ :expects => 200,
9
+ :method => 'GET',
10
+ :path => "/network/v1/ipnetwork/Compute-#{@identity_domain}/#{@username}/#{name}",
11
+ :headers => {
12
+ 'Content-Type' => 'application/oracle-compute-v3+json',
13
+ 'Accept' => 'application/oracle-compute-v3+json'
14
+ }
15
+ )
16
+ response
17
+ end
18
+ end
19
+
20
+ class Mock
21
+ def get_ip_network(name)
22
+ response = Excon::Response.new
23
+ clean_name = name.sub "/Compute-#{@identity_domain}/#{@username}/", ''
24
+
25
+ if ip = self.data[:ip_networks][clean_name]
26
+ response.status = 200
27
+ response.body = ip
28
+ response
29
+ else;
30
+ raise Fog::Compute::OracleCloud::NotFound.new("IP Network #{name} does not exist");
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ module Fog
2
+ module Compute
3
+ class OracleCloud
4
+ class Real
5
+ def get_ip_reservation(name)
6
+ name.sub! "/Compute-#{@identity_domain}/#{@username}/", ''
7
+ response = request(
8
+ :expects => 200,
9
+ :method => 'GET',
10
+ :path => "/ip/reservation/Compute-#{@identity_domain}/#{@username}/#{name}",
11
+ :headers => {
12
+ 'Content-Type' => 'application/oracle-compute-v3+json',
13
+ 'Accept' => 'application/oracle-compute-v3+json'
14
+ }
15
+ )
16
+ response
17
+ end
18
+ end
19
+
20
+ class Mock
21
+ def get_ip_reservation(name)
22
+ response = Excon::Response.new
23
+ clean_name = name.sub "/Compute-#{@identity_domain}/#{@username}/", ''
24
+
25
+ if ip = self.data[:ip_reservations][clean_name]
26
+ response.status = 200
27
+ response.body = ip
28
+ response
29
+ else;
30
+ raise Fog::Compute::OracleCloud::NotFound.new("IP Reservation #{name} does not exist");
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ module Fog
2
+ module Compute
3
+ class OracleCloud
4
+ class Real
5
+ def get_storage_attachment(name)
6
+ name.sub! "/Compute-#{@identity_domain}/#{@username}/", ''
7
+ response = request(
8
+ :expects => 200,
9
+ :method => 'GET',
10
+ :path => "/storage/attachment/Compute-#{@identity_domain}/#{@username}/#{name}",
11
+ :headers => {
12
+ 'Content-Type' => 'application/oracle-compute-v3+json',
13
+ 'Accept' => 'application/oracle-compute-v3+json'
14
+ }
15
+ )
16
+ response
17
+ end
18
+ end
19
+
20
+ class Mock
21
+ def get_storage_attachment(name)
22
+ response = Excon::Response.new
23
+ clean_name = name.sub "/Compute-#{@identity_domain}/#{@username}/", ''
24
+
25
+ if sa = self.data[:storage_attachments][clean_name]
26
+ response.status = 200
27
+ response.body = sa
28
+ response
29
+ else;
30
+ raise Fog::Compute::OracleCloud::NotFound.new("Storage Attachment #{name} does not exist");
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,28 @@
1
+ module Fog
2
+ module Compute
3
+ class OracleCloud
4
+ class Real
5
+ def list_ip_networks
6
+ response = request(
7
+ :expects => 200,
8
+ :method => 'GET',
9
+ :path => "/network/v1/ipnetwork/Compute-#{@identity_domain}/#{@username}/"
10
+ )
11
+ response
12
+ end
13
+ end
14
+
15
+ class Mock
16
+ def list_ip_networks
17
+ response = Excon::Response.new
18
+
19
+ ips = self.data[:ip_networks].values
20
+ response.body = {
21
+ 'result' => ips
22
+ }
23
+ response
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end