Files
azuredatastudio/extensions/resource-deployment/src/interfaces.ts
Arvind Ranasaria 4dd6db57ee Feat/tool install master merge back to master (#7819)
* add install tools button (#7454)

* add install tools button

* address comments

* remove description for install tools hint message

* First working version of AutoDeployment of tools (#7647)

First working version of AutoDeployment of tools.

This pull request adds feature to install the tools needed for doing BDC/TINA deployments.

This has been tested so far only on win32 and testing on other platforms is in progress.

* removing TODO and redundant code

* Not localizing azuredatastudio product name

* convert methods returning Promises to async-await

* changing from null to undefined

* Localize all the command labels

* using existing sudo-prompt typings

* progres/error status in ModalDialogue && PR fixes

* review feedback to change warning to information

* revert settings.json changes

* fix resource-Deployment Extension Unit Test

* ensuring platform service's working directory

* incorporate review feedback

* review feedback

* addressing PR feedback

* PR fixes

* PR Feedback

* remove debug logs

* disable UI deployment containers when installing

* addding data type to stdout/stderr messaging

* remove commented code

* revert accidental change

* addressing review feedback

* fix failed install with zero exit code

* fixing bug due to typo

* fixes for linux

* Misc fixes during mac testing

* PR fixes
2019-10-18 23:17:21 -07:00

265 lines
6.7 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as azdata from 'azdata';
import * as vscode from 'vscode';
export const NoteBookEnvironmentVariablePrefix = 'AZDATA_NB_VAR_';
export interface ResourceType {
name: string;
displayName: string;
description: string;
platforms: string[] | '*';
icon: { light: string; dark: string };
options: ResourceTypeOption[];
providers: DeploymentProvider[];
agreement?: AgreementInfo;
displayIndex?: number;
getProvider(selectedOptions: { option: string, value: string }[]): DeploymentProvider | undefined;
}
export interface AgreementInfo {
template: string;
links: azdata.LinkArea[];
}
export interface ResourceTypeOption {
name: string;
displayName: string;
values: ResourceTypeOptionValue[];
}
export interface ResourceTypeOptionValue {
name: string;
displayName: string;
}
export interface DialogDeploymentProvider extends DeploymentProviderBase {
dialog: DialogInfo;
}
export interface WizardDeploymentProvider extends DeploymentProviderBase {
wizard: WizardInfo;
}
export interface NotebookDeploymentProvider extends DeploymentProviderBase {
notebook: string | NotebookInfo;
}
export interface WebPageDeploymentProvider extends DeploymentProviderBase {
webPageUrl: string;
}
export interface DownloadDeploymentProvider extends DeploymentProviderBase {
downloadUrl: string;
}
export interface CommandDeploymentProvider extends DeploymentProviderBase {
command: string;
}
export function instanceOfDialogDeploymentProvider(obj: any): obj is DialogDeploymentProvider {
return obj && 'dialog' in obj;
}
export function instanceOfWizardDeploymentProvider(obj: any): obj is WizardDeploymentProvider {
return obj && 'wizard' in obj;
}
export function instanceOfNotebookDeploymentProvider(obj: any): obj is NotebookDeploymentProvider {
return obj && 'notebook' in obj;
}
export function instanceOfWebPageDeploymentProvider(obj: any): obj is WebPageDeploymentProvider {
return obj && 'webPageUrl' in obj;
}
export function instanceOfDownloadDeploymentProvider(obj: any): obj is DownloadDeploymentProvider {
return obj && 'downloadUrl' in obj;
}
export function instanceOfCommandDeploymentProvider(obj: any): obj is CommandDeploymentProvider {
return obj && 'command' in obj;
}
export interface DeploymentProviderBase {
requiredTools: ToolRequirementInfo[];
when: string;
}
export type DeploymentProvider = DialogDeploymentProvider | WizardDeploymentProvider | NotebookDeploymentProvider | WebPageDeploymentProvider | DownloadDeploymentProvider | CommandDeploymentProvider;
export interface WizardInfo {
notebook: string | NotebookInfo;
azdata_notebook: string | NotebookInfo;
type: BdcDeploymentType;
}
export interface NotebookBasedDialogInfo extends DialogInfoBase {
notebook: string | NotebookInfo;
}
export interface CommandBasedDialogInfo extends DialogInfoBase {
command: string;
}
export type DialogInfo = NotebookBasedDialogInfo | CommandBasedDialogInfo;
export function instanceOfNotebookBasedDialogInfo(obj: any): obj is NotebookBasedDialogInfo {
return obj && 'notebook' in obj;
}
export function instanceOfCommandBasedDialogInfo(obj: any): obj is CommandBasedDialogInfo {
return obj && 'command' in obj;
}
export interface DialogInfoBase {
title: string;
name: string;
tabs: DialogTabInfo[];
}
export interface DialogTabInfo {
title: string;
sections: SectionInfo[];
labelWidth?: string;
inputWidth?: string;
}
export interface SectionInfo {
title: string;
fields?: FieldInfo[]; // Use this if the dialog is not wide. All fields will be displayed in one column, label will be placed on top of the input component.
rows?: RowInfo[]; // Use this for wide dialog or wizard. label will be placed to the left of the input component.
labelWidth?: string;
inputWidth?: string;
labelPosition?: LabelPosition; // Default value is top
collapsible?: boolean;
collapsed?: boolean;
spaceBetweenFields?: string;
}
export interface RowInfo {
fields: FieldInfo[];
}
export interface FieldInfo {
label: string;
variableName?: string;
type: FieldType;
defaultValue?: string;
confirmationRequired?: boolean;
confirmationLabel?: string;
min?: number;
max?: number;
required?: boolean;
options?: string[] | azdata.CategoryValue[];
placeHolder?: string;
userName?: string; // needed for sql server's password complexity requirement check, password can not include the login name.
labelWidth?: string;
inputWidth?: string;
description?: string;
useCustomValidator?: boolean;
labelPosition?: LabelPosition; // overwrite the labelPosition of SectionInfo.
fontStyle?: FontStyle;
labelFontWeight?: FontWeight;
links?: azdata.LinkArea[];
editable?: boolean; // for editable dropdown
}
export const enum LabelPosition {
Top = 'top',
Left = 'left'
}
export const enum FontStyle {
Normal = 'normal',
Italic = 'italic'
}
export enum FontWeight {
Normal = 'normal',
Bold = 'bold'
}
export enum FieldType {
Text = 'text',
Number = 'number',
DateTimeText = 'datetime_text',
SQLPassword = 'sql_password',
Password = 'password',
Options = 'options',
ReadonlyText = 'readonly_text',
Checkbox = 'checkbox'
}
export interface NotebookInfo {
win32: string;
darwin: string;
linux: string;
}
export enum OsType {
win32 = 'win32',
darwin = 'darwin',
linux = 'linux',
others = 'others'
}
export interface ToolRequirementInfo {
name: string;
version: string;
}
export enum ToolType {
AzCli,
KubeCtl,
Docker,
Azdata
}
export const enum ToolStatus {
NotInstalled = 'NotInstalled',
Installed = 'Installed',
Installing = 'Installing',
Error = 'Error',
Failed = 'Failed'
}
export interface ITool {
isInstalling: any;
readonly name: string;
readonly displayName: string;
readonly description: string;
readonly type: ToolType;
readonly homePage: string;
readonly displayStatus: string;
readonly statusDescription: string | undefined;
readonly autoInstallSupported: boolean;
readonly autoInstallRequired: boolean;
readonly isNotInstalled: boolean;
readonly needsInstallation: boolean;
readonly outputChannelName: string;
readonly fullVersion: string | undefined;
readonly onDidUpdateData: vscode.Event<ITool>;
showOutputChannel(preserveFocus?: boolean): void;
loadInformation(): Promise<void>;
install(): Promise<void>;
}
export const enum BdcDeploymentType {
NewAKS = 'new-aks',
ExistingAKS = 'existing-aks',
ExistingKubeAdm = 'existing-kubeadm'
}
export interface Command {
command: string;
sudo?: boolean;
comment?: string;
workingDirectory?: string;
additionalEnvironmentVariables?: NodeJS.ProcessEnv;
ignoreError?: boolean;
}