public async Task ManipulateConfig() { var projectName = "node_test"; var projectSettings = new ProjectSettings(projectName, ProjectRuntimeName.NodeJS); using var workspace = await LocalWorkspace.CreateAsync(new LocalWorkspaceOptions { ProjectSettings = projectSettings, EnvironmentVariables = new Dictionary <string, string>() { ["PULUMI_CONFIG_PASSPHRASE"] = "test", } }); var stackName = $"int_test{GetTestSuffix()}"; var stack = await WorkspaceStack.CreateAsync(stackName, workspace); var config = new Dictionary <string, ConfigValue>() { ["plain"] = new ConfigValue("abc"), ["secret"] = new ConfigValue("def", isSecret: true), }; var plainKey = NormalizeConfigKey("plain", projectName); var secretKey = NormalizeConfigKey("secret", projectName); await Assert.ThrowsAsync <CommandException>( () => stack.GetConfigValueAsync(plainKey)); var values = await stack.GetConfigAsync(); Assert.Empty(values); await stack.SetConfigAsync(config); values = await stack.GetConfigAsync(); Assert.True(values.TryGetValue(plainKey, out var plainValue)); Assert.Equal("abc", plainValue !.Value); Assert.False(plainValue.IsSecret); Assert.True(values.TryGetValue(secretKey, out var secretValue)); Assert.Equal("def", secretValue !.Value); Assert.True(secretValue.IsSecret); await stack.RemoveConfigValueAsync("plain"); values = await stack.GetConfigAsync(); Assert.Single(values); await stack.SetConfigValueAsync("foo", new ConfigValue("bar")); values = await stack.GetConfigAsync(); Assert.Equal(2, values.Count); await workspace.RemoveStackAsync(stackName); }
public async Task ImportExportStack() { var workingDir = ResourcePath(Path.Combine("Data", "testproj")); var projectSettings = new ProjectSettings("testproj", ProjectRuntimeName.Go) { Description = "A minimal Go Pulumi program" }; using var workspace = await LocalWorkspace.CreateAsync(new LocalWorkspaceOptions { WorkDir = workingDir, ProjectSettings = projectSettings }); StackDeployment deployment; var stackName = $"{RandomStackName()}"; try { var stack = await WorkspaceStack.CreateAsync(stackName, workspace); var upResult = await stack.UpAsync(); Assert.Equal(UpdateKind.Update, upResult.Summary.Kind); Assert.Equal(UpdateState.Succeeded, upResult.Summary.Result); Assert.Equal(3, upResult.Outputs.Count); deployment = await workspace.ExportStackAsync(stackName); Assert.True(deployment.Version > 0); var previewBeforeDestroy = await stack.PreviewAsync(); Assert.Equal(1, previewBeforeDestroy.ChangeSummary[OperationType.Same]); await stack.DestroyAsync(); var previewAfterDestroy = await stack.PreviewAsync(); Assert.Equal(1, previewAfterDestroy.ChangeSummary[OperationType.Create]); await workspace.ImportStackAsync(stackName, deployment); // After we imported before-destroy deployment, // preview is back to reporting the before-destroy // state. var previewAfterImport = await stack.PreviewAsync(); Assert.Equal(1, previewAfterImport.ChangeSummary[OperationType.Same]); } finally { await workspace.RemoveStackAsync(stackName); } }
public async Task ListStackAndCurrentlySelected() { var projectSettings = new ProjectSettings( $"node_list_test{GetTestSuffix()}", ProjectRuntimeName.NodeJS); using var workspace = await LocalWorkspace.CreateAsync(new LocalWorkspaceOptions { ProjectSettings = projectSettings, EnvironmentVariables = new Dictionary <string, string?>() { ["PULUMI_CONFIG_PASSPHRASE"] = "test", } }); var stackNames = new List <string>(); try { for (var i = 0; i < 2; i++) { var stackName = GetStackName(); await WorkspaceStack.CreateAsync(stackName, workspace); stackNames.Add(stackName); var summary = await workspace.GetStackAsync(); Assert.NotNull(summary); Assert.True(summary !.IsCurrent); var stacks = await workspace.ListStacksAsync(); Assert.Equal(i + 1, stacks.Count); } } finally { foreach (var name in stackNames) { await workspace.RemoveStackAsync(name); } }