1import { SelectableValue } from '@grafana/data'; 2 3export enum AzureCloud { 4 Public = 'AzureCloud', 5 China = 'AzureChinaCloud', 6 USGovernment = 'AzureUSGovernment', 7 Germany = 'AzureGermanCloud', 8 None = '', 9} 10 11export const KnownAzureClouds = [ 12 { value: AzureCloud.Public, label: 'Azure' }, 13 { value: AzureCloud.China, label: 'Azure China' }, 14 { value: AzureCloud.USGovernment, label: 'Azure US Government' }, 15 { value: AzureCloud.Germany, label: 'Azure Germany' }, 16] as SelectableValue[]; 17 18export type AzureAuthType = 'msi' | 'clientsecret'; 19 20export type ConcealedSecret = symbol; 21 22interface AzureCredentialsBase { 23 authType: AzureAuthType; 24 defaultSubscriptionId?: string; 25} 26 27export interface AzureManagedIdentityCredentials extends AzureCredentialsBase { 28 authType: 'msi'; 29} 30 31export interface AzureClientSecretCredentials extends AzureCredentialsBase { 32 authType: 'clientsecret'; 33 azureCloud?: string; 34 tenantId?: string; 35 clientId?: string; 36 clientSecret?: string | ConcealedSecret; 37} 38 39export type AzureCredentials = AzureManagedIdentityCredentials | AzureClientSecretCredentials; 40 41export function isCredentialsComplete(credentials: AzureCredentials): boolean { 42 switch (credentials.authType) { 43 case 'msi': 44 return true; 45 case 'clientsecret': 46 return !!(credentials.azureCloud && credentials.tenantId && credentials.clientId && credentials.clientSecret); 47 } 48} 49