fog-oraclecloud 0.1.9 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 017c38b53be7d47493cce5f250eb0e3fddfade35
4
- data.tar.gz: 5cc5d6596ed71fc42d40eb6b757962cbab4c114b
3
+ metadata.gz: 42f3ec759406aebf8f527b45f0938a629ae4834b
4
+ data.tar.gz: 7a6926e91e7aaf4e14741f442c04f570a727b1e5
5
5
  SHA512:
6
- metadata.gz: c538b96940ba665dc84ff3ea263cd603a4a07a86ccdac52d0ac097f8c1de1563dc1711528258c460d711c6b98983a96e110bf9116bcfa03ad4d616ea12266322
7
- data.tar.gz: cb8b4a9f7ee3c6b1b81667975f6f62c46481cdd1a62749df6cddeda3b964ed45c177b23361f813601cb1300b18a0437948644078de692bc6607c5acc1a9963b1
6
+ metadata.gz: bfed58be742d9556b18c073599a64d0ff2a8271630aca564c23bfbb2a4450a44a11f10ff6d3e6fe045ecdbc1eab1e83375674dd7e10955631d19dd45596792ed
7
+ data.tar.gz: cf09714cc354e8193c1e01db4f4b5ff4d54fd15ca1602aeee96a2b4d722566f9e08d2a8f5cc85d83f249af1c8cc5ef78abbf9ba804dd43c6b359a2bc75748865
data/README.md CHANGED
@@ -20,15 +20,134 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- TODO: Write usage instructions here
23
+ Before you can use fog-aws, you must require it in your application:
24
24
 
25
- ## Development
25
+ ```ruby
26
+ require 'fog/oraclecloud'
27
+ ```
28
+
29
+ Since it's a bad practice to have your credentials in source code, you should load them from default fog configuration file: ```~/.fog```. This file could look like this:
30
+
31
+ ```
32
+ default:
33
+ oracle_username: <USERNAME>
34
+ oracle_password: <PASSWORD>
35
+ oracle_domain: <IDENTITY DOMAIN>
36
+ oracle_region: <emea or remove if using US data centre>
37
+ oracle_compute_api: <COMPUTE API>
38
+ oracle_storage_api: <STORAGE_API>
39
+ ```
26
40
 
27
- After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
41
+ ### Example: Java Cloud Service
42
+ Get all Java Instances
43
+ ```ruby
44
+ instances = Fog::OracleCloud[:java].instances
45
+ ```
46
+ Create a Java Instance
47
+ ```ruby
48
+ instance = Fog::OracleCloud[:java].instances.create(
49
+ :service_name => 'TestWLS',
50
+ :description => 'A new weblogic instance',
51
+ :dba_name => 'SYS',
52
+ :dba_password => 'password',
53
+ :db_service_name => 'TestDB',
54
+ :admin_password => 'Welcome1$',
55
+ :admin_username => 'weblogic',
56
+ :shape => 'oc3',
57
+ :version => '12.2.1',
58
+ :ssh_key => 'ssh-rsa AAAAB3NzaC1yc2...',
59
+ )
60
+ ```
61
+ Delete an instance
62
+ ```ruby
63
+ instance = Fog::OracleCloud[:java].instances.get('TestWLS')
64
+ # Have to add the database details in so that the tables in the database can be removed
65
+ instance.dba_name = 'Admin'
66
+ instance.dba_password = 'password'
67
+ instance.destroy()
68
+ ```
28
69
 
29
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
70
+ ## Supported Services
71
+ The following services are supported:
72
+ * Java Cloud Service
73
+ * create_instance
74
+ * delete_instance
75
+ * get_instance
76
+ * get_server
77
+ * list_instances
78
+ * list_servers
79
+ * SOA Cloud Service
80
+ * create_instance
81
+ * delete_instance
82
+ * get_instance
83
+ * list_instances
84
+ * Database Cloud Service
85
+ * backup_instance
86
+ * create_instance
87
+ * create_snapshot
88
+ * delete_instance
89
+ * delete_snapshot
90
+ * get_instance
91
+ * get_snapshot
92
+ * list_backups
93
+ * list_instances
94
+ * list_patches
95
+ * list_recoveries
96
+ * list_servers
97
+ * list_snapshots
98
+ * recover_instance
99
+ * scale_instance
100
+ * Compute Cloud Servcice
101
+ * create_image
102
+ * create_image_list
103
+ * create_instance
104
+ * create_orchestration
105
+ * create_security_application
106
+ * create_security_rule
107
+ * create_ssh_key
108
+ * create_volume
109
+ * delete_image_list
110
+ * delete_instance
111
+ * delete_orchestration
112
+ * delete_security_application
113
+ * delete_ssh_key
114
+ * get_image
115
+ * get_image_list
116
+ * get_instance
117
+ * get_orchestration
118
+ * get_security_application
119
+ * get_security_rule
120
+ * get_ssh_key
121
+ * list_image_lists
122
+ * list_images
123
+ * list_instances
124
+ * list_orchestrations
125
+ * list_security_applications
126
+ * list_security_lists
127
+ * list_security_rules
128
+ * list_ssh_keys
129
+ * list_volumes
130
+ * start_orchestration
131
+ * stop_orchestration
132
+ * update_image
133
+ * update_image_list
134
+ * update_orchestration
135
+ * update_ssh_key
136
+ * Storage Cloud Service
137
+ * create_container
138
+ * delete_container
139
+ * get_container
140
+ * list_containers
141
+
142
+ These basically align with the REST API documentation on docs.oracle.com. Check there for particulars around parameters, types etc.
143
+
144
+ **Note**: The APIs above are slightly modified from the Oracle cloud to provide consistency across requests. Keep in mind the following:
145
+ * All parameters are given in lower camel case (ie: service_name, not ServiceName)
146
+ * For IaaS services you don't need to provide the fully qualified names (ie: Compute/<identity_domain>/<name>). The system will prepend the configured user when necessary
147
+ * The Java and Database configuration has all the parameters as top level attributes (ie: don't configure parameters/content_port, use content_port)
148
+ * Smart defaults are included where possible. Check the code to see.
30
149
 
31
150
  ## Contributing
32
151
 
33
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/fog-oracle.
152
+ Bug reports and pull requests are welcome on GitHub at https://github.com/fog/fog-oraclecloud.
34
153
 
data/fog-oracle.gemspec CHANGED
@@ -27,4 +27,5 @@ Gem::Specification.new do |spec|
27
27
  spec.add_dependency 'fog-json', '~>1.0'
28
28
  spec.add_dependency 'fog-xml', '~>0.1'
29
29
  spec.add_dependency 'ipaddress', '~>0.8'
30
+ spec.add_dependency 'mime-types'
30
31
  end
@@ -21,6 +21,7 @@ module Fog
21
21
  request_path 'fog/oraclecloud/requests/database'
22
22
  request :list_instances
23
23
  request :get_instance
24
+ request :get_instance_from_job
24
25
  request :create_instance
25
26
  request :delete_instance
26
27
  request :list_backups
@@ -52,6 +52,14 @@ module Fog
52
52
  attribute :golden_gate, :aliases=>'goldenGate'
53
53
  attribute :usable_storage, :aliases=>'usableStorage'
54
54
 
55
+ def service_name=(value)
56
+ if value.include? '_'
57
+ raise ArgumentError, "Invalid service name. Names must be less than 50 characters; must start with a letter and can only contain letters, numbers and hyphens (-); can not end with a hyphen"
58
+ else
59
+ attributes[:service_name] = value
60
+ end
61
+ end
62
+
55
63
  def edition=(value)
56
64
  if %w(SE EE EE_HP EE_EP).include? value then
57
65
  attributes[:edition]=value
@@ -144,6 +152,14 @@ module Fog
144
152
  end
145
153
  end
146
154
 
155
+ def admin_password=(value)
156
+ if !value.nil? and (!(value[0] =~ /[[:alpha:]]/) or value.size < 8 or value.size > 30 or !(value =~ /[_#$]/) or !(value =~ /[0-9]/))
157
+ raise ArgumentError, "Invalid admin password. Password must be between 8 and 30 characters in length; must start with a letter and can only contain letters, numbers and $, \#, _"
158
+ else
159
+ attributes[:admin_password] = value
160
+ end
161
+ end
162
+
147
163
 
148
164
  def clean_name
149
165
  name.sub %r{\/.*\/}, ''
@@ -274,9 +290,9 @@ module Fog
274
290
  :charset => charset,
275
291
  :backup_destination => backup_destination,
276
292
  :cloud_storage_container => stor_name,
277
- :cloud_storage_pwd => stor_user,
278
- :cloud_storage_user => stor_pwd,
279
- :cloud_storage_if_missing => cloud_storage_if_missing,
293
+ :cloud_storage_pwd => stor_pwd,
294
+ :cloud_storage_user => stor_user,
295
+ :create_storage_container_if_missing => cloud_storage_if_missing,
280
296
  :disaster_recovery => disaster_recovery,
281
297
  :failover_database => failover_database,
282
298
  :golden_gate => golden_gate,
@@ -288,6 +304,26 @@ module Fog
288
304
  :usable_storage => usable_storage || 25
289
305
  }
290
306
  data = service.create_instance(params, options)
307
+ # Get the Job Id out of the header
308
+ self.creation_job_id = /status\/create\/job\/([0-9]*)/.match(data.headers['Location'])[1]
309
+ end
310
+
311
+ def reload
312
+ requires :identity
313
+ data = begin
314
+ collection.get(identity)
315
+ rescue Excon::Errors::SocketError
316
+ nil
317
+ rescue Excon::Errors::NotFound
318
+ # Try using the creation job id (maybe it was just created)
319
+ collection.get_from_job(creation_job_id)
320
+ end
321
+
322
+ return unless data
323
+
324
+ new_attributes = data.attributes
325
+ merge_attributes(new_attributes)
326
+ self
291
327
  end
292
328
  end
293
329
  end
@@ -16,6 +16,9 @@ module Fog
16
16
  new(service.get_instance(id).body)
17
17
  end
18
18
 
19
+ def get_from_job(job_id)
20
+ new(service.get_instance_from_job(job_id).body)
21
+ end
19
22
  end
20
23
  end
21
24
  end
@@ -41,6 +41,14 @@ module Fog
41
41
  attribute :force_delete
42
42
  attribute :skip_backup
43
43
 
44
+ def service_name=(value)
45
+ if value.include? '_' or !(value[0] =~ /[[:alpha:]]/) or value.size > 50 or !(value[/[a-zA-Z0-9-]+/] == value)
46
+ raise ArgumentError, "Invalid service name. Names must be less than 50 characters; must start with a letter and can only contain letters, numbers and hyphens (-); can not end with a hyphen"
47
+ else
48
+ attributes[:service_name] = value
49
+ end
50
+ end
51
+
44
52
  def topology=(value)
45
53
  if %w(osb soa soaosb b2b mft apim insight).include? value then
46
54
  attributes[:topology]=value
@@ -66,6 +74,14 @@ module Fog
66
74
  end
67
75
  end
68
76
 
77
+ def admin_password=(value)
78
+ if !(value[0] =~ /[[:alpha:]]/) or value.size < 8 or value.size > 30 or !(value =~ /[_#$]/) or !(value =~ /[0-9]/)
79
+ raise ArgumentError, "Invalid admin password. Password must be between 8 and 30 characters in length; must start with a letter and can only contain letters, numbers and $, \#, _"
80
+ else
81
+ attributes[:admin_password] = value
82
+ end
83
+ end
84
+
69
85
  def save
70
86
  #identity ? update : create
71
87
  create
@@ -83,28 +99,46 @@ module Fog
83
99
  status == 'Stopped'
84
100
  end
85
101
 
86
- def destroy
87
- requires :service_name, :dba_name, :dba_password
102
+ def destroy(dba_name, dba_password)
103
+ requires :service_name
88
104
  service.delete_instance(service_name, dba_name, dba_password,
89
105
  :force_delete => force_delete,
90
106
  :skip_backup => skip_backup).body
91
107
  end
92
108
 
109
+ def job_status
110
+ requires :creation_job_id
111
+ service.get_job_status('create', creation_job_id)
112
+ end
113
+
93
114
  private
94
115
 
95
116
  def create
96
- requires :service_name, :dba_name, :dba_password, :db_service_name, :shape, :version, :ssh_key, :admin_password, :admin_username, :cloud_storage_container, :topology
117
+ requires :service_name, :dba_name, :dba_password, :db_service_name, :shape, :version, :ssh_key, :admin_password, :admin_username, :topology
97
118
 
98
119
  stor_user = cloud_storage_user || service.username
99
120
  stor_pwd = cloud_storage_pwd || service.password
100
121
 
122
+ if cloud_storage_container.nil? then
123
+ cloud_storage_container = "#{service_name}_Backup"
124
+ begin
125
+ container = Fog::Storage[:oraclecloud].containers.get(cloud_storage_container)
126
+ rescue Excon::Error::NotFound => error
127
+ # Doesn't exist, create it first
128
+ # The Oracle Cloud currently doesn't create a storage container for us, if it doesn't exist. Do it manually now
129
+ container = Fog::Storage[:oraclecloud].containers.create(
130
+ :name => cloud_storage_container,
131
+ )
132
+ end
133
+ end
134
+
101
135
  params = {
102
136
  :serviceName => service_name,
103
137
  :cloudStorageContainer => cloud_storage_container,
104
- :cloudStoragePassword => cloud_storage_pwd,
105
- :cloudStorageUser => cloud_storage_user,
138
+ :cloudStoragePassword => stor_pwd,
139
+ :cloudStorageUser => stor_user,
106
140
  :description => description,
107
- :provisionOTD => provision_otd.nil? ? true : provision_otd,
141
+ :provisionOTD => provision_otd.nil? ? false : provision_otd,
108
142
  :subscriptionType => 'MONTHLY',
109
143
  :level => 'PAAS',
110
144
  :topology => topology
@@ -15,6 +15,39 @@ module Fog
15
15
  def get(id)
16
16
  new(service.get_instance(id).body)
17
17
  end
18
+
19
+ def create(attributes = {}, db_attributes = {})
20
+ if attributes[:db_service_name].nil?
21
+ # Attempt to create a database instance for them
22
+ db_name = db_attributes[:service_name] || "#{attributes[:service_name]}-DB"
23
+ db_attributes.merge!({
24
+ :service_name => "#{attributes[:service_name]}-DB",
25
+ :edition => 'EE',
26
+ :ssh_key => attributes[:ssh_key],
27
+ :shape => 'oc3',
28
+ :version => '12.1.0.2',
29
+ :admin_password => attributes[:admin_password],
30
+ :backup_destination => 'BOTH'
31
+ }) { |key, v1, v2| v1 }
32
+ # Check it doesn't exist already
33
+ begin
34
+ db = Fog::OracleCloud[:database].instances.get(db_name)
35
+ rescue Fog::OracleCloud::Database::NotFound => error
36
+ # Doesn't exist, create it first
37
+ db = Fog::OracleCloud[:database].instances.create(db_attributes)
38
+ db.wait_for { ready? }
39
+ end
40
+ attributes.merge!({
41
+ :dba_name => 'SYS',
42
+ :dba_password => db_attributes[:admin_password],
43
+ :db_service_name => db_name
44
+ })
45
+ end
46
+ # Now provision SOA
47
+ object = new(attributes)
48
+ object.save
49
+ object
50
+ end
18
51
  end
19
52
  end
20
53
  end
@@ -4,15 +4,15 @@ module Fog
4
4
  class Real
5
5
 
6
6
  def create_instance(config, options)
7
- parameters = options.select{|key, value| [:admin_password, :backup_destination, :charset, :cloud_storage_container, :cloud_storage_pwd, :cloud_storage_user, :cloud_storage_if_missing, :disaster_recovery, :failover_database, :golden_gate, :is_rac, :ncharset, :pdb_name, :sid, :timezone, :usable_storage].include?(key)}
7
+ parameters = options.select{|key, value| [:admin_password, :backup_destination, :charset, :cloud_storage_container, :cloud_storage_pwd, :cloud_storage_user, :cloud_storage_if_missing, :disaster_recovery, :failover_database, :golden_gate, :is_rac, :ncharset, :pdb_name, :sid, :timezone, :usable_storage, :create_storage_container_if_missing].include?(key)}
8
8
  params = {
9
9
  'type' => 'db'
10
10
  }
11
11
  parameters.each { |key, value|
12
12
  if !value.nil? then
13
13
  if key == :cloud_storage_container then
14
- if !value.start_with?("/Storage-") then
15
- value = "/Storage-#{@identity_domain}/#{value}"
14
+ if !value.start_with?("Storage-") then
15
+ value = "Storage-#{@identity_domain}/#{value}"
16
16
  end
17
17
  end
18
18
  new_key = key.to_s.split('_').collect(&:capitalize).join
@@ -49,17 +49,18 @@ module Fog
49
49
  class Mock
50
50
  def create_instance(config, options)
51
51
  response = Excon::Response.new
52
-
52
+ job_id = rand(10000).to_s
53
53
  data = {
54
54
  'serviceName' => config[:service_name],
55
55
  'shape' => config[:shape],
56
56
  'edition' => config[:edition],
57
57
  'version' => config[:version],
58
- 'status' => 'In Progress',
58
+ 'status' => 'Starting Provisioning', # Not a valid status, but we use it to simulate the time that the Oracle Cloud takes to add this to the list of instances
59
59
  'charset' => 'AL32UTF8',
60
60
  'ncharset' => 'AL16UTF16',
61
61
  'pdbName' => 'pdb1', # Note this is only valid for 12c instances. Too hard to fix for mocking
62
62
  'timezone' => 'UTC',
63
+ 'creation_job_id' => job_id,
63
64
  'totalSharedStorage' => options[:usable_storage],
64
65
  'domainName' => @identity_domain,
65
66
  'creation_date'=>Time.now.strftime('%Y-%b-%dT%H:%M:%S'),
@@ -90,7 +91,7 @@ module Fog
90
91
  "hostname"=>"db12c-xp-rac1"
91
92
  }
92
93
  self.data[:servers][config[:service_name]] = [node]
93
-
94
+ response.headers['Location'] = "https://dbaas.oraclecloud.com:443/paas/service/dbcs/api/v1.1/instances/#{@identity_domain}/status/create/job/#{job_id}"
94
95
  response.status = 202
95
96
  response
96
97
  end
@@ -19,6 +19,18 @@ module Fog
19
19
 
20
20
  if instance = self.data[:instances][name]
21
21
  case instance['status']
22
+ when 'Starting Provisioning'
23
+ self.data[:instances][name]['status'] = 'In Progress'
24
+ # This simulates the few seconds the Oracle Cloud takes to add this instance to the GET request after creating
25
+ raise(
26
+ Excon::Errors.status_error(
27
+ { :expects => 200 },
28
+ Excon::Response.new({
29
+ :status => 404,
30
+ :body => 'No such service exists, check domain and service name'
31
+ })
32
+ )
33
+ )
22
34
  when 'Terminating'
23
35
  if Time.now - self.data[:deleted_at][name] >= Fog::Mock.delay
24
36
  self.data[:deleted_at].delete(name)
@@ -0,0 +1,32 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class Database
4
+ class Real
5
+
6
+ def get_instance_from_job(job_id)
7
+ response = request(
8
+ :expects => 200,
9
+ :method => 'GET',
10
+ :path => "/paas/service/dbcs/api/v1.1/instances/#{@identity_domain}/status/create/#{job_id}"
11
+ )
12
+ response
13
+ end
14
+ end
15
+
16
+ class Mock
17
+ def get_instance_from_job(job_id)
18
+ response = Excon::Response.new
19
+
20
+ instance = self.data[:instances].select { |k, v| v['creation_job_id'] == job_id }
21
+ if instance
22
+ response.status = 200
23
+ response.body = instance
24
+ response
25
+ else
26
+ raise Fog::OracleCloud::Database::NotFound.new("Database #{job_id} does not exist");
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -7,23 +7,23 @@ module Fog
7
7
  config[:cloudStorageContainer] = "/Storage-#{@identity_domain}/#{config[:cloudStorageContainer]}"
8
8
  end
9
9
 
10
- config[:parameters] = options.select{|key, value| [:adminPassword, :adminPort, :adminUserName, :backupVolumeSize, :clusterName, :contentPort, :dbaName, :dbaPassword, :dbServiceName, :deploymentChannelPort, :domainMode, :domainName, :domainPartitionCount, :domainVolumeSize, :edition, :ipReservations, :managedServerCount, :msInitialHeapMB, :msJvmArgs, :msMaxHeapMB, :msMaxPermMB, :msPermMb, :nodeManagerPassword, :nodeManagerPort, :nodeManagerUserName, :overwriteMsJvmArgs, :pdbName, :securedAdminPort, :securedContentPort, :shape, :VMsPublicKey].include?(key)}
11
- config[:parameters].reject! { |key,value| value.nil?}
10
+ parameters = options.select{|key, value| [:adminPassword, :adminPort, :adminUserName, :backupVolumeSize, :clusterName, :contentPort, :dbaName, :dbaPassword, :dbServiceName, :deploymentChannelPort, :domainMode, :domainName, :domainPartitionCount, :domainVolumeSize, :edition, :ipReservations, :managedServerCount, :msInitialHeapMB, :msJvmArgs, :msMaxHeapMB, :msMaxPermMB, :msPermMb, :nodeManagerPassword, :nodeManagerPort, :nodeManagerUserName, :overwriteMsJvmArgs, :pdbName, :securedAdminPort, :securedContentPort, :shape, :VMsPublicKey, :version].include?(key)}
11
+ parameters.reject! { |key,value| value.nil?}
12
12
  config.reject! { |key,value| value.nil?}
13
13
  # Currently only support weblogic
14
- config[:parameters][:type] = "weblogic"
15
-
14
+ parameters[:type] = "weblogic"
15
+ config[:parameters] = [parameters]
16
16
  body_data = config
17
17
 
18
- request(
18
+ request({
19
19
  :method => 'POST',
20
20
  :expects => 202,
21
21
  :path => "/paas/service/soa/api/v1.1/instances/#{@identity_domain}",
22
22
  :body => Fog::JSON.encode(body_data),
23
- #:headers => {
24
- # 'Content-Type'=>'application/vnd.com.oracle.oracloud.provisioning.Service+json'
25
- #}
26
- )
23
+ :headers => {
24
+ 'Content-Type'=>'application/json'
25
+ }
26
+ }, false)
27
27
  end
28
28
  end
29
29
 
@@ -0,0 +1,23 @@
1
+ module Fog
2
+ module OracleCloud
3
+ class SOA
4
+ class Real
5
+
6
+ def get_job_status(type, job_id)
7
+ response = request(
8
+ :expects => 200,
9
+ :method => 'GET',
10
+ :path => "/paas/service/soa/api/v1.1/instances/#{@identity_domain}/status/#{type}/job/#{job_id}"
11
+ )
12
+ response.body['message']
13
+ end
14
+ end
15
+
16
+ class Mock
17
+ def get_job_status(type, job_id)
18
+ ['Creation job succeded']
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -6,7 +6,7 @@ module Fog
6
6
  request(
7
7
  :method => 'DELETE',
8
8
  :expects => 204,
9
- :path => "/v1/Storage-#{@identity_domain}/#{@username}/#{name}"
9
+ :path => "/v1/Storage-#{@identity_domain}/#{name}"
10
10
  )
11
11
  end
12
12
  end
@@ -1,7 +1,8 @@
1
1
  module Fog
2
2
  module OracleCloud
3
3
  class SOA < Fog::Service
4
- requires :oracle_username, :oracle_password, :oracle_domain, :oracle_region
4
+ requires :oracle_username, :oracle_password, :oracle_domain
5
+ recognizes :oracle_region
5
6
 
6
7
  model_path 'fog/oraclecloud/models/soa'
7
8
  model :instance
@@ -12,6 +13,7 @@ module Fog
12
13
  request :create_instance
13
14
  request :get_instance
14
15
  request :delete_instance
16
+ request :get_job_status
15
17
 
16
18
  class Real
17
19
 
@@ -25,6 +27,14 @@ module Fog
25
27
  @connection = Fog::XML::Connection.new(region_url)
26
28
  end
27
29
 
30
+ def username
31
+ @username
32
+ end
33
+
34
+ def password
35
+ @password
36
+ end
37
+
28
38
  def auth_header
29
39
  auth_header ||= 'Basic ' + Base64.encode64("#{@username}:#{@password}").gsub("\n",'')
30
40
  end
@@ -66,7 +76,7 @@ module Fog
66
76
  @region_url = options[:oracle_region] == 'emea' ? 'https://jcs.emea.oraclecloud.com' : 'https://jaas.oraclecloud.com'
67
77
  end
68
78
 
69
- def username
79
+ def username
70
80
  @username
71
81
  end
72
82
 
@@ -74,8 +84,7 @@ module Fog
74
84
  @password
75
85
  end
76
86
 
77
-
78
- def self.data
87
+ def self.data
79
88
  @data ||= {
80
89
  :instances => {},
81
90
  :servers => {},
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module OracleCloud
3
- VERSION = "0.1.9"
3
+ VERSION = "0.1.10"
4
4
  end
5
5
  end
@@ -11,7 +11,7 @@ Shindo.tests('Fog::Database[oraclecloud] | database requests', 'database') do
11
11
  :shape => 'oc3',
12
12
  :version => '12.1.0.2',
13
13
  :backup_destination => 'NONE',
14
- :admin_password => 'password123',
14
+ :admin_password => 'Welcome1#',
15
15
  :usable_storage => '15'
16
16
  )
17
17
 
@@ -52,6 +52,19 @@ Shindo.tests('Fog::Database[oraclecloud] | database requests', 'database') do
52
52
 
53
53
  end
54
54
 
55
+ tests("#database-attributes", "attributes") do
56
+ tests("should check shape").raises(ArgumentError) do
57
+ instance = Fog::OracleCloud[:database].instances.new({
58
+ :shape => 'fsdfsdf'
59
+ })
60
+ end
61
+ tests("should check service_name").raises(ArgumentError) do
62
+ instance = Fog::OracleCloud[:database].instances.new({
63
+ :service_name => 'Has_Underscore'
64
+ })
65
+ end
66
+ end
67
+
55
68
  tests('#database-read') do
56
69
  instances = Fog::OracleCloud[:database].instances
57
70
  test "returns an Array" do
@@ -31,6 +31,87 @@ Shindo.tests('Fog::Soa[oraclecloud] | SOA requests', 'soa') do
31
31
  end
32
32
  end
33
33
 
34
+ tests("#soa-and-db-create", "create") do
35
+ instance = Fog::OracleCloud[:soa].instances.create({
36
+ :service_name => 'TestSOA2',
37
+ :description => 'A new weblogic instance',
38
+ :admin_password => 'Welcome1$',
39
+ :admin_username => 'weblogic',
40
+ :shape => 'oc3m',
41
+ :version => '12.2.1',
42
+ :ssh_key => 'ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAkNNQ4ri2oUW46mBO/4CHMGCOALciumwGvFEMDLGNnlinstanceUSqU4IRrqgj+znLClfb29Oer0devdarM6DilsZVgZ2YbI5ZD5vICR/O9J0c28dArwbtFeIjcV2TCWyj5xKEXF1r+OrJMexHQa0fW1URGrU8QODpJNC/9eCVGcEXddL31xTZYpjoVOCVx66kNa6lSHEVV3T4zaCby9Oe5QI4gZe1+xyxHPNEW5wogwS3dlKSyL2CfBP0aUKOmJ5Nrl8+y0GqJQXdGjZ9FIknmwWueRW/6qPQvZocjOZ8YiPZgAP0RNy6lL+u8mnAazj/mrEdmB5QUzpDAllIr5Tn/xaddZQ==',
43
+ :topology => 'osb'
44
+ })
45
+ test "can create a soa instance" do
46
+ instance.is_a? Fog::OracleCloud::SOA::Instance
47
+ end
48
+
49
+ test "is being built" do
50
+ !instance.ready?
51
+ end
52
+ instance.wait_for { ready? }
53
+
54
+ test "is built" do
55
+ instance.ready?
56
+ end
57
+
58
+ test "shoud have created a database instance" do
59
+ db = Fog::OracleCloud[:database].instances.get('TestSOA2-DB')
60
+ db.is_a? Fog::OracleCloud::Database::Instance
61
+ end
62
+
63
+ test "should have created a storage container" do
64
+ container = Fog::Storage[:oraclecloud].containers.get('TestSOA2_Backup')
65
+ container.is_a? Fog::Storage::OracleCloud::Container
66
+ end
67
+ end
68
+
69
+ tests('#soa-validation') do
70
+ tests("should ensure service name doesn't have underscore").raises(ArgumentError) do
71
+ instance = Fog::OracleCloud[:soa].instances.new({
72
+ :service_name => 'Has_Underscore'
73
+ })
74
+ end
75
+ tests("should ensure service name doesn't have number as first letter").raises(ArgumentError) do
76
+ instance = Fog::OracleCloud[:soa].instances.new({
77
+ :service_name => '1NotFirstLetter'
78
+ })
79
+ end
80
+ tests("should ensure service name isn't too long").raises(ArgumentError) do
81
+ instance = Fog::OracleCloud[:soa].instances.new({
82
+ :service_name => 'ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongName'
83
+ })
84
+ end
85
+ tests("should ensure service name doesn't contain special characters").raises(ArgumentError) do
86
+ instance = Fog::OracleCloud[:soa].instances.new({
87
+ :service_name => 'Special$characters'
88
+ })
89
+ end
90
+ tests("should ensure admin password starts with a letter").raises(ArgumentError) do
91
+ instance = Fog::OracleCloud[:soa].instances.new({
92
+ :service_name => 'Test',
93
+ :admin_password => '1NotFirstLetter'
94
+ })
95
+ end
96
+ tests("should ensure admin password is not too long").raises(ArgumentError) do
97
+ instance = Fog::OracleCloud[:soa].instances.new({
98
+ :service_name => 'Test',
99
+ :admin_password => 'ReallyReallyReallyReallyReallyReallyReallyReallyPassword1$'
100
+ })
101
+ end
102
+ tests("should ensure admin password has special chars").raises(ArgumentError) do
103
+ instance = Fog::OracleCloud[:soa].instances.new({
104
+ :service_name => 'Test',
105
+ :admin_password => 'WelcomePassword1'
106
+ })
107
+ end
108
+ tests("should ensure admin password has numbers").raises(ArgumentError) do
109
+ instance = Fog::OracleCloud[:soa].instances.new({
110
+ :service_name => 'Test',
111
+ :admin_password => 'WelcomePassword$'
112
+ })
113
+ end
114
+ end
34
115
 
35
116
  tests('#soa-read') do
36
117
  instances = Fog::OracleCloud[:soa].instances
@@ -50,16 +131,22 @@ Shindo.tests('Fog::Soa[oraclecloud] | SOA requests', 'soa') do
50
131
  test "should return an instance" do
51
132
  instance.service_name.is_a? String
52
133
  end
134
+
135
+ test "get job status" do
136
+ status = instance.job_status
137
+ status.is_a? Array
138
+ end
53
139
  end
54
140
 
55
141
  tests("#soa-delete", "create") do
56
142
  instance = Fog::OracleCloud[:soa].instances.get('TestSOA')
57
- instance.dba_name = 'Admin',
58
- instance.dba_password = 'password'
59
- instance.destroy()
143
+ instance.destroy('SYS', 'password')
60
144
  instance.wait_for { stopping? }
61
145
  tests("should actually delete instance").raises(Fog::OracleCloud::SOA::NotFound) do
62
146
  instance.wait_for { stopped? }
63
147
  end
148
+ # Clean up
149
+ instance = Fog::OracleCloud[:soa].instances.get('TestSOA2')
150
+ instance.destroy('SYS', 'Welcome1$')
64
151
  end
65
152
  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.9
4
+ version: 0.1.10
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-10-23 00:00:00.000000000 Z
11
+ date: 2016-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0.8'
111
+ - !ruby/object:Gem::Dependency
112
+ name: mime-types
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  description: This library can be used as a module for `fog` or as standalone provider
112
126
  to use the Oracle Cloud Service in applications.
113
127
  email:
@@ -215,6 +229,7 @@ files:
215
229
  - lib/fog/oraclecloud/requests/database/delete_instance.rb
216
230
  - lib/fog/oraclecloud/requests/database/delete_snapshot.rb
217
231
  - lib/fog/oraclecloud/requests/database/get_instance.rb
232
+ - lib/fog/oraclecloud/requests/database/get_instance_from_job.rb
218
233
  - lib/fog/oraclecloud/requests/database/get_snapshot.rb
219
234
  - lib/fog/oraclecloud/requests/database/list_backups.rb
220
235
  - lib/fog/oraclecloud/requests/database/list_instances.rb
@@ -233,6 +248,7 @@ files:
233
248
  - lib/fog/oraclecloud/requests/soa/create_instance.rb
234
249
  - lib/fog/oraclecloud/requests/soa/delete_instance.rb
235
250
  - lib/fog/oraclecloud/requests/soa/get_instance.rb
251
+ - lib/fog/oraclecloud/requests/soa/get_job_status.rb
236
252
  - lib/fog/oraclecloud/requests/soa/list_instances.rb
237
253
  - lib/fog/oraclecloud/requests/storage/create_container.rb
238
254
  - lib/fog/oraclecloud/requests/storage/delete_container.rb