first commit
This commit is contained in:
@@ -0,0 +1,328 @@
|
||||
import type {CloudProvider, FieldSchema, ServiceSchema, TableColumnSchema} from './types'
|
||||
|
||||
const databaseColumns: TableColumnSchema[] = [
|
||||
{name: 'name', label: 'Name'},
|
||||
{name: 'status', label: 'Status'},
|
||||
{name: 'engine', label: 'Engine'},
|
||||
{name: 'version', label: 'Version'},
|
||||
{name: 'instanceClass', label: 'Class'},
|
||||
]
|
||||
|
||||
/** Cloud SQL reports a connection endpoint, which RDS does not surface here. */
|
||||
const cloudSqlColumns: TableColumnSchema[] = [
|
||||
{name: 'name', label: 'Name'},
|
||||
{name: 'status', label: 'Status', format: 'badge'},
|
||||
{name: 'engine', label: 'Version'},
|
||||
{name: 'region', label: 'Region'},
|
||||
{name: 'instanceClass', label: 'Tier'},
|
||||
{name: 'connectionName', label: 'Connection', path: 'metadata.connectionName', format: 'code'},
|
||||
]
|
||||
|
||||
const databaseFilters: FieldSchema[] = [
|
||||
{name: 'search', label: 'Search', type: 'text', required: false},
|
||||
]
|
||||
|
||||
export function awsDatabaseSchema(): ServiceSchema {
|
||||
return {
|
||||
cloud: 'aws',
|
||||
service: 'database',
|
||||
displayName: 'AWS RDS',
|
||||
fields: [
|
||||
{
|
||||
name: 'dbInstanceIdentifier',
|
||||
label: 'DB Instance Identifier',
|
||||
type: 'text',
|
||||
required: true,
|
||||
validation: {
|
||||
pattern: '^(?!.*--)[a-z](?:[a-z0-9-]{0,61}[a-z0-9])?$',
|
||||
minLength: 1,
|
||||
maxLength: 63,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'engine',
|
||||
label: 'Engine',
|
||||
type: 'select',
|
||||
required: true,
|
||||
defaultValue: 'postgres',
|
||||
options: [
|
||||
{label: 'PostgreSQL', value: 'postgres'},
|
||||
{label: 'MySQL', value: 'mysql'},
|
||||
{label: 'MariaDB', value: 'mariadb'},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'masterUserPassword',
|
||||
label: 'Master User Password',
|
||||
type: 'password',
|
||||
required: true,
|
||||
span: true,
|
||||
validation: {minLength: 8, maxLength: 128},
|
||||
},
|
||||
{
|
||||
name: 'dbInstanceClass',
|
||||
label: 'DB Instance Class',
|
||||
type: 'text',
|
||||
required: false,
|
||||
defaultValue: 'db.t3.micro',
|
||||
},
|
||||
{
|
||||
name: 'allocatedStorage',
|
||||
label: 'Allocated Storage',
|
||||
type: 'text',
|
||||
required: false,
|
||||
defaultValue: '20',
|
||||
validation: {pattern: '^[1-9][0-9]*$'},
|
||||
},
|
||||
{
|
||||
name: 'masterUsername',
|
||||
label: 'Master Username',
|
||||
type: 'text',
|
||||
required: false,
|
||||
defaultValue: 'root',
|
||||
validation: {maxLength: 63},
|
||||
},
|
||||
{
|
||||
name: 'dbName',
|
||||
label: 'Database Name',
|
||||
type: 'text',
|
||||
required: false,
|
||||
defaultValue: '',
|
||||
validation: {maxLength: 64},
|
||||
},
|
||||
{
|
||||
name: 'engineVersion',
|
||||
label: 'Engine Version',
|
||||
type: 'text',
|
||||
required: false,
|
||||
defaultValue: '',
|
||||
},
|
||||
{
|
||||
name: 'securityGroupIds',
|
||||
label: 'Security Group IDs',
|
||||
type: 'text',
|
||||
required: false,
|
||||
span: true,
|
||||
description: 'One or more SG IDs separated by commas — e.g. sg-111, sg-222',
|
||||
},
|
||||
],
|
||||
actions: ['list', 'create', 'update', 'delete', 'inspect'],
|
||||
capabilities: {
|
||||
resourceActions: [
|
||||
{name: 'list', label: 'List DB instances', enabled: true, status: 'available', runtimeRequired: true},
|
||||
{name: 'create', label: 'Create DB instance', enabled: true, status: 'available', runtimeRequired: true},
|
||||
{name: 'update', label: 'Update DB instance', enabled: true, status: 'available', runtimeRequired: true},
|
||||
{name: 'delete', label: 'Delete DB instance', enabled: true, status: 'available', runtimeRequired: true},
|
||||
{name: 'inspect', label: 'Inspect DB instance', enabled: true, status: 'available', runtimeRequired: true},
|
||||
],
|
||||
databaseActions: [
|
||||
{
|
||||
name: 'listSnapshots',
|
||||
label: 'List DB snapshots',
|
||||
enabled: true,
|
||||
status: 'available',
|
||||
runtimeRequired: true,
|
||||
},
|
||||
{
|
||||
name: 'createSnapshot',
|
||||
label: 'Create DB snapshot',
|
||||
enabled: true,
|
||||
status: 'partial',
|
||||
reason: 'The Cloud Proxy operation is available, but the current Floci runtime does not implement CreateDBSnapshot.',
|
||||
runtimeRequired: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
filters: databaseFilters,
|
||||
columns: databaseColumns,
|
||||
updateFields: [
|
||||
{
|
||||
name: 'masterUserPassword',
|
||||
label: 'Master Password',
|
||||
type: 'password',
|
||||
required: false,
|
||||
span: true,
|
||||
description: 'Leave blank to keep the current password. Class, storage, engine, and version are omitted because the current emulator does not support modifying them.',
|
||||
validation: {minLength: 8, maxLength: 128},
|
||||
},
|
||||
{
|
||||
name: 'enableIamDatabaseAuthentication',
|
||||
label: 'IAM Database Authentication',
|
||||
type: 'select',
|
||||
required: false,
|
||||
valuePath: 'metadata.iamDatabaseAuthenticationEnabled',
|
||||
description: 'Leave unchanged to keep current setting.',
|
||||
options: [
|
||||
{label: 'True', value: 'true'},
|
||||
{label: 'False', value: 'false'},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'dbSubnetGroupName',
|
||||
label: 'DB Subnet Group',
|
||||
type: 'text',
|
||||
required: false,
|
||||
valuePath: 'metadata.subnetGroup.name',
|
||||
description: 'Leave unchanged or blank to keep current DB subnet group.',
|
||||
},
|
||||
{
|
||||
name: 'vpcSecurityGroupIds',
|
||||
label: 'VPC Security Group IDs',
|
||||
type: 'text',
|
||||
required: false,
|
||||
valuePath: 'metadata.vpcSecurityGroupIds',
|
||||
description: 'Comma-separated security group IDs. Leave unchanged or blank to keep current security groups.',
|
||||
},
|
||||
{
|
||||
name: 'optionGroupName',
|
||||
label: 'Option Group',
|
||||
type: 'text',
|
||||
required: false,
|
||||
valuePath: 'metadata.optionGroupName',
|
||||
description: 'Leave unchanged or blank to keep current option group.',
|
||||
},
|
||||
{
|
||||
name: 'autoMinorVersionUpgrade',
|
||||
label: 'Auto Minor Version Upgrade',
|
||||
type: 'select',
|
||||
required: false,
|
||||
valuePath: 'metadata.autoMinorVersionUpgrade',
|
||||
description: 'Leave unchanged to keep current setting.',
|
||||
options: [
|
||||
{label: 'True', value: 'true'},
|
||||
{label: 'False', value: 'false'},
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
}
|
||||
|
||||
export function azureDatabaseSchema(): ServiceSchema {
|
||||
return {
|
||||
cloud: 'azure',
|
||||
service: 'database',
|
||||
displayName: 'Azure Databases',
|
||||
fields: [
|
||||
{
|
||||
name: 'engine',
|
||||
label: 'Database Engine',
|
||||
type: 'select',
|
||||
required: true,
|
||||
defaultValue: 'azure-sql',
|
||||
options: [
|
||||
{label: 'Azure SQL Database', value: 'azure-sql'},
|
||||
{label: 'Azure Database for PostgreSQL', value: 'postgresql'},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'serverName',
|
||||
label: 'Server Name',
|
||||
type: 'text',
|
||||
required: true,
|
||||
validation: {
|
||||
minLength: 1,
|
||||
maxLength: 63,
|
||||
pattern: '^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$',
|
||||
message: 'Use 1-63 lowercase letters, numbers, or hyphens.',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'location',
|
||||
label: 'Location',
|
||||
type: 'text',
|
||||
required: true,
|
||||
defaultValue: 'eastus',
|
||||
},
|
||||
{
|
||||
name: 'administratorLogin',
|
||||
label: 'Administrator Login',
|
||||
type: 'text',
|
||||
required: true,
|
||||
defaultValue: 'sa',
|
||||
},
|
||||
{
|
||||
name: 'administratorLoginPassword',
|
||||
label: 'Administrator Password',
|
||||
type: 'password',
|
||||
required: true,
|
||||
span: true,
|
||||
description: 'Required by the local database runtime. The value is not returned by the API.',
|
||||
validation: {
|
||||
minLength: 8,
|
||||
message: 'Use at least 8 characters.',
|
||||
},
|
||||
},
|
||||
],
|
||||
actions: ['list', 'create', 'delete', 'inspect'],
|
||||
capabilities: {
|
||||
resourceActions: [
|
||||
{name: 'list', label: 'List database servers', enabled: true, status: 'available', runtimeRequired: true},
|
||||
{name: 'create', label: 'Create database server', enabled: true, status: 'available', runtimeRequired: true},
|
||||
{name: 'delete', label: 'Delete database server', enabled: true, status: 'available', runtimeRequired: true},
|
||||
{name: 'inspect', label: 'Inspect metadata', enabled: true, status: 'available', runtimeRequired: true},
|
||||
],
|
||||
},
|
||||
filters: databaseFilters,
|
||||
columns: [
|
||||
{name: 'name', label: 'Name'},
|
||||
{name: 'engine', label: 'Engine'},
|
||||
{name: 'status', label: 'Status'},
|
||||
{name: 'region', label: 'Region'},
|
||||
],
|
||||
}
|
||||
}
|
||||
|
||||
export function gcpDatabaseSchema(): ServiceSchema {
|
||||
return {
|
||||
cloud: 'gcp',
|
||||
service: 'database',
|
||||
displayName: 'Cloud SQL',
|
||||
fields: [
|
||||
{
|
||||
name: 'instanceName',
|
||||
label: 'Instance Name',
|
||||
type: 'text',
|
||||
required: true,
|
||||
description: 'Lowercase letters, numbers, and hyphens; must start with a letter.',
|
||||
},
|
||||
{
|
||||
name: 'databaseVersion',
|
||||
label: 'Database Version',
|
||||
type: 'select',
|
||||
required: false,
|
||||
// The runtime backs instances with real Postgres containers and
|
||||
// rejects every other engine, so this is not the full GCP list.
|
||||
description: 'The local runtime supports PostgreSQL only.',
|
||||
options: [
|
||||
{label: 'PostgreSQL 15', value: 'POSTGRES_15'},
|
||||
{label: 'PostgreSQL 16', value: 'POSTGRES_16'},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'region',
|
||||
label: 'Region',
|
||||
type: 'text',
|
||||
required: false,
|
||||
description: 'Defaults to us-central1.',
|
||||
},
|
||||
{
|
||||
name: 'tier',
|
||||
label: 'Machine Tier',
|
||||
type: 'text',
|
||||
required: false,
|
||||
description: 'Defaults to db-f1-micro.',
|
||||
},
|
||||
],
|
||||
actions: ['list', 'create', 'inspect', 'delete'],
|
||||
filters: databaseFilters,
|
||||
columns: cloudSqlColumns,
|
||||
capabilities: {
|
||||
resourceActions: [
|
||||
{name: 'list', label: 'List instances', enabled: true, status: 'available', runtimeRequired: true},
|
||||
{name: 'create', label: 'Create instance', enabled: true, status: 'available', runtimeRequired: true},
|
||||
{name: 'delete', label: 'Delete instance', enabled: true, status: 'available', runtimeRequired: true},
|
||||
{name: 'inspect', label: 'Inspect instance', enabled: true, status: 'available', runtimeRequired: false},
|
||||
],
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user