95 lines
2.6 KiB
PowerShell
95 lines
2.6 KiB
PowerShell
|
# Copyright 2022 Google LLC
|
||
|
#
|
||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
# you may not use this file except in compliance with the License.
|
||
|
# You may obtain a copy of the License at
|
||
|
#
|
||
|
# https://www.apache.org/licenses/LICENSE-2.0
|
||
|
#
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
# See the License for the specific language governing permissions and
|
||
|
# limitations under the License.
|
||
|
|
||
|
function Write-Log([string]$message) {
|
||
|
$message | Tee-Object -FilePath C:\GcpSetupLog.txt -Append | Write-Output
|
||
|
}
|
||
|
|
||
|
function All-Instances-Ready {
|
||
|
do {
|
||
|
Write-Log "Checking if computer has joined a domain..."
|
||
|
$InDomain = (Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain
|
||
|
if ($InDomain -eq $true) {
|
||
|
Write-Output "This computer has joined a domain, continuing"
|
||
|
break
|
||
|
}
|
||
|
Start-Sleep -s 5
|
||
|
} while ($true)
|
||
|
|
||
|
%{ for node in [node_netbios_1, node_netbios_2, witness_netbios] }
|
||
|
while ($true) {
|
||
|
try {
|
||
|
Write-Log "Waiting for node ${node} to be domain joined..."
|
||
|
Get-ADComputer -Identity "${node}"
|
||
|
break
|
||
|
} catch {
|
||
|
Start-Sleep -s 5
|
||
|
}
|
||
|
}
|
||
|
%{ endfor }
|
||
|
}
|
||
|
|
||
|
function Wait-For-User {
|
||
|
$dom = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
|
||
|
$root = $dom.GetDirectoryEntry()
|
||
|
$searcher = [ADSISearcher] $root
|
||
|
$searcher.Filter = "(sAMAccountName=${sql_user_name})"
|
||
|
while ($null -eq $searcher.FindOne())
|
||
|
{
|
||
|
Write-Log "Waiting for Active Directory user for database: ${sql_user_name}"
|
||
|
Start-Sleep -s 10
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function Cluster-In-Domain {
|
||
|
while ($true) {
|
||
|
try {
|
||
|
Write-Log "Waiting for cluster ${sql_cluster_name} to be domain joined..."
|
||
|
Get-ADComputer -Identity "${sql_cluster_name}"
|
||
|
break
|
||
|
} catch {
|
||
|
Start-Sleep -s 5
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function Cluster-Ready {
|
||
|
$ClusterName = "${sql_cluster_full}"
|
||
|
while ($true) {
|
||
|
Write-Log "Waiting for cluster $ClusterName to appear..."
|
||
|
try {
|
||
|
$cluster = Get-Cluster
|
||
|
$ret = ($cluster.Name -like $ClusterName)
|
||
|
if ($ret -eq $true) {
|
||
|
break
|
||
|
}
|
||
|
} catch {}
|
||
|
Start-Sleep -s 10
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function Node-Up {
|
||
|
while ($true) {
|
||
|
Write-Log "Waiting for this node to be up in cluster..."
|
||
|
try {
|
||
|
$NodeStatus = Get-ClusterNode | Where-Object Name -eq $env:computername | Select State
|
||
|
if ($NodeStatus.State -eq "Up") {
|
||
|
Write-Log "Current node is up, continuing..."
|
||
|
break
|
||
|
}
|
||
|
} catch {}
|
||
|
Start-Sleep -s 10
|
||
|
}
|
||
|
}
|