Files
k8s-deploy/src/utilities/kubectlUtils.ts
T
Bram de Hart a462095a3c Make annotating resources optional (#287)
* Make annotating resources optional

* Clarify descriptions

* Update README

* Refactor retrieving pods

* Remove annotating resources check in deploy.ts

* Add resource annotation integration test

* Move resource annotation integration test to seperate file

* Lint code

* Remove temporary debugging statements

* Fix integration test name

* Fix test

* Abstracting out repeated logic between verifyDeployment and verifyService

* Fix formattin

* Fix reference

* Fix test

* Refactor test

* Update ubuntu version to latest on canary SMI test

* Update ubuntu version to latest on canary SMI test

* Make annotating resources optional

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Clarify descriptions

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Update README

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Refactor retrieving pods

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Remove annotating resources check in deploy.ts

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Add resource annotation integration test

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Move resource annotation integration test to seperate file

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Lint code

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Remove temporary debugging statements

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Fix integration test name

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Fix test

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Abstracting out repeated logic between verifyDeployment and verifyService

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Fix formattin

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Fix reference

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Fix test

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Refactor test

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

* Update ubuntu version to latest on canary SMI test

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>

---------

Signed-off-by: Bram de Hart <bram.dehart@nsgo.nl>
2023-10-16 14:28:01 +00:00

103 lines
2.7 KiB
TypeScript

import * as core from '@actions/core'
import {ExecOutput} from '@actions/exec'
import {Kubectl} from '../types/kubectl'
const NAMESPACE = 'namespace'
export function checkForErrors(
execResults: ExecOutput[],
warnIfError?: boolean
) {
let stderr = ''
execResults.forEach((result) => {
if (result?.exitCode !== 0) {
stderr += result?.stderr + ' \n'
} else if (result?.stderr) {
core.warning(result.stderr)
}
})
if (stderr.length > 0) {
if (warnIfError) {
core.warning(stderr.trim())
} else {
throw new Error(stderr.trim())
}
}
}
export async function getLastSuccessfulRunSha(
kubectl: Kubectl,
namespaceName: string,
annotationKey: string
): Promise<string> {
try {
const result = await kubectl.getResource(
NAMESPACE,
namespaceName,
false,
namespaceName
)
if (result?.stderr) {
core.warning(result.stderr)
return process.env.GITHUB_SHA
} else if (result?.stdout) {
const annotationsSet = JSON.parse(result.stdout).metadata.annotations
if (annotationsSet && annotationsSet[annotationKey]) {
return JSON.parse(annotationsSet[annotationKey].replace(/'/g, '"'))
.commit
} else {
return 'NA'
}
}
} catch (ex) {
core.warning(`Failed to get commits from cluster. ${JSON.stringify(ex)}`)
return ''
}
}
export async function annotateChildPods(
kubectl: Kubectl,
resourceType: string,
resourceName: string,
namespace: string | undefined,
annotationKeyValStr: string
): Promise<ExecOutput[]> {
let owner = resourceName
if (resourceType.toLowerCase().indexOf('deployment') > -1) {
owner = await kubectl.getNewReplicaSet(resourceName, namespace)
}
const commandExecutionResults = []
let allPods
try {
allPods = JSON.parse((await kubectl.getAllPods()).stdout)
} catch (e) {
core.debug(`Unable to parse pods: ${e}`)
}
if (allPods?.items && allPods.items?.length > 0) {
allPods.items.forEach((pod) => {
const owners = pod?.metadata?.ownerReferences
if (owners) {
for (const ownerRef of owners) {
if (ownerRef.name === owner) {
commandExecutionResults.push(
kubectl.annotate(
'pod',
pod.metadata.name,
annotationKeyValStr,
namespace
)
)
break
}
}
}
})
}
return await Promise.all(commandExecutionResults)
}