Thanks for getting in touch! The script in the documentation is technically the entire default health check script, however it is a part of a larger script where we define the functions you are referencing.
The below script is executed in the background and the custom health check script in the UI is injected into it at {{MachinePolicyCustomScript}}.
# Users can write their own custom script via a machine policy, which is appended here via MachinePolicyCustomScript.
$hasErrors = $false
$details = @()
function Convert-ServiceMessageValue([string]$value)
{
$valueBytes = [System.Text.Encoding]::UTF8.GetBytes($value)
return [Convert]::ToBase64String($valueBytes)
}
function Set-OctopusVariable([string]$name, [string]$value)
{
$name = Convert-ServiceMessageValue($name)
$value = Convert-ServiceMessageValue($value)
Write-Host "##octopus[setVariable name='$($name)' value='$($value)']"
}
function Write-Warning([string]$message)
{
Write-Host "##octopus[stdout-warning]"
Write-Host $message
Set-OctopusVariable "HasWarnings" "true"
Write-Host "##octopus[stdout-default]"
$global:details += "Warning: $message"
}
function Write-Error([string] $message)
{
Write-Host "##octopus[stdout-error]"
Write-Host $message
$global:hasErrors = $true
Write-Host "##octopus[stdout-default]"
$global:details += "Error: $message"
}
function Fail-HealthCheck([string]$message)
{
Write-Error $message
Finish-HealthCheck
}
function Invoke-HealthCheck()
{
$hostname = [Environment]::MachineName
Write-Host "Host Name: $hostname"
$domainName = [Environment]::UserDomainName
$userName = [Environment]::UserName
$windowsIdentity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$windowsPrincipal = new-object 'System.Security.Principal.WindowsPrincipal' $windowsIdentity
$isAdmin = $windowsPrincipal.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
Write-Host "Running As: $domainName\$userName (Local Administrator: $isAdmin)"
Write-Host "Running Tentacle version ${env:TentacleVersion}"
Set-OctopusVariable "TentacleVersion" ${env:TentacleVersion}
Write-Host "Tentacle communication uses a '${env:TentacleCertificateSignatureAlgorithm}' certificate"
Set-OctopusVariable "TentacleCertificateSignatureAlgorithm" ${env:TentacleCertificateSignatureAlgorithm}
$hasLatestCalamari = ((Test-Path "${env:TentacleHome}\Calamari")) -and (Get-ChildItem "${env:TentacleHome}\Calamari" | ? { $_ -match "{{CalamariVersion}}" }).Count -ne 0
if($hasLatestCalamari) {
Write-Host "Running latest version of Calamari: {{CalamariVersion}}"
} else {
Write-Warning "Not running latest version of Calamari. Expected: {{CalamariVersion}}"
if ((Test-Path "${env:TentacleHome}\Calamari") -eq $false) {
Write-Warning "No versions of Calamari are installed."
}
}
Set-OctopusVariable "HasLatestCalamariVersion" $hasLatestCalamari
Try {
$OS = Get-WmiObject -class Win32_OperatingSystem
Set-OctopusVariable "OSName" $OS.Caption
} Catch [System.Runtime.InteropServices.COMException] {
Set-OctopusVariable "OSName" "Unknown"
}
Set-OctopusVariable "OSVersion" $([System.Environment]::OSVersion.Version.ToString())
Set-OctopusVariable "ShellName" "PowerShell"
Set-OctopusVariable "ShellVersion" $PSVersionTable.PSVersion.ToString()
# -----------------------------------------------------------------
# Variables
# -----------------------------------------------------------------
{{VariableDeclarations}}
# -----------------------------------------------------------------
# Machine policy custom script
# -----------------------------------------------------------------
{{MachinePolicyCustomScript}}
}
function CheckDriveCapacity($DriveDetails){
if($DriveDetails.FreeSpace -lt $freeDiskSpaceThreshold) {
Write-Warning $("Drive {0} on {1} only has {2} available" -f $DriveDetails.Name, $hostName, $(Get-FileSizeString $DriveDetails.FreeSpace))
} else {
Write-Host $("Drive {0} has {1} available" -f $DriveDetails.Name, $(Get-FileSizeString $DriveDetails.FreeSpace))
}
}
function Get-FileSizeString([long]$bytes)
{
if ($bytes -ge 1TB) { return ($bytes / 1TB).ToString("0 TB") }
if ($bytes -ge 1GB) { return ($bytes / 1GB).ToString("0 GB") }
if ($bytes -ge 1MB) { return ($bytes / 1MB).ToString("0 MB") }
if ($bytes -ge 1KB) { return ($bytes / 1KB).ToString("0 KB") }
return $bytes.ToString("0 bytes");
}
function Finish-HealthCheck() {
if ($global:details.Length -gt 0) {
$detailsStr = [string]::Join([Environment]::NewLine, $global:details)
Set-OctopusVariable "OctopusHealthCheckMessages" $detailsStr
}
if ($hasErrors) {
exit 1
}
}
Invoke-HealthCheck
Finish-HealthCheck
Does this look like what you are after?
Let me know if you have any further questions here.