diff --git a/extensions/resource-deployment/src/interfaces.ts b/extensions/resource-deployment/src/interfaces.ts index 71d63c5b12..2f4dd8ddc6 100644 --- a/extensions/resource-deployment/src/interfaces.ts +++ b/extensions/resource-deployment/src/interfaces.ts @@ -498,3 +498,8 @@ export interface Command { additionalEnvironmentVariables?: NodeJS.ProcessEnv; ignoreError?: boolean; } + +/** + * Map of the set of variables and the values to assign to them upon initialization - overriding the base default. + */ +export type InitialVariableValues = { [key: string]: string | boolean }; diff --git a/extensions/resource-deployment/src/services/resourceTypeService.ts b/extensions/resource-deployment/src/services/resourceTypeService.ts index f2f473dac4..79f74821f3 100644 --- a/extensions/resource-deployment/src/services/resourceTypeService.ts +++ b/extensions/resource-deployment/src/services/resourceTypeService.ts @@ -9,7 +9,7 @@ import * as os from 'os'; import * as path from 'path'; import * as vscode from 'vscode'; import * as nls from 'vscode-nls'; -import { DeploymentProvider, instanceOfAzureSQLVMDeploymentProvider, instanceOfAzureSQLDBDeploymentProvider, instanceOfCommandDeploymentProvider, instanceOfDialogDeploymentProvider, instanceOfDownloadDeploymentProvider, instanceOfNotebookBasedDialogInfo, instanceOfNotebookDeploymentProvider, instanceOfNotebookWizardDeploymentProvider, instanceOfWebPageDeploymentProvider, instanceOfWizardDeploymentProvider, NotebookInfo, NotebookPathInfo, ResourceType, ResourceTypeOption, ResourceSubType, AgreementInfo, HelpText } from '../interfaces'; +import { DeploymentProvider, instanceOfAzureSQLVMDeploymentProvider, instanceOfAzureSQLDBDeploymentProvider, instanceOfCommandDeploymentProvider, instanceOfDialogDeploymentProvider, instanceOfDownloadDeploymentProvider, instanceOfNotebookBasedDialogInfo, instanceOfNotebookDeploymentProvider, instanceOfNotebookWizardDeploymentProvider, instanceOfWebPageDeploymentProvider, instanceOfWizardDeploymentProvider, NotebookInfo, NotebookPathInfo, ResourceType, ResourceTypeOption, ResourceSubType, AgreementInfo, HelpText, InitialVariableValues } from '../interfaces'; import { AzdataService } from './azdataService'; import { KubeService } from './kubeService'; import { INotebookService } from './notebookService'; @@ -322,8 +322,8 @@ export class ResourceTypeService implements IResourceTypeService { return undefined; } - public startDeployment(resourceType: ResourceType, optionValuesFilter?: OptionValuesFilter): void { - const wizard = new ResourceTypeWizard(resourceType, new KubeService(), new AzdataService(this.platformService), this.notebookService, this.toolsService, this.platformService, this, optionValuesFilter); + public startDeployment(resourceType: ResourceType, optionValuesFilter?: OptionValuesFilter, initialVariableValues?: InitialVariableValues): void { + const wizard = new ResourceTypeWizard(resourceType, new KubeService(), new AzdataService(this.platformService), this.notebookService, this.toolsService, this.platformService, this, optionValuesFilter, initialVariableValues); wizard.open(); } diff --git a/extensions/resource-deployment/src/ui/modelViewUtils.ts b/extensions/resource-deployment/src/ui/modelViewUtils.ts index c70713e948..c82eb20f7c 100644 --- a/extensions/resource-deployment/src/ui/modelViewUtils.ts +++ b/extensions/resource-deployment/src/ui/modelViewUtils.ts @@ -11,7 +11,7 @@ import { IOptionsSourceProvider } from 'resource-deployment'; import * as vscode from 'vscode'; import * as nls from 'vscode-nls'; import { getDateTimeString, getErrorMessage, isUserCancelledError, throwUnless } from '../common/utils'; -import { AzureAccountFieldInfo, AzureLocationsFieldInfo, ComponentCSSStyles, DialogInfoBase, FieldInfo, FieldType, FilePickerFieldInfo, instanceOfDynamicEnablementInfo, IOptionsSource, KubeClusterContextFieldInfo, LabelPosition, NoteBookEnvironmentVariablePrefix, OptionsInfo, OptionsType, PageInfoBase, RowInfo, SectionInfo, TextCSSStyles } from '../interfaces'; +import { AzureAccountFieldInfo, AzureLocationsFieldInfo, ComponentCSSStyles, DialogInfoBase, FieldInfo, FieldType, FilePickerFieldInfo, InitialVariableValues, instanceOfDynamicEnablementInfo, IOptionsSource, KubeClusterContextFieldInfo, LabelPosition, NoteBookEnvironmentVariablePrefix, OptionsInfo, OptionsType, PageInfoBase, RowInfo, SectionInfo, TextCSSStyles } from '../interfaces'; import * as loc from '../localizedConstants'; import { apiService } from '../services/apiService'; import { valueProviderService } from '../services/valueProviderService'; @@ -126,6 +126,7 @@ interface ContextBase { container: azdata.window.Dialog | azdata.window.Wizard; toolsService: IToolsService, inputComponents: InputComponents; + initialVariableValues?: InitialVariableValues; onNewValidatorCreated: (validator: Validator) => void; onNewDisposableCreated: (disposable: vscode.Disposable) => void; onNewInputComponentCreated: (name: string, inputComponentInfo: InputComponentInfo) => void; @@ -170,9 +171,10 @@ interface InputBoxInfo { */ function createInputBoxField({ context, inputBoxType = 'text' }: { context: FieldContext; inputBoxType?: azdata.InputBoxInputType; }) { const label = createLabel(context.view, { text: context.fieldInfo.label, description: context.fieldInfo.description, required: context.fieldInfo.required, width: context.fieldInfo.labelWidth, cssStyles: context.fieldInfo.labelCSSStyles }); + const defaultValue = context.initialVariableValues?.[context.fieldInfo.variableName || '']?.toString() || context.fieldInfo.defaultValue; const input = createInputBoxInputInfo(context.view, { type: inputBoxType, - defaultValue: context.fieldInfo.defaultValue, + defaultValue: defaultValue, ariaLabel: context.fieldInfo.label, required: context.fieldInfo.required, min: context.fieldInfo.min, @@ -329,6 +331,7 @@ export function initializeWizardPage(context: WizardPageContext): void { container: context.container, toolsService: context.toolsService, inputComponents: context.inputComponents, + initialVariableValues: context.initialVariableValues, onNewDisposableCreated: context.onNewDisposableCreated, onNewInputComponentCreated: context.onNewInputComponentCreated, onNewValidatorCreated: context.onNewValidatorCreated, @@ -483,6 +486,7 @@ async function processFields(fieldInfoArray: FieldInfo[], components: azdata.Com fieldInfo: fieldInfo, container: context.container, inputComponents: context.inputComponents, + initialVariableValues: context.initialVariableValues, components: components, toolsService: context.toolsService }); diff --git a/extensions/resource-deployment/src/ui/notebookWizard/notebookWizardPage.ts b/extensions/resource-deployment/src/ui/notebookWizard/notebookWizardPage.ts index baec09919f..8a02a49d76 100644 --- a/extensions/resource-deployment/src/ui/notebookWizard/notebookWizardPage.ts +++ b/extensions/resource-deployment/src/ui/notebookWizard/notebookWizardPage.ts @@ -6,7 +6,7 @@ import * as azdata from 'azdata'; import { EOL } from 'os'; import * as vscode from 'vscode'; import * as nls from 'vscode-nls'; -import { NotebookWizardPageInfo } from '../../interfaces'; +import { InitialVariableValues, NotebookWizardPageInfo } from '../../interfaces'; import { initializeWizardPage, InputComponent, InputComponentInfo, setModelValues, Validator } from '../modelViewUtils'; import { ResourceTypePage } from '../resourceTypePage'; import { WizardPageInfo } from '../wizardPageInfo'; @@ -47,13 +47,14 @@ export class NotebookWizardPage extends ResourceTypePage { return !!this._model.wizardInfo.scriptAction; } - public initialize(): void { + public initialize(initialParamValues?: InitialVariableValues): void { initializeWizardPage({ container: this.wizard.wizardObject, inputComponents: this._model.inputComponents, wizardInfo: this._model.wizardInfo, pageInfo: this.pageInfo, page: this.pageObject, + initialVariableValues: initialParamValues, onNewDisposableCreated: (disposable: vscode.Disposable): void => { this.wizard.registerDisposable(disposable); }, diff --git a/extensions/resource-deployment/src/ui/resourceTypeModel.ts b/extensions/resource-deployment/src/ui/resourceTypeModel.ts index 159aff9376..8d26f73f71 100644 --- a/extensions/resource-deployment/src/ui/resourceTypeModel.ts +++ b/extensions/resource-deployment/src/ui/resourceTypeModel.ts @@ -3,7 +3,7 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DeploymentProvider } from '../interfaces'; +import { DeploymentProvider, InitialVariableValues } from '../interfaces'; import { Model } from './model'; import { ResourceTypeWizard } from './resourceTypeWizard'; @@ -13,7 +13,7 @@ export abstract class ResourceTypeModel extends Model { super(); } - abstract initialize(): void; + abstract initialize(initialParams?: InitialVariableValues): void; abstract onOk(): Promise; abstract onCancel(): void; /** diff --git a/extensions/resource-deployment/src/ui/resourceTypePage.ts b/extensions/resource-deployment/src/ui/resourceTypePage.ts index 2b04440e06..1cc3e30958 100644 --- a/extensions/resource-deployment/src/ui/resourceTypePage.ts +++ b/extensions/resource-deployment/src/ui/resourceTypePage.ts @@ -6,6 +6,4 @@ import { ResourceTypeWizard } from './resourceTypeWizard'; import { WizardPageBase } from './wizardPageBase'; -export abstract class ResourceTypePage extends WizardPageBase{ - abstract initialize(): void; -} +export abstract class ResourceTypePage extends WizardPageBase{ } diff --git a/extensions/resource-deployment/src/ui/resourceTypeWizard.ts b/extensions/resource-deployment/src/ui/resourceTypeWizard.ts index fa29a2b1ca..4afba01bdb 100644 --- a/extensions/resource-deployment/src/ui/resourceTypeWizard.ts +++ b/extensions/resource-deployment/src/ui/resourceTypeWizard.ts @@ -5,7 +5,7 @@ import * as azdata from 'azdata'; import * as vscode from 'vscode'; -import { DeploymentProvider, instanceOfAzureSQLDBDeploymentProvider, instanceOfAzureSQLVMDeploymentProvider, instanceOfNotebookWizardDeploymentProvider, instanceOfWizardDeploymentProvider, ResourceType, ResourceTypeOptionValue } from '../interfaces'; +import { DeploymentProvider, InitialVariableValues, instanceOfAzureSQLDBDeploymentProvider, instanceOfAzureSQLVMDeploymentProvider, instanceOfNotebookWizardDeploymentProvider, instanceOfWizardDeploymentProvider, ResourceType, ResourceTypeOptionValue } from '../interfaces'; import { DeployClusterWizardModel } from './deployClusterWizard/deployClusterWizardModel'; import { DeployAzureSQLVMWizardModel } from './deployAzureSQLVMWizard/deployAzureSQLVMWizardModel'; import { WizardPageInfo } from './wizardPageInfo'; @@ -59,7 +59,8 @@ export class ResourceTypeWizard { public toolsService: IToolsService, public platformService: IPlatformService, public resourceTypeService: ResourceTypeService, - private _optionValuesFilter?: OptionValuesFilter) { + private _optionValuesFilter?: OptionValuesFilter, + private _initialVariableValues?: InitialVariableValues) { /** * Setting the first provider from the first value of the dropdowns. * If there are no options (dropdowns) then the resource type has only one provider which is set as default here. @@ -164,7 +165,7 @@ export class ResourceTypeWizard { // generateScriptButton is enabled only when the page is valid. this.wizardObject.generateScriptButton.enabled = isValid; }); - page.initialize(); + page.initialize(this._initialVariableValues); }); } diff --git a/extensions/resource-deployment/src/ui/wizardPageBase.ts b/extensions/resource-deployment/src/ui/wizardPageBase.ts index d959ab2b84..5be61c75ef 100644 --- a/extensions/resource-deployment/src/ui/wizardPageBase.ts +++ b/extensions/resource-deployment/src/ui/wizardPageBase.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as azdata from 'azdata'; +import { InitialVariableValues } from '../interfaces'; import { Validator } from './modelViewUtils'; import { WizardPageInfo } from './wizardPageInfo'; @@ -29,7 +30,7 @@ export abstract class WizardPageBase { public async onLeave(_pageInfo?: WizardPageInfo): Promise { } - public abstract initialize(): void; + public abstract initialize(initialVariableValues?: InitialVariableValues): void; protected get validators(): Validator[] { return this._validators;