seagull-js/seagull

View on GitHub
packages/deploy-aws/src/seagull_app.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { Role } from '@aws-cdk/aws-iam'
import { App } from '@aws-cdk/cdk'
import * as cfnDiff from '@aws-cdk/cloudformation-diff'
import * as cdk from 'aws-cdk'
import * as yaml from 'yaml'
import * as lib from './lib'
import { SeagullStack } from './seagull_stack'
import { OperationsProps } from './types'

export class SeagullApp extends App {
  stack: SeagullStack
  role?: Role
  private projectName: string

  constructor(props: OperationsProps) {
    super()
    const { projectName, stackProps } = props
    this.projectName = projectName
    this.stack = new SeagullStack(this, projectName, stackProps)
  }

  async deployStack() {
    const sdk = new cdk.SDK({})
    const synthStack = this.synthesizeStack(this.projectName)
    const env = synthStack.environment
    await cdk.bootstrapEnvironment(env, sdk, 'CDKToolkit', undefined)
    const toolkitInfo = await cdk.loadToolkitInfo(env, sdk, 'CDKToolkit')
    await cdk.deployStack({ sdk, stack: synthStack, toolkitInfo })
  }

  async destroyStack() {
    const sdk = new cdk.SDK({})
    const synthStack = this.synthesizeStack(this.projectName)
    const env = synthStack.environment
    await cdk.bootstrapEnvironment(env, sdk, 'CDKToolkit', undefined)
    await cdk.destroyStack({ sdk, stack: synthStack })
  }

  async diffStack() {
    const sdk = new cdk.SDK({})
    const synthStack = this.synthesizeStack(this.projectName)
    const cfn = await sdk.cloudFormation(synthStack.environment, 0)
    const templateData = { StackName: synthStack.name }
    const template = await cfn.getTemplate(templateData).promise()
    const body = template.TemplateBody
    const curTemplate = (body && yaml.parse(body, { schema: 'yaml-1.1' })) || {}
    const logicalToPathMap = lib.createLogicalToPathMap(synthStack)
    const diff = cfnDiff.diffTemplate(curTemplate, synthStack.template)
    // tslint:disable-next-line:no-unused-expression
    diff.isEmpty && lib.noChangesInDiff()
    cfnDiff.formatDifferences(process.stdout, diff, logicalToPathMap)
  }
}