2020-07-28 17:36:43 +05:30
Param (
[ parameter ( Mandatory = $false ) ] [ string ] $registry ,
[ parameter ( Mandatory = $false ) ] [ string ] $dockerUser ,
[ parameter ( Mandatory = $false ) ] [ string ] $dockerPassword ,
[ parameter ( Mandatory = $false ) ] [ string ] $externalDns ,
[ parameter ( Mandatory = $false ) ] [ string ] $appName = " eshop " ,
[ parameter ( Mandatory = $false ) ] [ bool ] $deployInfrastructure = $true ,
[ parameter ( Mandatory = $false ) ] [ bool ] $deployCharts = $true ,
[ parameter ( Mandatory = $false ) ] [ bool ] $clean = $true ,
[ parameter ( Mandatory = $false ) ] [ string ] $aksName = " " ,
[ parameter ( Mandatory = $false ) ] [ string ] $aksRg = " " ,
[ parameter ( Mandatory = $false ) ] [ string ] $imageTag = " latest " ,
[ parameter ( Mandatory = $false ) ] [ bool ] $useLocalk8s = $false ,
[ parameter ( Mandatory = $false ) ] [ bool ] $useMesh = $false ,
[ parameter ( Mandatory = $false ) ] [ string ] [ ValidateSet ( 'Always' , 'IfNotPresent' , 'Never' , IgnoreCase = $false ) ] $imagePullPolicy = " Always " ,
[ parameter ( Mandatory = $false ) ] [ string ] [ ValidateSet ( 'prod' , 'staging' , 'none' , 'custom' , IgnoreCase = $false ) ] $sslSupport = " none " ,
[ parameter ( Mandatory = $false ) ] [ string ] $tlsSecretName = " eshop-tls-custom " ,
[ parameter ( Mandatory = $false ) ] [ string ] $chartsToDeploy = " * " ,
[ parameter ( Mandatory = $false ) ] [ string ] $ingressMeshAnnotationsFile = " ingress_values_linkerd.yaml "
)
function Install-Chart {
Param ( [ string ] $chart , [ string ] $initialOptions , [ bool ] $customRegistry )
$options = $initialOptions
if ( $sslEnabled ) {
$options = " $options --set ingress.tls[0].secretName= $tlsSecretName --set ingress.tls[0].hosts= ` { $dns ` } "
if ( $sslSupport -ne " custom " ) {
$options = " $options --set inf.tls.issuer= $sslIssuer "
}
}
if ( $customRegistry ) {
$options = " $options --set inf.registry.server= $registry --set inf.registry.login= $dockerUser --set inf.registry.pwd= $dockerPassword --set inf.registry.secretName=eshop-docker-scret "
}
if ( $chart -ne " eshop-common " -or $customRegistry ) { # eshop-common is ignored when no secret must be deployed
$command = " helm install $appName - $chart $options $chart "
Write-Host " Helm Command: $command " -ForegroundColor Gray
Invoke-Expression $command
}
}
$dns = $externalDns
$sslEnabled = $false
$sslIssuer = " "
if ( $sslSupport -eq " staging " ) {
$sslEnabled = $true
$tlsSecretName = " eshop-letsencrypt-staging "
$sslIssuer = " letsencrypt-staging "
}
elseif ( $sslSupport -eq " prod " ) {
$sslEnabled = $true
$tlsSecretName = " eshop-letsencrypt-prod "
$sslIssuer = " letsencrypt-prod "
}
elseif ( $sslSupport -eq " custom " ) {
$sslEnabled = $true
}
$ingressValuesFile = " ingress_values.yaml "
if ( $useLocalk8s -eq $true ) {
$ingressValuesFile = " ingress_values_dockerk8s.yaml "
$dns = " localhost "
}
if ( $externalDns -eq " aks " ) {
if ( [ string ] :: IsNullOrEmpty ( $aksName ) -or [ string ] :: IsNullOrEmpty ( $aksRg ) ) {
Write-Host " Error: When using -dns aks, MUST set -aksName and -aksRg too. " -ForegroundColor Red
exit 1
}
Write-Host " Getting DNS of AKS of AKS $aksName (in resource group $aksRg )... " -ForegroundColor Green
$dns = $ ( az aks show -n $aksName -g $aksRg - -query addonProfiles . httpApplicationRouting . config . HTTPApplicationRoutingZoneName )
if ( [ string ] :: IsNullOrEmpty ( $dns ) ) {
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
exit 1
}
$dns = $dns -replace '[\"]'
Write-Host " DNS base found is $dns . Will use $appName . $dns for the app! " -ForegroundColor Green
$dns = " $appName . $dns "
}
# Initialization & check commands
if ( [ string ] :: IsNullOrEmpty ( $dns ) ) {
Write-Host " No DNS specified. Ingress resources will be bound to public ip " -ForegroundColor Yellow
if ( $sslEnabled ) {
Write-Host " Can't bound SSL to public IP. DNS is mandatory when using TLS " -ForegroundColor Red
exit 1
}
}
if ( $useLocalk8s -and $sslEnabled ) {
Write-Host " SSL can'be enabled on local K8s. " -ForegroundColor Red
exit 1
}
if ( $clean ) {
$listOfReleases = $ ( helm ls - -filter eshop -q )
if ( [ string ] :: IsNullOrEmpty ( $listOfReleases ) ) {
Write-Host " No previous releases found! " -ForegroundColor Green
} else {
Write-Host " Previous releases found " -ForegroundColor Green
Write-Host " Cleaning previous helm releases... " -ForegroundColor Green
helm uninstall $listOfReleases
Write-Host " Previous releases deleted " -ForegroundColor Green
}
}
$useCustomRegistry = $false
if ( -not [ string ] :: IsNullOrEmpty ( $registry ) ) {
$useCustomRegistry = $true
if ( [ string ] :: IsNullOrEmpty ( $dockerUser ) -or [ string ] :: IsNullOrEmpty ( $dockerPassword ) ) {
Write-Host " Error: Must use -dockerUser AND -dockerPassword if specifying custom registry " -ForegroundColor Red
exit 1
}
}
Write-Host " Begin eShopOnContainers installation using Helm " -ForegroundColor Green
$infras = ( " sql-data " , " nosql-data " , " rabbitmq " , " keystore-data " , " basket-data " )
2020-12-21 16:44:02 +01:00
$charts = ( " eshop-common " , " basket-api " , " catalog-api " , " identity-api " , " mobileshoppingagg " , " ordering-api " , " ordering-backgroundtasks " , " ordering-signalrhub " , " payment-api " , " webmvc " , " webshoppingagg " , " webspa " , " webstatus " , " webhooks-api " , " webhooks-web " )
$gateways = ( " apigwms " , " apigwws " )
2020-07-28 17:36:43 +05:30
if ( $deployInfrastructure ) {
foreach ( $infra in $infras ) {
Write-Host " Installing infrastructure: $infra " -ForegroundColor Green
helm install " $appName - $infra " - -values app . yaml - -values inf . yaml - -values $ingressValuesFile - -set app . name = $appName - -set inf . k8s . dns = $dns - -set " ingress.hosts={ $dns } " $infra
}
}
else {
Write-Host " eShopOnContainers infrastructure (bbdd, redis, ...) charts aren't installed (-deployCharts is false) " -ForegroundColor Yellow
}
if ( $deployCharts ) {
foreach ( $chart in $charts ) {
if ( $chartsToDeploy -eq " * " -or $chartsToDeploy . Contains ( $chart ) ) {
Write-Host " Installing: $chart " -ForegroundColor Green
Install-Chart $chart " --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.tls.enabled= $sslEnabled --set inf.mesh.enabled= $useMesh --set inf.k8s.local= $useLocalk8s " $useCustomRegistry
}
}
foreach ( $chart in $gateways ) {
if ( $chartsToDeploy -eq " * " -or $chartsToDeploy . Contains ( $chart ) ) {
Write-Host " Installing Api Gateway Chart: $chart " -ForegroundColor Green
Install-Chart $chart " --values app.yaml --values inf.yaml --values $ingressValuesFile --set app.name= $appName --set inf.k8s.dns= $dns --set image.pullPolicy= $imagePullPolicy --set inf.mesh.enabled= $useMesh --set ingress.hosts= `` { $dns `` } --set inf.tls.enabled= $sslEnabled " $false
}
}
}
else {
Write-Host " eShopOnContainers non-infrastructure charts aren't installed (-deployCharts is false) " -ForegroundColor Yellow
}
Write-Host " helm charts installed. " -ForegroundColor Green