class Fog::OracleCloud::Database::Instance

Public Instance Methods

access_rules() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 212
def access_rules
  requires :service_name
  service.access_rules.all(service_name)
end
add_rule(port, ip, rule_name=nil) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 222
def add_rule(port, ip, rule_name=nil)
  if !rule_name then rule_name = "#{service_name}_#{port}_#{ip}" end
  begin
    rule = get_access_rule(rule_name)
  rescue Fog::OracleCloud::Database::NotFound    
    Fog::Logger.debug "Add access rule (#{rule_name}) to (#{service_name}) on port #{port}"
    rule = service.access_rules.create(service_name, :ports=>port, :source=>ip, :destination=>'DB', :ruleName=>rule_name)
  end
end
add_storage(size) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 200
def add_storage(size)
  requires :service_name
  service.scale_instance(service_name, :additional_storage=>size).body
end
admin_password=(value) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 155
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
backup() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 247
def backup
  requires :service_name
  service.backup_instance(service_name)
end
backup_destination=(value) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 95
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
backups() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 252
def backups
  requires :service_name
  service.backups.all(service_name)
end
clean_name() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 164
def clean_name 
  name.sub %r{\/.*\/}, ''
end
destroy() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 190
def destroy
  requires :service_name
  service.delete_instance(service_name).body
end
disaster_recovery=(value) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 103
def disaster_recovery=(value)
  if %w(yes no).include? value then
    attributes[:disaster_recovery]=value
  else
    raise ArgumentError, "Invalid disaster recovery value"
  end
end
edition=(value) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 63
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
expand_storage(size, type=nil) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 205
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
failover_database=(value) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 111
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
get_access_rule(rule_name) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 217
def get_access_rule(rule_name)
  requires :service_name
  service.access_rules.get(service_name, rule_name)
end
get_snapshot(snapshot_name) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 237
def get_snapshot(snapshot_name)
  requires :service_name
  service.snapshots.get(service_name, snapshot_name)
end
ip_address() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 185
def ip_address
    # TODO: Replace with regex
    content_url.sub('http://', '')
end
is_rac=(value) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 124
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
level=(value) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 71
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
ncharset=(value) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 137
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
patches() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 273
def patches
  requires :service_name
  service.patches.all(service_name)
end
ready?() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 173
def ready?
  status == "Running"
end
recover(type, value) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 257
def recover(type, value)
  # Valid types are 'scn', 'tag' or 'timestamp'
  requires :service_name
  service.recover_instance(service_name, type, value)
end
recover_latest() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 263
def recover_latest
  requires :service_name
  service.recover_instance(service_name)
end
recoveries() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 268
def recoveries
  requires :service_name
  service.recoveries.all(service_name)
end
save() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 168
 def save
  #identity ? update : create
  create
end
scale(shape) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 195
def scale(shape)
  requires :service_name
  service.scale_instance(service_name, :shape=>shape).body
end
servers() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 242
def servers
  requires :service_name
  service.servers.all(service_name)
end
service_name=(value) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 55
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
shape=(value) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 79
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
snapshots() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 232
def snapshots
  requires :service_name
  service.snapshots.all(service_name)
end
stopped?() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 181
def stopped?
  status == 'Stopped'
end
stopping?() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 177
def stopping?
  status == 'Maintenance' || status == 'Terminating'
end
subscription_type=(value) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 87
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
usable_storage=(value) click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 147
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

Private Instance Methods

create() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 280
def create
  requires :service_name, :ssh_key, :admin_password

  if backup_destination.nil? then
    backup_destination = 'NONE'
  end
  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 || 'SE',
    :ssh_key => ssh_key,
    :shape => shape || 'oc3',
    :version => version || '12.2.0.1',
    :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
reload() click to toggle source
# File lib/fog/oraclecloud/models/database/instance.rb, line 334
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