Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ public abstract partial class Resource<T> : Azure.Provisioning.Resource where T
{
protected Resource(Azure.Provisioning.IConstruct scope, Azure.Provisioning.Resource? parent, string resourceName, Azure.Core.ResourceType resourceType, string version, T properties) : base (default(Azure.Provisioning.IConstruct), default(Azure.Provisioning.Resource), default(string), default(Azure.Core.ResourceType), default(string), default(object)) { }
public T Properties { get { throw null; } }
public void AssignParameter(System.Linq.Expressions.Expression<System.Func<T, string>> selector, Azure.Provisioning.Parameter parameter) { }
}
}
namespace Azure.Provisioning.AppService
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ public abstract partial class Resource<T> : Azure.Provisioning.Resource where T
{
protected Resource(Azure.Provisioning.IConstruct scope, Azure.Provisioning.Resource? parent, string resourceName, Azure.Core.ResourceType resourceType, string version, T properties) : base (default(Azure.Provisioning.IConstruct), default(Azure.Provisioning.Resource), default(string), default(Azure.Core.ResourceType), default(string), default(object)) { }
public T Properties { get { throw null; } }
public void AssignParameter(System.Linq.Expressions.Expression<System.Func<T, string>> selector, Azure.Provisioning.Parameter parameter) { }
}
}
namespace Azure.Provisioning.AppService
Expand Down
20 changes: 20 additions & 0 deletions sdk/provisioning/Azure.Provisioning/src/ResourceOfT.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.Linq.Expressions;
using Azure.Core;

namespace Azure.Provisioning
Expand Down Expand Up @@ -35,5 +37,23 @@ protected Resource(IConstruct scope, Resource? parent, string resourceName, Reso
{
Properties = properties;
}

/// <summary>
///
/// </summary>
/// <param name="selector"></param>
/// <param name="parameter"></param>
/// <exception cref="NotSupportedException"></exception>
public void AssignParameter(Expression<Func<T, string>> selector, Parameter parameter)
{
if (selector is not LambdaExpression lambda ||
lambda.Body is not MemberExpression member)
{
throw new NotSupportedException();
}

object instance = Expression.Lambda(member.Expression!, lambda.Parameters[0]).Compile().DynamicInvoke(Properties)!;
AssignParameter(instance, member.Member.Name, parameter);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ resource resourceGroup_I6QNkoPsb 'Microsoft.Resources/resourceGroups@2023-07-01'
}
}

resource storageAccount_wIOls6qWR 'Microsoft.Storage/storageAccounts@2022-09-01' = {
resource storageAccount_64QAbICpM 'Microsoft.Storage/storageAccounts@2022-09-01' = {
scope: resourceGroup_I6QNkoPsb
name: 'photoAcct-b238b0e606ba44'
name: 'photoAcct-47cc88f8-4ec0-'
location: 'westus'
sku: {
name: 'Premium_LRS'
Expand All @@ -21,8 +21,8 @@ resource storageAccount_wIOls6qWR 'Microsoft.Storage/storageAccounts@2022-09-01'
}
}

resource blobService_gWmK7aIWs 'Microsoft.Storage/storageAccounts/blobServices@2022-09-01' = {
parent: storageAccount_wIOls6qWR
resource blobService_hzBGHAAO1 'Microsoft.Storage/storageAccounts/blobServices@2022-09-01' = {
parent: storageAccount_64QAbICpM
name: 'photos-TEST'
properties: {
cors: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ resource resourceGroup_I6QNkoPsb 'Microsoft.Resources/resourceGroups@2023-07-01'
}
}

resource storageAccount_zwcoTiJ7t 'Microsoft.Storage/storageAccounts@2022-09-01' = {
resource storageAccount_3AMx4MnVN 'Microsoft.Storage/storageAccounts@2022-09-01' = {
scope: resourceGroup_I6QNkoPsb
name: 'photoAcct-42a20f49579e44'
name: 'photoAcct-e9ffc066-811e-'
location: 'westus'
sku: {
name: 'Premium_LRS'
Expand All @@ -21,8 +21,8 @@ resource storageAccount_zwcoTiJ7t 'Microsoft.Storage/storageAccounts@2022-09-01'
}
}

resource blobService_oQNAHmGlL 'Microsoft.Storage/storageAccounts/blobServices@2022-09-01' = {
parent: storageAccount_zwcoTiJ7t
resource blobService_JVW2TmYYM 'Microsoft.Storage/storageAccounts/blobServices@2022-09-01' = {
parent: storageAccount_3AMx4MnVN
name: 'photos-TEST'
properties: {
cors: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,13 @@ public void WebSiteUsingL1()
.AddAccessPolicy(frontEndPrincipalId); // frontEnd.properties.identity.principalId

KeyVaultSecret sqlAdminSecret = new KeyVaultSecret(infra, "sqlAdminPassword");
sqlAdminSecret.AssignParameter(sqlAdminSecret.Properties.Properties, nameof(sqlAdminSecret.Properties.Properties.Value), sqlAdminPasswordParam);
sqlAdminSecret.AssignParameter(secret => secret.Properties.Value, sqlAdminPasswordParam);

KeyVaultSecret appUserSecret = new KeyVaultSecret(infra, "appUserPassword");
appUserSecret.AssignParameter(appUserSecret.Properties.Properties, nameof(appUserSecret.Properties.Properties.Value), appUserPasswordParam);
appUserSecret.AssignParameter(secret => secret.Properties.Value, appUserPasswordParam);

SqlServer sqlServer = new SqlServer(infra, "sqlserver");
sqlServer.AssignParameter(sqlServer.Properties, nameof(sqlServer.Properties.AdministratorLoginPassword), sqlAdminPasswordParam);
sqlServer.AssignParameter(sql => sql.AdministratorLoginPassword, sqlAdminPasswordParam);

SqlDatabase sqlDatabase = new SqlDatabase(infra);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ public TestCommonSqlDatabase(IConstruct scope, KeyVault? keyVault = null)
AddParameter(appUserPasswordParam);

KeyVaultSecret sqlAdminSecret = new KeyVaultSecret(this, "sqlAdminPassword");
sqlAdminSecret.AssignParameter(sqlAdminSecret.Properties.Properties, nameof(sqlAdminSecret.Properties.Properties.Value), sqlAdminPasswordParam);
sqlAdminSecret.AssignParameter(secret => secret.Properties.Value, sqlAdminPasswordParam);

KeyVaultSecret appUserSecret = new KeyVaultSecret(this, "appUserPassword");
appUserSecret.AssignParameter(appUserSecret.Properties.Properties, nameof(appUserSecret.Properties.Properties.Value), appUserPasswordParam);
appUserSecret.AssignParameter(secret => secret.Properties.Value, appUserPasswordParam);

SqlServer sqlServer = new SqlServer(this, "sqlserver");
sqlServer.AssignParameter(sqlServer.Properties, nameof(sqlServer.Properties.AdministratorLoginPassword), sqlAdminPasswordParam);
sqlServer.AssignParameter(sql => sql.AdministratorLoginPassword, sqlAdminPasswordParam);
SqlDatabase = new SqlDatabase(this);

KeyVaultSecret sqlAzureConnectionStringSecret = new KeyVaultSecret(this, "connectionString", SqlDatabase.GetConnectionString(appUserPasswordParam));
Expand Down