lib/fog/oraclecloud/models/database/instance.rb in fog-oraclecloud-0.1.12 vs lib/fog/oraclecloud/models/database/instance.rb in fog-oraclecloud-0.1.13
- old
+ new
@@ -1,331 +1,331 @@
-require 'fog/core/model'
-
-module Fog
- module OracleCloud
- class Database
- class Instance < Fog::Model
- identity :service_name, :aliases=>'serviceName'
-
- attribute :version
- attribute :status
- attribute :description, :aliases=>'serviceDescription'
- attribute :domain_name, :aliases=>'domainName'
- attribute :creation_date
- attribute :last_modified_time
- attribute :created_by, :aliases=>'creator'
- attribute :sm_plugin_version
- attribute :service_uri
- attribute :num_nodes
- attribute :level, :aliases=>'serviceLevel'
- attribute :edition
- attribute :shape
- attribute :subscription_type, :aliases=>['subscriptionType', 'subscription']
- attribute :creation_job_id
- attribute :num_ip_reservations
- attribute :backup_destination
- attribute :cloud_storage_container, :aliases=>'cloudStorageContainer'
- attribute :failover_database
- attribute :sid
- attribute :pdb_name, :aliases=>'pdbName'
- attribute :listenerPort
- attribute :timezone
- attribute :em_url
- attribute :connect_descriptor
- attribute :connect_descriptor_with_public_ip
- attribute :apex_url
- attribute :glassfish_url
- attribute :dbaasmonitor_url
- attribute :compute_site_name
- attribute :charset
- attribute :ncharset
- attribute :is_rac, :aliases=>['isRac', 'rac_database']
- attribute :total_shared_storage, :aliases=>'totalSharedStorage'
- attribute :service_type, :aliases=>'serviceType'
-
- # The following are only used to create an instance and are not returned in the list or get actions
- attribute :ssh_key, :aliases=>'vmPublicKeyText'
- attribute :admin_password
- attribute :cloud_storage_pwd, :aliases=>'cloudStoragePwd'
- attribute :cloud_storage_user, :aliases=>'cloudStorageUser'
- attribute :cloud_storage_container_if_missing, :aliases=>'cloudStorageContainerIfMissing'
- attribute :disaster_recovery, :aliases=>'disasterRecovery'
- attribute :golden_gate, :aliases=>'goldenGate'
- attribute :usable_storage, :aliases=>'usableStorage'
-
- def service_name=(value)
- if value.include? '_'
- 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"
- else
- attributes[:service_name] = value
- end
- end
-
- def edition=(value)
- if %w(SE EE EE_HP EE_EP).include? value then
- attributes[:edition]=value
- else
- raise ArgumentError, "Invalid Edition. Valid values - SE, EE, EE_HP, EE_EP"
- end
- end
-
- def level=(value)
- if %w(PAAS BASIC).include? value then
- attributes[:level]=value
- else
- raise ArgumentError, "Invalid level. Valid values - PAAS or BASIC"
- end
- end
-
- def shape=(value)
- if %w(oc3 oc4 oc5 oc6 oc1m oc2m oc3m oc4m).include? value then
- attributes[:shape]=value
- else
- raise ArgumentError, "Invalid Shape. Valid values - oc3, oc4, oc5, oc6, oc1m, oc2m, oc3m or oc4m"
- end
- end
-
- def subscription_type=(value)
- if %w(HOURLY MONTHLY).include? value then
- attributes[:subscription_type]=value
- else
- raise ArgumentError, "Invalid subscription type. Valid values - HOURLY or MONTHLY"
- end
- end
-
- def backup_destination=(value)
- if %w(BOTH OSS NONE).include? value then
- attributes[:backup_destination]=value
- else
- raise ArgumentError, "Invalid backup destination. Valid values - BOTH, OSS or NONE"
- end
- end
-
- def disaster_recovery=(value)
- if %w(yes no).include? value then
- attributes[:disaster_recovery]=value
- else
- raise ArgumentError, "Invalid disaster recovery value"
- end
- end
-
- def failover_database=(value)
- if value == true
- value = 'yes'
- elsif value == false || value.nil?
- value = 'no'
- end
- if %w(yes no).include? value then
- attributes[:failover_database]=value
- else
- raise ArgumentError, "Invalid failover database value"
- end
- end
-
- def is_rac=(value)
- if value == true
- value = 'yes'
- elsif value == false || value.nil?
- value = 'no'
- end
- if %w(yes no).include? value then
- attributes[:is_rac]=value
- else
- raise ArgumentError, "Invalid is_rac value"
- end
- end
-
- def ncharset=(value)
- if value.nil? then
- attributes[:ncharset] = 'AL16UTF16'
- elsif %w(AL16UTF16 UTF8).include? value then
- attributes[:ncharset]=value
- else
- raise ArgumentError, "Invalid ncharset"
- end
- end
-
- def usable_storage=(value)
- if value.to_f >= 15 && value.to_f <= 1000 then
- attributes[:usable_storage]=value
- else
- raise ArgumentError, "Usable storage value is invalid: #{value.to_f}"
- end
- end
-
- def admin_password=(value)
- if !value.nil? and (!(value[0] =~ /[[:alpha:]]/) or value.size < 8 or value.size > 30 or !(value =~ /[_#$]/) or !(value =~ /[0-9]/))
- 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 $, \#, _"
- else
- attributes[:admin_password] = value
- end
- end
-
-
- def clean_name
- name.sub %r{\/.*\/}, ''
- end
-
- def save
- #identity ? update : create
- create
- end
-
- def ready?
- status == "Running"
- end
-
- def stopping?
- status == 'Maintenance' || status == 'Terminating'
- end
-
- def stopped?
- status == 'Stopped'
- end
-
- def ip_address
- # TODO: Replace with regex
- content_url.sub('http://', '')
- end
-
- def destroy
- requires :service_name
- service.delete_instance(service_name).body
- end
-
- def scale(shape)
- requires :service_name
- service.scale_instance(service_name, :shape=>shape).body
- end
-
- def add_storage(size)
- requires :service_name
- service.scale_instance(service_name, :additional_storage=>size).body
- end
-
- def expand_storage(size, type=nil)
- requires :service_name
- if type.nil? then type = 'data' end
- if type == 'backup' then type ='fra' end
- service.scale_instance(service_name, :additional_storage=>size, :usage=>type).body
- end
-
- def snapshots
- requires :service_name
- service.snapshots.all(service_name)
- end
-
- def get_snapshot(snapshot_name)
- requires :service_name
- service.snapshots.get(service_name, snapshot_name)
- end
-
- def servers
- requires :service_name
- service.servers.all(service_name)
- end
-
- def backup
- requires :service_name
- service.backup_instance(service_name)
- end
-
- def backups
- requires :service_name
- service.backups.all(service_name)
- end
-
- def recover(type, value)
- # Valid types are 'scn', 'tag' or 'timestamp'
- requires :service_name
- service.recover_instance(service_name, type, value)
- end
-
- def recover_latest
- requires :service_name
- service.recover_instance(service_name)
- end
-
- def recoveries
- requires :service_name
- service.recoveries.all(service_name)
- end
-
- def patches
- requires :service_name
- service.patches.all(service_name)
- end
-
- private
-
- def create
- requires :service_name, :edition, :ssh_key, :shape, :version, :admin_password, :backup_destination
-
- if backup_destination != 'NONE' then
- if cloud_storage_container.nil? then
- cloud_storage_if_missing = true
- stor_name = "#{service_name}_Backup"
- else
- stor_name = cloud_storage_container
- end
- stor_user = cloud_storage_user || service.username
- stor_pwd = cloud_storage_pwd || service.password
- end
-
- if !disaster_recovery.nil? && (failover_database.nil? || failover_database == 'no') then raise ArgumentError, 'Can\'t set disaster recovery option without failover_database set to \'yes\'' end
- if failover_database == 'yes' && golden_gate == 'yes' then raise ArgumentError, 'Can\'t set failover_database and golden_gate both to \'yes\'' end
- if is_rac == 'yes' && (failover_database == 'yes' || golden_gate == 'yes') then raise ArgumentError, 'Can\'t set is_rac and failover_database or golden_gate both to \'yes\'' end
-
- params = {
- :service_name => service_name,
- :edition => edition,
- :ssh_key => ssh_key,
- :shape => shape,
- :version => version,
- :level => level || 'PAAS',
- :subscription_type => subscription_type || 'HOURLY',
- :description => description
- }
- options = {
- :admin_password => admin_password,
- :charset => charset,
- :backup_destination => backup_destination,
- :cloud_storage_container => stor_name,
- :cloud_storage_pwd => stor_pwd,
- :cloud_storage_user => stor_user,
- :create_storage_container_if_missing => cloud_storage_if_missing,
- :disaster_recovery => disaster_recovery,
- :failover_database => failover_database,
- :golden_gate => golden_gate,
- :is_rac => is_rac,
- :ncharset => ncharset,
- :pdb_name => pdb_name,
- :sid => sid || 'ORCL',
- :timezone => timezone,
- :usable_storage => usable_storage || 25
- }
- data = service.create_instance(params, options)
- # Get the Job Id out of the header
- self.creation_job_id = /status\/create\/job\/([0-9]*)/.match(data.headers['Location'])[1]
- end
-
- def reload
- requires :identity
- data = begin
- collection.get(identity)
- rescue Excon::Errors::SocketError
- nil
- rescue Excon::Errors::NotFound
- # Try using the creation job id (maybe it was just created)
- collection.get_from_job(creation_job_id)
- end
-
- return unless data
-
- new_attributes = data.attributes
- merge_attributes(new_attributes)
- self
- end
- end
- end
- end
-end
+require 'fog/core/model'
+
+module Fog
+ module OracleCloud
+ class Database
+ class Instance < Fog::Model
+ identity :service_name, :aliases=>'serviceName'
+
+ attribute :version
+ attribute :status
+ attribute :description, :aliases=>'serviceDescription'
+ attribute :domain_name, :aliases=>'domainName'
+ attribute :creation_date
+ attribute :last_modified_time
+ attribute :created_by, :aliases=>'creator'
+ attribute :sm_plugin_version
+ attribute :service_uri
+ attribute :num_nodes
+ attribute :level, :aliases=>'serviceLevel'
+ attribute :edition
+ attribute :shape
+ attribute :subscription_type, :aliases=>['subscriptionType', 'subscription']
+ attribute :creation_job_id
+ attribute :num_ip_reservations
+ attribute :backup_destination
+ attribute :cloud_storage_container, :aliases=>'cloudStorageContainer'
+ attribute :failover_database
+ attribute :sid
+ attribute :pdb_name, :aliases=>'pdbName'
+ attribute :listenerPort
+ attribute :timezone
+ attribute :em_url
+ attribute :connect_descriptor
+ attribute :connect_descriptor_with_public_ip
+ attribute :apex_url
+ attribute :glassfish_url
+ attribute :dbaasmonitor_url
+ attribute :compute_site_name
+ attribute :charset
+ attribute :ncharset
+ attribute :is_rac, :aliases=>['isRac', 'rac_database']
+ attribute :total_shared_storage, :aliases=>'totalSharedStorage'
+ attribute :service_type, :aliases=>'serviceType'
+
+ # The following are only used to create an instance and are not returned in the list or get actions
+ attribute :ssh_key, :aliases=>'vmPublicKeyText'
+ attribute :admin_password
+ attribute :cloud_storage_pwd, :aliases=>'cloudStoragePwd'
+ attribute :cloud_storage_user, :aliases=>'cloudStorageUser'
+ attribute :cloud_storage_container_if_missing, :aliases=>'cloudStorageContainerIfMissing'
+ attribute :disaster_recovery, :aliases=>'disasterRecovery'
+ attribute :golden_gate, :aliases=>'goldenGate'
+ attribute :usable_storage, :aliases=>'usableStorage'
+
+ def service_name=(value)
+ if value.include? '_'
+ 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"
+ else
+ attributes[:service_name] = value
+ end
+ end
+
+ def edition=(value)
+ if %w(SE EE EE_HP EE_EP).include? value then
+ attributes[:edition]=value
+ else
+ raise ArgumentError, "Invalid Edition. Valid values - SE, EE, EE_HP, EE_EP"
+ end
+ end
+
+ def level=(value)
+ if %w(PAAS BASIC).include? value then
+ attributes[:level]=value
+ else
+ raise ArgumentError, "Invalid level. Valid values - PAAS or BASIC"
+ end
+ end
+
+ def shape=(value)
+ if %w(oc3 oc4 oc5 oc6 oc1m oc2m oc3m oc4m).include? value then
+ attributes[:shape]=value
+ else
+ raise ArgumentError, "Invalid Shape. Valid values - oc3, oc4, oc5, oc6, oc1m, oc2m, oc3m or oc4m"
+ end
+ end
+
+ def subscription_type=(value)
+ if %w(HOURLY MONTHLY).include? value then
+ attributes[:subscription_type]=value
+ else
+ raise ArgumentError, "Invalid subscription type. Valid values - HOURLY or MONTHLY"
+ end
+ end
+
+ def backup_destination=(value)
+ if %w(BOTH OSS NONE).include? value then
+ attributes[:backup_destination]=value
+ else
+ raise ArgumentError, "Invalid backup destination. Valid values - BOTH, OSS or NONE"
+ end
+ end
+
+ def disaster_recovery=(value)
+ if %w(yes no).include? value then
+ attributes[:disaster_recovery]=value
+ else
+ raise ArgumentError, "Invalid disaster recovery value"
+ end
+ end
+
+ def failover_database=(value)
+ if value == true
+ value = 'yes'
+ elsif value == false || value.nil?
+ value = 'no'
+ end
+ if %w(yes no).include? value then
+ attributes[:failover_database]=value
+ else
+ raise ArgumentError, "Invalid failover database value"
+ end
+ end
+
+ def is_rac=(value)
+ if value == true
+ value = 'yes'
+ elsif value == false || value.nil?
+ value = 'no'
+ end
+ if %w(yes no).include? value then
+ attributes[:is_rac]=value
+ else
+ raise ArgumentError, "Invalid is_rac value"
+ end
+ end
+
+ def ncharset=(value)
+ if value.nil? then
+ attributes[:ncharset] = 'AL16UTF16'
+ elsif %w(AL16UTF16 UTF8).include? value then
+ attributes[:ncharset]=value
+ else
+ raise ArgumentError, "Invalid ncharset"
+ end
+ end
+
+ def usable_storage=(value)
+ if value.to_f >= 15 && value.to_f <= 1000 then
+ attributes[:usable_storage]=value
+ else
+ raise ArgumentError, "Usable storage value is invalid: #{value.to_f}"
+ end
+ end
+
+ def admin_password=(value)
+ if !value.nil? and (!(value[0] =~ /[[:alpha:]]/) or value.size < 8 or value.size > 30 or !(value =~ /[_#$]/) or !(value =~ /[0-9]/))
+ 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 $, \#, _"
+ else
+ attributes[:admin_password] = value
+ end
+ end
+
+
+ def clean_name
+ name.sub %r{\/.*\/}, ''
+ end
+
+ def save
+ #identity ? update : create
+ create
+ end
+
+ def ready?
+ status == "Running"
+ end
+
+ def stopping?
+ status == 'Maintenance' || status == 'Terminating'
+ end
+
+ def stopped?
+ status == 'Stopped'
+ end
+
+ def ip_address
+ # TODO: Replace with regex
+ content_url.sub('http://', '')
+ end
+
+ def destroy
+ requires :service_name
+ service.delete_instance(service_name).body
+ end
+
+ def scale(shape)
+ requires :service_name
+ service.scale_instance(service_name, :shape=>shape).body
+ end
+
+ def add_storage(size)
+ requires :service_name
+ service.scale_instance(service_name, :additional_storage=>size).body
+ end
+
+ def expand_storage(size, type=nil)
+ requires :service_name
+ if type.nil? then type = 'data' end
+ if type == 'backup' then type ='fra' end
+ service.scale_instance(service_name, :additional_storage=>size, :usage=>type).body
+ end
+
+ def snapshots
+ requires :service_name
+ service.snapshots.all(service_name)
+ end
+
+ def get_snapshot(snapshot_name)
+ requires :service_name
+ service.snapshots.get(service_name, snapshot_name)
+ end
+
+ def servers
+ requires :service_name
+ service.servers.all(service_name)
+ end
+
+ def backup
+ requires :service_name
+ service.backup_instance(service_name)
+ end
+
+ def backups
+ requires :service_name
+ service.backups.all(service_name)
+ end
+
+ def recover(type, value)
+ # Valid types are 'scn', 'tag' or 'timestamp'
+ requires :service_name
+ service.recover_instance(service_name, type, value)
+ end
+
+ def recover_latest
+ requires :service_name
+ service.recover_instance(service_name)
+ end
+
+ def recoveries
+ requires :service_name
+ service.recoveries.all(service_name)
+ end
+
+ def patches
+ requires :service_name
+ service.patches.all(service_name)
+ end
+
+ private
+
+ def create
+ requires :service_name, :edition, :ssh_key, :shape, :version, :admin_password, :backup_destination
+
+ if backup_destination != 'NONE' then
+ if cloud_storage_container.nil? then
+ cloud_storage_if_missing = true
+ stor_name = "#{service_name}_Backup"
+ else
+ stor_name = cloud_storage_container
+ end
+ stor_user = cloud_storage_user || service.username
+ stor_pwd = cloud_storage_pwd || service.password
+ end
+
+ if !disaster_recovery.nil? && (failover_database.nil? || failover_database == 'no') then raise ArgumentError, 'Can\'t set disaster recovery option without failover_database set to \'yes\'' end
+ if failover_database == 'yes' && golden_gate == 'yes' then raise ArgumentError, 'Can\'t set failover_database and golden_gate both to \'yes\'' end
+ if is_rac == 'yes' && (failover_database == 'yes' || golden_gate == 'yes') then raise ArgumentError, 'Can\'t set is_rac and failover_database or golden_gate both to \'yes\'' end
+
+ params = {
+ :service_name => service_name,
+ :edition => edition,
+ :ssh_key => ssh_key,
+ :shape => shape,
+ :version => version,
+ :level => level || 'PAAS',
+ :subscription_type => subscription_type || 'HOURLY',
+ :description => description
+ }
+ options = {
+ :admin_password => admin_password,
+ :charset => charset,
+ :backup_destination => backup_destination,
+ :cloud_storage_container => stor_name,
+ :cloud_storage_pwd => stor_pwd,
+ :cloud_storage_user => stor_user,
+ :create_storage_container_if_missing => cloud_storage_if_missing,
+ :disaster_recovery => disaster_recovery,
+ :failover_database => failover_database,
+ :golden_gate => golden_gate,
+ :is_rac => is_rac,
+ :ncharset => ncharset,
+ :pdb_name => pdb_name,
+ :sid => sid || 'ORCL',
+ :timezone => timezone,
+ :usable_storage => usable_storage || 25
+ }
+ data = service.create_instance(params, options)
+ # Get the Job Id out of the header
+ self.creation_job_id = /status\/create\/job\/([0-9]*)/.match(data.headers['Location'])[1]
+ end
+
+ def reload
+ requires :identity
+ data = begin
+ collection.get(identity)
+ rescue Excon::Errors::SocketError
+ nil
+ rescue Excon::Errors::NotFound
+ # Try using the creation job id (maybe it was just created)
+ collection.get_from_job(creation_job_id)
+ end
+
+ return unless data
+
+ new_attributes = data.attributes
+ merge_attributes(new_attributes)
+ self
+ end
+ end
+ end
+ end
+end