ManageIQ/manageiq-providers-amazon

View on GitHub
app/models/manageiq/providers/amazon/cloud_manager/cloud_database.rb

Summary

Maintainability
A
0 mins
Test Coverage
D
61%
class ManageIQ::Providers::Amazon::CloudManager::CloudDatabase < ::CloudDatabase
  supports :create
  supports :delete

  def self.params_for_create(ems)
    {
      :fields => [
        {
          :component  => 'text-field',
          :id         => 'name',
          :name       => 'name',
          :label      => _('Cloud Database Name'),
          :isRequired => true,
          :validate   => [{:type => 'required'}],
        },
        {
          :component  => 'text-field',
          :name       => 'storage',
          :id         => 'storage',
          :label      => _('Storage (in Gigabytes)'),
          :type       => 'number',
          :step       => 1,
          :isRequired => true,
          :validate   => [{:type => 'required'},
                          {:type => 'min-number-value', :value => 1, :message => _('Size must be greater than or equal to 1')}],
        },
        {
          :component    => 'select',
          :name         => 'flavor',
          :id           => 'flavor',
          :label        => _('Cloud Database Instance Class'),
          :includeEmpty => true,
          :isRequired   => true,
          :validate     => [{:type => 'required'}],
          :options      => ems.cloud_database_flavors.active.map do |db|
            {
              :label => db[:name],
              :value => db[:name],
            }
          end,
        },
        {
          :component    => 'select',
          :name         => 'database',
          :id           => 'database',
          :label        => _('Cloud Database'),
          :includeEmpty => true,
          :isRequired   => true,
          :validate     => [{:type => 'required'}],
          :options      => ["aurora", "aurora-mysql", "aurora-postgresql", "mariadb", "postgres", "mysql", "oracle-ee", "oracle-ee-cdb", "oracle-se2", "oracle-se2-cdb", "sqlserver-ee", "sqlserver-se", "sqlserver-ex", "sqlserver-web"].map do |db|
            {
              :label => db,
              :value => db,
            }
          end,
        },
        {
          :component => 'text-field',
          :id        => 'username',
          :name      => 'username',
          :label     => _('Master Username'),
          :isRequired => true,
          :validate   => [{:type => 'required'}],
        },
        {
          :component => 'password-field',
          :type      => 'password',
          :id        => 'password',
          :name      => 'password',
          :label     => _('Master Password'),
          :isRequired => true,
          :validate   => [{:type => 'required'}],
        },
      ],
    }
  end

  def self.raw_create_cloud_database(ext_management_system, options)
    options.symbolize_keys!
    ext_management_system.with_provider_connection(:service => :RDS) do |connection|
      connection.client.create_db_instance(:db_instance_identifier => options[:name],
                                           :db_instance_class      => options[:flavor],
                                           :allocated_storage      => options[:storage],
                                           :engine                 => options[:database],
                                           :master_username        => options[:username],
                                           :master_user_password   => options[:password])
    end
  rescue => e
    _log.error("cloud_database=[#{name}], error: #{e}")
    raise
  end

  def raw_delete_cloud_database
    with_provider_connection(:service => :RDS) do |connection|
      connection.client.delete_db_instance(:db_instance_identifier => name, :skip_final_snapshot => true)
    end
  rescue => err
    _log.error("cloud database=[#{name}], error: #{err}")
    raise
  end
end