fog-oraclecloud 0.1.15 → 0.1.16
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 +4 -4
- data/lib/fog/oraclecloud/compute.rb +395 -6
- data/lib/fog/oraclecloud/database.rb +6 -0
- data/lib/fog/oraclecloud/java.rb +1 -0
- data/lib/fog/oraclecloud/models/compute/instance.rb +64 -2
- data/lib/fog/oraclecloud/models/compute/ip_association.rb +42 -0
- data/lib/fog/oraclecloud/models/compute/ip_associations.rb +22 -0
- data/lib/fog/oraclecloud/models/compute/ip_reservation.rb +10 -5
- data/lib/fog/oraclecloud/models/compute/security_application.rb +1 -0
- data/lib/fog/oraclecloud/models/compute/security_applications.rb +6 -2
- data/lib/fog/oraclecloud/models/compute/security_association.rb +31 -0
- data/lib/fog/oraclecloud/models/compute/security_associations.rb +20 -0
- data/lib/fog/oraclecloud/models/compute/security_ip_list.rb +27 -0
- data/lib/fog/oraclecloud/models/compute/security_ip_lists.rb +22 -0
- data/lib/fog/oraclecloud/models/compute/security_list.rb +75 -1
- data/lib/fog/oraclecloud/models/compute/security_rule.rb +3 -3
- data/lib/fog/oraclecloud/models/database/access_rule.rb +52 -0
- data/lib/fog/oraclecloud/models/database/access_rules.rb +28 -0
- data/lib/fog/oraclecloud/models/database/instance.rb +17 -4
- data/lib/fog/oraclecloud/monitoring.rb +1 -1
- data/lib/fog/oraclecloud/requests/compute/create_instance.rb +34 -1
- data/lib/fog/oraclecloud/requests/compute/create_ip_association.rb +39 -0
- data/lib/fog/oraclecloud/requests/compute/create_security_application.rb +18 -0
- data/lib/fog/oraclecloud/requests/compute/create_security_association.rb +47 -0
- data/lib/fog/oraclecloud/requests/compute/create_security_ip_list.rb +47 -0
- data/lib/fog/oraclecloud/requests/compute/create_security_list.rb +49 -0
- data/lib/fog/oraclecloud/requests/compute/create_security_rule.rb +22 -0
- data/lib/fog/oraclecloud/requests/compute/delete_security_list.rb +29 -0
- data/lib/fog/oraclecloud/requests/compute/get_ip_association.rb +36 -0
- data/lib/fog/oraclecloud/requests/compute/get_ip_network.rb +1 -1
- data/lib/fog/oraclecloud/requests/compute/get_security_application.rb +21 -1
- data/lib/fog/oraclecloud/requests/compute/get_security_ip_list.rb +37 -0
- data/lib/fog/oraclecloud/requests/compute/get_security_list.rb +37 -0
- data/lib/fog/oraclecloud/requests/compute/get_security_rule.rb +17 -0
- data/lib/fog/oraclecloud/requests/compute/list_ip_associations.rb +28 -0
- data/lib/fog/oraclecloud/requests/compute/list_security_applications.rb +17 -4
- data/lib/fog/oraclecloud/requests/compute/list_security_rules.rb +1 -1
- data/lib/fog/oraclecloud/requests/compute/update_ip_reservation.rb +2 -0
- data/lib/fog/oraclecloud/requests/database/create_access_rule.rb +47 -0
- data/lib/fog/oraclecloud/requests/database/get_access_rule.rb +50 -0
- data/lib/fog/oraclecloud/soa.rb +1 -1
- data/lib/fog/oraclecloud/storage.rb +1 -1
- data/lib/fog/oraclecloud/version.rb +1 -1
- data/tests/requests/database_tests.rb +15 -8
- data/tests/requests/ip_reservation_tests.rb +33 -0
- data/tests/requests/security_application_tests.rb +32 -0
- metadata +23 -2
@@ -17,6 +17,8 @@ module Fog
|
|
17
17
|
collection :servers
|
18
18
|
model :patch
|
19
19
|
collection :patches
|
20
|
+
model :access_rule
|
21
|
+
collection :access_rules
|
20
22
|
|
21
23
|
request_path 'fog/oraclecloud/requests/database'
|
22
24
|
request :list_instances
|
@@ -35,6 +37,8 @@ module Fog
|
|
35
37
|
request :backup_instance
|
36
38
|
request :recover_instance
|
37
39
|
request :list_patches
|
40
|
+
request :create_access_rule
|
41
|
+
request :get_access_rule
|
38
42
|
|
39
43
|
class Real
|
40
44
|
|
@@ -62,6 +66,7 @@ module Fog
|
|
62
66
|
|
63
67
|
def request(params, parse_json = true, &block)
|
64
68
|
begin
|
69
|
+
Fog::Logger.debug("Sending #{params[:body].to_s} to #{params[:path]}")
|
65
70
|
response = @connection.request(params.merge!({
|
66
71
|
:headers => {
|
67
72
|
'Authorization' => auth_header,
|
@@ -109,6 +114,7 @@ module Fog
|
|
109
114
|
:snapshots => {},
|
110
115
|
:servers => {},
|
111
116
|
:backups => {},
|
117
|
+
:access_rules => {},
|
112
118
|
:recoveries => {},
|
113
119
|
:deleted_at => {},
|
114
120
|
:created_at => {},
|
data/lib/fog/oraclecloud/java.rb
CHANGED
@@ -58,9 +58,9 @@ module Fog
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def create
|
61
|
-
requires :name, :
|
61
|
+
requires :name, :sshkeys
|
62
62
|
|
63
|
-
data = service.create_instance(name, shape, imagelist, label, sshkeys)
|
63
|
+
data = service.create_instance(name, shape || 'oc3', imagelist || '/oracle/public/oel_6.4_2GB_v1', label, sshkeys)
|
64
64
|
merge_attributes(data.body['instances'][0])
|
65
65
|
end
|
66
66
|
|
@@ -68,6 +68,68 @@ module Fog
|
|
68
68
|
requires :name
|
69
69
|
service.delete_instance(name)
|
70
70
|
end
|
71
|
+
|
72
|
+
def get_security_lists
|
73
|
+
seclists = []
|
74
|
+
networking['eth0']['seclists'].each do |seclist|
|
75
|
+
seclists.push(Fog::Compute[:oraclecloud].security_lists.new({
|
76
|
+
'name'=>seclist
|
77
|
+
}))
|
78
|
+
end
|
79
|
+
seclists
|
80
|
+
end
|
81
|
+
|
82
|
+
def create_security_list(seclist_name=nil, description=nil, policy="deny", outbound_policy="permit")
|
83
|
+
if !seclist_name then
|
84
|
+
seclist_name = "#{name}_SecList"
|
85
|
+
end
|
86
|
+
data = Fog::Compute[:oraclecloud].security_lists.create(
|
87
|
+
:name => seclist_name,
|
88
|
+
:description => description,
|
89
|
+
:policy => policy,
|
90
|
+
:outbound_cidr_policy => outbound_policy
|
91
|
+
)
|
92
|
+
# Now attach to this instance
|
93
|
+
Fog::Compute[:oraclecloud].security_associations.create(
|
94
|
+
:name => "#{name}_SecAssoc",
|
95
|
+
:seclist => seclist_name,
|
96
|
+
:vcable => vcable_id
|
97
|
+
)
|
98
|
+
data
|
99
|
+
end
|
100
|
+
|
101
|
+
def get_public_ip_address
|
102
|
+
if !networking['eth0'] or !networking['eth0']['nat'] or !networking['eth0']['nat'].include? 'ipreservation:' then
|
103
|
+
# Instance doesn't have a public ip reservation yet
|
104
|
+
return false
|
105
|
+
end
|
106
|
+
ip_name = networking['eth0']['nat'].sub "ipreservation:", ''
|
107
|
+
ip = Fog::Compute[:oraclecloud].ip_reservations.get(ip_name)
|
108
|
+
ip.ip
|
109
|
+
end
|
110
|
+
|
111
|
+
def add_public_ip_address
|
112
|
+
existing = get_public_ip_address
|
113
|
+
if existing then
|
114
|
+
raise ArgumentError.new "Can't add public id address to instance that already has one (#{existing.ip})"
|
115
|
+
end
|
116
|
+
begin
|
117
|
+
ip = Fog::Compute[:oraclecloud].ip_reservations.get("#{name}_publicIp")
|
118
|
+
rescue Fog::Compute::OracleCloud::NotFound
|
119
|
+
# Doesn't exist yet. Create it now
|
120
|
+
ip = Fog::Compute[:oraclecloud].ip_reservations.create(
|
121
|
+
:name => "#{name}_publicIp"
|
122
|
+
)
|
123
|
+
end
|
124
|
+
# Attach it to this instance
|
125
|
+
Fog::Logger.debug "Associating IP Reservation (#{name}_publicIp) with vcable: #{vcable_id}"
|
126
|
+
assoc = Fog::Compute[:oraclecloud].ip_associations.create(
|
127
|
+
:parentpool => "ipreservation:#{name}_publicIp",
|
128
|
+
:vcable => vcable_id
|
129
|
+
)
|
130
|
+
Fog::Logger.debug "Created IP Association - #{assoc.uri}"
|
131
|
+
ip
|
132
|
+
end
|
71
133
|
end
|
72
134
|
end
|
73
135
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'fog/core/model'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Compute
|
5
|
+
class OracleCloud
|
6
|
+
class IpAssociation < Fog::Model
|
7
|
+
identity :name
|
8
|
+
|
9
|
+
attribute :account
|
10
|
+
attribute :ip
|
11
|
+
attribute :parentpool
|
12
|
+
attribute :reservation
|
13
|
+
attribute :vcable
|
14
|
+
attribute :uri
|
15
|
+
|
16
|
+
def save
|
17
|
+
if name.nil? then
|
18
|
+
create
|
19
|
+
else
|
20
|
+
# TODO: Support?
|
21
|
+
#update
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def create
|
26
|
+
requires :parentpool, :vcable
|
27
|
+
data = service.create_ip_association({
|
28
|
+
:parentpool => parentpool,
|
29
|
+
:vcable => vcable
|
30
|
+
})
|
31
|
+
merge_attributes(data.body)
|
32
|
+
end
|
33
|
+
|
34
|
+
def destroy
|
35
|
+
requires :name
|
36
|
+
service.delete_ip_association(name)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'fog/core/collection'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Compute
|
5
|
+
class OracleCloud
|
6
|
+
class IpAssociations < Fog::Collection
|
7
|
+
|
8
|
+
model Fog::Compute::OracleCloud::IpAssociation
|
9
|
+
|
10
|
+
def all
|
11
|
+
data = service.list_ip_associations().body['result']
|
12
|
+
load(data)
|
13
|
+
end
|
14
|
+
|
15
|
+
def get(name)
|
16
|
+
data = service.get_ip_association(name).body
|
17
|
+
new(data)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -16,14 +16,18 @@ module Fog
|
|
16
16
|
attribute :used
|
17
17
|
|
18
18
|
def save
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
begin
|
20
|
+
# Check if it's already created
|
21
|
+
res = Fog::Compute[:oraclecloud].ip_reservations.get(name)
|
22
|
+
update
|
23
|
+
rescue Fog::Compute::OracleCloud::NotFound
|
24
|
+
# It wasn't found.
|
25
|
+
create
|
26
|
+
end
|
24
27
|
end
|
25
28
|
|
26
29
|
def create
|
30
|
+
requires :name
|
27
31
|
data = service.create_ip_reservation({
|
28
32
|
:name => name,
|
29
33
|
:parentpool => parentpool || '/oracle/public/ippool',
|
@@ -34,6 +38,7 @@ module Fog
|
|
34
38
|
end
|
35
39
|
|
36
40
|
def update
|
41
|
+
requires :name, :parentpool
|
37
42
|
data = service.update_ip_reservation({
|
38
43
|
:name => name,
|
39
44
|
:parentpool => parentpool,
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'fog/core/collection'
|
2
|
-
|
3
1
|
module Fog
|
4
2
|
module Compute
|
5
3
|
class OracleCloud
|
@@ -9,6 +7,12 @@ module Fog
|
|
9
7
|
|
10
8
|
def all
|
11
9
|
data = service.list_security_applications().body['result']
|
10
|
+
public_data = service.list_security_applications('public').body['result']
|
11
|
+
load(data.concat(public_data))
|
12
|
+
end
|
13
|
+
|
14
|
+
def all_public
|
15
|
+
data = service.list_security_applications('public').body['result']
|
12
16
|
load(data)
|
13
17
|
end
|
14
18
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'fog/core/model'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Compute
|
5
|
+
class OracleCloud
|
6
|
+
class SecurityAssociation < Fog::Model
|
7
|
+
identity :name
|
8
|
+
|
9
|
+
attribute :seclist
|
10
|
+
attribute :vcable
|
11
|
+
attribute :uri
|
12
|
+
|
13
|
+
def save
|
14
|
+
#identity ? update : create
|
15
|
+
create
|
16
|
+
end
|
17
|
+
|
18
|
+
def create
|
19
|
+
requires :name, :seclist, :vcable
|
20
|
+
|
21
|
+
data = service.create_security_association(name, seclist, vcable)
|
22
|
+
end
|
23
|
+
|
24
|
+
def destroy
|
25
|
+
requires :name
|
26
|
+
service.delete_security_association(name)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class OracleCloud
|
4
|
+
class SecurityAssociations < Fog::Collection
|
5
|
+
|
6
|
+
model Fog::Compute::OracleCloud::SecurityAssociation
|
7
|
+
|
8
|
+
def all
|
9
|
+
data = service.list_security_associations().body['result']
|
10
|
+
load(data)
|
11
|
+
end
|
12
|
+
|
13
|
+
def get(name)
|
14
|
+
data = service.get_security_association(name).body
|
15
|
+
new(data)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'fog/core/model'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Compute
|
5
|
+
class OracleCloud
|
6
|
+
class SecurityIpList < Fog::Model
|
7
|
+
identity :name
|
8
|
+
|
9
|
+
attribute :description
|
10
|
+
attribute :uri
|
11
|
+
attribute :secipentries
|
12
|
+
|
13
|
+
def save
|
14
|
+
#identity ? update : create
|
15
|
+
create
|
16
|
+
end
|
17
|
+
|
18
|
+
def create
|
19
|
+
requires :name, :secipentries
|
20
|
+
|
21
|
+
data = service.create_security_ip_list(name, description, secipentries)
|
22
|
+
merge_attributes(data.body)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'fog/core/collection'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Compute
|
5
|
+
class OracleCloud
|
6
|
+
class SecurityIpLists < Fog::Collection
|
7
|
+
|
8
|
+
model Fog::Compute::OracleCloud::SecurityIpList
|
9
|
+
|
10
|
+
def all
|
11
|
+
data = service.list_security_ip_lists().body['result']
|
12
|
+
load(data)
|
13
|
+
end
|
14
|
+
|
15
|
+
def get(name)
|
16
|
+
data = service.get_security_ip_list(name).body
|
17
|
+
new(data)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -7,7 +7,7 @@ module Fog
|
|
7
7
|
identity :name
|
8
8
|
|
9
9
|
attribute :account
|
10
|
-
attribute :
|
10
|
+
attribute :description
|
11
11
|
attribute :uri
|
12
12
|
attribute :outbound_cidr_policy
|
13
13
|
attribute :proxyuri
|
@@ -20,6 +20,80 @@ module Fog
|
|
20
20
|
#identity ? update : create
|
21
21
|
create
|
22
22
|
end
|
23
|
+
|
24
|
+
def create
|
25
|
+
requires :name
|
26
|
+
|
27
|
+
data = service.create_security_list(name, description, policy, outbound_cidr_policy)
|
28
|
+
merge_attributes(data.body)
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
def destroy
|
33
|
+
requires :name
|
34
|
+
service.delete_security_list(name)
|
35
|
+
end
|
36
|
+
|
37
|
+
def add_rule (port, list, rule_name=nil)
|
38
|
+
if !rule_name then rule_name = "#{name}_#{port}_#{list}" end
|
39
|
+
if port.is_a? Numeric then
|
40
|
+
# See if it's a public port
|
41
|
+
secapps = Fog::Compute[:oraclecloud].security_applications.all_public
|
42
|
+
public_app = secapps.detect { |app|
|
43
|
+
Float(app.dport || 0) == port }
|
44
|
+
if public_app then
|
45
|
+
secapp = public_app.name
|
46
|
+
else
|
47
|
+
begin
|
48
|
+
custom_app = Fog::Compute[:oraclecloud].security_applications.get("#{name}_#{port}")
|
49
|
+
rescue Fog::Compute::OracleCloud::NotFound
|
50
|
+
|
51
|
+
# Create custom security application
|
52
|
+
custom_app = Fog::Compute[:oraclecloud].security_applications.create(
|
53
|
+
:name => "#{name}_#{port}",
|
54
|
+
:protocol => 'tcp',
|
55
|
+
:dport => port
|
56
|
+
)
|
57
|
+
end
|
58
|
+
secapp = custom_app.name
|
59
|
+
end
|
60
|
+
else
|
61
|
+
# They want to use a named security application
|
62
|
+
# TODO: Add support for user created security apps
|
63
|
+
secapp = '/oracle/public/' + port
|
64
|
+
end
|
65
|
+
block = /\d{,2}|1\d{2}|2[0-4]\d|25[0-5]/
|
66
|
+
re = /\A#{block}\.#{block}\.#{block}\.#{block}\z/
|
67
|
+
|
68
|
+
if re =~ list then
|
69
|
+
# They sent an ip address. Create new security ip list
|
70
|
+
# Check if it exists already (assume this has been run before)
|
71
|
+
begin
|
72
|
+
seclist = Fog::Compute[:oraclecloud].security_ip_lists.get("#{name}_#{list}")
|
73
|
+
rescue Fog::Compute::OracleCloud::NotFound
|
74
|
+
Fog::Logger.debug "Creating Security IP List for #{list}"
|
75
|
+
seclist = Fog::Compute[:oraclecloud].security_ip_lists.create(
|
76
|
+
:name => "#{name}_#{list}",
|
77
|
+
:secipentries => [list]
|
78
|
+
)
|
79
|
+
end
|
80
|
+
list_name = "seciplist:#{name}_#{list}"
|
81
|
+
else
|
82
|
+
list_name = list
|
83
|
+
end
|
84
|
+
begin
|
85
|
+
rule = Fog::Compute[:oraclecloud].security_rules.get(rule_name)
|
86
|
+
rescue Fog::Compute::OracleCloud::NotFound
|
87
|
+
Fog::Logger.debug "Creating Security Rule for #{list_name} to #{name} (app:#{port})"
|
88
|
+
rule = Fog::Compute[:oraclecloud].security_rules.create(
|
89
|
+
:application => secapp,
|
90
|
+
:name => rule_name,
|
91
|
+
:src_list => list_name,
|
92
|
+
:dst_list => "seclist:#{name}"
|
93
|
+
)
|
94
|
+
end
|
95
|
+
rule
|
96
|
+
end
|
23
97
|
end
|
24
98
|
end
|
25
99
|
end
|