fog-oraclecloud 0.1.12 → 0.1.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +12 -10
  3. data/Gemfile +4 -4
  4. data/LICENSE +20 -20
  5. data/README.md +153 -153
  6. data/Rakefile +2 -2
  7. data/bin/console +14 -14
  8. data/bin/setup +8 -8
  9. data/fog-oracle.gemspec +32 -31
  10. data/lib/fog/oraclecloud.rb +29 -29
  11. data/lib/fog/oraclecloud/compute.rb +184 -184
  12. data/lib/fog/oraclecloud/database.rb +129 -129
  13. data/lib/fog/oraclecloud/java.rb +123 -115
  14. data/lib/fog/oraclecloud/models/compute/image.rb +43 -43
  15. data/lib/fog/oraclecloud/models/compute/image_list.rb +39 -39
  16. data/lib/fog/oraclecloud/models/compute/image_lists.rb +22 -22
  17. data/lib/fog/oraclecloud/models/compute/images.rb +22 -22
  18. data/lib/fog/oraclecloud/models/compute/instance.rb +74 -69
  19. data/lib/fog/oraclecloud/models/compute/instances.rb +22 -22
  20. data/lib/fog/oraclecloud/models/compute/object_plan.rb +16 -16
  21. data/lib/fog/oraclecloud/models/compute/object_plans.rb +12 -12
  22. data/lib/fog/oraclecloud/models/compute/orchestration.rb +89 -89
  23. data/lib/fog/oraclecloud/models/compute/orchestrations.rb +20 -20
  24. data/lib/fog/oraclecloud/models/compute/security_application.rb +42 -42
  25. data/lib/fog/oraclecloud/models/compute/security_applications.rb +22 -22
  26. data/lib/fog/oraclecloud/models/compute/security_list.rb +26 -26
  27. data/lib/fog/oraclecloud/models/compute/security_lists.rb +22 -22
  28. data/lib/fog/oraclecloud/models/compute/security_rule.rb +41 -41
  29. data/lib/fog/oraclecloud/models/compute/security_rules.rb +22 -22
  30. data/lib/fog/oraclecloud/models/compute/ssh_key.rb +37 -37
  31. data/lib/fog/oraclecloud/models/compute/ssh_keys.rb +22 -22
  32. data/lib/fog/oraclecloud/models/compute/volume.rb +47 -47
  33. data/lib/fog/oraclecloud/models/compute/volumes.rb +20 -20
  34. data/lib/fog/oraclecloud/models/database/backup.rb +37 -37
  35. data/lib/fog/oraclecloud/models/database/backups.rb +30 -30
  36. data/lib/fog/oraclecloud/models/database/instance.rb +331 -331
  37. data/lib/fog/oraclecloud/models/database/instances.rb +25 -25
  38. data/lib/fog/oraclecloud/models/database/patch.rb +34 -34
  39. data/lib/fog/oraclecloud/models/database/patches.rb +18 -18
  40. data/lib/fog/oraclecloud/models/database/recoveries.rb +26 -26
  41. data/lib/fog/oraclecloud/models/database/recovery.rb +43 -43
  42. data/lib/fog/oraclecloud/models/database/server.rb +28 -28
  43. data/lib/fog/oraclecloud/models/database/servers.rb +18 -18
  44. data/lib/fog/oraclecloud/models/database/snapshot.rb +60 -60
  45. data/lib/fog/oraclecloud/models/database/snapshots.rb +22 -22
  46. data/lib/fog/oraclecloud/models/java/database.rb +17 -17
  47. data/lib/fog/oraclecloud/models/java/databases.rb +17 -17
  48. data/lib/fog/oraclecloud/models/java/instance.rb +269 -265
  49. data/lib/fog/oraclecloud/models/java/instances.rb +23 -23
  50. data/lib/fog/oraclecloud/models/java/server.rb +62 -62
  51. data/lib/fog/oraclecloud/models/java/servers.rb +25 -25
  52. data/lib/fog/oraclecloud/models/soa/instance.rb +163 -163
  53. data/lib/fog/oraclecloud/models/soa/instances.rb +54 -54
  54. data/lib/fog/oraclecloud/models/storage/container.rb +33 -33
  55. data/lib/fog/oraclecloud/models/storage/containers.rb +24 -24
  56. data/lib/fog/oraclecloud/models/storage/object.rb +27 -27
  57. data/lib/fog/oraclecloud/models/storage/objects.rb +27 -27
  58. data/lib/fog/oraclecloud/requests/compute/create_image.rb +30 -30
  59. data/lib/fog/oraclecloud/requests/compute/create_image_list.rb +27 -27
  60. data/lib/fog/oraclecloud/requests/compute/create_instance.rb +53 -53
  61. data/lib/fog/oraclecloud/requests/compute/create_orchestration.rb +82 -82
  62. data/lib/fog/oraclecloud/requests/compute/create_security_application.rb +28 -28
  63. data/lib/fog/oraclecloud/requests/compute/create_security_rule.rb +29 -29
  64. data/lib/fog/oraclecloud/requests/compute/create_ssh_key.rb +46 -46
  65. data/lib/fog/oraclecloud/requests/compute/create_volume.rb +28 -28
  66. data/lib/fog/oraclecloud/requests/compute/delete_image.rb +19 -19
  67. data/lib/fog/oraclecloud/requests/compute/delete_image_list.rb +19 -19
  68. data/lib/fog/oraclecloud/requests/compute/delete_instance.rb +33 -33
  69. data/lib/fog/oraclecloud/requests/compute/delete_orchestration.rb +36 -36
  70. data/lib/fog/oraclecloud/requests/compute/delete_security_application.rb +20 -20
  71. data/lib/fog/oraclecloud/requests/compute/delete_security_rule.rb +20 -20
  72. data/lib/fog/oraclecloud/requests/compute/delete_ssh_key.rb +32 -32
  73. data/lib/fog/oraclecloud/requests/compute/get_image.rb +21 -21
  74. data/lib/fog/oraclecloud/requests/compute/get_image_list.rb +21 -21
  75. data/lib/fog/oraclecloud/requests/compute/get_instance.rb +45 -45
  76. data/lib/fog/oraclecloud/requests/compute/get_orchestration.rb +39 -39
  77. data/lib/fog/oraclecloud/requests/compute/get_security_application.rb +20 -20
  78. data/lib/fog/oraclecloud/requests/compute/get_security_rule.rb +20 -20
  79. data/lib/fog/oraclecloud/requests/compute/get_ssh_key.rb +39 -39
  80. data/lib/fog/oraclecloud/requests/compute/list_image_lists.rb +29 -29
  81. data/lib/fog/oraclecloud/requests/compute/list_images.rb +16 -16
  82. data/lib/fog/oraclecloud/requests/compute/list_instances.rb +28 -28
  83. data/lib/fog/oraclecloud/requests/compute/list_orchestrations.rb +28 -28
  84. data/lib/fog/oraclecloud/requests/compute/list_security_applications.rb +21 -21
  85. data/lib/fog/oraclecloud/requests/compute/list_security_lists.rb +16 -16
  86. data/lib/fog/oraclecloud/requests/compute/list_security_rules.rb +21 -21
  87. data/lib/fog/oraclecloud/requests/compute/list_ssh_keys.rb +29 -29
  88. data/lib/fog/oraclecloud/requests/compute/list_volumes.rb +16 -16
  89. data/lib/fog/oraclecloud/requests/compute/start_orchestration.rb +39 -39
  90. data/lib/fog/oraclecloud/requests/compute/stop_orchestration.rb +39 -39
  91. data/lib/fog/oraclecloud/requests/compute/update_image.rb +27 -27
  92. data/lib/fog/oraclecloud/requests/compute/update_image_list.rb +27 -27
  93. data/lib/fog/oraclecloud/requests/compute/update_orchestration.rb +80 -80
  94. data/lib/fog/oraclecloud/requests/compute/update_ssh_key.rb +49 -49
  95. data/lib/fog/oraclecloud/requests/database/backup_instance.rb +45 -45
  96. data/lib/fog/oraclecloud/requests/database/create_instance.rb +101 -101
  97. data/lib/fog/oraclecloud/requests/database/create_snapshot.rb +50 -50
  98. data/lib/fog/oraclecloud/requests/database/delete_instance.rb +26 -26
  99. data/lib/fog/oraclecloud/requests/database/delete_snapshot.rb +26 -26
  100. data/lib/fog/oraclecloud/requests/database/get_instance.rb +62 -62
  101. data/lib/fog/oraclecloud/requests/database/get_instance_from_job.rb +31 -31
  102. data/lib/fog/oraclecloud/requests/database/get_snapshot.rb +43 -43
  103. data/lib/fog/oraclecloud/requests/database/list_backups.rb +39 -39
  104. data/lib/fog/oraclecloud/requests/database/list_instances.rb +29 -29
  105. data/lib/fog/oraclecloud/requests/database/list_patches.rb +51 -51
  106. data/lib/fog/oraclecloud/requests/database/list_recoveries.rb +40 -40
  107. data/lib/fog/oraclecloud/requests/database/list_servers.rb +27 -27
  108. data/lib/fog/oraclecloud/requests/database/list_snapshots.rb +27 -27
  109. data/lib/fog/oraclecloud/requests/database/recover_instance.rb +83 -83
  110. data/lib/fog/oraclecloud/requests/database/scale_instance.rb +40 -40
  111. data/lib/fog/oraclecloud/requests/java/create_instance.rb +156 -87
  112. data/lib/fog/oraclecloud/requests/java/delete_instance.rb +37 -37
  113. data/lib/fog/oraclecloud/requests/java/get_instance.rb +43 -43
  114. data/lib/fog/oraclecloud/requests/java/get_server.rb +42 -42
  115. data/lib/fog/oraclecloud/requests/java/list_instances.rb +29 -29
  116. data/lib/fog/oraclecloud/requests/java/list_servers.rb +30 -30
  117. data/lib/fog/oraclecloud/requests/java/scale_a_node.rb +45 -45
  118. data/lib/fog/oraclecloud/requests/java/scale_in_a_cluster.rb +35 -35
  119. data/lib/fog/oraclecloud/requests/java/scale_out_a_cluster.rb +38 -38
  120. data/lib/fog/oraclecloud/requests/soa/create_instance.rb +71 -71
  121. data/lib/fog/oraclecloud/requests/soa/delete_instance.rb +35 -35
  122. data/lib/fog/oraclecloud/requests/soa/get_instance.rb +42 -42
  123. data/lib/fog/oraclecloud/requests/soa/get_job_status.rb +22 -22
  124. data/lib/fog/oraclecloud/requests/soa/list_instances.rb +29 -29
  125. data/lib/fog/oraclecloud/requests/storage/create_container.rb +41 -41
  126. data/lib/fog/oraclecloud/requests/storage/delete_container.rb +15 -15
  127. data/lib/fog/oraclecloud/requests/storage/get_container.rb +63 -63
  128. data/lib/fog/oraclecloud/requests/storage/list_containers.rb +27 -27
  129. data/lib/fog/oraclecloud/soa.rb +106 -106
  130. data/lib/fog/oraclecloud/storage.rb +98 -98
  131. data/lib/fog/oraclecloud/version.rb +5 -5
  132. data/tests/helper.rb +5 -3
  133. data/tests/helpers/mock_helper.rb +14 -14
  134. data/tests/requests/compute_tests.rb +9 -9
  135. data/tests/requests/database_tests.rb +241 -241
  136. data/tests/requests/instance_tests.rb +68 -61
  137. data/tests/requests/java_tests.rb +149 -109
  138. data/tests/requests/orchestrations_tests.rb +90 -90
  139. data/tests/requests/soa_tests.rb +151 -151
  140. data/tests/requests/ssh_keys_tests.rb +53 -53
  141. data/tests/requests/storage_tests.rb +54 -54
  142. metadata +17 -3
@@ -1,23 +1,23 @@
1
- require 'fog/core/collection'
2
-
3
- module Fog
4
- module OracleCloud
5
- class Java
6
- class Instances < Fog::Collection
7
-
8
- model Fog::OracleCloud::Java::Instance
9
-
10
- def all
11
- data = service.list_instances().body['services']
12
- load(data)
13
- end
14
-
15
- def get(service_name)
16
- new(service.get_instance(service_name).body)
17
- end
18
-
19
- end
20
- end
21
-
22
- end
23
- end
1
+ require 'fog/core/collection'
2
+
3
+ module Fog
4
+ module OracleCloud
5
+ class Java
6
+ class Instances < Fog::Collection
7
+
8
+ model Fog::OracleCloud::Java::Instance
9
+
10
+ def all
11
+ data = service.list_instances().body['services']
12
+ load(data)
13
+ end
14
+
15
+ def get(service_name)
16
+ new(service.get_instance(service_name).body)
17
+ end
18
+
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -1,62 +1,62 @@
1
- require 'fog/compute/models/server'
2
-
3
- module Fog
4
- module OracleCloud
5
- class Java
6
- class Server < Fog::Model
7
- identity :name
8
-
9
- attribute :cluster_name, :aliases=>'clusterName'
10
- attribute :job_id, :aliases=>'jobId'
11
- attribute :name
12
- attribute :shape
13
- attribute :node_type, :aliases=>'nodeType'
14
- attribute :is_admin, :aliases=>'isAdmin'
15
- attribute :hostname
16
- attribute :status
17
- attribute :reserved_ip, :aliases=>'reservedIp'
18
- attribute :reserved_ipaddress, :aliases=>'reservedIpAddress'
19
- attribute :reserved_ipname, :aliases=>'reservedIpName'
20
- attribute :storage_allocated, :aliases=>'storageAllocated'
21
- attribute :creation_date, :aliases=>'creationDate'
22
- attribute :service_name
23
-
24
- def ip_addr
25
- reserved_ip.blank? ? hostname : reserved_ip
26
- end
27
-
28
- def ready?
29
- status == "Ready"
30
- end
31
-
32
- def scale(shape)
33
- if !%w(oc3 oc4 oc5 oc6 oc1m oc2m oc3m oc4m).include? shape then
34
- raise ArgumentError, "Invalid Shape. Valid values - oc3, oc4, oc5, oc6, oc1m, oc2m, oc3m or oc4m"
35
- end
36
- service.scale_a_node(service_name, name, :shape=>shape)
37
- end
38
-
39
- def scale_in_a_cluster
40
- requires :service_name, :identity
41
- service.scale_in_a_cluster(service_name, identity)
42
- end
43
-
44
- def reload
45
- requires :identity, :service_name
46
-
47
- data = begin
48
- collection.get(service_name, identity)
49
- rescue Excon::Errors::SocketError
50
- nil
51
- end
52
-
53
- return unless data
54
-
55
- new_attributes = data.attributes
56
- merge_attributes(new_attributes)
57
- self
58
- end
59
- end
60
- end
61
- end
62
- end
1
+ require 'fog/compute/models/server'
2
+
3
+ module Fog
4
+ module OracleCloud
5
+ class Java
6
+ class Server < Fog::Model
7
+ identity :name
8
+
9
+ attribute :cluster_name, :aliases=>'clusterName'
10
+ attribute :job_id, :aliases=>'jobId'
11
+ attribute :name
12
+ attribute :shape
13
+ attribute :node_type, :aliases=>'nodeType'
14
+ attribute :is_admin, :aliases=>'isAdmin'
15
+ attribute :hostname
16
+ attribute :status
17
+ attribute :reserved_ip, :aliases=>'reservedIp'
18
+ attribute :reserved_ipaddress, :aliases=>'reservedIpAddress'
19
+ attribute :reserved_ipname, :aliases=>'reservedIpName'
20
+ attribute :storage_allocated, :aliases=>'storageAllocated'
21
+ attribute :creation_date, :aliases=>'creationDate'
22
+ attribute :service_name
23
+
24
+ def ip_addr
25
+ reserved_ip.blank? ? hostname : reserved_ip
26
+ end
27
+
28
+ def ready?
29
+ status == "Ready"
30
+ end
31
+
32
+ def scale(shape)
33
+ if !%w(oc3 oc4 oc5 oc6 oc1m oc2m oc3m oc4m).include? shape then
34
+ raise ArgumentError, "Invalid Shape. Valid values - oc3, oc4, oc5, oc6, oc1m, oc2m, oc3m or oc4m"
35
+ end
36
+ service.scale_a_node(service_name, name, :shape=>shape)
37
+ end
38
+
39
+ def scale_in_a_cluster
40
+ requires :service_name, :identity
41
+ service.scale_in_a_cluster(service_name, identity)
42
+ end
43
+
44
+ def reload
45
+ requires :identity, :service_name
46
+
47
+ data = begin
48
+ collection.get(service_name, identity)
49
+ rescue Excon::Errors::SocketError
50
+ nil
51
+ end
52
+
53
+ return unless data
54
+
55
+ new_attributes = data.attributes
56
+ merge_attributes(new_attributes)
57
+ self
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -1,25 +1,25 @@
1
- require 'fog/core/collection'
2
-
3
- module Fog
4
- module OracleCloud
5
- class Java
6
- class Servers < Fog::Collection
7
-
8
- model Fog::OracleCloud::Java::Server
9
-
10
- def all(service_name)
11
- data = service.list_servers(service_name).body['servers']
12
- data.each { |s| s['service_name'] = service_name }
13
- load(data)
14
- end
15
-
16
- def get(service_name, server_name)
17
- data = service.get_server(service_name, server_name).body['servers'].first
18
- data['service_name'] = service_name
19
- new(data)
20
- end
21
-
22
- end
23
- end
24
- end
25
- end
1
+ require 'fog/core/collection'
2
+
3
+ module Fog
4
+ module OracleCloud
5
+ class Java
6
+ class Servers < Fog::Collection
7
+
8
+ model Fog::OracleCloud::Java::Server
9
+
10
+ def all(service_name)
11
+ data = service.list_servers(service_name).body['servers']
12
+ data.each { |s| s['service_name'] = service_name }
13
+ load(data)
14
+ end
15
+
16
+ def get(service_name, server_name)
17
+ data = service.get_server(service_name, server_name).body['servers'].first
18
+ data['service_name'] = service_name
19
+ new(data)
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,163 +1,163 @@
1
- require 'fog/core/model'
2
-
3
- module Fog
4
- module OracleCloud
5
- class SOA
6
- class Instance < Fog::Model
7
- identity :service_name, :aliases=>'serviceName'
8
-
9
- attribute :service_type
10
- attribute :resource_count
11
- attribute :status
12
- attribute :description
13
- attribute :identity_domain
14
- attribute :creation_job_id
15
- attribute :creation_time
16
- attribute :last_modified_time
17
- attribute :created_by
18
- attribute :service_uri
19
- attribute :provisioning_progress
20
- attribute :db_service_name, :aliases=>'dbServiceName'
21
- attribute :num_nodes, :aliases=>'managedServerCount'
22
- attribute :shape
23
- attribute :version
24
- attribute :ssh_key, :aliases=>'vmPublicKey'
25
-
26
- # The following are only used to create an instance and are not returned in the list action
27
- attribute :cloud_storage_container, :aliases=>'cloudStorageContainer'
28
- attribute :cloud_storage_user, :aliases=>'cloudStorageUser'
29
- attribute :cloud_storage_pwd, :aliases=>'cloudStoragePassword'
30
- attribute :level
31
- attribute :subscription_type, :aliases=>'subscriptionType'
32
- attribute :topology
33
- attribute :admin_username, :aliases=>'adminUserName'
34
- attribute :admin_password, :aliases=>'adminPassword'
35
- attribute :dba_name, :aliases=>'dbaName'
36
- attribute :dba_password, :aliases=>'dbaPassword'
37
- attribute :provision_otd, :aliases=>'provisionOtd'
38
-
39
- # The following are used to delete an instance and are not returned in the list action
40
- attribute :dba_password
41
- attribute :force_delete
42
- attribute :skip_backup
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
-
52
- def topology=(value)
53
- if %w(osb soa soaosb b2b mft apim insight).include? value then
54
- attributes[:topology]=value
55
- else
56
- raise ArgumentError, "Invalid topology. Valid values - osb, soa, soaosb, b2b, mft, apim, insight"
57
- end
58
- end
59
-
60
- def num_nodes=(value)
61
- if value.nil? then value = 1 end
62
- if [1, 2, 4].include? value.to_i then
63
- attributes[:num_nodes] = value.to_i
64
- else
65
- raise ArgumentError, "Invalid server count (#{value}). Valid values - 1, 2 or 4"
66
- end
67
- end
68
-
69
- def shape=(value)
70
- if %w( oc1m oc2m oc3m oc4m oc5m).include? value then
71
- attributes[:shape]=value
72
- else
73
- raise ArgumentError, "Invalid Shape. Valid values - oc1m, oc2m, oc3m, oc4m or oc5m"
74
- end
75
- end
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
-
85
- def save
86
- #identity ? update : create
87
- create
88
- end
89
-
90
- def ready?
91
- status == "Running"
92
- end
93
-
94
- def stopping?
95
- status == 'Maintenance' || status == 'Terminating'
96
- end
97
-
98
- def stopped?
99
- status == 'Stopped'
100
- end
101
-
102
- def destroy(dba_name, dba_password)
103
- requires :service_name
104
- service.delete_instance(service_name, dba_name, dba_password,
105
- :force_delete => force_delete,
106
- :skip_backup => skip_backup).body
107
- end
108
-
109
- def job_status
110
- requires :creation_job_id
111
- service.get_job_status('create', creation_job_id)
112
- end
113
-
114
- private
115
-
116
- def create
117
- requires :service_name, :dba_name, :dba_password, :db_service_name, :shape, :version, :ssh_key, :admin_password, :admin_username, :topology
118
-
119
- stor_user = cloud_storage_user || service.username
120
- stor_pwd = cloud_storage_pwd || service.password
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
-
135
- params = {
136
- :serviceName => service_name,
137
- :cloudStorageContainer => cloud_storage_container,
138
- :cloudStoragePassword => stor_pwd,
139
- :cloudStorageUser => stor_user,
140
- :description => description,
141
- :provisionOTD => provision_otd.nil? ? false : provision_otd,
142
- :subscriptionType => 'MONTHLY',
143
- :level => 'PAAS',
144
- :topology => topology
145
- }
146
- options = {
147
- :adminPassword => admin_password,
148
- :adminUserName => admin_username,
149
- :dbaName => dba_name,
150
- :dbaPassword => dba_password,
151
- :dbServiceName => db_service_name,
152
- :managedServerCount => num_nodes || 1,
153
- :shape => shape,
154
- :VMsPublicKey => ssh_key,
155
- :version => version
156
- }
157
-
158
- data = service.create_instance(params, options)
159
- end
160
- end
161
- end
162
- end
163
- end
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module OracleCloud
5
+ class SOA
6
+ class Instance < Fog::Model
7
+ identity :service_name, :aliases=>'serviceName'
8
+
9
+ attribute :service_type
10
+ attribute :resource_count
11
+ attribute :status
12
+ attribute :description
13
+ attribute :identity_domain
14
+ attribute :creation_job_id
15
+ attribute :creation_time
16
+ attribute :last_modified_time
17
+ attribute :created_by
18
+ attribute :service_uri
19
+ attribute :provisioning_progress
20
+ attribute :db_service_name, :aliases=>'dbServiceName'
21
+ attribute :num_nodes, :aliases=>'managedServerCount'
22
+ attribute :shape
23
+ attribute :version
24
+ attribute :ssh_key, :aliases=>'vmPublicKey'
25
+
26
+ # The following are only used to create an instance and are not returned in the list action
27
+ attribute :cloud_storage_container, :aliases=>'cloudStorageContainer'
28
+ attribute :cloud_storage_user, :aliases=>'cloudStorageUser'
29
+ attribute :cloud_storage_pwd, :aliases=>'cloudStoragePassword'
30
+ attribute :level
31
+ attribute :subscription_type, :aliases=>'subscriptionType'
32
+ attribute :topology
33
+ attribute :admin_username, :aliases=>'adminUserName'
34
+ attribute :admin_password, :aliases=>'adminPassword'
35
+ attribute :dba_name, :aliases=>'dbaName'
36
+ attribute :dba_password, :aliases=>'dbaPassword'
37
+ attribute :provision_otd, :aliases=>'provisionOtd'
38
+
39
+ # The following are used to delete an instance and are not returned in the list action
40
+ attribute :dba_password
41
+ attribute :force_delete
42
+ attribute :skip_backup
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
+
52
+ def topology=(value)
53
+ if %w(osb soa soaosb b2b mft apim insight).include? value then
54
+ attributes[:topology]=value
55
+ else
56
+ raise ArgumentError, "Invalid topology. Valid values - osb, soa, soaosb, b2b, mft, apim, insight"
57
+ end
58
+ end
59
+
60
+ def num_nodes=(value)
61
+ if value.nil? then value = 1 end
62
+ if [1, 2, 4].include? value.to_i then
63
+ attributes[:num_nodes] = value.to_i
64
+ else
65
+ raise ArgumentError, "Invalid server count (#{value}). Valid values - 1, 2 or 4"
66
+ end
67
+ end
68
+
69
+ def shape=(value)
70
+ if %w( oc1m oc2m oc3m oc4m oc5m).include? value then
71
+ attributes[:shape]=value
72
+ else
73
+ raise ArgumentError, "Invalid Shape. Valid values - oc1m, oc2m, oc3m, oc4m or oc5m"
74
+ end
75
+ end
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
+
85
+ def save
86
+ #identity ? update : create
87
+ create
88
+ end
89
+
90
+ def ready?
91
+ status == "Running"
92
+ end
93
+
94
+ def stopping?
95
+ status == 'Maintenance' || status == 'Terminating'
96
+ end
97
+
98
+ def stopped?
99
+ status == 'Stopped'
100
+ end
101
+
102
+ def destroy(dba_name, dba_password)
103
+ requires :service_name
104
+ service.delete_instance(service_name, dba_name, dba_password,
105
+ :force_delete => force_delete,
106
+ :skip_backup => skip_backup).body
107
+ end
108
+
109
+ def job_status
110
+ requires :creation_job_id
111
+ service.get_job_status('create', creation_job_id)
112
+ end
113
+
114
+ private
115
+
116
+ def create
117
+ requires :service_name, :dba_name, :dba_password, :db_service_name, :shape, :version, :ssh_key, :admin_password, :admin_username, :topology
118
+
119
+ stor_user = cloud_storage_user || service.username
120
+ stor_pwd = cloud_storage_pwd || service.password
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
+
135
+ params = {
136
+ :serviceName => service_name,
137
+ :cloudStorageContainer => cloud_storage_container,
138
+ :cloudStoragePassword => stor_pwd,
139
+ :cloudStorageUser => stor_user,
140
+ :description => description,
141
+ :provisionOTD => provision_otd.nil? ? false : provision_otd,
142
+ :subscriptionType => 'MONTHLY',
143
+ :level => 'PAAS',
144
+ :topology => topology
145
+ }
146
+ options = {
147
+ :adminPassword => admin_password,
148
+ :adminUserName => admin_username,
149
+ :dbaName => dba_name,
150
+ :dbaPassword => dba_password,
151
+ :dbServiceName => db_service_name,
152
+ :managedServerCount => num_nodes || 1,
153
+ :shape => shape,
154
+ :VMsPublicKey => ssh_key,
155
+ :version => version
156
+ }
157
+
158
+ data = service.create_instance(params, options)
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end