[dotnet] Unsecret and IsSecret implementation for .NET (#6092)
This commit is contained in:
parent
0d4f886525
commit
710f385447
|
@ -18,6 +18,14 @@ CHANGELOG
|
|||
- [sdk/dotnet] Moved urn value retrieval into if statement for MockMonitor
|
||||
[#6081](https://github.com/pulumi/pulumi/pull/6081)
|
||||
|
||||
- [sdk/dotnet] Added `Pulumi.Output.Unsecret` which will take an existing secret output and
|
||||
create a non-secret variant with an unwrapped secret value.
|
||||
[#6092](https://github.com/pulumi/pulumi/pull/6092)
|
||||
|
||||
- [sdk/dotnet] Added `Pulumi.Output.IsSecretAsync` which will take an existing output and
|
||||
determine if an output has a secret within the output.
|
||||
[#6092](https://github.com/pulumi/pulumi/pull/6092)
|
||||
|
||||
## 2.17.0 (2021-01-06)
|
||||
|
||||
- Respect the `version` resource option for provider resources.
|
||||
|
|
|
@ -293,6 +293,63 @@ namespace Pulumi.Tests.Core
|
|||
var data = await o.DataTask.ConfigureAwait(false);
|
||||
Assert.Equal(new[] { 1, 2 }, data.Value);
|
||||
});
|
||||
|
||||
[Fact]
|
||||
public Task IsSecretAsyncOnKnownOutput()
|
||||
=> RunInPreview(async () =>
|
||||
{
|
||||
var o1 = CreateOutput(0, isKnown: true, isSecret: true);
|
||||
var o2 = CreateOutput(1, isKnown: true, isSecret: false);
|
||||
var isSecret1 = await Output.IsSecretAsync(o1).ConfigureAwait(false);
|
||||
var isSecret2 = await Output.IsSecretAsync(o2).ConfigureAwait(false);
|
||||
Assert.True(isSecret1);
|
||||
Assert.False(isSecret2);
|
||||
});
|
||||
|
||||
[Fact]
|
||||
public Task IsSecretAsyncOnAwaitableOutput()
|
||||
=> RunInPreview(async () =>
|
||||
{
|
||||
var o1 = CreateOutput(0, isKnown: true, isSecret: true).Apply(a => Task.FromResult("inner1"));
|
||||
var o2 = CreateOutput(1, isKnown: true, isSecret: false).Apply(a => Task.FromResult("inner2"));
|
||||
var isSecret1 = await Output.IsSecretAsync(o1).ConfigureAwait(false);
|
||||
var isSecret2 = await Output.IsSecretAsync(o2).ConfigureAwait(false);
|
||||
Assert.True(isSecret1);
|
||||
Assert.False(isSecret2);
|
||||
});
|
||||
|
||||
[Fact]
|
||||
public Task UnsecretOnKnownSecretValue()
|
||||
=> RunInPreview(async () =>
|
||||
{
|
||||
var secret = CreateOutput(1, isKnown: true, isSecret: true);
|
||||
var notSecret = Output.Unsecret(secret);
|
||||
var notSecretData = await notSecret.DataTask.ConfigureAwait(false);
|
||||
Assert.False(notSecretData.IsSecret);
|
||||
Assert.Equal(1, notSecretData.Value);
|
||||
});
|
||||
|
||||
[Fact]
|
||||
public Task UnsecretOnAwaitableSecretValue()
|
||||
=> RunInPreview(async () =>
|
||||
{
|
||||
var secret = CreateOutput(0, isKnown: true, isSecret: true).Apply(a => Task.FromResult("inner"));
|
||||
var notSecret = Output.Unsecret(secret);
|
||||
var notSecretData = await notSecret.DataTask.ConfigureAwait(false);
|
||||
Assert.False(notSecretData.IsSecret);
|
||||
Assert.Equal("inner", notSecretData.Value);
|
||||
});
|
||||
|
||||
[Fact]
|
||||
public Task UnsecretOnNonSecretValue()
|
||||
=> RunInPreview(async () =>
|
||||
{
|
||||
var secret = CreateOutput(2, isKnown: true, isSecret: false);
|
||||
var notSecret = Output.Unsecret(secret);
|
||||
var notSecretData = await notSecret.DataTask.ConfigureAwait(false);
|
||||
Assert.False(notSecretData.IsSecret);
|
||||
Assert.Equal(2, notSecretData.Value);
|
||||
});
|
||||
}
|
||||
|
||||
public class NormalTests
|
||||
|
|
|
@ -27,6 +27,22 @@ namespace Pulumi
|
|||
public static Output<T> CreateSecret<T>(Task<T> value)
|
||||
=> Output<T>.CreateSecret(value);
|
||||
|
||||
/// <summary>
|
||||
/// Returns a new <see cref="Output{T}"/> which is a copy of the existing output but marked as
|
||||
/// a non-secret. The original output is not modified in any way.
|
||||
/// </summary>
|
||||
public static Output<T> Unsecret<T>(Output<T> output)
|
||||
=> output.WithIsSecret(Task.FromResult(false));
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves the secretness status of the given output.
|
||||
/// </summary>
|
||||
public static async Task<bool> IsSecretAsync<T>(Output<T> output)
|
||||
{
|
||||
var dataTask = await output.DataTask.ConfigureAwait(false);
|
||||
return dataTask.IsSecret;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Combines all the <see cref="Input{T}"/> values in <paramref name="inputs"/>
|
||||
/// into a single <see cref="Output{T}"/> with an <see cref="ImmutableArray{T}"/>
|
||||
|
|
|
@ -302,6 +302,7 @@ static Pulumi.Output.Create<T>(T value) -> Pulumi.Output<T>
|
|||
static Pulumi.Output.CreateSecret<T>(System.Threading.Tasks.Task<T> value) -> Pulumi.Output<T>
|
||||
static Pulumi.Output.CreateSecret<T>(T value) -> Pulumi.Output<T>
|
||||
static Pulumi.Output.Format(System.FormattableString formattableString) -> Pulumi.Output<string>
|
||||
static Pulumi.Output.IsSecretAsync<T>(Pulumi.Output<T> output) -> System.Threading.Tasks.Task<bool>
|
||||
static Pulumi.Output.Tuple<T1, T2, T3, T4, T5, T6, T7, T8>(Pulumi.Input<T1> item1, Pulumi.Input<T2> item2, Pulumi.Input<T3> item3, Pulumi.Input<T4> item4, Pulumi.Input<T5> item5, Pulumi.Input<T6> item6, Pulumi.Input<T7> item7, Pulumi.Input<T8> item8) -> Pulumi.Output<(T1, T2, T3, T4, T5, T6, T7, T8)>
|
||||
static Pulumi.Output.Tuple<T1, T2, T3, T4, T5, T6, T7, T8>(Pulumi.Output<T1> item1, Pulumi.Output<T2> item2, Pulumi.Output<T3> item3, Pulumi.Output<T4> item4, Pulumi.Output<T5> item5, Pulumi.Output<T6> item6, Pulumi.Output<T7> item7, Pulumi.Output<T8> item8) -> Pulumi.Output<(T1, T2, T3, T4, T5, T6, T7, T8)>
|
||||
static Pulumi.Output.Tuple<T1, T2, T3, T4, T5, T6, T7>(Pulumi.Input<T1> item1, Pulumi.Input<T2> item2, Pulumi.Input<T3> item3, Pulumi.Input<T4> item4, Pulumi.Input<T5> item5, Pulumi.Input<T6> item6, Pulumi.Input<T7> item7) -> Pulumi.Output<(T1, T2, T3, T4, T5, T6, T7)>
|
||||
|
@ -316,6 +317,7 @@ static Pulumi.Output.Tuple<T1, T2, T3>(Pulumi.Input<T1> item1, Pulumi.Input<T2>
|
|||
static Pulumi.Output.Tuple<T1, T2, T3>(Pulumi.Output<T1> item1, Pulumi.Output<T2> item2, Pulumi.Output<T3> item3) -> Pulumi.Output<(T1, T2, T3)>
|
||||
static Pulumi.Output.Tuple<T1, T2>(Pulumi.Input<T1> item1, Pulumi.Input<T2> item2) -> Pulumi.Output<(T1, T2)>
|
||||
static Pulumi.Output.Tuple<T1, T2>(Pulumi.Output<T1> item1, Pulumi.Output<T2> item2) -> Pulumi.Output<(T1, T2)>
|
||||
static Pulumi.Output.Unsecret<T>(Pulumi.Output<T> output) -> Pulumi.Output<T>
|
||||
static Pulumi.Output<T>.Create(System.Threading.Tasks.Task<T> value) -> Pulumi.Output<T>
|
||||
static Pulumi.OutputExtensions.AsT0<T0, T1>(this Pulumi.Output<Pulumi.Union<T0, T1>> output) -> Pulumi.Output<T0>
|
||||
static Pulumi.OutputExtensions.AsT1<T0, T1>(this Pulumi.Output<Pulumi.Union<T0, T1>> output) -> Pulumi.Output<T1>
|
||||
|
|
Loading…
Reference in a new issue