70 lines
2.9 KiB
TypeScript
70 lines
2.9 KiB
TypeScript
import type {CloudProvider, FieldSchema, ServiceSchema, TableColumnSchema} from './types'
|
|
|
|
const containerColumns: TableColumnSchema[] = [
|
|
{name: 'name', label: 'Service'},
|
|
{name: 'status', label: 'State', format: 'badge'},
|
|
{name: 'image', label: 'Image', path: 'metadata.image', format: 'code', emptyText: '—'},
|
|
{name: 'uri', label: 'URL', path: 'metadata.uri', emptyText: '—'},
|
|
{name: 'createdAt', label: 'Created', format: 'datetime'},
|
|
]
|
|
|
|
const containerFilters: FieldSchema[] = [{name: 'search', label: 'Search', type: 'text', required: false}]
|
|
|
|
/** Cloud Run service names: lowercase letters, digits and hyphens, max 49 chars. */
|
|
export const CLOUD_RUN_NAME_PATTERN = '^[a-z]([-a-z0-9]*[a-z0-9])?$'
|
|
export const CLOUD_RUN_NAME_MAX_LENGTH = 49
|
|
|
|
export function gcpContainersSchema(): ServiceSchema {
|
|
return {
|
|
cloud: 'gcp',
|
|
service: 'containers',
|
|
displayName: 'Cloud Run',
|
|
fields: [
|
|
{
|
|
name: 'name',
|
|
label: 'Service Name',
|
|
type: 'text',
|
|
required: true,
|
|
validation: {
|
|
pattern: CLOUD_RUN_NAME_PATTERN,
|
|
minLength: 1,
|
|
maxLength: CLOUD_RUN_NAME_MAX_LENGTH,
|
|
message: 'Start with a letter; lowercase letters, digits and hyphens only.',
|
|
},
|
|
},
|
|
{
|
|
name: 'image',
|
|
label: 'Container Image',
|
|
type: 'text',
|
|
required: true,
|
|
span: true,
|
|
// The most common cause of a service that never becomes ready.
|
|
description:
|
|
'The container must listen on the port given by the PORT environment variable (8080 by default). An image that listens elsewhere will report a failed condition.',
|
|
},
|
|
{
|
|
name: 'port',
|
|
label: 'Container Port',
|
|
type: 'text',
|
|
required: false,
|
|
description: 'Overrides the port passed to the container. Defaults to 8080.',
|
|
},
|
|
],
|
|
actions: ['list', 'create', 'delete', 'inspect'],
|
|
capabilities: {
|
|
resourceActions: [
|
|
{name: 'list', label: 'List services', enabled: true, status: 'available', runtimeRequired: true},
|
|
{name: 'create', label: 'Deploy service', enabled: true, status: 'available', runtimeRequired: true},
|
|
{name: 'delete', label: 'Delete service', enabled: true, status: 'available', runtimeRequired: true},
|
|
{name: 'inspect', label: 'Inspect service', enabled: true, status: 'available', runtimeRequired: true},
|
|
],
|
|
},
|
|
filters: containerFilters,
|
|
columns: containerColumns,
|
|
}
|
|
}
|
|
|
|
export function containersSchemaFor(cloud: CloudProvider): ServiceSchema | null {
|
|
return cloud === 'gcp' ? gcpContainersSchema() : null
|
|
}
|