You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
5.8 KiB

5 years ago
  1. Param(
  2. [parameter(Mandatory=$false)][string]$registry,
  3. [parameter(Mandatory=$false)][string]$dockerUser,
  4. [parameter(Mandatory=$false)][string]$dockerPassword,
  5. [parameter(Mandatory=$false)][string]$externalDns,
  6. [parameter(Mandatory=$false)][string]$appName="eshop",
  7. [parameter(Mandatory=$false)][bool]$deployInfrastructure=$true,
  8. [parameter(Mandatory=$false)][bool]$deployCharts=$true,
  9. [parameter(Mandatory=$false)][bool]$clean=$true,
  10. [parameter(Mandatory=$false)][string]$aksName="",
  11. [parameter(Mandatory=$false)][string]$aksRg="",
  12. [parameter(Mandatory=$false)][string]$imageTag="latest",
  13. [parameter(Mandatory=$false)][bool]$useLocalk8s=$false,
  14. [parameter(Mandatory=$false)][bool]$useMesh=$false,
  15. [parameter(Mandatory=$false)][string][ValidateSet('Always','IfNotPresent','Never', IgnoreCase=$false)]$imagePullPolicy="Always",
  16. [parameter(Mandatory=$false)][string]$chartsToDeploy="*",
  17. [parameter(Mandatory=$false)][string]$ingressMeshAnnotationsFile="ingress_values_linkerd.yaml"
  18. )
  19. $dns = $externalDns
  20. $ingressValuesFile="ingress_values.yaml"
  21. if ($useLocalk8s -eq $true) {
  22. $ingressValuesFile="ingress_values_dockerk8s.yaml"
  23. $dns="localhost"
  24. }
  25. if ($externalDns -eq "aks") {
  26. if ([string]::IsNullOrEmpty($aksName) -or [string]::IsNullOrEmpty($aksRg)) {
  27. Write-Host "Error: When using -dns aks, MUST set -aksName and -aksRg too." -ForegroundColor Red
  28. exit 1
  29. }
  30. Write-Host "Getting DNS of AKS of AKS $aksName (in resource group $aksRg)..." -ForegroundColor Green
  31. $dns = $(az aks show -n $aksName -g $aksRg --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName)
  32. if ([string]::IsNullOrEmpty($dns)) {
  33. Write-Host "Error getting DNS of AKS $aksName (in resource group $aksRg). Please ensure AKS has httpRouting enabled AND Azure CLI is logged & in version 2.0.37 or higher" -ForegroundColor Red
  34. exit 1
  35. }
  36. $dns = $dns -replace '[\"]'
  37. Write-Host "DNS base found is $dns. Will use $appName.$dns for the app!" -ForegroundColor Green
  38. $dns = "$appName.$dns"
  39. }
  40. # Initialization & check commands
  41. if ([string]::IsNullOrEmpty($dns)) {
  42. Write-Host "No DNS specified. Ingress resources will be bound to public ip" -ForegroundColor Yellow
  43. }
  44. if ($clean) {
  45. Write-Host "Cleaning previous helm releases..." -ForegroundColor Green
  46. helm delete --purge $(helm ls -q eshop)
  47. Write-Host "Previous releases deleted" -ForegroundColor Green
  48. }
  49. $useCustomRegistry=$false
  50. if (-not [string]::IsNullOrEmpty($registry)) {
  51. $useCustomRegistry=$true
  52. if ([string]::IsNullOrEmpty($dockerUser) -or [string]::IsNullOrEmpty($dockerPassword)) {
  53. Write-Host "Error: Must use -dockerUser AND -dockerPassword if specifying custom registry" -ForegroundColor Red
  54. exit 1
  55. }
  56. }
  57. Write-Host "Begin eShopOnContainers installation using Helm" -ForegroundColor Green
  58. $infras = ("sql-data", "nosql-data", "rabbitmq", "keystore-data", "basket-data")
  59. $charts = ("eshop-common", "basket-api","catalog-api", "identity-api", "locations-api", "marketing-api", "mobileshoppingagg","ordering-api","ordering-backgroundtasks","ordering-signalrhub", "payment-api", "webmvc", "webshoppingagg", "webspa", "webstatus", "webhooks-api", "webhooks-web")
  60. $gateways = ("apigwmm", "apigwms", "apigwwm", "apigwws")
  61. if ($deployInfrastructure) {
  62. foreach ($infra in $infras) {
  63. Write-Host "Installing infrastructure: $infra" -ForegroundColor Green
  64. helm install --values app.yaml --values inf.yaml --values $ingressValuesFile --set app.name=$appName --set inf.k8s.dns=$dns --set "ingress.hosts={$dns}" --name="$appName-$infra" $infra
  65. }
  66. }
  67. else {
  68. Write-Host "eShopOnContainers infrastructure (bbdd, redis, ...) charts aren't installed (-deployCharts is false)" -ForegroundColor Yellow
  69. }
  70. if ($deployCharts) {
  71. foreach ($chart in $charts) {
  72. if ($chartsToDeploy -eq "*" -or $chartsToDeploy.Contains($chart)) {
  73. Write-Host "Installing: $chart" -ForegroundColor Green
  74. if ($useCustomRegistry) {
  75. helm install --set inf.registry.server=$registry --set inf.registry.login=$dockerUser --set inf.registry.pwd=$dockerPassword --set inf.registry.secretName=eshop-docker-scret --values app.yaml --values inf.yaml --values $ingressValuesFile --values $ingressMeshAnnotationsFile --set app.name=$appName --set inf.k8s.dns=$dns --set "ingress.hosts={$dns}" --set image.tag=$imageTag --set image.pullPolicy=$imagePullPolicy --set inf.mesh.enabled=$useMesh --set inf.k8s.local=$useLocalk8s --name="$appName-$chart" $chart
  76. }
  77. else {
  78. if ($chart -ne "eshop-common") { # eshop-common is ignored when no secret must be deployed
  79. helm install --values app.yaml --values inf.yaml --values $ingressValuesFile --values $ingressMeshAnnotationsFile --set app.name=$appName --set inf.k8s.dns=$dns --set "ingress.hosts={$dns}" --set image.tag=$imageTag --set image.pullPolicy=$imagePullPolicy --set inf.mesh.enabled=$useMesh --set inf.k8s.local=$useLocalk8s --name="$appName-$chart" $chart
  80. }
  81. }
  82. }
  83. }
  84. foreach ($chart in $gateways) {
  85. if ($chartsToDeploy -eq "*" -or $chartsToDeploy.Contains($chart)) {
  86. Write-Host "Installing Api Gateway Chart: $chart" -ForegroundColor Green
  87. helm install --values app.yaml --values inf.yaml --values $ingressValuesFile --values $ingressMeshAnnotationsFile --set app.name=$appName --set inf.k8s.dns=$dns --set "ingress.hosts={$dns}" --set image.pullPolicy=$imagePullPolicy --set inf.mesh.enabled=$useMesh --name="$appName-$chart" $chart
  88. }
  89. }
  90. }
  91. else {
  92. Write-Host "eShopOnContainers non-infrastructure charts aren't installed (-deployCharts is false)" -ForegroundColor Yellow
  93. }
  94. Write-Host "helm charts installed." -ForegroundColor Green