AzureRmProfile CreateMultipleContextProfile() { var profile = new AzureRmProfile(); string contextName1; var context1 = (new AzureContext { Environment = AzureEnvironment.PublicEnvironments[EnvironmentName.AzureCloud] }) .WithAccount(new AzureAccount { Id = "*****@*****.**" }) .WithTenant(new AzureTenant { Id = Guid.NewGuid().ToString(), Directory = "contoso.com" }) .WithSubscription(new AzureSubscription { Id = Guid.NewGuid().ToString(), Name = "Contoso Subscription 1" }); profile.TryAddContext(context1, out contextName1); string contextName2; var context2 = (new AzureContext { Environment = AzureEnvironment.PublicEnvironments[EnvironmentName.AzureChinaCloud] }) .WithAccount(new AzureAccount { Id = "*****@*****.**" }) .WithTenant(new AzureTenant { Id = Guid.NewGuid().ToString(), Directory = "contoso.cn" }) .WithSubscription(new AzureSubscription { Id = Guid.NewGuid().ToString(), Name = "Contoso Subscription 2" }); profile.TryAddContext(context2, out contextName2); string contextName3; var context3 = (new AzureContext { Environment = AzureEnvironment.PublicEnvironments[EnvironmentName.AzureGermanCloud] }) .WithAccount(new AzureAccount { Id = "*****@*****.**" }) .WithTenant(new AzureTenant { Id = Guid.NewGuid().ToString(), Directory = "contoso.de" }) .WithSubscription(new AzureSubscription { Id = Guid.NewGuid().ToString(), Name = "Contoso Subscription 3" }); profile.TryAddContext(context3, out contextName3); profile.TrySetDefaultContext(context1); return(profile); }
public void CheckHidenServicePrincipalSecret() { var cmdlet = new GetAzureRMContextCommand(); // Setup cmdlet.CommandRuntime = commandRuntimeMock; var profile = new AzureRmProfile(); string subscriptionName = "Contoso Subscription 1"; string accountId = "7a5db92d-499a-46be-8d6e-6666eeee0000"; string contextName; var contextTemp = (new AzureContext { Environment = AzureEnvironment.PublicEnvironments[EnvironmentName.AzureCloud] }) .WithAccount(new AzureAccount { Id = accountId, Type = "ServicePrincipal" }) .WithTenant(new AzureTenant { Id = Guid.NewGuid().ToString(), Directory = "contoso.com" }) .WithSubscription(new AzureSubscription { Id = Guid.NewGuid().ToString(), Name = subscriptionName }); contextTemp.Account.SetProperty(AzureAccount.Property.ServicePrincipalSecret, "5P6******************"); contextTemp.Account.SetProperty(AzureAccount.Property.Subscriptions, contextTemp.Subscription.Id); contextTemp.Account.SetProperty(AzureAccount.Property.Tenants, contextTemp.Tenant.Id); profile.TryAddContext(contextTemp, out contextName); cmdlet.DefaultProfile = profile; // Act cmdlet.InvokeBeginProcessing(); cmdlet.ExecuteCmdlet(); cmdlet.InvokeEndProcessing(); // Verify Assert.True(commandRuntimeMock.OutputPipeline.Count == 1); var context = (PSAzureContext)commandRuntimeMock.OutputPipeline[0]; Assert.Equal(subscriptionName, context.Subscription.Name); Assert.Equal(accountId, context.Account.Id); var accountExtendedProperties = context.Account.ExtendedProperties; Assert.Equal(2, accountExtendedProperties.Count()); Assert.False(accountExtendedProperties.ContainsKey(AzureAccount.Property.ServicePrincipalSecret)); }
public void SetEnvironmentForMultipleContexts() { // Add new environment Mock <ICommandRuntime> commandRuntimeMock = new Mock <ICommandRuntime>(); SetupConfirmation(commandRuntimeMock); var cmdlet = new AddAzureRMEnvironmentCommand() { CommandRuntime = commandRuntimeMock.Object, Name = "Katal", ARMEndpoint = "https://management.azure.com/", AzureKeyVaultDnsSuffix = "vault.local.azurestack.external", AzureKeyVaultServiceEndpointResourceId = "https://vault.local.azurestack.external" }; var dict = new Dictionary <string, object> { { "ARMEndpoint", "https://management.azure.com/" }, { "AzureKeyVaultDnsSuffix", "vault.local.azurestack.external" }, { "AzureKeyVaultServiceEndpointResourceId", "https://vault.local.azurestack.external" } }; cmdlet.SetBoundParameters(dict); cmdlet.SetParameterSet("ARMEndpoint"); cmdlet.InvokeBeginProcessing(); cmdlet.ExecuteCmdlet(); cmdlet.InvokeEndProcessing(); var profileClient = new RMProfileClient(AzureRmProfileProvider.Instance.GetProfile <AzureRmProfile>()); IAzureEnvironment env = AzureRmProfileProvider.Instance.Profile.Environments.First((e) => string.Equals(e.Name, "KaTaL", StringComparison.OrdinalIgnoreCase)); Assert.Equal(env.Name, cmdlet.Name); Assert.Equal(env.GetEndpoint(AzureEnvironment.Endpoint.AzureKeyVaultDnsSuffix), dict["AzureKeyVaultDnsSuffix"]); Assert.Equal(env.GetEndpoint(AzureEnvironment.Endpoint.AzureKeyVaultServiceEndpointResourceId), dict["AzureKeyVaultServiceEndpointResourceId"]); // Create contexts using the new environment var profile = new AzureRmProfile(); string contextName1; var context1 = (new AzureContext { Environment = env }) .WithAccount(new AzureAccount { Id = "*****@*****.**" }) .WithTenant(new AzureTenant { Id = Guid.NewGuid().ToString(), Directory = "contoso.com" }) .WithSubscription(new AzureSubscription { Id = Guid.NewGuid().ToString(), Name = "Contoso Subscription 1" }); profile.TryAddContext(context1, out contextName1); string contextName2; var context2 = (new AzureContext { Environment = env }) .WithAccount(new AzureAccount { Id = "*****@*****.**" }) .WithTenant(new AzureTenant { Id = Guid.NewGuid().ToString(), Directory = "contoso.cn" }) .WithSubscription(new AzureSubscription { Id = Guid.NewGuid().ToString(), Name = "Contoso Subscription 2" }); profile.TryAddContext(context2, out contextName2); profile.TrySetDefaultContext(context1); AzureRmProfileProvider.Instance.Profile = profile; // Update the environment with new endpoints commandRuntimeMock = new Mock <ICommandRuntime>(); SetupConfirmation(commandRuntimeMock); var cmdlet2 = new AddAzureRMEnvironmentCommand() { CommandRuntime = commandRuntimeMock.Object, Name = "Katal", ARMEndpoint = "https://management.azure.com/", AzureKeyVaultDnsSuffix = "adminvault.local.azurestack.external", AzureKeyVaultServiceEndpointResourceId = "https://adminvault.local.azurestack.external" }; dict.Clear(); dict = new Dictionary <string, object> { { "ARMEndpoint", "https://management.azure.com/" }, { "AzureKeyVaultDnsSuffix", "adminvault.local.azurestack.external" }, { "AzureKeyVaultServiceEndpointResourceId", "https://adminvault.local.azurestack.external" } }; cmdlet2.SetBoundParameters(dict); cmdlet2.SetParameterSet("ARMEndpoint"); cmdlet2.InvokeBeginProcessing(); cmdlet2.ExecuteCmdlet(); cmdlet2.InvokeEndProcessing(); profileClient = new RMProfileClient(AzureRmProfileProvider.Instance.GetProfile <AzureRmProfile>()); env = AzureRmProfileProvider.Instance.Profile.Environments.First((e) => string.Equals(e.Name, "KaTaL", StringComparison.OrdinalIgnoreCase)); Assert.Equal(env.Name, cmdlet.Name); Assert.Equal(env.GetEndpoint(AzureEnvironment.Endpoint.AzureKeyVaultDnsSuffix), dict["AzureKeyVaultDnsSuffix"]); Assert.Equal(env.GetEndpoint(AzureEnvironment.Endpoint.AzureKeyVaultServiceEndpointResourceId), dict["AzureKeyVaultServiceEndpointResourceId"]); // Validate that the endpoints were updated in the contexts profile = (AzureRmProfile)AzureRmProfileProvider.Instance.Profile; Assert.NotNull(profile); Assert.NotNull(profile.Contexts); Assert.NotEmpty(profile.Contexts); foreach (var context in profile.Contexts.Values) { Assert.NotNull(context); Assert.NotNull(context.Environment); Assert.Equal(context.Environment.Name, env.Name); Assert.Equal(context.Environment.AzureKeyVaultDnsSuffix, env.AzureKeyVaultDnsSuffix); Assert.Equal(context.Environment.AzureKeyVaultServiceEndpointResourceId, env.AzureKeyVaultServiceEndpointResourceId); } }