src/strategyHelpers/blueGreen/serviceBlueGreenHelper.ts (40 lines of code) (raw):
import * as core from '@actions/core'
import {K8sServiceObject} from '../../types/k8sObject'
import {Kubectl} from '../../types/kubectl'
import {
addBlueGreenLabelsAndAnnotations,
BLUE_GREEN_VERSION_LABEL,
fetchResource,
GREEN_LABEL_VALUE
} from './blueGreenHelper'
// add green labels to configure existing service
export function getUpdatedBlueGreenService(
inputObject: any,
labelValue: string
): K8sServiceObject {
const newObject = JSON.parse(JSON.stringify(inputObject))
// Adding labels and annotations.
addBlueGreenLabelsAndAnnotations(newObject, labelValue)
return newObject
}
export async function validateServicesState(
kubectl: Kubectl,
serviceEntityList: any[]
): Promise<boolean> {
let areServicesGreen: boolean = true
for (const serviceObject of serviceEntityList) {
// finding the existing routed service
const existingService = await fetchResource(
kubectl,
serviceObject.kind,
serviceObject.metadata.name,
serviceObject?.metadata?.namespace
)
let isServiceGreen =
!!existingService &&
getServiceSpecLabel(existingService as K8sServiceObject) ==
GREEN_LABEL_VALUE
areServicesGreen = areServicesGreen && isServiceGreen
}
return areServicesGreen
}
export function getServiceSpecLabel(inputObject: K8sServiceObject): string {
return inputObject.spec.selector[BLUE_GREEN_VERSION_LABEL]
}