mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-13 17:22:15 -05:00
* save not yet tested work * Merge from master. * Screeens Shared for Feeedback * Code complete * remove unneeded changes * remove unnecessary comma * remov wss * remove dead code * PR feedback * checkpoint fixes * PR & minor fixes * minor fix for feature of resourceType options being optional. * reverting experimental change * separating out changes for future featurework. * revert unneeded change * review feedback fixes * review feedback * rename InputFieldComponent to InputComponent
185 lines
13 KiB
TypeScript
185 lines
13 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 { EOL } from 'os';
|
|
import { delimiter } from 'path';
|
|
import { BdcDeploymentType } from '../../interfaces';
|
|
import { BigDataClusterDeploymentProfile, DataResource, HdfsResource, SqlServerMasterResource } from '../../services/bigDataClusterDeploymentProfile';
|
|
import { KubeCtlToolName } from '../../services/tools/kubeCtlTool';
|
|
import { getRuntimeBinaryPathEnvironmentVariableName } from '../../utils';
|
|
import { Model } from '../model';
|
|
import * as VariableNames from './constants';
|
|
import { ToolsInstallPath } from './../../constants';
|
|
|
|
export class DeployClusterWizardModel extends Model {
|
|
constructor(public deploymentTarget: BdcDeploymentType) {
|
|
super();
|
|
}
|
|
public adAuthSupported: boolean = false;
|
|
|
|
public get authenticationMode(): string | undefined {
|
|
return this.getStringValue(VariableNames.AuthenticationMode_VariableName);
|
|
}
|
|
|
|
public set authenticationMode(value: string | undefined) {
|
|
this.setPropertyValue(VariableNames.AuthenticationMode_VariableName, value);
|
|
}
|
|
|
|
public getStorageSettingValue(propertyName: string, defaultValuePropertyName: string): string | undefined {
|
|
const value = this.getStringValue(propertyName);
|
|
return (value === undefined || value === '') ? this.getStringValue(defaultValuePropertyName) : value;
|
|
}
|
|
|
|
private setStorageSettingValue(propertyName: string, defaultValuePropertyName: string): void {
|
|
const value = this.getStringValue(propertyName);
|
|
if (value === undefined || value === '') {
|
|
this.setPropertyValue(propertyName, this.getStringValue(defaultValuePropertyName));
|
|
}
|
|
}
|
|
|
|
private setStorageSettingValues(): void {
|
|
this.setStorageSettingValue(VariableNames.DataPoolDataStorageClassName_VariableName, VariableNames.ControllerDataStorageClassName_VariableName);
|
|
this.setStorageSettingValue(VariableNames.DataPoolDataStorageSize_VariableName, VariableNames.ControllerDataStorageSize_VariableName);
|
|
this.setStorageSettingValue(VariableNames.DataPoolLogsStorageClassName_VariableName, VariableNames.ControllerLogsStorageClassName_VariableName);
|
|
this.setStorageSettingValue(VariableNames.DataPoolLogsStorageSize_VariableName, VariableNames.ControllerLogsStorageSize_VariableName);
|
|
|
|
this.setStorageSettingValue(VariableNames.HDFSDataStorageClassName_VariableName, VariableNames.ControllerDataStorageClassName_VariableName);
|
|
this.setStorageSettingValue(VariableNames.HDFSDataStorageSize_VariableName, VariableNames.ControllerDataStorageSize_VariableName);
|
|
this.setStorageSettingValue(VariableNames.HDFSLogsStorageClassName_VariableName, VariableNames.ControllerLogsStorageClassName_VariableName);
|
|
this.setStorageSettingValue(VariableNames.HDFSLogsStorageSize_VariableName, VariableNames.ControllerLogsStorageSize_VariableName);
|
|
|
|
this.setStorageSettingValue(VariableNames.SQLServerDataStorageClassName_VariableName, VariableNames.ControllerDataStorageClassName_VariableName);
|
|
this.setStorageSettingValue(VariableNames.SQLServerDataStorageSize_VariableName, VariableNames.ControllerDataStorageSize_VariableName);
|
|
this.setStorageSettingValue(VariableNames.SQLServerLogsStorageClassName_VariableName, VariableNames.ControllerLogsStorageClassName_VariableName);
|
|
this.setStorageSettingValue(VariableNames.SQLServerLogsStorageSize_VariableName, VariableNames.ControllerLogsStorageSize_VariableName);
|
|
}
|
|
|
|
public setEnvironmentVariables(): void {
|
|
this.setStorageSettingValues();
|
|
}
|
|
|
|
public selectedProfile: BigDataClusterDeploymentProfile | undefined;
|
|
|
|
public createTargetProfile(): BigDataClusterDeploymentProfile {
|
|
// create a copy of the source files to avoid changing the source profile values
|
|
const sourceBdcJson = Object.assign({}, this.selectedProfile!.bdcConfig);
|
|
const sourceControlJson = Object.assign({}, this.selectedProfile!.controlConfig);
|
|
const targetDeploymentProfile = new BigDataClusterDeploymentProfile('', sourceBdcJson, sourceControlJson);
|
|
// docker settings
|
|
targetDeploymentProfile.controlConfig.spec.docker = {
|
|
registry: this.getStringValue(VariableNames.DockerRegistry_VariableName),
|
|
repository: this.getStringValue(VariableNames.DockerRepository_VariableName),
|
|
imageTag: this.getStringValue(VariableNames.DockerImageTag_VariableName),
|
|
imagePullPolicy: 'Always'
|
|
};
|
|
// cluster name
|
|
targetDeploymentProfile.clusterName = this.getStringValue(VariableNames.ClusterName_VariableName)!;
|
|
// storage settings
|
|
targetDeploymentProfile.controllerDataStorageClass = this.getStringValue(VariableNames.ControllerDataStorageClassName_VariableName)!;
|
|
targetDeploymentProfile.controllerDataStorageSize = this.getIntegerValue(VariableNames.ControllerDataStorageSize_VariableName)!;
|
|
targetDeploymentProfile.controllerLogsStorageClass = this.getStringValue(VariableNames.ControllerLogsStorageClassName_VariableName)!;
|
|
targetDeploymentProfile.controllerLogsStorageSize = this.getIntegerValue(VariableNames.ControllerLogsStorageSize_VariableName)!;
|
|
targetDeploymentProfile.setResourceStorage(DataResource,
|
|
this.getStorageSettingValue(VariableNames.DataPoolDataStorageClassName_VariableName, VariableNames.ControllerDataStorageClassName_VariableName)!,
|
|
Number.parseInt(this.getStorageSettingValue(VariableNames.DataPoolDataStorageSize_VariableName, VariableNames.ControllerDataStorageSize_VariableName)!),
|
|
this.getStorageSettingValue(VariableNames.DataPoolLogsStorageClassName_VariableName, VariableNames.ControllerLogsStorageClassName_VariableName)!,
|
|
Number.parseInt(this.getStorageSettingValue(VariableNames.DataPoolLogsStorageSize_VariableName, VariableNames.ControllerLogsStorageSize_VariableName)!)
|
|
);
|
|
targetDeploymentProfile.setResourceStorage(SqlServerMasterResource,
|
|
this.getStorageSettingValue(VariableNames.SQLServerDataStorageClassName_VariableName, VariableNames.ControllerDataStorageClassName_VariableName)!,
|
|
Number.parseInt(this.getStorageSettingValue(VariableNames.SQLServerDataStorageSize_VariableName, VariableNames.ControllerDataStorageSize_VariableName)!),
|
|
this.getStorageSettingValue(VariableNames.SQLServerLogsStorageClassName_VariableName, VariableNames.ControllerLogsStorageClassName_VariableName)!,
|
|
Number.parseInt(this.getStorageSettingValue(VariableNames.SQLServerLogsStorageSize_VariableName, VariableNames.ControllerLogsStorageSize_VariableName)!)
|
|
);
|
|
targetDeploymentProfile.setResourceStorage(HdfsResource,
|
|
this.getStorageSettingValue(VariableNames.HDFSDataStorageClassName_VariableName, VariableNames.ControllerDataStorageClassName_VariableName)!,
|
|
Number.parseInt(this.getStorageSettingValue(VariableNames.HDFSDataStorageSize_VariableName, VariableNames.ControllerDataStorageSize_VariableName)!),
|
|
this.getStorageSettingValue(VariableNames.HDFSLogsStorageClassName_VariableName, VariableNames.ControllerLogsStorageClassName_VariableName)!,
|
|
Number.parseInt(this.getStorageSettingValue(VariableNames.HDFSLogsStorageSize_VariableName, VariableNames.ControllerLogsStorageSize_VariableName)!)
|
|
);
|
|
|
|
// scale settings
|
|
targetDeploymentProfile.dataReplicas = this.getIntegerValue(VariableNames.DataPoolScale_VariableName);
|
|
targetDeploymentProfile.computeReplicas = this.getIntegerValue(VariableNames.ComputePoolScale_VariableName);
|
|
targetDeploymentProfile.hdfsReplicas = this.getIntegerValue(VariableNames.HDFSPoolScale_VariableName);
|
|
targetDeploymentProfile.sqlServerReplicas = this.getIntegerValue(VariableNames.SQLServerScale_VariableName);
|
|
targetDeploymentProfile.hdfsNameNodeReplicas = this.getIntegerValue(VariableNames.HDFSNameNodeScale_VariableName);
|
|
targetDeploymentProfile.sparkHeadReplicas = this.getIntegerValue(VariableNames.SparkHeadScale_VariableName);
|
|
targetDeploymentProfile.zooKeeperReplicas = this.getIntegerValue(VariableNames.ZooKeeperScale_VariableName);
|
|
const sparkScale = this.getIntegerValue(VariableNames.SparkPoolScale_VariableName);
|
|
if (sparkScale > 0) {
|
|
targetDeploymentProfile.addSparkResource(sparkScale);
|
|
}
|
|
|
|
targetDeploymentProfile.includeSpark = this.getBooleanValue(VariableNames.IncludeSpark_VariableName);
|
|
|
|
// endpoint settings
|
|
targetDeploymentProfile.setGatewayEndpoint(this.getIntegerValue(VariableNames.GateWayPort_VariableName), this.getStringValue(VariableNames.GatewayDNSName_VariableName));
|
|
targetDeploymentProfile.setSqlServerEndpoint(this.getIntegerValue(VariableNames.SQLServerPort_VariableName), this.getStringValue(VariableNames.SQLServerDNSName_VariableName));
|
|
targetDeploymentProfile.setControllerEndpoint(this.getIntegerValue(VariableNames.ControllerPort_VariableName), this.getStringValue(VariableNames.ControllerDNSName_VariableName));
|
|
targetDeploymentProfile.setSqlServerReadableSecondaryEndpoint(this.getIntegerValue(VariableNames.ReadableSecondaryPort_VariableName), this.getStringValue(VariableNames.ReadableSecondaryDNSName_VariableName));
|
|
targetDeploymentProfile.setServiceProxyEndpoint(this.getIntegerValue(VariableNames.ServiceProxyPort_VariableName), this.getStringValue(VariableNames.ServiceProxyDNSName_VariableName));
|
|
targetDeploymentProfile.setAppServiceProxyEndpoint(this.getIntegerValue(VariableNames.AppServiceProxyPort_VariableName), this.getStringValue(VariableNames.AppServiceProxyDNSName_VariableName));
|
|
|
|
targetDeploymentProfile.setAuthenticationMode(this.authenticationMode!);
|
|
if (this.authenticationMode === AuthenticationMode.ActiveDirectory) {
|
|
targetDeploymentProfile.setActiveDirectorySettings({
|
|
organizationalUnit: this.getStringValue(VariableNames.OrganizationalUnitDistinguishedName_VariableName)!,
|
|
domainControllerFQDNs: this.getStringValue(VariableNames.DomainControllerFQDNs_VariableName)!,
|
|
domainDNSName: this.getStringValue(VariableNames.DomainDNSName_VariableName)!,
|
|
dnsIPAddresses: this.getStringValue(VariableNames.DomainDNSIPAddresses_VariableName)!,
|
|
clusterAdmins: this.getStringValue(VariableNames.ClusterAdmins_VariableName)!,
|
|
clusterUsers: this.getStringValue(VariableNames.ClusterUsers_VariableName)!,
|
|
appOwners: this.getStringValue(VariableNames.AppOwners_VariableName),
|
|
appReaders: this.getStringValue(VariableNames.AppReaders_VariableName)
|
|
});
|
|
}
|
|
return targetDeploymentProfile;
|
|
}
|
|
|
|
public getCodeCellContentForNotebook(): string[] {
|
|
const profile = this.createTargetProfile();
|
|
const statements: string[] = [];
|
|
if (this.deploymentTarget === BdcDeploymentType.NewAKS) {
|
|
statements.push(`azure_subscription_id = '${this.getStringValue(VariableNames.SubscriptionId_VariableName, '')}'`);
|
|
statements.push(`azure_region = '${this.getStringValue(VariableNames.Location_VariableName)}'`);
|
|
statements.push(`azure_resource_group = '${this.getStringValue(VariableNames.ResourceGroup_VariableName)}'`);
|
|
statements.push(`azure_vm_size = '${this.getStringValue(VariableNames.VMSize_VariableName)}'`);
|
|
statements.push(`azure_vm_count = '${this.getStringValue(VariableNames.VMCount_VariableName)}'`);
|
|
statements.push(`aks_cluster_name = '${this.getStringValue(VariableNames.AksName_VariableName)}'`);
|
|
} else if (this.deploymentTarget === BdcDeploymentType.ExistingAKS || this.deploymentTarget === BdcDeploymentType.ExistingKubeAdm) {
|
|
statements.push(`mssql_kube_config_path = '${this.escapeForNotebookCodeCell(this.getStringValue(VariableNames.KubeConfigPath_VariableName)!)}'`);
|
|
statements.push(`mssql_cluster_context = '${this.getStringValue(VariableNames.ClusterContext_VariableName)}'`);
|
|
statements.push('os.environ["KUBECONFIG"] = mssql_kube_config_path');
|
|
}
|
|
if (this.authenticationMode === AuthenticationMode.ActiveDirectory) {
|
|
statements.push(`mssql_domain_service_account_username = '${this.escapeForNotebookCodeCell(this.getStringValue(VariableNames.DomainServiceAccountUserName_VariableName)!)}'`);
|
|
}
|
|
statements.push(`mssql_cluster_name = '${this.getStringValue(VariableNames.ClusterName_VariableName)}'`);
|
|
statements.push(`mssql_username = '${this.getStringValue(VariableNames.AdminUserName_VariableName)}'`);
|
|
statements.push(`mssql_auth_mode = '${this.authenticationMode}'`);
|
|
statements.push(`bdc_json = '${profile.getBdcJson(false)}'`);
|
|
statements.push(`control_json = '${profile.getControlJson(false)}'`);
|
|
if (this.getStringValue(VariableNames.DockerUsername_VariableName) && this.getStringValue(VariableNames.DockerPassword_VariableName)) {
|
|
statements.push(`os.environ["DOCKER_USERNAME"] = '${this.getStringValue(VariableNames.DockerUsername_VariableName)}'`);
|
|
statements.push(`os.environ["DOCKER_PASSWORD"] = os.environ["${VariableNames.DockerPassword_VariableName}"]`);
|
|
}
|
|
const kubeCtlEnvVarName: string = getRuntimeBinaryPathEnvironmentVariableName(KubeCtlToolName);
|
|
statements.push(`os.environ["${kubeCtlEnvVarName}"] = "${this.escapeForNotebookCodeCell(process.env[kubeCtlEnvVarName]!)}"`);
|
|
statements.push(`os.environ["PATH"] = os.environ["PATH"] + "${delimiter}" + "${this.escapeForNotebookCodeCell(process.env[ToolsInstallPath]!)}"`);
|
|
statements.push(`print('Variables have been set successfully.')`);
|
|
return statements.map(line => line + EOL);
|
|
}
|
|
|
|
private escapeForNotebookCodeCell(original: string): string {
|
|
// Escape the \ character for the code cell string value
|
|
return original && original.replace(/\\/g, '\\\\');
|
|
}
|
|
}
|
|
|
|
export enum AuthenticationMode {
|
|
ActiveDirectory = 'ad',
|
|
Basic = 'basic'
|
|
}
|