mirror of
https://github.com/Azure/k8s-deploy.git
synced 2026-06-21 10:39:26 +08:00
99510dff95
* case-insensitive resource type * inline error and throw outside switch * consistent input naming * catch failed clustertype parse * protect raw input * naming * format
80 lines
2.5 KiB
TypeScript
80 lines
2.5 KiB
TypeScript
import * as core from '@actions/core'
|
|
import * as models from '../types/kubernetesTypes'
|
|
import * as KubernetesConstants from '../types/kubernetesTypes'
|
|
import {Kubectl, Resource} from '../types/kubectl'
|
|
import {
|
|
getResources,
|
|
updateManifestFiles
|
|
} from '../utilities/manifestUpdateUtils'
|
|
import {
|
|
annotateAndLabelResources,
|
|
checkManifestStability,
|
|
deployManifests
|
|
} from '../strategyHelpers/deploymentHelper'
|
|
import {DeploymentStrategy} from '../types/deploymentStrategy'
|
|
import {parseTrafficSplitMethod} from '../types/trafficSplitMethod'
|
|
import {ClusterType} from '../inputUtils'
|
|
export const ResourceTypeManagedCluster =
|
|
'Microsoft.ContainerService/managedClusters'
|
|
export const ResourceTypeFleet = 'Microsoft.ContainerService/fleets'
|
|
export async function deploy(
|
|
kubectl: Kubectl,
|
|
manifestFilePaths: string[],
|
|
deploymentStrategy: DeploymentStrategy,
|
|
resourceType: ClusterType
|
|
) {
|
|
// update manifests
|
|
const inputManifestFiles: string[] = updateManifestFiles(manifestFilePaths)
|
|
core.debug(`Input manifest files: ${inputManifestFiles}`)
|
|
|
|
// deploy manifests
|
|
core.startGroup('Deploying manifests')
|
|
const trafficSplitMethod = parseTrafficSplitMethod(
|
|
core.getInput('traffic-split-method', {required: true})
|
|
)
|
|
const deployedManifestFiles = await deployManifests(
|
|
inputManifestFiles,
|
|
deploymentStrategy,
|
|
kubectl,
|
|
trafficSplitMethod
|
|
)
|
|
core.debug(`Deployed manifest files: ${deployedManifestFiles}`)
|
|
core.endGroup()
|
|
|
|
// check manifest stability
|
|
core.startGroup('Checking manifest stability')
|
|
const resourceTypes: Resource[] = getResources(
|
|
deployedManifestFiles,
|
|
models.DEPLOYMENT_TYPES.concat([
|
|
KubernetesConstants.DiscoveryAndLoadBalancerResource.SERVICE
|
|
])
|
|
)
|
|
|
|
await checkManifestStability(kubectl, resourceTypes, resourceType)
|
|
core.endGroup()
|
|
|
|
// print ingresses
|
|
core.startGroup('Printing ingresses')
|
|
const ingressResources: Resource[] = getResources(deployedManifestFiles, [
|
|
KubernetesConstants.DiscoveryAndLoadBalancerResource.INGRESS
|
|
])
|
|
for (const ingressResource of ingressResources) {
|
|
await kubectl.getResource(
|
|
KubernetesConstants.DiscoveryAndLoadBalancerResource.INGRESS,
|
|
ingressResource.name,
|
|
false,
|
|
ingressResource.namespace
|
|
)
|
|
}
|
|
core.endGroup()
|
|
|
|
// annotate resources
|
|
core.startGroup('Annotating resources')
|
|
await annotateAndLabelResources(
|
|
deployedManifestFiles,
|
|
kubectl,
|
|
resourceTypes
|
|
)
|
|
core.endGroup()
|
|
}
|