21
21
[Parameter (HelpMessage = " The domain (CN) name for the SSL certificate" )]
22
22
[string ] $YOUR_DOMAIN ,
23
23
24
- [Parameter (HelpMessage = " Flag if production or stage of Let's Encrypt will be used. 0 -> Staging 1 -> Production " )]
25
- [int ] $PRODUCTION = 1 ,
24
+ [Parameter (HelpMessage = " `$ True -> Use Let's Encrypt staging for script testing (Bot cannot be reached from Bot Framework Service) - Default: `$ False " )]
25
+ [string ] $LETS_ENCRYPT_STAGING = $False ,
26
26
27
27
[Parameter (HelpMessage = " Terraform Automation Flag. `$ False -> Interactive, Approval `$ True -> Automatic Approval" )]
28
28
[bool ] $AUTOAPPROVE = $False ,
@@ -38,25 +38,28 @@ $success = $True
38
38
$loopcount = 0
39
39
$waitretrysec = 10
40
40
$loopmax = (60 * $MAX_WAIT_TIME_MIN ) / $waitretrysec
41
-
42
- # Tell who you are
43
- Write-Host " `n`n # Executing $ ( $MyInvocation.MyCommand.Name ) "
41
+ $terraformFolder = " SSLIssuing"
42
+ $iaCFolder = " IaC"
43
+ if ($LETS_ENCRYPT_STAGING ) {
44
+ $PRODUCTION = 0
45
+ } else {
46
+ $PRODUCTION = 1
47
+ }
48
+ # Import Helper functions
49
+ . " $ ( $MyInvocation.MyCommand.Path -replace ($MyInvocation.MyCommand.Name )) \HelperFunctions.ps1"
50
+ # Tell who you are (See HelperFunction.ps1)
51
+ Write-WhoIAm
44
52
45
53
# 1. Read values from Terraform IaC run (Bot deployment scripts)
46
54
Write-Host " ## 1. Read values from Terraform IaC run (Bot deployment scripts)"
47
- $KeyVault = terraform output - state= " .\IaC\terraform.tfstate" - json keyVault | ConvertFrom-Json
48
- $TrafficManager = terraform output - state= " .\IaC\terraform.tfstate" - json trafficManager | ConvertFrom-Json
55
+ $KeyVault = terraform output - state= " $ ( Get-ScriptPath ) /$iaCFolder /terraform.tfstate" - json keyVault | ConvertFrom-Json
56
+ $success = $success -and $?
57
+ $TrafficManager = terraform output - state= " $ ( Get-ScriptPath ) /$iaCFolder /terraform.tfstate" - json trafficManager | ConvertFrom-Json
58
+ $success = $success -and $?
49
59
50
60
# 2. Apply Terraform for SSLIssuing
51
61
Write-Host " ## 2. Apply Terraform for SSLIssuing"
52
62
53
- if ($AUTOAPPROVE -eq $True )
54
- {
55
- $AUTOFLAG = " -auto-approve"
56
- } else {
57
- $AUTOFLAG = " "
58
- }
59
-
60
63
if ($YOUR_DOMAIN -eq " " )
61
64
{
62
65
# If no custom domain is given use DNS of Traffic Manager Profile
@@ -68,31 +71,34 @@ elseif ($YOUR_DOMAIN -ne $TrafficManager.fqdn) {
68
71
az network traffic- manager endpoint create -- profile- name $TrafficManager.name -- resource- group $TrafficManager.resource_group -- name dummy -- type externalEndpoints -- endpoint- location koreacentral -- target www.bing.com > $null
69
72
70
73
# If a custom domain is set check if CNAME to TrafficManager FQDN is set
71
- $resolved = Resolve-DnsName - Name $YOUR_DOMAIN - DnsOnly 2> $null
72
-
73
- while ((($? -eq $False ) -or (($resolved.NameHost | Where-Object - FilterScript { $_ -eq $TrafficManager.fqdn }) -ne $TrafficManager.fqdn )) -and ($loopcount -le $loopmax ))
74
+ # Not working in PowerShellCore: $resolved = Resolve-DnsName -Name $YOUR_DOMAIN -DnsOnly 2> $null
75
+ # Changing to nslookup
76
+ $resolved = nslookup $FQDN 2> $null
77
+ while (((($resolved | Select-String $TrafficManager.fqdn ).Length -eq 0 )) -and ($loopcount -le $loopmax ))
74
78
{
75
79
$loopcount ++
76
80
Write-Host " ### WARNING, there is no CNAME entry for domain '$YOUR_DOMAIN ' pointing to '$ ( $TrafficManager.fqdn ) '."
77
81
Write-Host " ### Please check your DNS entry, or create the missing CNAME entry. Sleeping for $waitretrysec seconds and try again..."
78
82
Start-Sleep - s $waitretrysec
79
- $resolved = Resolve-DnsName - Name $YOUR_DOMAIN - DnsOnly 2> $null
83
+ # $resolved = Resolve-DnsName -Name $YOUR_DOMAIN -DnsOnly 2> $null
84
+ $resolved = nslookup $FQDN 2> $null
80
85
}
81
86
82
87
# delete dummy endpoint again
83
88
az network traffic- manager endpoint delete -- name dummy -- type externalEndpoints -- profile- name $TrafficManager.name -- resource- group $TrafficManager.resource_group > $null
84
89
# TrafficManager healthcheck profile will be changed back in SSLActivate Terraform (ActivateSSL.ps1)
85
90
}
86
91
87
- Set-Location SSLIssuing
88
- terraform init
92
+ # Terraform Init
93
+ terraform init " $ ( Get-ScriptPath ) /$terraformFolder "
94
+ # Terraform Apply
89
95
terraform apply - var " keyVault_name=$ ( $KeyVault.name ) " - var " keyVault_rg=$ ( $KeyVault.resource_group ) " `
90
96
- var " your_certificate_email=$YOUR_CERTIFICATE_EMAIL " - var " your_domain=$YOUR_DOMAIN " `
91
97
- var " trafficmanager_name=$ ( $TrafficManager.name ) " - var " trafficmanager_rg=$ ( $TrafficManager.resource_group ) " `
92
98
- var " aci_rg=$ ( $KeyVault.resource_group ) " - var " aci_location=$ ( $KeyVault.location ) " `
93
- - var " keyVault_cert_name=$KEYVAULT_CERT_NAME " - var " production=$PRODUCTION " $AUTOFLAG
99
+ - var " keyVault_cert_name=$KEYVAULT_CERT_NAME " `
100
+ - var " production=$PRODUCTION " - state= " $ ( Get-ScriptPath ) /$terraformFolder /terraform.tfstate" $ (Get-TerraformAutoApproveFlag $AUTOAPPROVE ) " $ ( Get-ScriptPathTerraformApply ) /$terraformFolder "
94
101
$success = $success -and $?
95
- Set-Location ..
96
102
97
103
# 3. Check for creation of certificate
98
104
Write-Host " ## 3. Check for availability of certificate"
@@ -110,15 +116,18 @@ Write-Host "## Certificate found!"
110
116
111
117
# 4. Destroy Terraform SSLIssuing
112
118
Write-Host " ## 4. Destroy unneccessary infrastructure again"
113
- Set-Location SSLIssuing
114
- terraform init
119
+
120
+ # Terraform Init (should not be needed)
121
+ terraform init " $ ( Get-ScriptPath ) /$terraformFolder "
122
+ # Terraform Destroy
115
123
terraform destroy - var " keyVault_name=$ ( $KeyVault.name ) " - var " keyVault_rg=$ ( $KeyVault.resource_group ) " `
116
124
- var " your_certificate_email=$YOUR_CERTIFICATE_EMAIL " - var " your_domain=$YOUR_DOMAIN " `
117
125
- var " trafficmanager_name=$ ( $TrafficManager.name ) " - var " trafficmanager_rg=$ ( $TrafficManager.resource_group ) " `
118
126
- var " aci_rg=$ ( $KeyVault.resource_group ) " - var " aci_location=$ ( $KeyVault.location ) " `
119
- - var " keyVault_cert_name=$KEYVAULT_CERT_NAME " - var " production=$PRODUCTION " $AUTOFLAG
127
+ - var " keyVault_cert_name=$KEYVAULT_CERT_NAME " `
128
+ - var " production=$PRODUCTION " - state= " $ ( Get-ScriptPath ) /$terraformFolder /terraform.tfstate" $ (Get-TerraformAutoApproveFlag $AUTOAPPROVE ) " $ ( Get-ScriptPathTerraformApply ) /$terraformFolder "
120
129
$success = $success -and $?
121
- Set-Location ..
122
130
123
131
# Return execution status
132
+ Write-ExecutionStatus - success $success
124
133
exit $success
0 commit comments