Reframed Install Process - dir org change

This commit is contained in:
Justin Donnelly
2020-10-18 16:16:54 +00:00
parent 9b2002822b
commit b6a9550a6f
37 changed files with 281 additions and 280 deletions

5
.gitignore vendored
View File

@@ -1,5 +1,8 @@
bt-autoscaler/.terraform/
*.terraform*
esoteric-parsec*json
*.tfstate*
*terraform-provider*
*.deb
*license.json
*history*
*functions.ps1

View File

@@ -4,11 +4,14 @@
"zone": "europe-west1-d",
"private_network": "projects/esoteric-parsec-243510/global/networks/default",
"database_version": "POSTGRES_9_6",
"db_tier": "db-g1-small",
"file_tier": "BASIC_HDD",
"vm_type": "e2-highmem-4",
"min_cpu": "Intel Skylake",
"image": "gce-uefi-images/windows-2019",
"disk_type": "pd-ssd",
"availability_type": "REGIONAL",
"db_user": "postgres",
"user_name": "qlikadmin",
"user_password": "Qlik1234!"
}

View File

@@ -20,6 +20,18 @@ variable "tier" {
default = "db-f1-micro"
}
variable "db_tier" {
description = "The tier for the primary SQL instance."
type = string
default = "db-f1-micro"
}
variable "file_tier" {
description = "The tier for the Filestore instance."
type = string
default = "BASIC_HDD"
}
variable "zone" {
type = string
description = "Zone target"
@@ -93,6 +105,12 @@ variable "private_network" {
default = "projects/esoteric-parsec-243510/global/networks/private-network"
}
variable "db_user" {
description = "The name of the DB user"
type = string
default = "postgres"
}
variable "user_name" {
description = "The name of the default user"
type = string

View File

@@ -4,11 +4,14 @@
"zone": "europe-west1-d",
"private_network": "projects/esoteric-parsec-243510/global/networks/default",
"database_version": "POSTGRES_9_6",
"db_tier": "db-g1-small",
"file_tier": "BASIC_HDD",
"vm_type": "e2-highmem-4",
"min_cpu": "Intel Skylake",
"image": "gce-uefi-images/windows-2019",
"disk_type": "pd-ssd",
"availability_type": "REGIONAL",
"db_user": "postgres",
"user_name": "qlikadmin",
"user_password": "Qlik1234!"
}

View File

@@ -31,6 +31,30 @@ variable "zone" {
description = "Zone target"
}
variable "disk_type" {
description = "GCE Boot/Attached Disk Type"
type = string
default = "pd-ssd"
}
variable "min_cpu" {
description = "GCE Minimum CPU Family"
type = string
default = "AMD Rome "
}
variable "image" {
description = "Path to GCE Image Type"
type = string
default = "windows-2019/windows-server-2019-dc-v20200908"
}
variable "vm_type" {
description = "The GCE machine type"
type = string
default = "n2d-highmem-8"
}
variable "availability_type" {
description = "The availability type for the master instance.This is only used to set up high availability for the PostgreSQL instance. Can be either `ZONAL` or `REGIONAL`."
type = string
@@ -75,18 +99,18 @@ variable "private_network" {
default = "projects/esoteric-parsec-243510/global/networks/private-network"
}
variable "db_user" {
description = "The name of the DB user"
type = string
default = "postgres"
}
variable "user_name" {
description = "The name of the default user"
type = string
default = "default"
}
variable "db_user" {
description = "The name of the DB user"
type = string
default = "postgres"
}
variable "user_password" {
description = "The password for the default user. If not set, a random one will be generated and available in the generated_user_password output variable."
type = string

View File

@@ -1,7 +1,7 @@
### Main TF - split pSQL to a module
##
provider "google" {
provider "google-beta" {
credentials = file("esoteric-parsec-243510-a8f93bb5a906.json")
project = var.project_id
region = var.region
@@ -15,6 +15,7 @@ resource "random_id" "db_suffix" {
# Create res for Cloud SQL DB create
resource "google_sql_database_instance" "qseow-psql" {
provider = google-beta
name = "qseow-psql-${random_id.db_suffix.hex}"
project = var.project_id
region = var.region
@@ -41,6 +42,7 @@ resource "google_sql_database_instance" "qseow-psql" {
## Use "./destroy.sh" instead of "terraform destroy"
resource "google_sql_user" "users" {
provider = google-beta
instance = google_sql_database_instance.qseow-psql.name
name = var.db_user
password = var.user_password
@@ -57,4 +59,4 @@ resource "null_resource" "db_setup" {
command = "PGPASSWORD=${google_sql_user.users.password} /usr/bin/psql -h ${google_sql_database_instance.qseow-psql.private_ip_address} -Upostgres --dbname=postgres < qseow_db_setup.sql"
}
depends_on = [google_sql_database_instance.qseow-psql, google_sql_user.users]
}
}

View File

@@ -34,4 +34,6 @@ ALTER ROLE qlogs_writer WITH ENCRYPTED PASSWORD 'Qlik1234!';
GRANT qlogs_users TO qlogs_reader;
GRANT qlogs_users TO qlogs_writer;
ALTER DATABASE "QLogs" OWNER TO qlogs_writer; --sets qlogs_writer as an owner of QLogs database
ALTER DATABASE "QLogs" OWNER TO qlogs_writer; --sets qlogs_writer as an owner of QLogs database
SELECT * FROM pg_settings WHERE name = 'max_connections';

View File

@@ -6,6 +6,10 @@
"database_version": "POSTGRES_9_6",
"db_tier": "db-g1-small",
"file_tier": "BASIC_HDD",
"vm_type": "e2-highmem-4",
"min_cpu": "Intel Skylake",
"image": "gce-uefi-images/windows-2019",
"disk_type": "pd-ssd",
"availability_type": "REGIONAL",
"db_user": "postgres",
"user_name": "qlikadmin",

View File

@@ -31,6 +31,30 @@ variable "zone" {
description = "Zone target"
}
variable "disk_type" {
description = "GCE Boot/Attached Disk Type"
type = string
default = "pd-ssd"
}
variable "min_cpu" {
description = "GCE Minimum CPU Family"
type = string
default = "AMD Rome "
}
variable "image" {
description = "Path to GCE Image Type"
type = string
default = "windows-2019/windows-server-2019-dc-v20200908"
}
variable "vm_type" {
description = "The GCE machine type"
type = string
default = "n2d-highmem-8"
}
variable "availability_type" {
description = "The availability type for the master instance.This is only used to set up high availability for the PostgreSQL instance. Can be either `ZONAL` or `REGIONAL`."
type = string
@@ -75,6 +99,12 @@ variable "private_network" {
default = "projects/esoteric-parsec-243510/global/networks/private-network"
}
variable "db_user" {
description = "The name of the DB user"
type = string
default = "postgres"
}
variable "user_name" {
description = "The name of the default user"
type = string

View File

@@ -64,43 +64,11 @@ resource "google_compute_instance" "rim" {
}
metadata = {
windows-startup-script-url = "gs://qliksense/scripts/bootstrap-rim.ps1"
windows-startup-script-url = "gs://qliksense/scripts/bootstrap.ps1"
}
service_account {
email = "terraform@esoteric-parsec-243510.iam.gserviceaccount.com"
scopes = ["userinfo-email", "compute-ro", "storage-rw"]
scopes = ["cloud-platform"]
}
}
# data "google_compute_instance_serial_port" "serial" {
# provider = google-beta
# instance = google_compute_instance.central.name
# zone = var.zone
# port = 4
# }
# resource "local_file" "log" {
# filename = "${path.module}/tf-deploy.log"
# content = join("\n", "${data.google_compute_instance_serial_port.serial.contents}")
# }
# resource "null_resource" "bootstrap" {
# connection {
# type = "winrm"
# https = true
# insecure = true
# use_ntlm = true
# user = var.user_name
# password = var.user_password
# host = google_compute_instance.central.name
# timeout = "20m"
# }
# provisioner "remote-exec" {
# inline = [
# "powershell.exe -ExecutionPolicy Bypass -File E:\\deploy\\scripts\\win-nfs_client-install.ps1"
# ]
# }
# }

View File

@@ -6,7 +6,12 @@
"database_version": "POSTGRES_9_6",
"db_tier": "db-g1-small",
"file_tier": "BASIC_HDD",
"vm_type": "e2-highmem-4",
"min_cpu": "Intel Skylake",
"image": "gce-uefi-images/windows-2019",
"disk_type": "pd-ssd",
"availability_type": "REGIONAL",
"db_user": "postgres",
"user_name": "qlikadmin",
"user_password": "Qlik1234!"
}

View File

@@ -20,6 +20,18 @@ variable "tier" {
default = "db-f1-micro"
}
variable "db_tier" {
description = "The tier for the primary SQL instance."
type = string
default = "db-f1-micro"
}
variable "file_tier" {
description = "The tier for the Filestore instance."
type = string
default = "BASIC_HDD"
}
variable "zone" {
type = string
description = "Zone target"
@@ -93,6 +105,12 @@ variable "private_network" {
default = "projects/esoteric-parsec-243510/global/networks/private-network"
}
variable "db_user" {
description = "The name of the DB user"
type = string
default = "postgres"
}
variable "user_name" {
description = "The name of the default user"
type = string

View File

@@ -0,0 +1,54 @@
#!/usr/bin/env pwsh
#
# Installing Qlik-CLI
# Write-Host "Downloading Qlik-Cli from Github and importing the Module"
# Invoke-WebRequest "https://raw.githubusercontent.com/ahaydon/Qlik-Cli/master/Qlik-Cli.psm1" -OutFile $temp\Qlik-Cli.psm1
# New-Item -ItemType directory -Path C:\Windows\System32\WindowsPowerShell\v1.0\Modules\Qlik-Cli -force
# Move-Item $temp\Qlik-Cli.psm1 C:\Windows\System32\WindowsPowerShell\v1.0\Modules\Qlik-Cli\ -force
# Import-Module Qlik-Cli.psm1
# Export-QlikCertificate -machineNames rim -includeSecretsKey -exportFormat Windows
if ($env:computername -notlike "central-*") {
exit 0
}
$deploy_path = "E:\deploy"
$centralNode = ($env:COMPUTERNAME).ToLower()
# $centralNode = "central-c01c"
$newNode = ($env:COMPUTERNAME).ToLower()
# $newNode = "rim-a8a3"
$qlikID = ".\qlikadmin"
Read-GcsObject -Bucket "qliksense" -ObjectName "certs/rim/client.pfx" -OutFile $deploy_path\certs\rim\client.pfx -Force
Import-PfxCertificate -FilePath $deploy_path\certs\rim\client.pfx -CertStoreLocation Cert:\CurrentUser\My -Exportable
# Connect to Qlik Sense
Get-ChildItem -Path cert:\CurrentUser\My | Where-Object {$_.Issuer -like "*$centralNode*"} | Connect-Qlik -computername https://"$centralNode":4242 -Username $qlikID | Out-Null
Update-QlikUser -id ($(Get-QlikUser -full -filter "name eq 'qlikadmin'") | Where-Object {$_.userDirectory -eq "$centralNode"}).id -roles "RootAdmin"
$proxyId = (Get-QlikVirtualProxy -full | Where-Object description -like "Central*").id
Update-QlikVirtualProxy -id $proxyId -websocketCrossOriginWhiteList "$newNode", "$env:computername"
# Register-QlikNode -hostname $newNode -name $newNode -nodePurpose Both -engineEnabled -proxyEnabled
$password = New-QlikNode -hostname $newNode -name $newNode -nodePurpose Both -engineEnabled -proxyEnabled
$foo = @{__pwd="$password"}
<#
Using this will allow a silent execution without password prompt
$Username = 'DOMAIN\Administrator'
$Password = 'Password123!'
$pass = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass
Invoke-Command -ComputerName qlikserver2.domain.local -ScriptBlock { Invoke-WebRequest -Uri "http://localhost:4570/certificateSetup" -Method Post -Body $Using:foo } -credential $Cred
#>
Invoke-Command -ComputerName $newNode -ScriptBlock { Invoke-WebRequest -Uri "http://localhost:4570/certificateSetup" -Method Post -Body $Using:foo } -credential $qlikID
# Filter by the name param from line 7
$nodeid = Get-QlikNode -filter "(name eq $newNode)"
Invoke-QlikGet -path /qrs/servernoderegistration/start/$($nodeid.id)
# Invoke-Command -Session $qseCon -ScriptBlock { Invoke-Command -ComputerName $using:newNode -ScriptBlock { Invoke-WebRequest -Uri "http://localhost:4570/certificateSetup" -Method Post -Body $foo } -credential $using:newNode\qlikadmin }

View File

@@ -4,10 +4,6 @@
## or as a startup script via Metadata key windows-startup-script-url
##
if ($env:computername -notlike "central-*") {
exit 0
}
# Format and mount data disk
Write-Host "## ========================>> Create Data drive & dirs"
@@ -68,6 +64,7 @@ gsutil -m cp gs://qliksense/binaries/ps7.zip $deploy_path\binaries\
Unblock-File -Path $deploy_path\binaries\*
Unblock-File -Path $deploy_path\scripts\*
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f
# WinRM Connects
New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation -Name AllowFreshCredentialsWhenNTLMOnly -Force
@@ -76,17 +73,18 @@ New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialsDele
Write-Host "## ========================>> Import PS Modules"
Get-PackageProvider -Name NuGet -ForceBootstrap
Install-Module PSDscResources -Force
Install-Module QlikResources -Force
# Install-Module PSDscResources -Force
Install-Module Qlik-CLI -Force
Write-Host "## ========================>> Deploy PS7 | Firefox | VS Code"
Expand-Archive -Path $deploy_path\binaries\ps7.zip -DestinationPath $deploy_path\binaries\ps7
Invoke-Command -ScriptBlock {Start-Process -FilePath "$deploy_path\binaries\vscode_stable.exe" -ArgumentList "/VERYSILENT /MERGETASKS=!runcode" -Wait -PassThru} | Out-Null
Invoke-Command -ScriptBlock {Start-Process -FilePath "$deploy_path\binaries\firefox_latest.exe" -ArgumentList "/s" -Wait -PassThru} | Out-Null
Expand-Archive -Path $deploy_path\binaries\ps7.zip -DestinationPath $deploy_path\binaries\ps7 -Force
Start-Sleep -Seconds 120
Invoke-Command -ScriptBlock {Start-Process -FilePath "$deploy_path\binaries\vscode_stable.exe" -verb runAs -ArgumentList "/VERYSILENT /NORESTART /MERGETASKS=!runcode" -Wait -PassThru} | Out-Null
Invoke-Command -ScriptBlock {Start-Process -FilePath "$deploy_path\binaries\firefox_latest.exe" -verb runAs -ArgumentList "/s" -Wait -PassThru} | Out-Null
# QSEoW FW Rule
Write-Host "## ========================>> Create QSEoW FW Rule"
New-NetFirewallRule -DisplayName "Qlik Sense" -Direction Inbound -LocalPort 443, 4244,4242, 4432, 4444, 5355, 5353, 80, 4248, 3090, 4000, 5555, 5556, 4993, 4994 -Protocol TCP -Action Allow -ea Stop | Out-Null
New-NetFirewallRule -DisplayName "Qlik Sense" -Direction Inbound -LocalPort 80, 443, 3090, 4000, 4432, 4242, 4244, 4444, 4248, 4993, 4994, 5353, 5355, 5555, 5556 -Protocol TCP -Action Allow -ea Stop | Out-Null
# Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
#### Enable NFS Client, set Anon user to UID:GID 0 == root. Restart service.
@@ -99,14 +97,14 @@ New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Def
nfsadmin client stop
nfsadmin client start
#### Launch silent install
Write-Host "========================>> Installing QSEoW"
Invoke-Command -ScriptBlock {Start-Process -FilePath "E:\deploy\binaries\Qlik_Sense_setup.exe" -ArgumentList "-s -log E:\deploy\deploy.log accepteula=1 installdir=E:\deploy\Qlik dbpassword=Qlik1234! hostname=$($env:computername) userwithdomain=$($env:computername)\qservice password=Qlik1234! bundleinstall=dashboard,visualization spc=E:\deploy\scripts\cen.xml" -Wait -PassThru} #| Out-Null
# REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 5 /f
# HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
# New-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce' -Name 'Run' -Value '<insert_script_command_here>'
New-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce' -Name 'Run' -Value 'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -noprofile -sta -WindowStyle Hidden -executionpolicy unrestricted -file E:\deploy\scripts\qsInstall.ps1'
Set-GceInstance -Name ($env:computername).ToLower() -Zone europe-west1-d -AddTag "bootstrapped"
Set-GceInstance -Name ($env:computername).ToLower() -Zone europe-west1-d -RemoveMetadata "windows-startup-script-url"
Restart-Computer
Exit 0

View File

@@ -2,12 +2,12 @@
<SharedPersistenceConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DbUserName>qliksenserepository</DbUserName>
<DbUserPassword>Qlik1234!</DbUserPassword>
<DbHost>10.54.242.14</DbHost>
<DbHost>10.54.242.41</DbHost>
<DbPort>5432</DbPort>
<RootDir>\\10.159.210.26\qlikshare</RootDir>
<StaticContentRootDir>\\10.159.210.26\qlikshare\StaticContent</StaticContentRootDir>
<ArchivedLogsDir>\\10.159.210.26\qlikshare\ArchivedLogs</ArchivedLogsDir>
<AppsDir>\\10.159.210.26\qlikshare\Apps</AppsDir>
<RootDir>\\10.255.55.2\qlikshare</RootDir>
<StaticContentRootDir>\\10.255.55.2\qlikshare\StaticContent</StaticContentRootDir>
<ArchivedLogsDir>\\10.255.55.2\qlikshare\ArchivedLogs</ArchivedLogsDir>
<AppsDir>\\10.255.55.2\qlikshare\Apps</AppsDir>
<CreateCluster>true</CreateCluster>
<InstallLocalDb>false</InstallLocalDb>
<ConfigureDbListener>false</ConfigureDbListener>
@@ -19,6 +19,6 @@
<SetupLocalLoggingDb>false</SetupLocalLoggingDb>
<QLogsWriterPassword>Qlik1234!</QLogsWriterPassword>
<QLogsReaderPassword>Qlik1234!</QLogsReaderPassword>
<QLogsHostname>10.54.242.14</QLogsHostname>
<QLogsHostname>10.54.242.41</QLogsHostname>
<QLogsPort>5432</QLogsPort>
</SharedPersistenceConfiguration>

View File

@@ -0,0 +1,49 @@
#!/usr/bin/env pwsh
#
## Intended to be executed in a GitOps pipeline on the new GCE resource by remote-exec in TF
## or as a startup script via Metadata key windows-startup-script-url
##
$deploy_path = "E:\deploy"
$centralNode = ($env:COMPUTERNAME).ToLower()
# $centralNode = "central-6ccd"
$newNode = ($env:COMPUTERNAME).ToLower()
# $newNode = "rim-a8a3"
$qlikID = ".\qlikadmin"
#### Launch silent install
Write-Host "========================>> Installing QSEoW"
if ($env:computername -like "central-*") {
Invoke-Command -ScriptBlock {Start-Process -FilePath "E:\deploy\binaries\Qlik_Sense_setup.exe" -ArgumentList "-s -log E:\deploy\deploy.log accepteula=1 skipvalidation=1 installdir=E:\deploy\Qlik dbpassword=Qlik1234! hostname=$($env:computername) userwithdomain=$($env:computername)\qservice password=Qlik1234! bundleinstall=dashboard,visualization spc=E:\deploy\scripts\cen.xml" -Wait -PassThru} | Out-Null
# Do other Stuff
# Config Engine for better NFS Support
Add-Content -Path C:\ProgramData\Qlik\Sense\Engine\Settings.ini -Value "MapNetworkDrives=1"
Set-Item WSMan:localhost\client\trustedhosts -value *
# Connect to Qlik Sense
Get-ChildItem -Path cert:\CurrentUser\My | Where-Object {$_.Issuer -like "*$centralNode*"} | Connect-Qlik -computername https://"$centralNode":4242 -Username $qlikID | Out-Null
$license = (Get-Content $deploy_path\scripts\license.json -raw) | ConvertFrom-Json
Set-QlikLicense -key "$($license.signed.key)" -name "$($license.signed.name)" -organization "$($license.signed.organization)"| Out-Null
} else {
Invoke-Command -ScriptBlock {Start-Process -FilePath "E:\deploy\binaries\Qlik_Sense_setup.exe" -ArgumentList "-s -log E:\deploy\deploy.log accepteula=1 skipvalidation=1 installdir=E:\deploy\Qlik dbpassword=Qlik1234! hostname=$($env:computername) userwithdomain=$($env:computername)\qservice password=Qlik1234! bundleinstall=dashboard,visualization spc=E:\deploy\scripts\rim.xml" -Wait -PassThru} | Out-Null
# Do other Stuff
# Execute AddRim
Set-Item WSMan:localhost\client\trustedhosts -value * -Force
# Config Engine for better NFS Support
Add-Content -Path C:\ProgramData\Qlik\Sense\Engine\Settings.ini -Value "MapNetworkDrives=1"
}

View File

@@ -2,23 +2,23 @@
<SharedPersistenceConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DbUserName>qliksenserepository</DbUserName>
<DbUserPassword>Qlik1234!</DbUserPassword>
<DbHost>10.54.242.14</DbHost>
<DbHost>10.54.242.41</DbHost>
<DbPort>5432</DbPort>
<RootDir>\\10.159.210.26\qlikshare</RootDir>
<StaticContentRootDir>\\10.159.210.26\qlikshare\StaticContent</StaticContentRootDir>
<ArchivedLogsDir>\\10.159.210.26\qlikshare\ArchivedLogs</ArchivedLogsDir>
<AppsDir>\\10.159.210.26\qlikshare\Apps</AppsDir>
<CreateCluster>false</CreateCluster>
<RootDir>\\10.255.55.2\qlikshare</RootDir>
<StaticContentRootDir>\\10.255.55.2\qlikshare\StaticContent</StaticContentRootDir>
<ArchivedLogsDir>\\10.255.55.2\qlikshare\ArchivedLogs</ArchivedLogsDir>
<AppsDir>\\10.255.55.2\qlikshare\Apps</AppsDir>
<!-- <CreateCluster>true</CreateCluster> -->
<InstallLocalDb>false</InstallLocalDb>
<ConfigureDbListener>false</ConfigureDbListener>
<ListenAddresses>*</ListenAddresses>
<IpRange>0.0.0.0/0,::/0</IpRange>
<MaxConnections>100</MaxConnections>
<!-- <JoinCluster>true</JoinCluster> -->
<JoinCluster>true</JoinCluster>
<ConfigureLogging>true</ConfigureLogging>
<SetupLocalLoggingDb>false</SetupLocalLoggingDb>
<QLogsWriterPassword>Qlik1234!</QLogsWriterPassword>
<QLogsReaderPassword>Qlik1234!</QLogsReaderPassword>
<QLogsHostname>10.54.242.14</QLogsHostname>
<QLogsHostname>10.54.242.41</QLogsHostname>
<QLogsPort>5432</QLogsPort>
</SharedPersistenceConfiguration>

View File

@@ -0,0 +1,28 @@
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f
Invoke-Command -ScriptBlock {Start-Process -FilePath "E:\deploy\binaries\Qlik_Sense_setup.exe" -verb runAs -ArgumentList "-s -log E:\deploy\deploy.log accepteula=1 installdir=E:\deploy\Qlik dbpassword=Qlik1234! hostname=$($env:computername) userwithdomain=$($env:computername)\qservice password=Qlik1234! bundleinstall=dashboard,visualization spc=E:\deploy\scripts\cen.xml" -Wait -PassThru} | Out-Null
$license = (Get-Content E:\scripts\license.json -raw) | ConvertFrom-Json
Set-QlikLicense -key "$($license.signed.key)" -name "$($license.signed.name)" -organization "$($license.signed.organization)"| Out-Null
# qlikSenseProfessionalAccess
New-GcsObject -Bucket "qliksense" -Folder "C:\ProgramData\Qlik\Sense\Repository\Exported Certificates" -Force
Write-GcsObject -Bucket "qliksense" -File "C:\ProgramData\Qlik\Sense\Repository\Exported Certificates\rim\client.pfx" -ObjectName "certs/rim/client.pfx"
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 5 /f
########################################
# 6 $license = (Get-Content $deploy_path\scripts\license.json -raw) | ConvertFrom-Json
# 7 $centralNode = ($env:COMPUTERNAME).ToLower()
# 9 $qlikID = ".\qlikadmin"
# 10 $deploy_path = "E:\deploy"
# 14 Set-QlikLicense -key "$($license.signed.key)" -name "$($license.signed.name)" -organization "$($license.signed....
# 18 Export-QlikCertificate -machineNames rim -includeSecretsKey -exportFormat Windows
# 1 $deploy_path = "E:\deploy"
# 2 $centralNode = ($env:COMPUTERNAME).ToLower()
# 3 $qlikID = ".\qlikadmin"
# Write-GcsObject -Bucket "qliksense" -File "C:\ProgramData\Qlik\Sense\Repository\Exported Certificates\rim\client.pfx" -ObjectName "certs/rim/client.pfx"

View File

@@ -1,10 +0,0 @@
{
"registry.terraform.io/hashicorp/google-beta": {
"hash": "h1:zsIZIszrwu9B9TGiUMGUF3QrpOT6OxGrTIJIo+b8Re0=",
"version": "3.41.0"
},
"registry.terraform.io/hashicorp/random": {
"hash": "h1:nFL6uiwsQFLiP8QCr35sPfWe9LpXI3/c7gP9tYnih+k=",
"version": "2.3.0"
}
}

View File

@@ -1,6 +0,0 @@
{
"registry.terraform.io/hashicorp/google-beta": {
"hash": "h1:zsIZIszrwu9B9TGiUMGUF3QrpOT6OxGrTIJIo+b8Re0=",
"version": "3.41.0"
}
}

View File

@@ -1 +0,0 @@
{"Modules":[{"Key":"","Source":"","Dir":"."},{"Key":"postgres","Source":"github.com/gruntwork-io/terraform-google-sql.git//modules/cloud-sql?ref=v0.2.0","Dir":".terraform/modules/postgres/modules/cloud-sql"}]}

View File

@@ -1,22 +0,0 @@
{
"registry.terraform.io/hashicorp/google": {
"hash": "h1:57PSAprG+Z4LymWA4ZY6kcTzxu+VTgwjpBGUy70g+9g=",
"version": "3.10.0"
},
"registry.terraform.io/hashicorp/null": {
"hash": "h1:CFnENdqQu4g3LJNevA32aDxcUz2qGkRGQpFfkI8TCdE=",
"version": "2.1.2"
},
"registry.terraform.io/hashicorp/random": {
"hash": "h1:nFL6uiwsQFLiP8QCr35sPfWe9LpXI3/c7gP9tYnih+k=",
"version": "2.3.0"
},
"registry.terraform.io/hashicorp/template": {
"hash": "h1:8NcPRk3yxQtUlAT/YGfjBEJ76rQI2ljARYeIEjhtWho=",
"version": "2.1.2"
},
"registry.terraform.io/terraform-providers/postgresql": {
"hash": "h1:XoFYBv4TT44nddycaurd4lYzIuWBx9JJzmrvcTDYX9A=",
"version": "1.7.1"
}
}

View File

@@ -1,5 +0,0 @@
project = "esoteric-parsec-243510"
region = "us-central1"
zone = "us-central1-a"
aclCIDR = "71.164.77.198/32"
postgresPwd = "Qlik1234!"

View File

@@ -1,20 +0,0 @@
terraform {
required_providers {
google = {
source = "hashicorp/google"
}
postgresql = {
source = "terraform-providers/postgresql"
}
random = {
source = "hashicorp/random"
}
template = {
source = "hashicorp/template"
}
null = {
source = "hashicorp/null"
}
}
required_version = ">= 0.13"
}

View File

@@ -1,10 +0,0 @@
{
"registry.terraform.io/hashicorp/google-beta": {
"hash": "h1:zsIZIszrwu9B9TGiUMGUF3QrpOT6OxGrTIJIo+b8Re0=",
"version": "3.41.0"
},
"registry.terraform.io/hashicorp/random": {
"hash": "h1:nFL6uiwsQFLiP8QCr35sPfWe9LpXI3/c7gP9tYnih+k=",
"version": "2.3.0"
}
}

View File

@@ -1,112 +0,0 @@
#!/usr/bin/env pwsh
#
## Intended to be executed in a GitOps pipeline on the new GCE resource by remote-exec in TF
## or as a startup script via Metadata key windows-startup-script-url
##
if ($env:computername -notlike "rim-*") {
exit 0
}
# Format and mount data disk
Write-Host "## ========================>> Create Data drive & dirs"
Get-Disk |
Where-Object partitionstyle -eq 'raw' |
Initialize-Disk -PartitionStyle GPT -PassThru |
New-Partition -DriveLetter E -UseMaximumSize |
Format-Volume -FileSystem NTFS -NewFileSystemLabel 'Data' -Confirm:$false
if (! (Test-Path E:\)) {
Write-Error "Drive not found"
exit 1
}
$deploy_path = "E:\deploy"
if (! (Test-Path $deploy_path)) {
New-Item -ItemType Directory -Path $deploy_path
New-Item -ItemType Directory -Path $deploy_path\binaries
New-Item -ItemType Directory -Path $deploy_path\modules
New-Item -ItemType Directory -Path $deploy_path\modules\tf
New-Item -ItemType Directory -Path $deploy_path\modules\ps
}
Write-Host "## ========================>> Create Local Accounts and add to Administrators Group"
if(!(Get-LocalUser -Name qservice -ErrorAction Ignore)) {
$password = ConvertTo-SecureString -String 'Qlik1234!' -AsPlainText -Force
New-LocalUser `
-Name 'qservice' `
-Password $password `
-PasswordNeverExpires `
-UserMayNotChangePassword
}
if(!(Get-LocalUser -Name qlikadmin -ErrorAction Ignore)) {
$password = ConvertTo-SecureString -String 'Qlik1234!' -AsPlainText -Force
New-LocalUser `
-Name 'qlikadmin' `
-Password $password `
-PasswordNeverExpires `
-UserMayNotChangePassword
}
Add-LocalGroupMember -Group "Administrators" -Member "qservice", "qlikadmin"
Write-Host "## ========================>> Copy scripts and binaries from Cloud Storage Bucket"
gsutil -m cp -r gs://qliksense/scripts $deploy_path\
gsutil -m cp gs://qliksense/binaries/Qlik_Sense* $deploy_path\binaries\
gsutil -m cp gs://qliksense/binaries/vscode_stable.exe $deploy_path\binaries\
gsutil -m cp gs://qliksense/binaries/firefox_latest.exe $deploy_path\binaries\
gsutil -m cp gs://qliksense/binaries/ps7.zip $deploy_path\binaries\
# gsutil -m cp -r gs://qliksense/modules 'C:\Program Files\WindowsPowerShell\Modules'
# Invoke-WebRequest -Uri https://github.com/PowerShell/PowerShell/releases/download/v7.0.3/PowerShell-7.0.3-win-x64.zip -OutFile $deploy_path\binaries\ps7.zip
# Invoke-WebRequest -Uri https://aka.ms/win32-x64-user-stable -Outfile $deploy_path\binaries\vscode_stable.exe
# Invoke-WebRequest -Uri "https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=en-US" -Outfile $deploy_path\binaries\firefox_latest.exe
Unblock-File -Path $deploy_path\binaries\*
Unblock-File -Path $deploy_path\scripts\*
# WinRM Connects
New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation -Name AllowFreshCredentialsWhenNTLMOnly -Force
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation\AllowFreshCredentialsWhenNTLMOnly -Name 1 -Value * -PropertyType String
Write-Host "## ========================>> Import PS Modules"
Get-PackageProvider -Name NuGet -ForceBootstrap
Install-Module PSDscResources -Force
Install-Module QlikResources -Force
Write-Host "## ========================>> Deploy PS7 | Firefox | VS Code"
Expand-Archive -Path $deploy_path\binaries\ps7.zip -DestinationPath $deploy_path\binaries\ps7
Invoke-Command -ScriptBlock {Start-Process -FilePath "$deploy_path\binaries\vscode_stable.exe" -ArgumentList "/VERYSILENT /MERGETASKS=!runcode" -Wait -PassThru} | Out-Null
Invoke-Command -ScriptBlock {Start-Process -FilePath "$deploy_path\binaries\firefox_latest.exe" -ArgumentList "/s" -Wait -PassThru} | Out-Null
# QSEoW FW Rule
Write-Host "## ========================>> Create QSEoW FW Rule"
New-NetFirewallRule -DisplayName "Qlik Sense" -Direction Inbound -LocalPort 443, 4244,4242, 4432, 4444, 5355, 5353, 80, 4248, 3090, 4000, 5555, 5556, 4993, 4994 -Protocol TCP -Action Allow -ea Stop | Out-Null
# Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
#### Enable NFS Client, set Anon user to UID:GID 0 == root. Restart service.
Write-Host "## ========================>> Installing NFS Client"
Install-WindowsFeature -Name NFS-Client
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default" `
-Name "AnonymousUid" -Value "0" -PropertyType DWORD
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default" `
-Name "AnonymousGid" -Value "0" -PropertyType DWORD
nfsadmin client stop
nfsadmin client start
#### Launch silent install
Write-Host "========================>> Installing QSEoW"
Invoke-Command -ScriptBlock {Start-Process -FilePath "E:\deploy\binaries\Qlik_Sense_setup.exe" -ArgumentList "-s -log E:\deploy\deploy.log accepteula=1 installdir=E:\deploy\Qlik dbpassword=Qlik1234! hostname=$($env:computername) userwithdomain=$($env:computername)\qservice password=Qlik1234! bundleinstall=dashboard,visualization spc=E:\deploy\scripts\rim.xml" -Wait -PassThru} #| Out-Null
# HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
# New-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce' -Name 'Run' -Value '<insert_script_command_here>'
Set-GceInstance -Name $shortname -Zone europe-west1-d -AddTag "bootstrapped"
Set-GceInstance -Name $shortname -Zone europe-west1-d -RemoveMetadata "windows-startup-script-url"
Exit 0

View File

@@ -1,22 +0,0 @@
#!/usr/bin/env pwsh
# Install NFS Client on Windows via PS
#
# Wait for bootstrap.ps1 to finish before proceeding.
# $bootScript = "bootstrap.ps1"
# Wait-Process -Name $bootScript -ErrorAction SilentlyContinue -Timeout 1200
# Enable NFS Client, set Anon user to UID:GID 0 == root. Restart service.
Write-Host -Message "<---- Installing NFS Client"
Install-WindowsFeature -Name NFS-Client
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default" `
-Name "AnonymousUid" -Value "0" -PropertyType DWORD
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default" `
-Name "AnonymousGid" -Value "0" -PropertyType DWORD
nfsadmin client stop
nfsadmin client start
# & E:\deploy\binaries\Qlik_Sense_setup.exe -s -l E:\deploy\deploy.log spc="E:\deploy\scripts\spc.xml" installdir="E:\deploy\Qlik" userwithdomain="central-b445\qservice" userpassword="Qlik1234!" dbpassword="Qlik1234!" accepteula=1 skipvalidation=1 bundleinstall=1 skipdbconfig=1
Write-Host "<---- Installing QSEoW"
Invoke-Command -ScriptBlock {Start-Process -FilePath "E:\deploy\binaries\Qlik_Sense_setup.exe" -ArgumentList "-s -log E:\deploy\deploy.log accepteula=1 installdir=E:\deploy\Qlik dbpassword=Qlik1234! hostname=$($env:computername) userwithdomain=$($env:computername)\qservice password=Qlik1234! bundleinstall=dashboard,visualization spc=E:\deploy\scripts\spc.xml" -Wait -PassThru} | Out-Null