예제 #1
0
        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);
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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);
                }
            }