CloudCompose

Compose multiple cloud formation templates into one file.

cloud-compose ./template.yml ./output

# template.yml
---
$cloud_compose:
  parameters:
    GlobalName: 'TestTemplate'
  imports:
    - name: SubTemplateOne
      path: ./sub_readme.yml
    - name: SubTemplateTwo
      path: ./sub_readme.yml
---

Resources:
  $(GlobalName)MainResource:
    Type: AWS::Fake::Thing
    Properties:
      Name: My Main Resource
  SecondaryResource:
    Type: AWS::Fake::Thing
    Properties:
      ParentThing: !Ref $(GlobalName)MainResource
# sub_readme.yml
---
$cloud_compose:
  partial: true
---

Resources:
  $(name)Resource:
    Type: AWS::Fake::Thing
    Properties:
      ParentThing: !Ref $(GlobalName)MainResource
Outputs:
  $(name)ResourceOutput:
    Value: !Ref $(name)Resource

# Output
---
Resources:
  TestTemplateMainResource:
    Type: AWS::Fake::Thing
    Properties:
      Name: My Main Resource
  SecondaryResource:
    Type: AWS::Fake::Thing
    Properties:
      ParentThing: !Ref TestTemplateMainResource
  SubTemplateOneResource:
    Type: AWS::Fake::Thing
    Properties:
      ParentThing: !Ref TestTemplateMainResource
  SubTemplateTwoResource:
    Type: AWS::Fake::Thing
    Properties:
      ParentThing: !Ref TestTemplateMainResource
Outputs:
  SubTemplateOneResourceOutput:
    Value: !Ref SubTemplateOneResource
  SubTemplateTwoResourceOutput:
    Value: !Ref SubTemplateTwoResource