Compare commits
4 commits
master
...
upstream-v
Author | SHA1 | Date | |
---|---|---|---|
ec9353d20e | |||
d5086c6a43 | |||
6d393ac929 | |||
1c3bbc0de8 |
11
CHANGELOG.md
11
CHANGELOG.md
|
@ -1,6 +1,17 @@
|
|||
CHANGELOG
|
||||
=========
|
||||
|
||||
## 2.24.1 (2021-04-01)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- [cli] Revert the swapping out of the YAML parser library
|
||||
[#6681](https://github.com/pulumi/pulumi/pull/6681)
|
||||
|
||||
- [automation/go,python,nodejs] Respect pre-existing Pulumi.yaml for inline programs.
|
||||
[#6655](https://github.com/pulumi/pulumi/pull/6655)
|
||||
|
||||
|
||||
## 2.24.0 (2021-03-31)
|
||||
|
||||
### Improvements
|
||||
|
|
|
@ -1,31 +1,7 @@
|
|||
### Breaking
|
||||
|
||||
|
||||
### Improvements
|
||||
|
||||
- [sdk/nodejs] Add provider side caching for dynamic provider deserialization
|
||||
[#6657](https://github.com/pulumi/pulumi/pull/6657)
|
||||
|
||||
- [automation/dotnet] Expose structured logging
|
||||
[#6572](https://github.com/pulumi/pulumi/pull/6572)
|
||||
|
||||
- [cli] Support full fidelity YAML round-tripping
|
||||
- Strip Byte-order Mark (BOM) from YAML configs during load. - [#6636](https://github.com/pulumi/pulumi/pull/6636)
|
||||
- Swap out YAML parser library - [#6642](https://github.com/pulumi/pulumi/pull/6642)
|
||||
|
||||
- [sdk/python] Ensure all async tasks are awaited prior to exit.
|
||||
[#6606](https://github.com/pulumi/pulumi/pull/6606)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- [sdk/nodejs] Fix error propagation in registerResource and other resource methods.
|
||||
[#6644](https://github.com/pulumi/pulumi/pull/6644)
|
||||
|
||||
- [automation/python] Fix passing of additional environment variables.
|
||||
[#6639](https://github.com/pulumi/pulumi/pull/6639)
|
||||
|
||||
- [sdk/python] Make exceptions raised by calls to provider functions (e.g. data sources) catchable.
|
||||
[#6504](https://github.com/pulumi/pulumi/pull/6504)
|
||||
- [cli] Revert the swapping out of the YAML parser library
|
||||
[#6681](https://github.com/pulumi/pulumi/pull/6681)
|
||||
|
||||
- [automation/go,python,nodejs] Respect pre-existing Pulumi.yaml for inline programs.
|
||||
[#6655](https://github.com/pulumi/pulumi/pull/6655)
|
||||
|
|
|
@ -33,14 +33,14 @@ require (
|
|||
github.com/opentracing/opentracing-go v1.1.0
|
||||
github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/pulumi/pulumi/sdk/v2 v2.24.0
|
||||
github.com/pulumi/pulumi/sdk/v2 v2.24.1
|
||||
github.com/rjeczalik/notify v0.9.2
|
||||
github.com/sergi/go-diff v1.1.0
|
||||
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 // indirect
|
||||
github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546 // indirect
|
||||
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
|
||||
github.com/spf13/cobra v1.0.0
|
||||
github.com/stretchr/testify v1.7.0
|
||||
github.com/stretchr/testify v1.6.1
|
||||
github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7
|
||||
github.com/xeipuuv/gojsonschema v1.2.0
|
||||
github.com/zclconf/go-cty v1.3.1
|
||||
|
|
11
pkg/go.sum
11
pkg/go.sum
|
@ -216,8 +216,6 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
|
|||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||
github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s=
|
||||
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
|
||||
github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg=
|
||||
github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
|
||||
github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
|
||||
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
|
||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
|
||||
|
@ -263,8 +261,6 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87
|
|||
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
|
||||
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
|
||||
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
|
||||
github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
|
||||
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
|
||||
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
||||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
|
||||
|
@ -498,8 +494,6 @@ github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc
|
|||
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||
github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE=
|
||||
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
|
||||
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI=
|
||||
github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E=
|
||||
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||
|
@ -589,8 +583,6 @@ github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084 h1:sofwID9zm4tzr
|
|||
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA=
|
||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||
github.com/pulumi/go-yaml v1.8.10-0.20210311214047-95da20da6e94 h1:Htsu46DUlRauQVuY0qXQWwGMkuGvc9PReS60kNYPuzE=
|
||||
github.com/pulumi/go-yaml v1.8.10-0.20210311214047-95da20da6e94/go.mod h1:gY5v736YyqzhcB0WcDSX4ePCUM90DU88xiH4gQ/ZcXo=
|
||||
github.com/pulumi/pulumi/sdk/v2 v2.23.0 h1:uyTvI6axYV3feeMbcWLnNtHZQsbkx98OoY5Jpq7acSM=
|
||||
github.com/pulumi/pulumi/sdk/v2 v2.23.0/go.mod h1:sHQdzD0/cIopR5uLeoikXi1pNBv5SwA4M617VqdIA3E=
|
||||
github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8=
|
||||
|
@ -652,9 +644,8 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
|
|||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6 h1:9VTskZOIRf2vKF3UL8TuWElry5pgUpV1tFSe/e/0m/E=
|
||||
github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g=
|
||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ=
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
description: This is a description
|
||||
name: correct_project
|
||||
runtime: dotnet
|
|
@ -6,8 +6,10 @@ using System.Collections.Generic;
|
|||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Pulumi.Automation.Exceptions;
|
||||
using Pulumi.Automation.Commands.Exceptions;
|
||||
using Pulumi.Automation.Events;
|
||||
using Xunit;
|
||||
|
@ -16,9 +18,6 @@ namespace Pulumi.Automation.Tests
|
|||
{
|
||||
public class LocalWorkspaceTests
|
||||
{
|
||||
private static readonly string _dataDirectory =
|
||||
Path.Combine(new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName, "Data");
|
||||
|
||||
private static readonly string _pulumiOrg = GetTestOrg();
|
||||
|
||||
private static string GetTestSuffix()
|
||||
|
@ -55,7 +54,7 @@ namespace Pulumi.Automation.Tests
|
|||
[InlineData("json")]
|
||||
public async Task GetProjectSettings(string extension)
|
||||
{
|
||||
var workingDir = Path.Combine(_dataDirectory, extension);
|
||||
var workingDir = ResourcePath(Path.Combine("Data", extension));
|
||||
using var workspace = await LocalWorkspace.CreateAsync(new LocalWorkspaceOptions
|
||||
{
|
||||
WorkDir = workingDir,
|
||||
|
@ -74,7 +73,7 @@ namespace Pulumi.Automation.Tests
|
|||
[InlineData("json")]
|
||||
public async Task GetStackSettings(string extension)
|
||||
{
|
||||
var workingDir = Path.Combine(_dataDirectory, extension);
|
||||
var workingDir = ResourcePath(Path.Combine("Data", extension));
|
||||
using var workspace = await LocalWorkspace.CreateAsync(new LocalWorkspaceOptions
|
||||
{
|
||||
WorkDir = workingDir,
|
||||
|
@ -283,7 +282,7 @@ namespace Pulumi.Automation.Tests
|
|||
public async Task StackLifecycleLocalProgram()
|
||||
{
|
||||
var stackName = $"{RandomStackName()}";
|
||||
var workingDir = Path.Combine(_dataDirectory, "testproj");
|
||||
var workingDir = ResourcePath(Path.Combine("Data", "testproj"));
|
||||
using var stack = await LocalWorkspace.CreateStackAsync(new LocalProgramArgs(stackName, workingDir)
|
||||
{
|
||||
EnvironmentVariables = new Dictionary<string, string>()
|
||||
|
@ -622,7 +621,7 @@ namespace Pulumi.Automation.Tests
|
|||
}
|
||||
|
||||
static async Task<T> RunCommand<T, TOptions>(Func<TOptions, CancellationToken, Task<T>> func, string command)
|
||||
where TOptions: UpdateOptions, new()
|
||||
where TOptions : UpdateOptions, new()
|
||||
{
|
||||
var events = new List<EngineEvent>();
|
||||
|
||||
|
@ -908,7 +907,7 @@ namespace Pulumi.Automation.Tests
|
|||
Assert.True(expSecretValue.IsSecret);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public async Task PulumiVersionTest()
|
||||
{
|
||||
|
@ -939,5 +938,55 @@ namespace Pulumi.Automation.Tests
|
|||
LocalWorkspace.ValidatePulumiVersion(testMinVersion, currentVersion);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task RespectsProjectSettingsTest()
|
||||
{
|
||||
var program = PulumiFn.Create<ValidStack>();
|
||||
|
||||
var stackName = $"{RandomStackName()}";
|
||||
var projectName = "project_was_overwritten";
|
||||
|
||||
var workdir = ResourcePath(Path.Combine("Data", "correct_project"));
|
||||
|
||||
var stack = await LocalWorkspace.CreateStackAsync(
|
||||
new InlineProgramArgs(projectName, stackName, program)
|
||||
{
|
||||
WorkDir = workdir
|
||||
});
|
||||
|
||||
var settings = await stack.Workspace.GetProjectSettingsAsync();
|
||||
Assert.Equal("correct_project", settings!.Name);
|
||||
Assert.Equal("This is a description", settings.Description);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DetectsProjectSettingConflictTest()
|
||||
{
|
||||
var program = PulumiFn.Create<ValidStack>();
|
||||
|
||||
var stackName = $"{RandomStackName()}";
|
||||
var projectName = "project_was_overwritten";
|
||||
|
||||
var workdir = ResourcePath(Path.Combine("Data", "correct_project"));
|
||||
|
||||
var projectSettings = ProjectSettings.Default(projectName);
|
||||
projectSettings.Description = "non-standard description";
|
||||
|
||||
await Assert.ThrowsAsync<ProjectSettingsConflictException>(() =>
|
||||
LocalWorkspace.CreateStackAsync(
|
||||
new InlineProgramArgs(projectName, stackName, program)
|
||||
{
|
||||
WorkDir = workdir,
|
||||
ProjectSettings = projectSettings
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
private string ResourcePath(string path, [CallerFilePath] string pathBase = "LocalWorkspaceTests.cs")
|
||||
{
|
||||
var dir = Path.GetDirectoryName(pathBase) ?? ".";
|
||||
return Path.Combine(dir, path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
// Copyright 2016-2019, Pulumi Corporation
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Pulumi.Automation.Collections
|
||||
{
|
||||
/// Compares two dictionaries for equality by content, as F# maps would.
|
||||
internal sealed class DictionaryContentsComparer<K, V> : IEqualityComparer<IDictionary<K, V>> where K : notnull
|
||||
{
|
||||
private readonly IEqualityComparer<K> _keyComparer;
|
||||
private readonly IEqualityComparer<V> _valueComparer;
|
||||
|
||||
public DictionaryContentsComparer(IEqualityComparer<K> keyComparer, IEqualityComparer<V> valueComparer)
|
||||
{
|
||||
this._keyComparer = keyComparer;
|
||||
this._valueComparer = valueComparer;
|
||||
}
|
||||
|
||||
bool IEqualityComparer<IDictionary<K, V>>.Equals(IDictionary<K, V>? x, IDictionary<K, V>? y)
|
||||
{
|
||||
if (x == null)
|
||||
{
|
||||
return y == null;
|
||||
}
|
||||
if (y == null)
|
||||
{
|
||||
return x == null;
|
||||
}
|
||||
if (ReferenceEquals(x, y))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (x.Count != y.Count)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
var y2 = new Dictionary<K, V>(y, this._keyComparer);
|
||||
foreach (var pair in x)
|
||||
{
|
||||
if (!y2.ContainsKey(pair.Key))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!this._valueComparer.Equals(pair.Value, y2[pair.Key]))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
int IEqualityComparer<IDictionary<K, V>>.GetHashCode(IDictionary<K, V> obj)
|
||||
{
|
||||
return 0; // inefficient but correct
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
// Copyright 2016-2021, Pulumi Corporation
|
||||
|
||||
using System;
|
||||
|
||||
namespace Pulumi.Automation.Exceptions
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// Thrown when creating a Workspace detects a conflict between
|
||||
/// project settings found on disk (such as Pulumi.yaml) and a
|
||||
/// ProjectSettings object passed to the Create API.
|
||||
///
|
||||
/// There are two resolutions:
|
||||
///
|
||||
/// (A) to use the ProjectSettings, delete the Pulumi.yaml file
|
||||
/// from WorkDir or use a different WorkDir
|
||||
///
|
||||
/// (B) to use the exiting Pulumi.yaml from WorkDir, avoid
|
||||
/// customizing the ProjectSettings
|
||||
///
|
||||
/// </summary>
|
||||
public class ProjectSettingsConflictException : Exception
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// FullPath of the Pulumi.yaml (or Pulumi.yml, Pulumi.json)
|
||||
/// settings file found on disk.
|
||||
///
|
||||
/// </summary>
|
||||
public string SettingsFileLocation { get; }
|
||||
|
||||
internal ProjectSettingsConflictException(string settingsFileLocation)
|
||||
: base($"Custom {nameof(ProjectSettings)} passed in code conflict with settings found on disk: {settingsFileLocation}")
|
||||
{
|
||||
SettingsFileLocation = settingsFileLocation;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -328,9 +328,10 @@ namespace Pulumi.Automation
|
|||
|
||||
readyTasks.Add(this.PopulatePulumiVersionAsync(cancellationToken));
|
||||
|
||||
// these are after working dir is set because they start immediately
|
||||
if (options?.ProjectSettings != null)
|
||||
readyTasks.Add(this.SaveProjectSettingsAsync(options.ProjectSettings, cancellationToken));
|
||||
{
|
||||
readyTasks.Add(this.InitializeProjectSettingsAsync(options.ProjectSettings, cancellationToken));
|
||||
}
|
||||
|
||||
if (options?.StackSettings != null && options.StackSettings.Any())
|
||||
{
|
||||
|
@ -341,6 +342,26 @@ namespace Pulumi.Automation
|
|||
this._readyTask = Task.WhenAll(readyTasks);
|
||||
}
|
||||
|
||||
private async Task InitializeProjectSettingsAsync(ProjectSettings projectSettings,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
// If given project settings, we want to write them out to
|
||||
// the working dir. We do not want to override existing
|
||||
// settings with default settings though.
|
||||
|
||||
var existingSettings = await this.GetProjectSettingsAsync(cancellationToken);
|
||||
if (existingSettings == null)
|
||||
{
|
||||
await this.SaveProjectSettingsAsync(projectSettings, cancellationToken);
|
||||
}
|
||||
else if (!projectSettings.IsDefault &&
|
||||
!ProjectSettings.Comparer.Equals(projectSettings, existingSettings))
|
||||
{
|
||||
var path = this.FindSettingsFile();
|
||||
throw new Exceptions.ProjectSettingsConflictException(path);
|
||||
}
|
||||
}
|
||||
|
||||
private static readonly string[] SettingsExtensions = new string[] { ".yaml", ".yml", ".json" };
|
||||
|
||||
private async Task PopulatePulumiVersionAsync(CancellationToken cancellationToken)
|
||||
|
@ -358,10 +379,12 @@ namespace Pulumi.Automation
|
|||
|
||||
internal static void ValidatePulumiVersion(SemVersion minVersion, SemVersion currentVersion)
|
||||
{
|
||||
if (minVersion.Major < currentVersion.Major) {
|
||||
if (minVersion.Major < currentVersion.Major)
|
||||
{
|
||||
throw new InvalidOperationException($"Major version mismatch. You are using Pulumi CLI version {currentVersion} with Automation SDK v{minVersion.Major}. Please update the SDK.");
|
||||
}
|
||||
if (minVersion > currentVersion) {
|
||||
if (minVersion > currentVersion)
|
||||
{
|
||||
throw new InvalidOperationException($"Minimum version requirement failed. The minimum CLI version requirement is {minVersion}, your current CLI version is {currentVersion}. Please update the Pulumi CLI.");
|
||||
}
|
||||
}
|
||||
|
@ -369,41 +392,46 @@ namespace Pulumi.Automation
|
|||
/// <inheritdoc/>
|
||||
public override async Task<ProjectSettings?> GetProjectSettingsAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
foreach (var ext in SettingsExtensions)
|
||||
var path = this.FindSettingsFile();
|
||||
var isJson = Path.GetExtension(path) == ".json";
|
||||
if (!File.Exists(path))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var content = await File.ReadAllTextAsync(path, cancellationToken).ConfigureAwait(false);
|
||||
if (isJson)
|
||||
{
|
||||
return this._serializer.DeserializeJson<ProjectSettings>(content);
|
||||
}
|
||||
else
|
||||
{
|
||||
var isJson = ext == ".json";
|
||||
var path = Path.Combine(this.WorkDir, $"Pulumi{ext}");
|
||||
if (!File.Exists(path))
|
||||
continue;
|
||||
|
||||
var content = await File.ReadAllTextAsync(path, cancellationToken).ConfigureAwait(false);
|
||||
if (isJson)
|
||||
return this._serializer.DeserializeJson<ProjectSettings>(content);
|
||||
|
||||
var model = this._serializer.DeserializeYaml<ProjectSettingsModel>(content);
|
||||
return model.Convert();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override Task SaveProjectSettingsAsync(ProjectSettings settings, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var foundExt = ".yaml";
|
||||
var path = this.FindSettingsFile();
|
||||
var ext = Path.GetExtension(path);
|
||||
var content = ext == ".json" ? this._serializer.SerializeJson(settings) : this._serializer.SerializeYaml(settings);
|
||||
return File.WriteAllTextAsync(path, content, cancellationToken);
|
||||
}
|
||||
|
||||
private string FindSettingsFile()
|
||||
{
|
||||
foreach (var ext in SettingsExtensions)
|
||||
{
|
||||
var testPath = Path.Combine(this.WorkDir, $"Pulumi{ext}");
|
||||
if (File.Exists(testPath))
|
||||
{
|
||||
foundExt = ext;
|
||||
break;
|
||||
return testPath;
|
||||
}
|
||||
}
|
||||
|
||||
var path = Path.Combine(this.WorkDir, $"Pulumi{foundExt}");
|
||||
var content = foundExt == ".json" ? this._serializer.SerializeJson(settings) : this._serializer.SerializeYaml(settings);
|
||||
return File.WriteAllTextAsync(path, content, cancellationToken);
|
||||
var defaultPath = Path.Combine(this.WorkDir, "Pulumi.yaml");
|
||||
return defaultPath;
|
||||
}
|
||||
|
||||
private static string GetStackSettingsName(string stackName)
|
||||
|
@ -498,8 +526,8 @@ namespace Pulumi.Automation
|
|||
/// <inheritdoc/>
|
||||
public override async Task SetConfigAsync(string stackName, IDictionary<string, ConfigValue> configMap, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var args = new List<string>{"config", "set-all", "--stack", stackName};
|
||||
foreach (var (key, value) in configMap)
|
||||
var args = new List<string> { "config", "set-all", "--stack", stackName };
|
||||
foreach (var (key, value) in configMap)
|
||||
{
|
||||
var secretArg = value.IsSecret ? "--secret" : "--plaintext";
|
||||
args.Add(secretArg);
|
||||
|
@ -524,7 +552,7 @@ namespace Pulumi.Automation
|
|||
/// <inheritdoc/>
|
||||
public override async Task RemoveConfigAsync(string stackName, IEnumerable<string> keys, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var args = new List<string>{"config", "rm-all", "--stack", stackName};
|
||||
var args = new List<string> { "config", "rm-all", "--stack", stackName };
|
||||
args.AddRange(keys);
|
||||
await this.RunCommandAsync(args, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
@ -574,7 +602,7 @@ namespace Pulumi.Automation
|
|||
var result = await this.RunCommandAsync(new[] { "stack", "ls", "--json" }, cancellationToken).ConfigureAwait(false);
|
||||
if (string.IsNullOrWhiteSpace(result.StandardOutput))
|
||||
return ImmutableList<StackSummary>.Empty;
|
||||
|
||||
|
||||
var stacks = this._serializer.DeserializeJson<List<StackSummary>>(result.StandardOutput);
|
||||
return stacks.ToImmutableList();
|
||||
}
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
// Copyright 2016-2021, Pulumi Corporation
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Pulumi.Automation
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -7,6 +10,36 @@ namespace Pulumi.Automation
|
|||
/// </summary>
|
||||
public class ProjectBackend
|
||||
{
|
||||
internal static IEqualityComparer<ProjectBackend> Comparer { get; } = new ProjectBackendComparer();
|
||||
|
||||
public string? Url { get; set; }
|
||||
|
||||
private sealed class ProjectBackendComparer : IEqualityComparer<ProjectBackend>
|
||||
{
|
||||
bool IEqualityComparer<ProjectBackend>.Equals(ProjectBackend? x, ProjectBackend? y)
|
||||
{
|
||||
if (x == null)
|
||||
{
|
||||
return y == null;
|
||||
}
|
||||
|
||||
if (y == null)
|
||||
{
|
||||
return x == null;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(x, y))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return x.Url == y.Url;
|
||||
}
|
||||
|
||||
int IEqualityComparer<ProjectBackend>.GetHashCode(ProjectBackend obj)
|
||||
{
|
||||
return HashCode.Combine(obj.Url);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
// Copyright 2016-2021, Pulumi Corporation
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Pulumi.Automation
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -7,6 +10,8 @@ namespace Pulumi.Automation
|
|||
/// </summary>
|
||||
public class ProjectRuntime
|
||||
{
|
||||
internal static IEqualityComparer<ProjectRuntime> Comparer { get; } = new ProjectRuntimeComparer();
|
||||
|
||||
public ProjectRuntimeName Name { get; set; }
|
||||
|
||||
public ProjectRuntimeOptions? Options { get; set; }
|
||||
|
@ -15,5 +20,36 @@ namespace Pulumi.Automation
|
|||
{
|
||||
this.Name = name;
|
||||
}
|
||||
|
||||
private sealed class ProjectRuntimeComparer : IEqualityComparer<ProjectRuntime>
|
||||
{
|
||||
bool IEqualityComparer<ProjectRuntime>.Equals(ProjectRuntime? x, ProjectRuntime? y)
|
||||
{
|
||||
if (x == null)
|
||||
{
|
||||
return y == null;
|
||||
}
|
||||
|
||||
if (y == null)
|
||||
{
|
||||
return x == null;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(x, y))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return x.Name == y.Name && ProjectRuntimeOptions.Comparer.Equals(x.Options, y.Options);
|
||||
}
|
||||
|
||||
int IEqualityComparer<ProjectRuntime>.GetHashCode(ProjectRuntime obj)
|
||||
{
|
||||
return HashCode.Combine(
|
||||
obj.Name,
|
||||
obj.Options != null ? ProjectRuntimeOptions.Comparer.GetHashCode(obj.Options) : 0
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
// Copyright 2016-2021, Pulumi Corporation
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Pulumi.Automation
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -7,6 +10,8 @@ namespace Pulumi.Automation
|
|||
/// </summary>
|
||||
public class ProjectRuntimeOptions
|
||||
{
|
||||
internal static IEqualityComparer<ProjectRuntimeOptions> Comparer { get; } = new ProjectRuntimeOptionsComparer();
|
||||
|
||||
/// <summary>
|
||||
/// Applies to NodeJS projects only.
|
||||
/// <para/>
|
||||
|
@ -29,5 +34,33 @@ namespace Pulumi.Automation
|
|||
/// A string that specifies the path to a virtual environment to use when running the program.
|
||||
/// </summary>
|
||||
public string? VirtualEnv { get; set; }
|
||||
|
||||
private sealed class ProjectRuntimeOptionsComparer : IEqualityComparer<ProjectRuntimeOptions>
|
||||
{
|
||||
bool IEqualityComparer<ProjectRuntimeOptions>.Equals(ProjectRuntimeOptions? x, ProjectRuntimeOptions? y)
|
||||
{
|
||||
if (x == null)
|
||||
{
|
||||
return y == null;
|
||||
}
|
||||
|
||||
if (y == null)
|
||||
{
|
||||
return x == null;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(x, y))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return x.TypeScript == y.TypeScript && x.Binary == y.Binary && x.VirtualEnv == y.VirtualEnv;
|
||||
}
|
||||
|
||||
int IEqualityComparer<ProjectRuntimeOptions>.GetHashCode(ProjectRuntimeOptions obj)
|
||||
{
|
||||
return HashCode.Combine(obj.TypeScript, obj.Binary, obj.VirtualEnv);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
// Copyright 2016-2021, Pulumi Corporation
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Pulumi.Automation
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -7,6 +10,8 @@ namespace Pulumi.Automation
|
|||
/// </summary>
|
||||
public class ProjectSettings
|
||||
{
|
||||
internal static IEqualityComparer<ProjectSettings> Comparer { get; } = new ProjectSettingsComparer();
|
||||
|
||||
public string Name { get; set; }
|
||||
|
||||
public ProjectRuntime Runtime { get; set; }
|
||||
|
@ -44,5 +49,60 @@ namespace Pulumi.Automation
|
|||
|
||||
internal static ProjectSettings Default(string name)
|
||||
=> new ProjectSettings(name, new ProjectRuntime(ProjectRuntimeName.NodeJS));
|
||||
|
||||
internal bool IsDefault
|
||||
{
|
||||
get
|
||||
{
|
||||
return ProjectSettings.Comparer.Equals(this, ProjectSettings.Default(this.Name));
|
||||
}
|
||||
}
|
||||
|
||||
private sealed class ProjectSettingsComparer : IEqualityComparer<ProjectSettings>
|
||||
{
|
||||
bool IEqualityComparer<ProjectSettings>.Equals(ProjectSettings? x, ProjectSettings? y)
|
||||
{
|
||||
if (x == null)
|
||||
{
|
||||
return y == null;
|
||||
}
|
||||
|
||||
if (y == null)
|
||||
{
|
||||
return x == null;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(x, y))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return x.Name == y.Name &&
|
||||
ProjectRuntime.Comparer.Equals(x.Runtime, y.Runtime) &&
|
||||
x.Main == y.Main &&
|
||||
x.Description == y.Description &&
|
||||
x.Author == y.Author &&
|
||||
x.Website == y.Website &&
|
||||
x.License == y.License &&
|
||||
x.Config == y.Config &&
|
||||
ProjectTemplate.Comparer.Equals(x.Template, y.Template) &&
|
||||
ProjectBackend.Comparer.Equals(x.Backend, y.Backend);
|
||||
}
|
||||
|
||||
int IEqualityComparer<ProjectSettings>.GetHashCode(ProjectSettings obj)
|
||||
{
|
||||
// fields with custom Comparer skipped for efficiency
|
||||
return HashCode.Combine(
|
||||
obj.Name,
|
||||
obj.Main,
|
||||
obj.Description,
|
||||
obj.Author,
|
||||
obj.Website,
|
||||
obj.License,
|
||||
obj.Config,
|
||||
obj.Backend
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
// Copyright 2016-2021, Pulumi Corporation
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Pulumi.Automation.Collections;
|
||||
|
||||
namespace Pulumi.Automation
|
||||
{
|
||||
|
@ -9,6 +11,8 @@ namespace Pulumi.Automation
|
|||
/// </summary>
|
||||
public class ProjectTemplate
|
||||
{
|
||||
internal static IEqualityComparer<ProjectTemplate> Comparer { get; } = new ProjectTemplateComparer();
|
||||
|
||||
public string? Description { get; set; }
|
||||
|
||||
public string? QuickStart { get; set; }
|
||||
|
@ -16,5 +20,43 @@ namespace Pulumi.Automation
|
|||
public IDictionary<string, ProjectTemplateConfigValue>? Config { get; set; }
|
||||
|
||||
public bool? Important { get; set; }
|
||||
|
||||
private sealed class ProjectTemplateComparer : IEqualityComparer<ProjectTemplate>
|
||||
{
|
||||
|
||||
private IEqualityComparer<IDictionary<string, ProjectTemplateConfigValue>> _configComparer =
|
||||
new DictionaryContentsComparer<string, ProjectTemplateConfigValue>(
|
||||
EqualityComparer<string>.Default,
|
||||
ProjectTemplateConfigValue.Comparer);
|
||||
|
||||
bool IEqualityComparer<ProjectTemplate>.Equals(ProjectTemplate? x, ProjectTemplate? y)
|
||||
{
|
||||
if (x == null)
|
||||
{
|
||||
return y == null;
|
||||
}
|
||||
|
||||
if (y == null)
|
||||
{
|
||||
return x == null;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(x, y))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return x.Description == y.Description
|
||||
&& x.QuickStart == y.QuickStart
|
||||
&& x.Important == y.Important
|
||||
&& _configComparer.Equals(x.Config, y.Config);
|
||||
}
|
||||
|
||||
int IEqualityComparer<ProjectTemplate>.GetHashCode(ProjectTemplate obj)
|
||||
{
|
||||
// omit hashing Config dict for efficiency
|
||||
return HashCode.Combine(obj.Description, obj.QuickStart, obj.Important);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
// Copyright 2016-2021, Pulumi Corporation
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Pulumi.Automation
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -7,10 +10,40 @@ namespace Pulumi.Automation
|
|||
/// </summary>
|
||||
public class ProjectTemplateConfigValue
|
||||
{
|
||||
internal static IEqualityComparer<ProjectTemplateConfigValue> Comparer { get; } = new ProjectTemplateConfigValueComparer();
|
||||
|
||||
public string? Description { get; set; }
|
||||
|
||||
public string? Default { get; set; }
|
||||
|
||||
public bool? Secret { get; set; }
|
||||
|
||||
private sealed class ProjectTemplateConfigValueComparer : IEqualityComparer<ProjectTemplateConfigValue>
|
||||
{
|
||||
bool IEqualityComparer<ProjectTemplateConfigValue>.Equals(ProjectTemplateConfigValue? x, ProjectTemplateConfigValue? y)
|
||||
{
|
||||
if (x == null)
|
||||
{
|
||||
return y == null;
|
||||
}
|
||||
|
||||
if (y == null)
|
||||
{
|
||||
return x == null;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(x, y))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return x.Description == y.Description && x.Default == y.Default && x.Secret == y.Secret;
|
||||
}
|
||||
|
||||
int IEqualityComparer<ProjectTemplateConfigValue>.GetHashCode(ProjectTemplateConfigValue obj)
|
||||
{
|
||||
return HashCode.Combine(obj.Description, obj.Default, obj.Secret);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -429,3 +429,5 @@ static Pulumi.Automation.WorkspaceStack.CreateOrSelectAsync(string name, Pulumi.
|
|||
static Pulumi.Automation.WorkspaceStack.SelectAsync(string name, Pulumi.Automation.Workspace workspace, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<Pulumi.Automation.WorkspaceStack>
|
||||
virtual Pulumi.Automation.Workspace.Dispose() -> void
|
||||
virtual Pulumi.Automation.Workspace.GetStackAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<Pulumi.Automation.StackSummary>
|
||||
Pulumi.Automation.Exceptions.ProjectSettingsConflictException
|
||||
Pulumi.Automation.Exceptions.ProjectSettingsConflictException.SettingsFileLocation.get -> string
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
<name>Pulumi.Automation</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Pulumi.Automation.Collections.DictionaryContentsComparer`2">
|
||||
Compares two dictionaries for equality by content, as F# maps would.
|
||||
</member>
|
||||
<member name="T:Pulumi.Automation.DestroyOptions">
|
||||
<summary>
|
||||
Options controlling the behavior of an <see cref="M:Pulumi.Automation.WorkspaceStack.DestroyAsync(Pulumi.Automation.DestroyOptions,System.Threading.CancellationToken)"/> operation.
|
||||
|
@ -274,6 +277,31 @@
|
|||
PolicyPacks run during update. Maps PolicyPackName -> version.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Pulumi.Automation.Exceptions.ProjectSettingsConflictException">
|
||||
<summary>
|
||||
|
||||
Thrown when creating a Workspace detects a conflict between
|
||||
project settings found on disk (such as Pulumi.yaml) and a
|
||||
ProjectSettings object passed to the Create API.
|
||||
|
||||
There are two resolutions:
|
||||
|
||||
(A) to use the ProjectSettings, delete the Pulumi.yaml file
|
||||
from WorkDir or use a different WorkDir
|
||||
|
||||
(B) to use the exiting Pulumi.yaml from WorkDir, avoid
|
||||
customizing the ProjectSettings
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Pulumi.Automation.Exceptions.ProjectSettingsConflictException.SettingsFileLocation">
|
||||
<summary>
|
||||
|
||||
FullPath of the Pulumi.yaml (or Pulumi.yml, Pulumi.json)
|
||||
settings file found on disk.
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Pulumi.Automation.HistoryOptions">
|
||||
<summary>
|
||||
Options controlling the behavior of a <see cref="M:Pulumi.Automation.WorkspaceStack.GetHistoryAsync(Pulumi.Automation.HistoryOptions,System.Threading.CancellationToken)"/> operation.
|
||||
|
|
|
@ -77,3 +77,23 @@ $ pulumi config set aws:region us-west-2
|
|||
```
|
||||
|
||||
And finally, preview and update as you would any other Pulumi project.
|
||||
|
||||
|
||||
## Public API Changes
|
||||
|
||||
When making changes to the code you may get the following compilation
|
||||
error:
|
||||
|
||||
```
|
||||
error RS0016: Symbol XYZ' is not part of the declared API.
|
||||
```
|
||||
|
||||
This indicates a change in public API. If you are developing a change
|
||||
and this is intentional, add the new API elements to
|
||||
`PublicAPI.Unshipped.txt` corresponding to your project (some IDEs
|
||||
will do this automatically for you, but manual additions are fine as
|
||||
well).
|
||||
|
||||
Project maintainers will move API elements from
|
||||
`PublicAPI.Unshipped.txt` to `PublicAPI.Shipped.txt` when cutting a
|
||||
release.
|
||||
|
|
|
@ -8,6 +8,7 @@ require (
|
|||
github.com/cheggaaa/pb v1.0.18
|
||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd // indirect
|
||||
github.com/djherbis/times v1.2.0
|
||||
github.com/fatih/color v1.9.0 // indirect
|
||||
github.com/gofrs/flock v0.7.1
|
||||
github.com/gofrs/uuid v3.3.0+incompatible
|
||||
github.com/gogo/protobuf v1.3.1 // indirect
|
||||
|
@ -18,24 +19,24 @@ require (
|
|||
github.com/hashicorp/go-multierror v1.0.0
|
||||
github.com/kr/pretty v0.2.1 // indirect
|
||||
github.com/kr/text v0.2.0 // indirect
|
||||
github.com/mattn/go-colorable v0.1.6 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.8 // indirect
|
||||
github.com/mitchellh/go-ps v1.0.0
|
||||
github.com/nxadm/tail v1.4.8
|
||||
github.com/opentracing/basictracer-go v1.0.0 // indirect
|
||||
github.com/opentracing/opentracing-go v1.1.0
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/pulumi/go-yaml v1.8.10-0.20210311214047-95da20da6e94
|
||||
github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94
|
||||
github.com/sergi/go-diff v1.1.0 // indirect
|
||||
github.com/spf13/cast v1.3.1
|
||||
github.com/spf13/cobra v1.0.0
|
||||
github.com/stretchr/testify v1.7.0
|
||||
github.com/stretchr/testify v1.6.1
|
||||
github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6
|
||||
github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7
|
||||
github.com/uber/jaeger-client-go v2.22.1+incompatible
|
||||
github.com/uber/jaeger-lib v2.2.0+incompatible // indirect
|
||||
go.uber.org/atomic v1.6.0 // indirect
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
|
||||
golang.org/x/crypto v0.0.0-20200317142112-1b76d66859c6
|
||||
golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect
|
||||
golang.org/x/mod v0.3.0
|
||||
golang.org/x/net v0.0.0-20200602114024-627f9648deb9
|
||||
|
|
37
sdk/go.sum
37
sdk/go.sum
|
@ -67,10 +67,11 @@ github.com/envoyproxy/go-control-plane v0.9.4 h1:rEvIZUSZ3fx39WIi3JkQqQBitGwpELB
|
|||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg=
|
||||
github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
|
||||
github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s=
|
||||
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
|
||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
|
||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
|
||||
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
|
@ -83,14 +84,6 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2
|
|||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||
github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA=
|
||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
|
||||
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
|
||||
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
|
||||
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
|
||||
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
|
||||
github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
|
||||
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
|
||||
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
|
||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||
github.com/gofrs/flock v0.7.1 h1:DP+LD/t0njgoPBvT5MJLeliUIVQR03hiKR6vezdwHlc=
|
||||
|
@ -173,12 +166,13 @@ github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
|
|||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
|
||||
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
|
||||
github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
|
||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
|
||||
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||
github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE=
|
||||
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
|
||||
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
|
||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||
github.com/mattn/go-runewidth v0.0.8 h1:3tS41NlGYSmhhe/8fhGRzc+z3AYCw1Fe1WAyLuujKs0=
|
||||
|
@ -226,8 +220,6 @@ github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084 h1:sofwID9zm4tzr
|
|||
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA=
|
||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||
github.com/pulumi/go-yaml v1.8.10-0.20210311214047-95da20da6e94 h1:Htsu46DUlRauQVuY0qXQWwGMkuGvc9PReS60kNYPuzE=
|
||||
github.com/pulumi/go-yaml v1.8.10-0.20210311214047-95da20da6e94/go.mod h1:gY5v736YyqzhcB0WcDSX4ePCUM90DU88xiH4gQ/ZcXo=
|
||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af h1:gu+uRPtBe88sKxUCEXRoeCvVG90TJmwhiqRpvdhQFng=
|
||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
|
||||
|
@ -268,8 +260,8 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH
|
|||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6 h1:9VTskZOIRf2vKF3UL8TuWElry5pgUpV1tFSe/e/0m/E=
|
||||
github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g=
|
||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ=
|
||||
|
@ -304,8 +296,8 @@ golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnf
|
|||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200317142112-1b76d66859c6 h1:TjszyFsQsyZNHwdVdZ5m7bjmreu0znc2kRYsEml9/Ww=
|
||||
golang.org/x/crypto v0.0.0-20200317142112-1b76d66859c6/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4 h1:c2HOrn5iMezYjSlGPncknSEr/8x5LELb/ilJbXi9DEA=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
|
@ -345,10 +337,12 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h
|
|||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
|
@ -374,9 +368,8 @@ golang.org/x/tools v0.0.0-20200608174601-1b747fd94509 h1:MI14dOfl3OG6Zd32w3ugsrv
|
|||
golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
|
|
|
@ -18,7 +18,7 @@ import (
|
|||
"encoding/json"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/pulumi/go-yaml"
|
||||
yaml "gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
var JSONExt = ".json"
|
||||
|
|
|
@ -13,7 +13,7 @@ require (
|
|||
github.com/mattn/go-runewidth v0.0.9 // indirect
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/pulumi/pulumi-random/sdk/v2 v2.4.2
|
||||
github.com/pulumi/pulumi/pkg/v2 v2.22.0
|
||||
github.com/pulumi/pulumi/sdk/v2 v2.24.0
|
||||
github.com/stretchr/testify v1.7.0
|
||||
github.com/pulumi/pulumi/pkg/v2 v2.0.0
|
||||
github.com/pulumi/pulumi/sdk/v2 v2.24.1
|
||||
github.com/stretchr/testify v1.6.1
|
||||
)
|
||||
|
|
19
tests/go.sum
19
tests/go.sum
|
@ -214,8 +214,8 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y
|
|||
github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||
github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg=
|
||||
github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
|
||||
github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s=
|
||||
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
|
||||
github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
|
||||
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
|
||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
|
||||
|
@ -259,9 +259,8 @@ github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8c
|
|||
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
|
||||
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
|
||||
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
|
||||
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
|
||||
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
|
||||
github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
|
||||
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
|
||||
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
||||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
|
||||
|
@ -492,12 +491,14 @@ github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDe
|
|||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
||||
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
|
||||
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||
github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE=
|
||||
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI=
|
||||
github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E=
|
||||
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
|
||||
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
|
||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||
github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||
|
@ -583,8 +584,6 @@ github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084 h1:sofwID9zm4tzr
|
|||
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA=
|
||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||
github.com/pulumi/go-yaml v1.8.10-0.20210311214047-95da20da6e94 h1:Htsu46DUlRauQVuY0qXQWwGMkuGvc9PReS60kNYPuzE=
|
||||
github.com/pulumi/go-yaml v1.8.10-0.20210311214047-95da20da6e94/go.mod h1:gY5v736YyqzhcB0WcDSX4ePCUM90DU88xiH4gQ/ZcXo=
|
||||
github.com/pulumi/pulumi-random/sdk/v2 v2.4.2 h1:c6UyC/SIx0vV1tVdJKjBYM89wLj1BWARIFEQlSrmtBU=
|
||||
github.com/pulumi/pulumi-random/sdk/v2 v2.4.2/go.mod h1:PPzzdlKYXLuBjcl6T4FvvQgKBntKa9gMbZtgslBlVHc=
|
||||
github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8=
|
||||
|
@ -646,9 +645,8 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
|
|||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6 h1:9VTskZOIRf2vKF3UL8TuWElry5pgUpV1tFSe/e/0m/E=
|
||||
github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g=
|
||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ=
|
||||
|
@ -717,6 +715,7 @@ golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8U
|
|||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200317142112-1b76d66859c6/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
|
|
Loading…
Reference in a new issue