Skip to content

Commit ad7459f

Browse files
Avoid returning internal information for extensible resource snapshot (#18119)
Closes #18110 ###### Microsoft Reviewers: [Open in CodeFlow](https://microsoft.github.io/open-pr/?codeflow=https://github.com/Azure/bicep/pull/18119)
1 parent 3262333 commit ad7459f

File tree

7 files changed

+69
-6
lines changed

7 files changed

+69
-6
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"extensions": {
3+
"http": "br:example.azurecr.io/extensions/snapshot:1.2.3"
4+
}
5+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
extension http
2+
3+
param coords {
4+
latitude: string
5+
longitude: string
6+
}
7+
8+
resource gridpointsReq 'request@v1' = {
9+
uri: 'https://api.weather.gov/points/${coords.latitude},${coords.longitude}'
10+
format: 'raw'
11+
}
12+
13+
var gridpoints = json(gridpointsReq.body).properties
14+
15+
resource forecastReq 'request@v1' = {
16+
uri: 'https://api.weather.gov/gridpoints/${gridpoints.gridId}/${gridpoints.gridX},${gridpoints.gridY}/forecast'
17+
format: 'raw'
18+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
using 'main.bicep'
2+
3+
param coords = {
4+
latitude: '47.6363726'
5+
longitude: '-122.1357068'
6+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"predictedResources": [
3+
{
4+
"properties": {
5+
"uri": "https://api.weather.gov/points/47.6363726,-122.1357068",
6+
"format": "raw"
7+
},
8+
"type": "request@v1"
9+
},
10+
{
11+
"properties": {
12+
"uri": "[format('https://api.weather.gov/gridpoints/{0}/{1},{2}/forecast', json(reference('gridpointsReq').body).properties.gridId, json(reference('gridpointsReq').body).properties.gridX, json(reference('gridpointsReq').body).properties.gridY)]",
13+
"format": "raw"
14+
},
15+
"type": "request@v1"
16+
}
17+
],
18+
"diagnostics": []
19+
}

src/Bicep.Cli.IntegrationTests/SnapshotCommandTests.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation.
22
// Licensed under the MIT License.
33

4+
using System.IO.Abstractions.TestingHelpers;
45
using System.Reflection;
56
using System.Text.RegularExpressions;
67
using Azure;
@@ -9,13 +10,15 @@
910
using Bicep.Cli.Models;
1011
using Bicep.Cli.UnitTests.Assertions;
1112
using Bicep.Core.Configuration;
13+
using Bicep.Core.FileSystem;
1214
using Bicep.Core.Registry;
1315
using Bicep.Core.Samples;
1416
using Bicep.Core.UnitTests;
1517
using Bicep.Core.UnitTests.Assertions;
1618
using Bicep.Core.UnitTests.Baselines;
1719
using Bicep.Core.UnitTests.Mock;
1820
using Bicep.Core.UnitTests.Utils;
21+
using Bicep.IO.FileSystem;
1922
using FluentAssertions;
2023
using FluentAssertions.Execution;
2124
using Microsoft.CodeAnalysis.Sarif;
@@ -125,13 +128,18 @@ public async Task Snapshot_with_overwrite_should_generate_a_valid_snapshot_file(
125128
[TestCategory(BaselineHelper.BaselineTestCategory)]
126129
public async Task Snapshot_generates_correct_format(EmbeddedFile paramFile)
127130
{
131+
var services = await ExtensionTestHelper.GetServiceBuilderWithPublishedExtension(ExtensionResourceTypeHelper.GetHttpExtensionTypesTgz(), new(), artifactTarget: "example.azurecr.io/extensions/snapshot:1.2.3");
132+
var clientFactory = services.Build().Construct<IContainerRegistryClientFactory>();
133+
128134
var subscriptionId = new Guid().ToString();
129135
var resourceGroupName = "myRg";
130136

131137
var baselineFolder = BaselineFolder.BuildOutputFolder(TestContext, paramFile);
132138
var snapshotFile = baselineFolder.GetFileOrEnsureCheckedIn("main.snapshot.json");
133139

134-
var result = await Bicep("snapshot", baselineFolder.EntryFile.OutputFilePath, "--mode", "overwrite", "--subscription-id", subscriptionId, "--resource-group", resourceGroupName);
140+
var result = await Bicep(
141+
services => services.WithContainerRegistryClientFactory(clientFactory),
142+
"snapshot", baselineFolder.EntryFile.OutputFilePath, "--mode", "overwrite", "--subscription-id", subscriptionId, "--resource-group", resourceGroupName);
135143
result.Should().Succeed();
136144

137145
snapshotFile.ShouldHaveExpectedJsonValue();

src/Bicep.Cli/Helpers/Snapshot/SnapshotHelper.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Text.Json.Serialization;
99
using Azure.Deployments.Core.Configuration;
1010
using Azure.Deployments.Core.Definitions;
11+
using Azure.Deployments.Core.Definitions.Extensibility;
1112
using Azure.Deployments.Core.Definitions.Schema;
1213
using Azure.Deployments.Core.Entities;
1314
using Azure.Deployments.Engine.Definitions;
@@ -72,7 +73,13 @@ public static async Task<Snapshot> GetSnapshot(
7273
return new(
7374
[
7475
.. expansionResult.preflightResources.Select(x => JsonElementFactory.CreateElement(JsonExtensions.ToJson(DeploymentPreflightResourceWithParsedExpressions.From(x)))),
75-
.. expansionResult.extensibleResources.Select(x => JsonElementFactory.CreateElement(JsonExtensions.ToJson(x))),
76+
.. expansionResult.extensibleResources.Select(x => JsonElementFactory.CreateElement(JsonExtensions.ToJson(new DeploymentWhatIfExtensibleResource
77+
{
78+
Type = x.Type,
79+
ApiVersion = x.ApiVersion,
80+
Identifiers = x.Identifiers?.ToObject<JObject>(),
81+
Properties = x.Properties?.ToObject<JObject>(),
82+
}))),
7683
],
7784
[
7885
.. expansionResult.diagnostics.Select(d => $"{d.Target} {d.Level} {d.Code}: {d.Message}")

src/Bicep.Core.UnitTests/Utils/ExtensionTestHelper.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ public static ServiceBuilder GetServiceBuilder(
2929
.WithContainerRegistryClientFactory(clientFactory);
3030
}
3131

32-
public static Task<ServiceBuilder> GetServiceBuilderWithPublishedExtension(BinaryData tgzData, FeatureProviderOverrides features, IFileSystem? fileSystem = null)
33-
=> GetServiceBuilderWithPublishedExtension(new ExtensionPackage(tgzData, false, []), "example.azurecr.io/extensions/foo:1.2.3", features, fileSystem);
32+
public static Task<ServiceBuilder> GetServiceBuilderWithPublishedExtension(BinaryData tgzData, FeatureProviderOverrides features, IFileSystem? fileSystem = null, string? artifactTarget = null)
33+
=> GetServiceBuilderWithPublishedExtension(new ExtensionPackage(tgzData, false, []), artifactTarget ?? "example.azurecr.io/extensions/foo:1.2.3", features, fileSystem);
3434

35-
public static Task<ServiceBuilder> GetServiceBuilderWithPublishedExtension(ExtensionPackage package, FeatureProviderOverrides features, IFileSystem? fileSystem = null)
36-
=> GetServiceBuilderWithPublishedExtension(package, "example.azurecr.io/extensions/foo:1.2.3", features, fileSystem);
35+
public static Task<ServiceBuilder> GetServiceBuilderWithPublishedExtension(ExtensionPackage package, FeatureProviderOverrides features, IFileSystem? fileSystem = null, string? artifactTarget = null)
36+
=> GetServiceBuilderWithPublishedExtension(package, artifactTarget ?? "example.azurecr.io/extensions/foo:1.2.3", features, fileSystem);
3737

3838
public static async Task<ServiceBuilder> GetServiceBuilderWithPublishedExtension(ExtensionPackage package, string target, FeatureProviderOverrides features, IFileSystem? fileSystem = null)
3939
{

0 commit comments

Comments
 (0)