Skip to content

Commit 631977e

Browse files
committed
Deployment Changes for to pull ACR images from Marks ACR.
1 parent 2a1766e commit 631977e

12 files changed

Lines changed: 115 additions & 49 deletions

File tree

content_packs/content_gen/agent_teams/content_gen.json

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
"toolbox_filter": "",
2323
"user_responses": false,
2424
"coding_tools": false,
25-
"temperature": null
25+
"temperature": null,
26+
"icon": ""
2627
},
2728
{
2829
"input_key": "CG_planning_agent",
@@ -39,7 +40,8 @@
3940
"toolbox_filter": "",
4041
"user_responses": false,
4142
"coding_tools": false,
42-
"temperature": null
43+
"temperature": null,
44+
"icon": ""
4345
},
4446
{
4547
"input_key": "CG_research_agent",
@@ -56,7 +58,8 @@
5658
"toolbox_filter": "",
5759
"user_responses": false,
5860
"coding_tools": false,
59-
"temperature": null
61+
"temperature": null,
62+
"icon": ""
6063
},
6164
{
6265
"input_key": "CG_text_content_agent",
@@ -73,7 +76,8 @@
7376
"toolbox_filter": "",
7477
"user_responses": false,
7578
"coding_tools": false,
76-
"temperature": null
79+
"temperature": null,
80+
"icon": ""
7781
},
7882
{
7983
"input_key": "CG_image_content_agent",
@@ -90,7 +94,8 @@
9094
"toolbox_filter": "image",
9195
"user_responses": false,
9296
"coding_tools": false,
93-
"temperature": null
97+
"temperature": null,
98+
"icon": ""
9499
},
95100
{
96101
"input_key": "CG_compliance_agent",
@@ -107,7 +112,8 @@
107112
"toolbox_filter": "",
108113
"user_responses": false,
109114
"coding_tools": false,
110-
"temperature": null
115+
"temperature": null,
116+
"icon": ""
111117
}
112118
],
113119
"protected": false,

content_packs/contract_compliance/agent_teams/contract_compliance_team.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
"toolbox_filter": "",
2626
"user_responses": false,
2727
"coding_tools": false,
28-
"temperature": null
28+
"temperature": null,
29+
"icon": ""
2930
},
3031
{
3132
"input_key": "",
@@ -42,7 +43,8 @@
4243
"toolbox_filter": "",
4344
"user_responses": false,
4445
"coding_tools": false,
45-
"temperature": null
46+
"temperature": null,
47+
"icon": ""
4648
},
4749
{
4850
"input_key": "",
@@ -59,7 +61,8 @@
5961
"toolbox_filter": "",
6062
"user_responses": false,
6163
"coding_tools": false,
62-
"temperature": null
64+
"temperature": null,
65+
"icon": ""
6366
}
6467
],
6568
"protected": false,

content_packs/example_pack/agent_teams/example_pack.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
"toolbox_filter": "",
2323
"user_responses": false,
2424
"coding_tools": false,
25-
"temperature": null
25+
"temperature": null,
26+
"icon": ""
2627
},
2728
{
2829
"input_key": "research_agent",
@@ -39,7 +40,8 @@
3940
"toolbox_filter": "",
4041
"user_responses": false,
4142
"coding_tools": false,
42-
"temperature": null
43+
"temperature": null,
44+
"icon": ""
4345
}
4446
],
4547
"description": "Reference pack: a tiny book recommender backed by a CSV-indexed AI Search.",

content_packs/hr_onboarding/agent_teams/hr.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
"toolbox_filter": "hr",
2323
"user_responses": true,
2424
"coding_tools": false,
25-
"temperature": null
25+
"temperature": null,
26+
"icon": ""
2627
},
2728
{
2829
"input_key": "",
@@ -39,7 +40,8 @@
3940
"toolbox_filter": "tech_support",
4041
"user_responses": true,
4142
"coding_tools": false,
42-
"temperature": null
43+
"temperature": null,
44+
"icon": ""
4345
}
4446
],
4547
"protected": false,

content_packs/marketing_press_release/agent_teams/marketing.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
"toolbox_filter": "product",
2323
"user_responses": false,
2424
"coding_tools": false,
25-
"temperature": null
25+
"temperature": null,
26+
"icon": ""
2627
},
2728
{
2829
"input_key": "",
@@ -39,7 +40,8 @@
3940
"toolbox_filter": "marketing",
4041
"user_responses": false,
4142
"coding_tools": false,
42-
"temperature": null
43+
"temperature": null,
44+
"icon": ""
4345
}
4446
],
4547
"protected": false,

content_packs/retail_customer/agent_teams/retail.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
"toolbox_filter": "",
2323
"user_responses": false,
2424
"coding_tools": false,
25-
"temperature": 0.2
25+
"temperature": 0.2,
26+
"icon": ""
2627
},
2728
{
2829
"input_key": "",
@@ -39,7 +40,8 @@
3940
"toolbox_filter": "",
4041
"user_responses": false,
4142
"coding_tools": false,
42-
"temperature": 0.2
43+
"temperature": 0.2,
44+
"icon": ""
4345
},
4446
{
4547
"input_key": "",
@@ -56,7 +58,8 @@
5658
"toolbox_filter": "",
5759
"user_responses": false,
5860
"coding_tools": false,
59-
"temperature": null
61+
"temperature": null,
62+
"icon": ""
6063
}
6164
],
6265
"protected": false,

content_packs/rfp_evaluation/agent_teams/rfp_analysis_team.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"type": "summary",
1616
"name": "RfpSummaryAgent",
1717
"deployment_name": "gpt-4.1-mini",
18-
"system_message":"You are the Summary Agent. You have access to an Azure AI Search index containing RFP and proposal documents. Always use the search tool to retrieve relevant documents before responding — do not ask the user to provide or upload documents. Your role is to read and synthesize RFP or proposal documents into clear, structured executive summaries. Focus on key clauses, deliverables, evaluation criteria, pricing terms, timelines, and obligations. Organize your output into sections such as Overview, Key Clauses, Deliverables, Terms, and Notable Conditions. Highlight unique or high-impact items that other agents (Risk or Compliance) should review. Be concise, factual, and neutral in tone.",
18+
"system_message": "You are the Summary Agent. You have access to an Azure AI Search index containing RFP and proposal documents. Always use the search tool to retrieve relevant documents before responding — do not ask the user to provide or upload documents. Your role is to read and synthesize RFP or proposal documents into clear, structured executive summaries. Focus on key clauses, deliverables, evaluation criteria, pricing terms, timelines, and obligations. Organize your output into sections such as Overview, Key Clauses, Deliverables, Terms, and Notable Conditions. Highlight unique or high-impact items that other agents (Risk or Compliance) should review. Be concise, factual, and neutral in tone.",
1919
"description": "Summarizes RFP and contract documents into structured, easy-to-understand overviews.",
2020
"use_file_search": false,
2121
"vector_store_name": "",
@@ -25,7 +25,8 @@
2525
"toolbox_filter": "",
2626
"user_responses": false,
2727
"coding_tools": false,
28-
"temperature": null
28+
"temperature": null,
29+
"icon": ""
2930
},
3031
{
3132
"input_key": "",
@@ -42,7 +43,8 @@
4243
"toolbox_filter": "",
4344
"user_responses": false,
4445
"coding_tools": false,
45-
"temperature": null
46+
"temperature": null,
47+
"icon": ""
4648
},
4749
{
4850
"input_key": "",
@@ -59,7 +61,8 @@
5961
"toolbox_filter": "",
6062
"user_responses": false,
6163
"coding_tools": false,
62-
"temperature": null
64+
"temperature": null,
65+
"icon": ""
6366
}
6467
],
6568
"protected": false,

infra/main.bicep

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ param solutionUniqueText string = take(uniqueString(subscription().id, resourceG
2727
'northeurope'
2828
'southeastasia'
2929
'uksouth'
30+
'westus3'
3031
])
3132
param location string
3233

@@ -35,7 +36,7 @@ var deployerInfo = deployer()
3536
var deployingUserPrincipalId = deployerInfo.objectId
3637

3738
// Restricting deployment to only supported Azure OpenAI regions validated with GPT-4o model
38-
@allowed(['australiaeast', 'eastus2', 'francecentral', 'japaneast', 'norwayeast', 'swedencentral', 'uksouth', 'westus'])
39+
@allowed(['australiaeast', 'eastus2', 'francecentral', 'japaneast', 'norwayeast', 'swedencentral', 'uksouth', 'westus', 'westus3'])
3940
@metadata({
4041
azd: {
4142
type: 'location'
@@ -168,31 +169,37 @@ param virtualMachineAdminPassword string?
168169
// These parameters are changed for testing - please reset as part of publication
169170

170171
@description('Optional. The Container Registry hostname where the docker images for the backend are located.')
171-
param backendContainerRegistryHostname string = 'biabcontainerreg.azurecr.io'
172+
param backendContainerRegistryHostname string = 'macaetas273cr.azurecr.io'
172173

173174
@description('Optional. The Container Image Name to deploy on the backend.')
174175
param backendContainerImageName string = 'macaebackend'
175176

176177
@description('Optional. The Container Image Tag to deploy on the backend.')
177-
param backendContainerImageTag string = 'latest_v4'
178+
param backendContainerImageTag string = 'v1.4.0'
178179

179180
@description('Optional. The Container Registry hostname where the docker images for the frontend are located.')
180-
param frontendContainerRegistryHostname string = 'biabcontainerreg.azurecr.io'
181+
param frontendContainerRegistryHostname string = 'macaetas273cr.azurecr.io'
181182

182183
@description('Optional. The Container Image Name to deploy on the frontend.')
183184
param frontendContainerImageName string = 'macaefrontend'
184185

185186
@description('Optional. The Container Image Tag to deploy on the frontend.')
186-
param frontendContainerImageTag string = 'latest_v4'
187+
param frontendContainerImageTag string = 'v1.3.0'
187188

188189
@description('Optional. The Container Registry hostname where the docker images for the MCP are located.')
189-
param MCPContainerRegistryHostname string = 'biabcontainerreg.azurecr.io'
190+
param MCPContainerRegistryHostname string = 'macaetas273cr.azurecr.io'
190191

191192
@description('Optional. The Container Image Name to deploy on the MCP.')
192193
param MCPContainerImageName string = 'macaemcp'
193194

194195
@description('Optional. The Container Image Tag to deploy on the MCP.')
195-
param MCPContainerImageTag string = 'latest_v4'
196+
param MCPContainerImageTag string = 'v1.2.0'
197+
198+
@description('Optional. The name of the external ACR to grant AcrPull access to. Derived from the registry hostname.')
199+
param externalAcrName string = split(backendContainerRegistryHostname, '.')[0]
200+
201+
@description('Optional. The resource group containing the external ACR. Required when ACR is in a different resource group.')
202+
param externalAcrResourceGroup string = 'rg-macaetas27-3'
196203

197204
@description('Optional. Enable/Disable usage telemetry for module.')
198205
param enableTelemetry bool = true
@@ -229,6 +236,7 @@ var cosmosDbZoneRedundantHaRegionPairs = {
229236
southeastasia: 'eastasia'
230237
uksouth: 'westeurope'
231238
westeurope: 'northeurope'
239+
westus3: 'westus'
232240
}
233241
// Paired location calculated based on 'location' parameter. This location will be used by applicable resources if `enableScalability` is set to `true`
234242
var cosmosDbHaLocation = cosmosDbZoneRedundantHaRegionPairs[location]
@@ -245,6 +253,7 @@ var replicaRegionPairs = {
245253
southeastasia: 'eastasia'
246254
uksouth: 'westeurope'
247255
westeurope: 'northeurope'
256+
westus3: 'eastus'
248257
}
249258
var replicaLocation = replicaRegionPairs[location]
250259

@@ -422,6 +431,19 @@ module userAssignedIdentity 'br/public:avm/res/managed-identity/user-assigned-id
422431
enableTelemetry: enableTelemetry
423432
}
424433
}
434+
435+
// ========== ACR Pull Role Assignment ========== //
436+
// Grant the user-assigned identity AcrPull on the external container registry.
437+
var acrRoleTargetRg = !empty(externalAcrResourceGroup) ? externalAcrResourceGroup : resourceGroup().name
438+
module acrPullRole 'modules/acr-pull-role.bicep' = {
439+
name: 'acrPullRoleAssignment-${externalAcrName}'
440+
scope: resourceGroup(acrRoleTargetRg)
441+
params: {
442+
acrName: externalAcrName
443+
principalId: userAssignedIdentity.outputs.principalId
444+
}
445+
}
446+
425447
// ========== Virtual Network ========== //
426448
// WAF best practices for virtual networks: https://learn.microsoft.com/en-us/azure/well-architected/service-guides/virtual-network
427449
// WAF recommendations for networking and connectivity: https://learn.microsoft.com/en-us/azure/well-architected/security/networking
@@ -1282,13 +1304,20 @@ module containerAppEnvironment 'br/public:avm/res/app/managed-environment:0.11.2
12821304
var containerAppResourceName = 'ca-${solutionSuffix}'
12831305
module containerApp 'br/public:avm/res/app/container-app:0.18.1' = {
12841306
name: take('avm.res.app.container-app.${containerAppResourceName}', 64)
1307+
dependsOn: [acrPullRole]
12851308
params: {
12861309
name: containerAppResourceName
12871310
tags: tags
12881311
location: location
12891312
enableTelemetry: enableTelemetry
12901313
environmentResourceId: containerAppEnvironment.outputs.resourceId
12911314
managedIdentities: { userAssignedResourceIds: [userAssignedIdentity.outputs.resourceId] }
1315+
registries: [
1316+
{
1317+
server: backendContainerRegistryHostname
1318+
identity: userAssignedIdentity.outputs.resourceId
1319+
}
1320+
]
12921321
ingressTargetPort: 8000
12931322
ingressExternal: true
12941323
activeRevisionsMode: 'Single'
@@ -1469,13 +1498,20 @@ module containerApp 'br/public:avm/res/app/container-app:0.18.1' = {
14691498
var containerAppMcpResourceName = 'ca-mcp-${solutionSuffix}'
14701499
module containerAppMcp 'br/public:avm/res/app/container-app:0.18.1' = {
14711500
name: take('avm.res.app.container-app.${containerAppMcpResourceName}', 64)
1501+
dependsOn: [acrPullRole]
14721502
params: {
14731503
name: containerAppMcpResourceName
14741504
tags: tags
14751505
location: location
14761506
enableTelemetry: enableTelemetry
14771507
environmentResourceId: containerAppEnvironment.outputs.resourceId
14781508
managedIdentities: { userAssignedResourceIds: [userAssignedIdentity.outputs.resourceId] }
1509+
registries: [
1510+
{
1511+
server: MCPContainerRegistryHostname
1512+
identity: userAssignedIdentity.outputs.resourceId
1513+
}
1514+
]
14791515
ingressTargetPort: 9000
14801516
ingressExternal: true
14811517
activeRevisionsMode: 'Single'
@@ -1610,15 +1646,19 @@ module webServerFarm 'br/public:avm/res/web/serverfarm:0.5.0' = {
16101646
var webSiteResourceName = 'app-${solutionSuffix}'
16111647
module webSite 'modules/web-sites.bicep' = {
16121648
name: take('module.web-sites.${webSiteResourceName}', 64)
1649+
dependsOn: [acrPullRole]
16131650
params: {
16141651
name: webSiteResourceName
16151652
tags: tags
16161653
location: location
16171654
kind: 'app,linux,container'
16181655
serverFarmResourceId: webServerFarm.?outputs.resourceId
1656+
managedIdentities: { userAssignedResourceIds: [userAssignedIdentity.outputs.resourceId] }
16191657
siteConfig: {
16201658
linuxFxVersion: 'DOCKER|${frontendContainerRegistryHostname}/${frontendContainerImageName}:${frontendContainerImageTag}'
16211659
minTlsVersion: '1.2'
1660+
acrUseManagedIdentityCreds: true
1661+
acrUserManagedIdentityID: userAssignedIdentity.outputs.clientId
16221662
}
16231663
configs: [
16241664
{

0 commit comments

Comments
 (0)