diff --git a/frontend/packages/dev-console/src/components/import/DeployImage.tsx b/frontend/packages/dev-console/src/components/import/DeployImage.tsx index ac901755788..5f61ee4067c 100644 --- a/frontend/packages/dev-console/src/components/import/DeployImage.tsx +++ b/frontend/packages/dev-console/src/components/import/DeployImage.tsx @@ -37,6 +37,9 @@ const DeployImage: React.FC = ({ namespace }) => { ports: [], }, isSearchingForImage: false, + serverless: { + trigger: false, + }, route: { create: true, targetPort: '', diff --git a/frontend/packages/dev-console/src/components/import/DeployImageForm.tsx b/frontend/packages/dev-console/src/components/import/DeployImageForm.tsx index 62b915bf454..a937d5d6131 100644 --- a/frontend/packages/dev-console/src/components/import/DeployImageForm.tsx +++ b/frontend/packages/dev-console/src/components/import/DeployImageForm.tsx @@ -7,6 +7,7 @@ import { NormalizedBuilderImages } from '../../utils/imagestream-utils'; import ImageSearchSection from './image-search/ImageSearchSection'; import AppSection from './app/AppSection'; import AdvancedSection from './advanced/AdvancedSection'; +import ServerlessSection from './serverless/ServerlessSection'; export interface DeployImageFormProps { builderImages?: NormalizedBuilderImages; @@ -34,6 +35,7 @@ const DeployImageForm: React.FC & DeployImageFormProps
+

diff --git a/frontend/packages/dev-console/src/components/import/deployImage-submit-utils.ts b/frontend/packages/dev-console/src/components/import/deployImage-submit-utils.ts index b448f2ff919..18604a4e410 100644 --- a/frontend/packages/dev-console/src/components/import/deployImage-submit-utils.ts +++ b/frontend/packages/dev-console/src/components/import/deployImage-submit-utils.ts @@ -11,6 +11,7 @@ import { SelectorInput } from '@console/internal/components/utils'; import { makePortName } from '../../utils/imagestream-utils'; import { getAppLabels, getPodLabels } from '../../utils/resource-label-utils'; import { DeployImageFormData } from './import-types'; +import { createKnativeService } from '../../utils/create-knative-utils'; const annotations = { 'openshift.io/generated-by': 'OpenShiftWebConsole', @@ -266,20 +267,26 @@ export const createResources = ( ): Promise => { const { route: { create: canCreateRoute }, - isi: { ports }, + project: { name: projectName }, + name, + isi: { name: isiName, tag, ports }, } = formData; - const requests: Promise[] = [ - createDeploymentConfig(formData, dryRun), - createImageStream(formData, dryRun), - createBuildConfig(formData, dryRun), - ]; + const requests: Promise[] = []; + if (!formData.serverless.trigger) { + requests.push(createDeploymentConfig(formData, dryRun)); + requests.push(createImageStream(formData, dryRun)); + requests.push(createBuildConfig(formData, dryRun)); - if (!_.isEmpty(ports)) { - requests.push(createService(formData, dryRun)); - if (canCreateRoute) { - requests.push(createRoute(formData, dryRun)); + if (!_.isEmpty(ports)) { + requests.push(createService(formData, dryRun)); + if (canCreateRoute) { + requests.push(createRoute(formData, dryRun)); + } } + } else if (!dryRun) { + // Do not run serverless call during the dry run. + requests.push(createKnativeService(name, projectName, isiName, tag)); } return Promise.all(requests); diff --git a/frontend/packages/dev-console/src/components/import/deployImage-validation-utils.ts b/frontend/packages/dev-console/src/components/import/deployImage-validation-utils.ts index 8c15234ca4c..90003aa7ec9 100644 --- a/frontend/packages/dev-console/src/components/import/deployImage-validation-utils.ts +++ b/frontend/packages/dev-console/src/components/import/deployImage-validation-utils.ts @@ -19,6 +19,9 @@ export const deployValidationSchema = yup.object().shape({ tag: yup.string().required('Required'), status: yup.string().required('Required'), }), + serverless: yup.object().shape({ + trigger: yup.boolean(), + }), deployment: yup.object().shape({ replicas: yup .number() diff --git a/frontend/packages/dev-console/src/components/import/import-types.ts b/frontend/packages/dev-console/src/components/import/import-types.ts index 90943951b31..c2d6af2e618 100644 --- a/frontend/packages/dev-console/src/components/import/import-types.ts +++ b/frontend/packages/dev-console/src/components/import/import-types.ts @@ -8,17 +8,18 @@ export interface FirehoseList { export interface DeployImageFormData { project: ProjectData; + application: ApplicationData; name: string; searchTerm: string; isi: ImageStreamImageData; image: ImageStreamImageData; isSearchingForImage: boolean; + serverless?: ServerlessData; labels: { [name: string]: string }; env: { [name: string]: string }; route: RouteData; build: BuildData; deployment: DeploymentData; - application: ApplicationData; } export interface GitImportFormData { @@ -103,6 +104,10 @@ export interface DeploymentData { env: (NameValuePair | NameValueFromPair)[]; } +export interface ServerlessData { + trigger: boolean; +} + export enum GitTypes { '' = 'Please choose Git type', github = 'GitHub', diff --git a/frontend/packages/dev-console/src/components/import/serverless/ServerlessSection.tsx b/frontend/packages/dev-console/src/components/import/serverless/ServerlessSection.tsx new file mode 100644 index 00000000000..ac9ad9e8680 --- /dev/null +++ b/frontend/packages/dev-console/src/components/import/serverless/ServerlessSection.tsx @@ -0,0 +1,28 @@ +import * as React from 'react'; +import { connectToFlags } from '@console/internal/reducers/features'; +import { FLAG_KNATIVE_SERVING } from '@console/knative-plugin'; +import FormSection from '../section/FormSection'; +import { CheckboxField } from '../../formik-fields'; + +type ServerlessSectionProps = { + flags: { [key: string]: boolean }; +}; + +const ServerlessSection: React.FC = ({ flags }) => { + if (flags[FLAG_KNATIVE_SERVING]) { + return ( + + Tech Preview + + + ); + } + + return null; +}; + +export default connectToFlags(FLAG_KNATIVE_SERVING)(ServerlessSection); diff --git a/frontend/packages/dev-console/src/utils/create-knative-utils.ts b/frontend/packages/dev-console/src/utils/create-knative-utils.ts index 82193720dc6..487542f366c 100644 --- a/frontend/packages/dev-console/src/utils/create-knative-utils.ts +++ b/frontend/packages/dev-console/src/utils/create-knative-utils.ts @@ -5,7 +5,7 @@ export const createKnativeService = ( name: string, namespace: string, imageStreamName: string, - imageStreamTag: string, + imageStreamTag?: string, cpuResource: string = '100m', memoryResource: string = '100Mi', ): Promise => { @@ -22,7 +22,7 @@ export const createKnativeService = ( revisionTemplate: { spec: { container: { - image: `${imageStreamName}:${imageStreamTag}`, + image: `${imageStreamName}${imageStreamTag ? `:${imageStreamTag}` : ''}`, resources: { requests: { cpu: `${cpuResource}`, diff --git a/frontend/public/reducers/features.ts b/frontend/public/reducers/features.ts index daa9e8719b2..3f3e4866f76 100644 --- a/frontend/public/reducers/features.ts +++ b/frontend/public/reducers/features.ts @@ -89,7 +89,7 @@ type WithFlagsProps = { flags: {[key: string]: boolean}; }; -export type ConnectToFlags =

(...flags: FLAGS[]) => (C: React.ComponentType

) => +export type ConnectToFlags =

(...flags: (FLAGS | string)[]) => (C: React.ComponentType

) => React.ComponentType> & {WrappedComponent: React.ComponentType

}; export const connectToFlags: ConnectToFlags = (...flags) => connect(state => stateToProps(flags, state), null, null, {areStatePropsEqual: _.isEqual});