应用平台 APPSTAGE-变更流程编排开发

时间:2023-11-24 18:31:05

变更流程编排开发

在一次完整的业务变更中,往往会涵盖多种类型、多个模块的变更,如集群扩容、申请ELB、创建数据库、软件升级等等。在IaC的语境下,每一个变更本质上都是IaC资源的变更。在一次完整的业务变更中,部分资源的变更依赖于其他资源的变更,如,为一个微服务创建NUWA实例之前往往需要先创建该微服务的数据库。

变更流程编排就是使用IaC代码对各资源在具体变更过程中的依赖关系、先后顺序进行代码化描述。变更流程编排本质上就是描述各模块、各资源之间的依赖关系。在变更过程中,IaC将根据依赖关系生成的有向无环图顺序执行各资源的变更过程。

变更流程编排包含两种类型:

  • 组件内部各资源的编排

    组件内部编排在spec包各组件的resources.yaml文件中描述,通过为资源指定dependsOn属性表达依赖关系。

    - name: chaosmonkey-elb
      type: WiseCloud::LoadBalancer::ELB
      properties:
        version: V3
        listeners:
          - name: listener
            protocol: HTTP
            protocolPort: 80
            poolName: pool_a
        pools:
          - name: pool_a
            protocol: HTTP
    - name: chaosmonkey-slb
      type: WiseCloud::LoadBalancer::SLB
      dependsOn:
        - name: chaosmonkey-elb
      properties:
        elbName: chaosmonkey-elb
        elbPoolNames: ["pool_a"]
        deployVersion: 1.4.12
        slbConfigs:
          targets:
            - clusterName: mgr
          routes:
            - location: /
              target: mgr

    以上示例定义了两个资源,一个名为chaosmonkey-elb的ELB,一个名为chaosmonkey-slb的SLB;chaosmonkey-slb依赖于chaosmonkey-elb。在变更时,先变更chaosmonkey-elb,变更完成后再变更chaosmonkey-slb。

    dependsOn是列表类型,使用name或alias描述相同组件内其他资源。组件内部各资源的name是资源的标记,不同类型的资源也应使用不同的name;组件内部允许同一个资源出现多次,这表示同一个资源的不同变更阶段,这一场景下该资源的所有节点必须声明alias字段并且alias取值必须在component内全局唯一,同一个资源的所有alias之间必须显式地在dependsOn字段中声明串行依赖。

  • 各组件之间的编排

    component间的编排在spec包中的meta.yaml文件中描述,涉及applyPipeline/pipelines两个字段。pipelines中支持定义多个流程,applyPipeline描述本次变更要使用的流程。

    applyPipeline: default
    pipelines:
    - name: default
      action: Serial
      tasks:
      - action: Apply
        component:
          name: environment
      - action: Parallel
        tasks:
        - action: Apply
          component:
            name: WiseEyeChaosMonkeyMgrService
        - action: Apply
          component:
            name: WiseEyeChaosMonkeyPortal

    以上示例定义了一个名为default的流程,该流程中编排了三个component。在变更时,先变更名为environment的component,该component变更完成后再并行变更名为WiseEyeChaosMonkeyMgrService和WiseEyeChaosMonkeyPortal的component。

    • 流程的数据结构中,各字段含义如表1所示。
      表1 字段说明

      字段

      含义

      是否必填

      name

      流程名

      必填

      tasks

      任务列表

      必填

      action

      本流程中各任务之间的串并行关系。

      • Serial:串行
      • Parallel:并行

      必填

    • 任务的数据结构中,各字段含义如表2所示。
      表2 字段说明

      字段

      含义

      是否必填

      action

      本流程中各任务之间的串并行关系。

      • Serial:串行
      • Parallel:并行
      • Apply:本任务中只包含单个component

      必填

      tasks

      任务列表

      action取值为Serial/Parallel时必填。

      component

      -

      action取值为Apply时必填。

    • component的数据结构中,各字段含义如表3所示。
      表3 字段说明

      字段

      含义

      是否必填

      name

      component名称

      必填

      values

      参数键值对

      选填

support.huaweicloud.com/devg-appstage/appstage_06_0018.html