sparse-intern-71089
01/26/2023, 6:06 PMboundless-monkey-2042
01/26/2023, 9:44 PMboundless-monkey-2042
01/26/2023, 9:44 PMfunction run-infra{
    Param(
        [Alias("a")]
        [parameter(Mandatory = $true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$True, HelpMessage="Pulumi action to run.")]
        [ValidateSet("up","destroy","refresh")]
        [string] $action,
        [Alias("e")]
        [parameter(Mandatory = $true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$True, HelpMessage="Environment variable used in resource names. Default value = dev")]
        [string] $env,
        [Alias("t")]
        [parameter(Mandatory = $true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$True, HelpMessage="Path to local transcripts folder.")]
        [string] $transcriptsDir,
        [Alias("p")]
        [parameter(Mandatory = $true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$True, HelpMessage="Path to local folder that contains Pulumi projects.")]
        [string] $projectsRoot,
        [Alias("s")]
        [parameter(Mandatory = $false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$True, HelpMessage="Steps to skip as. Example 1,3,4,5 only applies step 2")]
        [string[]] $skip = @()
    )
$null = New-Item -Path $transcriptsDir  -ItemType Directory -ErrorAction Ignore
Start-Transcript -Path "$transcriptsDir\$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ")))_Transcript.txt"
Get-Date 
function Deploy {
    param (
        $stack
    )
    switch($stack)
    {
        1 {
            write-host "az_hub ($($env)Test10) > pulumi $action "
            set-location "$projectsRoot\az_hub"
            if ($env -ieq "dev") {
                pulumi stack select devTest10
                pulumi $action -y -f
                pulumi stack select devTest172
                pulumi $action -y -f
            }elseif ($env -ieq "sys") {
                pulumi stack select sysTest10
                pulumi $action -y
                pulumi stack select sysTest172
                pulumi $action -y
            }
            Break
        } 2 {
            write-host "az_hub_panfw ($($env)Test10) > pulumi $action "
            # Depends On: az_hub-devTest10
            if ($action -ieq "up"){
            az vm image accept-terms --urn "paloaltonetworks:vmseries-flex:byol:10.2.3"
            }
            set-location "$projectsRoot\az_hub_panfw"
            if ($env -ieq "dev") {
                pulumi stack select devTest10
                pulumi $action -y -f
                pulumi stack select devTest172
                pulumi $action -y -f
            }elseif ($env -ieq "sys") {
                pulumi stack select sysTest10
                pulumi $action -y
                pulumi stack select sysTest172
                pulumi $action -y
            }
            Break
        } 3 {
            write-host "az_panfw_lb ($($env)Test10) > pulumi $action "
            # Depends On: az_hub-devTest10
            set-location "$projectsRoot\az_panfw_lb"
            if ($env -ieq "dev") {
                pulumi stack select devTest10
                pulumi $action -y -f
                pulumi stack select devTest172
                pulumi $action -y -f
            }elseif ($env -ieq "sys") {
                pulumi stack select sysTest10
                pulumi $action -y
                pulumi stack select sysTest172
                pulumi $action -y
            }
            Break
        } 4 {
            write-host "az_hub_spoke (pano-devTest) > pulumi $action "
            # Depends On: az_hub-devTest10
            Set-Location "$projectsRoot\az_hub_spoke"
            if ($env -ieq "dev") {
                pulumi stack select pano-devTest
                pulumi $action -y -f
            }elseif ($env -ieq "sys") {
                pulumi stack select pano-sysTest
                pulumi $action -y
            }
            Break
        } 5 {
            write-host "az_spoke_panorama (devTest) > pulumi $action "
            # Depends On: az_hub_spoke-pano-devTest
            set-location "$projectsRoot\az_spoke_panorama"
            if ($env -ieq "dev") {
                pulumi stack select devTest
                pulumi $action -y -f
            }elseif ($env -ieq "sys") {
                pulumi stack select devTest
                pulumi $action -y
            }
        }
    }
}
if ( ($action -ieq "up") -or ($action -ieq "refresh") )
{
    1..5 | % { if($skip.Contains($_) -eq $false){ Deploy -stack $_} }
}elseif ( $action -ieq "destroy" ) {
    5..1 | % { if($skip.Contains($_) -eq $false) { Deploy -stack $_ }}
}
Get-Date 
Stop-Transcript
}
# Run-Infra -action "up" -env "dev" -t 'D:\_Repos\Infrastructure\Transcripts' -projectsRoot 'D:\_Repos\Infrastructure'boundless-monkey-2042
01/26/2023, 9:47 PMbitter-postman-91441
01/26/2023, 11:29 PMboundless-monkey-2042
01/26/2023, 11:39 PMconfig:
  cfg:stackRefOrg: dmanson
  cfg:stackRefProject: az_hub
  cfg:stackRefEnv: devTest10
  cfg:targetSubscriptionId: 44444444-0000-0000-0000-111111111111
Then in the stack something like this is called.  You can prevent the stacks from running out of sequence easily.  Your logic would siply need to know its dependencies, its stack Ref(s), but also everything that depends on it for destroy, not as easy.
_hubStack = new StackReference($"{_config.Require("stackRefOrg")}/{_config.Require("stackRefProject")}/{_config.Require("stackRefEnv")}");
        this.StackRef = _hubStack.Name;
        var currentConfig = (Pulumi.AzureNative.Authorization.GetClientConfigResult) Pulumi.AzureNative.Authorization.GetClientConfig.InvokeAsync().GetAwaiter().GetResult();
        var targetSubscriptionId = _config.Require("targetSubscriptionId");
        if(currentConfig.SubscriptionId != targetSubscriptionId)
        {
            Pulumi.Log.Error($"The target subscription {targetSubscriptionId} is not the current subscription. Use `az account set --subscription {targetSubscriptionId}` to select the expected subscription");
        }
        this.PanFwSubscriptionId = Output.Create(currentConfig.SubscriptionId);
Something to think about.bitter-postman-91441
01/26/2023, 11:48 PM