import type {CapabilitySchema, FieldSchema, ResourceActionName, ServiceSchema} from './types' const resourceActions: CapabilitySchema[] = [ {name: 'list', label: 'List caches', enabled: true, status: 'available', runtimeRequired: true}, {name: 'create', label: 'Create cache', enabled: true, status: 'available', runtimeRequired: true}, {name: 'delete', label: 'Delete cache', enabled: true, status: 'available', runtimeRequired: true}, {name: 'inspect', label: 'Inspect cache', enabled: true, status: 'available', runtimeRequired: true}, ] const fields: FieldSchema[] = [ { name: 'kind', label: 'Resource type', type: 'select', required: true, defaultValue: 'replication-group', options: [ {label: 'Replication group', value: 'replication-group'}, {label: 'Cache cluster', value: 'cache-cluster'}, ], }, {name: 'id', label: 'Identifier', type: 'text', required: true, validation: {minLength: 1, maxLength: 40, message: 'Use a 1-40 character ElastiCache identifier.'}}, {name: 'description', label: 'Description', type: 'text', required: false, requiredWhen: {field: 'kind', equals: 'replication-group'}}, { name: 'engine', label: 'Engine', type: 'select', required: true, defaultValue: 'redis', options: [ {label: 'Redis', value: 'redis'}, {label: 'Valkey', value: 'valkey'}, {label: 'Memcached', value: 'memcached'}, ], }, {name: 'nodeType', label: 'Node type', type: 'text', required: true, defaultValue: 'cache.t3.micro'}, {name: 'port', label: 'Port', type: 'text', required: false, description: 'Optional TCP port, from 1 through 65535.'}, { name: 'clusterMode', label: 'Cluster mode topology', type: 'select', required: false, defaultValue: 'disabled', visibleWhen: {field: 'kind', values: ['replication-group']}, options: [ {label: 'Disabled: one node group', value: 'disabled'}, {label: 'Enabled: multiple node groups', value: 'enabled'}, ], }, {name: 'numNodeGroups', label: 'Node groups', type: 'text', required: false, defaultValue: '2', visibleWhen: {field: 'clusterMode', values: ['enabled']}}, {name: 'replicasPerNodeGroup', label: 'Replicas per node group', type: 'text', required: false, defaultValue: '0', visibleWhen: {field: 'clusterMode', values: ['enabled']}}, {name: 'numCacheNodes', label: 'Cache nodes', type: 'text', required: false, defaultValue: '1', visibleWhen: {field: 'kind', values: ['cache-cluster']}}, ] export function awsElastiCacheSchema(): ServiceSchema { return { cloud: 'aws', service: 'elasticache', displayName: 'Amazon ElastiCache', fields, actions: ['list', 'create', 'delete', 'inspect'], capabilities: {resourceActions}, filters: [{name: 'search', label: 'Search', type: 'text', required: false}], columns: [ {name: 'name', label: 'Identifier'}, {name: 'type', label: 'Type'}, {name: 'status', label: 'Status', format: 'badge'}, {name: 'engine', label: 'Engine'}, {name: 'nodeType', label: 'Node type', path: 'metadata.nodeType'}, {name: 'endpoint', label: 'Endpoint', path: 'metadata.endpoint'}, ], } }