Octopus.KubernetesRunScript exported 2020-04-22 by mcasperson belongs to ‘Kubernetes’ category.
Inspect K8S resources with common actions like get, describe and logs. Optionally create artifacts containing the output.
Parameters
When steps based on the template are included in a project’s deployment process, the parameters below can be set.
Resource
K8SInspectResource = pod
The type of Kubernetes resource to inspect. The list provided is not comprehensive, and any resource can be used if the field is bound.
Kubectl Verb
K8SInspectKubectlVerb = get
The action used to inspect the Kubernetes resource.
Resource Names
K8SInspectNames =
An optional line break separated list of resources to inspect. If left blank, all resources are inspected. An asterisk can be used as a wildcard.
Create Artifact
K8SInspectCreateArtifact = False
Check this to create an artifact capturing the output of the kubectl command.
Namespace
K8SInspectNamespace =
The Kubernetes namespace to inspect. Leave blank to use the default namespace of the Kubernetes target.
Script body
Steps based on this template will execute the following PowerShell script.
<#
This script provides a general purpose method for querying Kubernetes resources. It supports common operations
like get, describe, logs and output formats like yaml and json. Output can be captured as artifacts.
#>
<#
.Description
Execute an application, capturing the output. Based on https://stackoverflow.com/a/33652732/157605
#>
Function Execute-Command ($commandPath, $commandArguments)
{
Write-Host "Executing: $commandPath $($commandArguments -join " ")"
Try {
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = $commandPath
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = $commandArguments
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
[pscustomobject]@{
stdout = $p.StandardOutput.ReadToEnd()
stderr = $p.StandardError.ReadToEnd()
ExitCode = $p.ExitCode
}
$p.WaitForExit()
}
Catch {
exit
}
}
<#
.Description
Find any resource names that match a wildcard input if one was specified
#>
function Get-Resources()
{
$names = $OctopusParameters["K8SInspectNames"] -Split "`n" | % {$_.Trim()}
if ($OctopusParameters["K8SInspectNames"] -match '\*' )
{
return Execute-Command kubectl (@("-o", "json", "get", $OctopusParameters["K8SInspectResource"])) |
# Select the stdout property from the execution
Select-Object -ExpandProperty stdout |
# Convert the output from JSON
ConvertFrom-JSON |
# Get the items object from the kubectl response
% {if ((Get-Member -InputObject $_ -Name items).Count -ne 0) {Select-Object -InputObject $_ -ExpandProperty items} else {$_}} |
# Extract the name
% {$_.metadata.name} |
# Find any matching resources
? {$k8sName = $_; ($names | ? {$k8sName -like $_}).Count -ne 0}
}
else
{
return $names
}
}
<#
.Description
Get the kubectl arguments for a given action
#>
function Get-KubectlVerb()
{
switch($OctopusParameters["K8SInspectKubectlVerb"])
{
"get json" {return ,@("-o", "json", "get")}
"get yaml" {return ,@("-o", "yaml", "get")}
"describe" {return ,@("describe")}
"logs" {return ,@("logs")}
"logs tail" {return ,@("logs", "--tail", "100")}
"previous logs" {return ,@("logs", "--previous")}
"previous logs tail" {return ,@("logs", "--previous", "--tail", "100")}
default {return ,@("get")}
}
}
<#
.Description
Get an appropiate file extension based on the selected action
#>
function Get-ArtifactExtension()
{
switch($OctopusParameters["K8SInspectKubectlVerb"])
{
"get json" {"json"}
"get yaml" {"yaml"}
default {"txt"}
}
}
if ($OctopusParameters["K8SInspectKubectlVerb"] -like "*logs*")
{
if ( -not @($OctopusParameters["K8SInspectResource"]) -like "pod*")
{
Write-Error "Logs can only be returned for pods, not $($OctopusParameters["K8SInspectResource"])"
}
else
{
Execute-Command kubectl (@("-o", "json", "get", "pods") + (Get-Resources)) |
# Select the stdout property from the execution
Select-Object -ExpandProperty stdout |
# Convert the output from JSON
ConvertFrom-JSON |
# Get the items object from the kubectl response
% {if ((Get-Member -InputObject $_ -Name items).Count -ne 0) {Select-Object -InputObject $_ -ExpandProperty items} else {$_}} |
# Get the pod logs for each container
% {
$podDetails = $_
@{
logs=$podDetails.spec.containers | % {$logs=""} {$logs += (Select-Object -InputObject (Execute-Command kubectl ((Get-KubectlVerb) + @($podDetails.metadata.name, "-c", $_.name))) -ExpandProperty stdout)} {$logs};
name=$podDetails.metadata.name
}
} |
# Write the output
% {Write-Host $_.logs; $_} |
# Optionally capture the artifact
% {
if ($OctopusParameters["K8SInspectCreateArtifact"] -ieq "true")
{
Set-Content -Path "$($_.name).$(Get-ArtifactExtension)" -Value $_.logs
New-OctopusArtifact "$($_.name).$(Get-ArtifactExtension)"
}
}
}
}
else
{
Execute-Command kubectl ((Get-KubectlVerb) + @($OctopusParameters["K8SInspectResource"]) + (Get-Resources)) |
% {Select-Object -InputObject $_ -ExpandProperty stdout} |
% {Write-Host $_; $_} |
% {
if ($OctopusParameters["K8SInspectCreateArtifact"] -ieq "true")
{
Set-Content -Path "output.$(Get-ArtifactExtension)" -Value $_
New-OctopusArtifact "output.$(Get-ArtifactExtension)"
}
}
}
Provided under the Apache License version 2.0.
To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.
{
"Id": "53fe7e02-d003-4860-bf15-1122a128d7c0",
"Name": "Kubernetes - Inspect Resources",
"Description": "Inspect K8S resources with common actions like get, describe and logs. Optionally create artifacts containing the output.",
"Version": 6,
"ExportedAt": "2020-04-22T01:41:35.012Z",
"ActionType": "Octopus.KubernetesRunScript",
"Author": "mcasperson",
"Packages": [],
"Parameters": [
{
"Id": "8a1ebc8c-ddf3-42bb-be49-9b36ee417f5d",
"Name": "K8SInspectResource",
"Label": "Resource",
"HelpText": "The type of Kubernetes resource to inspect. The list provided is not comprehensive, and any resource can be used if the field is bound.",
"DefaultValue": "pod",
"DisplaySettings": {
"Octopus.ControlType": "Select",
"Octopus.SelectOptions": "pod|Pod\nservice|Service\ningress|Ingress\ndeployment|Deployment\nstatefulset|StatefulSet\ndaemonset|DaemonSet\nreplicaset|ReplicaSet\nconfigmap|ConfigMap\nsecret|Secret\nnode|Node\nvirtualservice|VirtualService\ngateway|Gateway\npersistentvolume|PersistentVolume\nserviceaccount|Service Account\nrolebinding|Role Binding\nclusterrolebinding|Cluster Role Binding\nrole|Role\nclusterrole|Cluster Role"
}
},
{
"Id": "735e2fa4-4f9a-4183-aafe-653f3f6fb103",
"Name": "K8SInspectKubectlVerb",
"Label": "Kubectl Verb",
"HelpText": "The action used to inspect the Kubernetes resource.",
"DefaultValue": "get",
"DisplaySettings": {
"Octopus.ControlType": "Select",
"Octopus.SelectOptions": "get|Get\nget json|Get JSON\nget yaml|Get YAML\nlogs|Pod Logs\nlogs tail|Pod Logs Tail\nprevious logs|Previous Pod Logs\nprevious logs tail|Previous Pod Logs Tail\ndescribe|Describe"
}
},
{
"Id": "9c9dcd65-07eb-4e7d-a61a-370d35d1cf76",
"Name": "K8SInspectNames",
"Label": "Resource Names",
"HelpText": "An optional line break separated list of resources to inspect. If left blank, all resources are inspected. An asterisk can be used as a wildcard.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "MultiLineText"
}
},
{
"Id": "4805afba-9ff9-45a6-b2c2-764c2d0e5240",
"Name": "K8SInspectCreateArtifact",
"Label": "Create Artifact",
"HelpText": "Check this to create an artifact capturing the output of the kubectl command.",
"DefaultValue": "False",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "da70800b-0ec2-4bef-918c-08ef88c9f411",
"Name": "K8SInspectNamespace",
"Label": "Namespace",
"HelpText": "The Kubernetes namespace to inspect. Leave blank to use the default namespace of the Kubernetes target.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
}
],
"Properties": {
"Octopus.Action.Script.ScriptSource": "Inline",
"Octopus.Action.Script.Syntax": "PowerShell",
"Octopus.Action.Script.ScriptBody": "<#\n This script provides a general purpose method for querying Kubernetes resources. It supports common operations\n like get, describe, logs and output formats like yaml and json. Output can be captured as artifacts.\n#>\n\n<#\n.Description\nExecute an application, capturing the output. Based on https://stackoverflow.com/a/33652732/157605\n#>\nFunction Execute-Command ($commandPath, $commandArguments)\n{\n Write-Host \"Executing: $commandPath $($commandArguments -join \" \")\"\n \n Try {\n $pinfo = New-Object System.Diagnostics.ProcessStartInfo\n $pinfo.FileName = $commandPath\n $pinfo.RedirectStandardError = $true\n $pinfo.RedirectStandardOutput = $true\n $pinfo.UseShellExecute = $false\n $pinfo.Arguments = $commandArguments\n $p = New-Object System.Diagnostics.Process\n $p.StartInfo = $pinfo\n $p.Start() | Out-Null\n [pscustomobject]@{\n stdout = $p.StandardOutput.ReadToEnd()\n stderr = $p.StandardError.ReadToEnd()\n ExitCode = $p.ExitCode\n }\n $p.WaitForExit()\n }\n Catch {\n exit\n }\n}\n\n<#\n.Description\nFind any resource names that match a wildcard input if one was specified\n#>\nfunction Get-Resources() \n{\n $names = $OctopusParameters[\"K8SInspectNames\"] -Split \"`n\" | % {$_.Trim()}\n \n if ($OctopusParameters[\"K8SInspectNames\"] -match '\\*' )\n {\n return Execute-Command kubectl (@(\"-o\", \"json\", \"get\", $OctopusParameters[\"K8SInspectResource\"])) |\n # Select the stdout property from the execution\n Select-Object -ExpandProperty stdout |\n # Convert the output from JSON\n ConvertFrom-JSON | \n # Get the items object from the kubectl response\n % {if ((Get-Member -InputObject $_ -Name items).Count -ne 0) {Select-Object -InputObject $_ -ExpandProperty items} else {$_}} |\n # Extract the name\n % {$_.metadata.name} |\n # Find any matching resources\n ? {$k8sName = $_; ($names | ? {$k8sName -like $_}).Count -ne 0}\n }\n else\n {\n return $names\n }\n}\n\n<#\n.Description\nGet the kubectl arguments for a given action\n#>\nfunction Get-KubectlVerb() \n{\n switch($OctopusParameters[\"K8SInspectKubectlVerb\"])\n {\n \"get json\" {return ,@(\"-o\", \"json\", \"get\")}\n \"get yaml\" {return ,@(\"-o\", \"yaml\", \"get\")}\n \"describe\" {return ,@(\"describe\")}\n \"logs\" {return ,@(\"logs\")}\n \"logs tail\" {return ,@(\"logs\", \"--tail\", \"100\")}\n \"previous logs\" {return ,@(\"logs\", \"--previous\")}\n \"previous logs tail\" {return ,@(\"logs\", \"--previous\", \"--tail\", \"100\")}\n default {return ,@(\"get\")}\n }\n}\n\n<#\n.Description\nGet an appropiate file extension based on the selected action\n#>\nfunction Get-ArtifactExtension() \n{\n switch($OctopusParameters[\"K8SInspectKubectlVerb\"])\n {\n \"get json\" {\"json\"}\n \"get yaml\" {\"yaml\"}\n default {\"txt\"}\n }\n}\n\nif ($OctopusParameters[\"K8SInspectKubectlVerb\"] -like \"*logs*\") \n{\n if ( -not @($OctopusParameters[\"K8SInspectResource\"]) -like \"pod*\")\n {\n Write-Error \"Logs can only be returned for pods, not $($OctopusParameters[\"K8SInspectResource\"])\"\n }\n else\n {\n Execute-Command kubectl (@(\"-o\", \"json\", \"get\", \"pods\") + (Get-Resources)) |\n # Select the stdout property from the execution\n Select-Object -ExpandProperty stdout |\n # Convert the output from JSON\n ConvertFrom-JSON | \n # Get the items object from the kubectl response\n % {if ((Get-Member -InputObject $_ -Name items).Count -ne 0) {Select-Object -InputObject $_ -ExpandProperty items} else {$_}} |\n # Get the pod logs for each container\n % {\n $podDetails = $_\n @{\n logs=$podDetails.spec.containers | % {$logs=\"\"} {$logs += (Select-Object -InputObject (Execute-Command kubectl ((Get-KubectlVerb) + @($podDetails.metadata.name, \"-c\", $_.name))) -ExpandProperty stdout)} {$logs}; \n name=$podDetails.metadata.name\n } \n } |\n # Write the output\n % {Write-Host $_.logs; $_} |\n # Optionally capture the artifact\n % {\n if ($OctopusParameters[\"K8SInspectCreateArtifact\"] -ieq \"true\") \n {\n Set-Content -Path \"$($_.name).$(Get-ArtifactExtension)\" -Value $_.logs\n New-OctopusArtifact \"$($_.name).$(Get-ArtifactExtension)\"\n }\n }\n } \n}\nelse\n{\n Execute-Command kubectl ((Get-KubectlVerb) + @($OctopusParameters[\"K8SInspectResource\"]) + (Get-Resources)) |\n % {Select-Object -InputObject $_ -ExpandProperty stdout} |\n % {Write-Host $_; $_} |\n % {\n if ($OctopusParameters[\"K8SInspectCreateArtifact\"] -ieq \"true\") \n {\n Set-Content -Path \"output.$(Get-ArtifactExtension)\" -Value $_\n New-OctopusArtifact \"output.$(Get-ArtifactExtension)\"\n }\n }\n}\n",
"Octopus.Action.KubernetesContainers.Namespace": "#{if K8SInspectNamespace}#{K8SInspectNamespace}#{/if}#{unless K8SInspectNamespace}#{Octopus.Action.Kubernetes.Namespace}#{/unless}"
},
"Category": "Kubernetes",
"HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/k8s-inspect-resource-pwsh.json",
"Website": "/step-templates/53fe7e02-d003-4860-bf15-1122a128d7c0",
"Logo": "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",
"$Meta": {
"Type": "ActionTemplate"
}
}
Page updated on Wednesday, April 22, 2020