Added Integration Tests, Resolved Bugs With Annotations (#255)

* First commit - made manifests for test deployments, made manifests for i tests for other deployment strategies

* broke down blue/green

* added latest tags to test manifests for new tags

* remade tester

* ready to test bgi

* using all but first index of argv

* careless error with dicts

* added test to namespace

* realized i was silencing error

* indexing containers

* keyerror

* logging bc python errors are weird

* expected still string

* parsed args behaving weirdly

* test seems to be working now, applying changes to other YAMLs now

* blue/green ready to test

* oops

* oops

* Added additional labels to check

* hyphen

* Added our annotations

* lol

* added our labels to services too

* nonetype issue'

* nonetype issue'

* narrowing down parameter

* fixed annotations issue with promote

* adding debhug statement to figure out why services aren't getting annotations

* this should fix annotations issue for service

* not sure why this wasn't caught by intellisense

* should be fixed with removing comma but adding logs in case

* added linkerd install

* verification

* upgraded kubernetes version

* removing crds

* proxy option

* Added smi extension

* logging service

* smi svcs also getting labeled now

* matching ts type

* not sure where stable service is going

* remaining svc and deployment should match

* keeping stable service and ts object

* updated tests to reflect keeping ts object

* no green svc after promote

* duh

* lol

* canary work

* canary test ready

* logging for ing, filename for canary

* changed ingress svc key and returning svc files from smi canary deployment

* ts name

* forgot about baseline in first deploy

* *

* *

* smi canary should annotate, fixed cleanup

* typescript issue plus percentage

* forgot to type extra method

* removed cleaned up objects from annotate list

* logging because services aren't getting removed

* moving to try/catch strategy of annotation since deletion can fail silently/with warnings

* moved label to individual

* removing canary service check after promote

* pod ready for testing

* set weights to 1000

* selectors

* *

* percentage

* *

* typing

* mixed up pod and smi

* fixed tests

* prettier

* forgot to remove canary

* cleanup

* Added oliver's feedback + more cleanup

* ncc as dev dependency

* npx

* going back to global ncc install bc npm is being weird

* prettier

* removed unnecessary post step
This commit is contained in:
Jaiveer Katariya
2022-11-01 16:02:57 -04:00
committed by GitHub
parent a6cfc31f7a
commit e9693a7cdd
24 changed files with 1665 additions and 310 deletions
+51 -5
View File
@@ -6,6 +6,7 @@ import {
getResources,
updateManifestFiles
} from '../utilities/manifestUpdateUtils'
import {annotateAndLabelResources} from '../strategyHelpers/deploymentHelper'
import * as models from '../types/kubernetesTypes'
import * as KubernetesManifestUtility from '../utilities/manifestStabilityUtils'
import {
@@ -15,6 +16,7 @@ import {
} from '../strategyHelpers/blueGreen/blueGreenHelper'
import {BlueGreenManifests} from '../types/blueGreenTypes'
import {DeployResult} from '../types/deployResult'
import {
promoteBlueGreenIngress,
@@ -62,6 +64,8 @@ async function promoteCanary(kubectl: Kubectl, manifests: string[]) {
const trafficSplitMethod = parseTrafficSplitMethod(
core.getInput('traffic-split-method', {required: true})
)
let promoteResult: DeployResult
let filesToAnnotate: string[]
if (trafficSplitMethod == TrafficSplitMethod.SMI) {
includeServices = true
@@ -77,26 +81,35 @@ async function promoteCanary(kubectl: Kubectl, manifests: string[]) {
core.startGroup(
'Deploying input manifests with SMI canary strategy from promote'
)
await SMICanaryDeploymentHelper.deploySMICanary(
promoteResult = await SMICanaryDeploymentHelper.deploySMICanary(
manifestFilesForDeployment,
kubectl,
true
)
core.endGroup()
core.startGroup('Redirecting traffic to stable deployment')
await SMICanaryDeploymentHelper.redirectTrafficToStableDeployment(
kubectl,
manifests
const stableRedirectManifests =
await SMICanaryDeploymentHelper.redirectTrafficToStableDeployment(
kubectl,
manifests
)
filesToAnnotate = promoteResult.manifestFiles.concat(
stableRedirectManifests
)
core.endGroup()
} else {
core.startGroup('Deploying input manifests from promote')
await PodCanaryHelper.deployPodCanary(
promoteResult = await PodCanaryHelper.deployPodCanary(
manifestFilesForDeployment,
kubectl,
true
)
filesToAnnotate = promoteResult.manifestFiles
core.endGroup()
}
@@ -113,6 +126,23 @@ async function promoteCanary(kubectl: Kubectl, manifests: string[]) {
)
}
core.endGroup()
// annotate resources
core.startGroup('Annotating resources')
let allPods
try {
allPods = JSON.parse((await kubectl.getAllPods()).stdout)
} catch (e) {
core.debug(`Unable to parse pods: ${e}`)
}
const resources: Resource[] = getResources(
filesToAnnotate,
models.DEPLOYMENT_TYPES.concat([
models.DiscoveryAndLoadBalancerResource.SERVICE
])
)
await annotateAndLabelResources(filesToAnnotate, kubectl, resources, allPods)
core.endGroup()
}
async function promoteBlueGreen(kubectl: Kubectl, manifests: string[]) {
@@ -186,4 +216,20 @@ async function promoteBlueGreen(kubectl: Kubectl, manifests: string[]) {
await deleteGreenObjects(kubectl, manifestObjects.deploymentEntityList)
}
core.endGroup()
// annotate resources
core.startGroup('Annotating resources')
let allPods
try {
allPods = JSON.parse((await kubectl.getAllPods()).stdout)
} catch (e) {
core.debug(`Unable to parse pods: ${e}`)
}
await annotateAndLabelResources(
deployedManifestFiles,
kubectl,
resources,
allPods
)
core.endGroup()
}