-
Notifications
You must be signed in to change notification settings - Fork 11
/
bootstrap-sql.ps1
100 lines (85 loc) · 4.52 KB
/
bootstrap-sql.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Param (
[string]$saPassword,
[string]$dbaPassword,
[string]$sqlServerMedia,
[string]$mediaLocation
)
# Common expression logging and error handling function, copied, not referenced to ensure atomic process
function executeExpression ($expression) {
$error.clear()
Write-Host "[$(date)] $expression"
try {
Invoke-Expression $expression
if(!$?) { Write-Host "[$scriptName] `$? = $?"; exit 1 }
} catch { echo $_.Exception|format-list -force; exit 2 }
if ( $error ) { Write-Host "[$scriptName] `$error[0] = $error"; exit 3 }
if (( $LASTEXITCODE ) -and ( $LASTEXITCODE -ne 0 )) { Write-Host "[$scriptName] `$LASTEXITCODE = $LASTEXITCODE "; exit $LASTEXITCODE }
}
$scriptName = 'bootstrap-sql.ps1'
Write-Host "`n[$scriptName] ---------- start ----------"
if ($saPassword) {
Write-Host "[$scriptName] saPassword : `$saPassword"
} else {
$saPassword = 'swUwe5aG'
Write-Host "[$scriptName] saPassword : $saPassword (default)"
}
if ($dbaPassword) {
Write-Host "[$scriptName] dbaPassword : `$dbaPassword"
} else {
$dbaPassword = 'Passw0rd!'
Write-Host "[$scriptName] dbaPassword : $dbaPassword (default)"
}
if ($sqlServerMedia) {
Write-Host "[$scriptName] sqlServerMedia : $sqlServerMedia"
} else {
$sqlServerMedia = 'en_sql_server_2016_enterprise_with_service_pack_1_x64_dvd_9542382.iso'
Write-Host "[$scriptName] sqlServerMedia : $sqlServerMedia (default)"
}
if ($mediaLocation) {
Write-Host "[$scriptName] mediaLocation : $mediaLocation"
} else {
$mediaLocation = 'http://10.0.2.2/provision'
Write-Host "[$scriptName] mediaLocation : $mediaLocation (default)"
}
if ( Test-Path ".\automation\CDAF.windows" ) {
Write-Host "[$scriptName] CDAF directories found in workspace"
$atomicPath = (Get-Location).Path
} else {
if ( Test-Path "/vagrant" ) {
$atomicPath = 'C:\vagrant'
Write-Host "[$scriptName] CDAF directories found in vagrant mount"
} else {
Write-Host "[$scriptName] Cannot find CDAF directories in workspace or /vagrant, so downloading from internet"
Write-Host "[$scriptName] Download Continuous Delivery Automation Framework"
Write-Host "[$scriptName] `$zipFile = 'WU-CDAF.zip'"
$zipFile = 'WU-CDAF.zip'
Write-Host "[$scriptName] `$url = `"http://cdaf.io/static/app/downloads/$zipFile`""
$url = "http://cdaf.io/static/app/downloads/$zipFile"
executeExpression "(New-Object System.Net.WebClient).DownloadFile('$url', '$PWD\$zipFile')"
executeExpression 'Add-Type -AssemblyName System.IO.Compression.FileSystem'
executeExpression '[System.IO.Compression.ZipFile]::ExtractToDirectory("$PWD\$zipfile", "$PWD")'
executeExpression 'cat .\automation\CDAF.windows'
$atomicPath = (Get-Location).Path
}
}
Write-Host "[$scriptName] `$atomicPath = $atomicPath"
if ( Test-Path "/sqlinstalled" ) {
$initialDate = executeExpression "Get-Content /sqlinstalled"
Write-Host "[$scriptName] $env:COMPUTERNAME sqlinstalled $initialDate, to force reinstallion, delete the /sqlinstalled file"
} else {
executeExpression "$atomicPath/automation/provisioning/newUser.ps1 .\sqlSA $saPassword -passwordExpires no" # SQL Server Service Account
executeExpression "$atomicPath/automation/provisioning/mountImage.ps1 `"`${env:TMP}\${sqlServerMedia}`" '${mediaLocation}/${sqlServerMedia}'"
Write-Host "[$scriptName] `$mountDrive = [Environment]::GetEnvironmentVariable('MOUNT_DRIVE_LETTER', 'User')"
$mountDrive = [Environment]::GetEnvironmentVariable('MOUNT_DRIVE_LETTER', 'User')
executeExpression "$atomicPath/automation/provisioning/installSQLServer.ps1 .\sqlSA BUILTIN\Administrators MSSQLSERVER $mountDrive -password `$saPassword"
executeExpression "$atomicPath/automation/provisioning/sqlAuthMode.ps1" # Allow mixed mode for SQL Authentication
executeExpression "$atomicPath/automation/provisioning/sqlAddUser.ps1 dba -loginType SQLLogin -sqlPassword `$dbaPassword"
executeExpression "$atomicPath/automation/provisioning/sqlSetLoginRole.ps1 dba sysadmin"
executeExpression "$atomicPath/automation/provisioning/openFirewallPort.ps1 1433 'SQL Server'"
if ( $workingDirectory ) { executeExpression "cd $workingDirectory" }
Write-Host "[$scriptName] Set sqlinstalled run marker file`n"
executeExpression "Add-Content /sqlinstalled '$(get-date)'"
$initialDate = executeExpression "Get-Content /sqlinstalled"
Write-Host "[$scriptName] Initialisation complete $initialDate, to force reinstallion, delete the /sqlinstalled file`n"
}
Write-Host "`n[$scriptName] ---------- stop ----------"