Private/Invoke-TerraformConfigK8s.ps1
Function Invoke-TerraformConfigK8s { [CmdletBinding()] Param( [Parameter(Mandatory)] [string]$ClusterName, [Parameter(Mandatory)] [int]$TillerReplicaCount, [Parameter(Mandatory)] [int]$IngressCtrlReplicaCount, [Parameter(Mandatory)] [int]$PrometheusServerReplicaCount, [Parameter(Mandatory)] [string]$IngressCtrlIPAddress, [Parameter(Mandatory)] [string]$LetsEncryptEmail, [Parameter(Mandatory)] [ValidateSet('staging', 'prod')] [string]$LetsEncryptEnvironment, [Parameter(Mandatory)] [string]$IngressCtrlFqdn, [Parameter(Mandatory)] [string]$Environment, [Parameter(Mandatory)] [string]$TerraformOutputFolder ) $StateChildPath = 'TF_{0}\StateFiles\k8s.tfstate' -f $ClusterName $StatePath = Join-Path $TerraformOutputFolder -ChildPath $StateChildPath $StatePathJsonEscape = $StatePath.Replace('\', '/') Write-ConsoleLog "State file path (JSON escaped) : $StatePathJsonEscape" $PlanChildPath = 'TF_{0}\PlanFiles\k8s.tfplan' -f $ClusterName $PlanPath = Join-Path $TerraformOutputFolder -ChildPath $PlanChildPath $PlanPathJsonEscape = $PlanPath.Replace('\', '/') Write-ConsoleLog "Plan file path (JSON escaped) : $PlanPathJsonEscape" $PlanFolderPath = Split-Path $PlanPathJsonEscape -Parent If ( -not(Test-Path $PlanFolderPath -PathType Container) ) { Write-ConsoleLog "Creating plan folder : $PlanFolderPath" $Null = New-Item -ItemType Directory -Path $PlanFolderPath -Force } $CertYamlPath = Join-Path $TerraformOutputFolder -ChildPath "TF_$ClusterName\Ingress_Certificate.yaml" $CertYamlPathJsonEscape = $CertYamlPath.Replace('\', '/') $TillerPodCountVar = '-var tiller_replica_count={0}' -f $TillerReplicaCount.ToString() $IngressCtrlCountVar = 'ingressctrl_replica_count={0}' -f $IngressCtrlReplicaCount.ToString() $PrometheusSvrCountVar = 'prometheus_svr_replica_count={0}' -f $PrometheusServerReplicaCount.ToString() $IngressCtrlIpVar = 'ingressctrl_ip_address={0}' -f $IngressCtrlIPAddress $EmailVar = 'letsencrypt_email_address={0}' -f $LetsEncryptEmail $LetsEncryptEnv = 'letsencrypt_environment={0}' -f $LetsEncryptEnvironment $IngressFqdnVar = 'ingressctrl_fqdn={0}' -f $IngressCtrlFqdn $CertYamlVar = 'ingress_cert_yaml_path={0}' -f $CertYamlPathJsonEscape $EnvVar = 'environment={0}' -f $Environment $PlanCmdVars = $TillerPodCountVar, $IngressCtrlCountVar, $PrometheusSvrCountVar, $IngressCtrlIpVar, $EmailVar, $LetsEncryptEnv, $IngressFqdnVar, $CertYamlVar, $EnvVar -join ' -var ' $PlanCmd = [scriptblock]::Create("terraform.exe plan -out=$PlanPathJsonEscape -input=false -detailed-exitcode $PlanCmdVars") & $PlanCmd If ( $LASTEXITCODE -eq 1 ) { Throw 'An error occurred while creating the Terraform plan. For details, please review the Terraform output above.' } $ApplyCmdString = 'terraform apply -input=false "{0}"' -f $PlanPathJsonEscape $ApplyCmd = [scriptblock]::Create($ApplyCmdString) & $ApplyCmd If ( $LASTEXITCODE -eq 1 ) { Throw 'An error occurred while applying the Terraform plan. For details, please review the Terraform output above.' } } |