platform/amba/scripts/Invoke-LibraryUpdatePolicyDefinitions.ps1 (63 lines of code) (raw):
#!/usr/bin/pwsh
#
# PowerShell Script
# - Update template library in terraform-azurerm-caf-enterprise-scale repository
#
# Valid object schema for Export-LibraryArtifact function loop:
#
# @{
# inputPath = [String]
# inputFilter = [String]
# typeFilter = [String[]]
# outputPath = [String]
# fileNamePrefix = [String]
# fileNameSuffix = [String]
# asTemplate = [Boolean]
# recurse = [Boolean]
# whatIf = [Boolean]
# }
#
[CmdletBinding(SupportsShouldProcess)]
param (
[Parameter()][String]$AlzToolsPath = "$PWD/enterprise-scale/src/Alz.Tools",
[Parameter()][String]$TargetPath = "$PWD/library/platform/amba",
[Parameter()][String]$SourcePath = "$PWD/enterprise-scale",
[Parameter()][String]$LineEnding = "unix",
[Parameter()][Switch]$Reset,
[Parameter()][Switch]$UpdateProviderApiVersions
)
$ErrorActionPreference = "Stop"
# This script relies on a custom set of classes and functions
# defined within the EnterpriseScaleLibraryTools PowerShell
# module.
Import-Module $AlzToolsPath -ErrorAction Stop
# To avoid needing to authenticate with Azure, the following
# code will preload the ProviderApiVersions cache from a
# stored state in the module if the UseCacheFromModule flag
# is set and the ProviderApiVersions.zip file is present.
if (!$UpdateProviderApiVersions -and (Test-Path "$AlzToolsPath/ProviderApiVersions.zip")) {
Write-Information "Pre-loading ProviderApiVersions from saved cache." -InformationAction Continue
Invoke-UseCacheFromModule($AlzToolsPath)
}
# Get a list of current Policy Definition names
$policyDefinitionFiles = Get-ChildItem -Path "$TargetPath/platform/amba/policy_definitions/"
$policyDefinitionNames = $policyDefinitionFiles | ForEach-Object {
(Get-Content -Path $_ | ConvertFrom-Json).Name
}
# Get a list of current Policy Set Definition names
$policySetDefinitionFiles = Get-ChildItem -Path "$TargetPath/platform/amba/policy_set_definitions/"
$policySetDefinitionNames = $policySetDefinitionFiles | ForEach-Object {
(Get-Content -Path $_ | ConvertFrom-Json).Name
}
# Update the es_root archetype definition to reflect
# the current list of Policy Definitions and Policy
# Set Definitions
$esRootFilePath = $TargetPath + "/platform/amba/archetype_definitions/root.alz_archetype_definition.json"
Write-Information "Loading `"root`" archetype definition." -InformationAction Continue
$esRootConfig = Get-Content -Path $esRootFilePath | ConvertFrom-Json
Write-Information "Updating Policy Definitions in `"root`" archetype definition." -InformationAction Continue
$esRootConfig.policy_definitions = $policyDefinitionNames
Write-Information "Updating Policy Set Definitions in `"root`" archetype definition." -InformationAction Continue
$esRootConfig.policy_set_definitions = $policySetDefinitionNames
Write-Information "Saving `"root`" archetype definition." -InformationAction Continue
$esRootConfig | ConvertTo-Json -Depth 10 | Edit-LineEndings -LineEnding $LineEnding | Out-File -FilePath $esRootFilePath -Force