Skip to content

N-Erickson/CloudCartography

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 

Repository files navigation

Cloud Cartography

Generate Cloud Infrastructure Maps

Run these scripts against a Terraform State file to generate infrastrucure diagrams.

Diagrams are PNG format.

python3 SCRIPT_NAME.py --state=/path/to/tfstate/terraform.tfstate --output=my_infrastructure_diagram

These can also be called as part of a GitHub Actions workflow/pipeline.

GCP:

image

OCI:

image

Example Actions workflow that will post to a Pull Request as a comment:

      - name: Setup Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.9'

      - name: Install Dependencies
        run: |
          python -m pip install --upgrade pip
          pip install diagrams
          sudo apt-get update
          sudo apt-get install -y graphviz

      - name: Checkout Diagram Script Repository
        uses: actions/checkout@v3
        with:
          repository: N-Erickson/CloudCartography
          path: CloudCartography

      - name: Generate Infrastructure Diagram
        working-directory: ${{ github.workspace }}
        run: |
          python CloudCartography/<cloud_provider>/<script_name>.py --state=PATH/TO/terraform/terraform.tfstate --output=infra_diagram  # set which provider and paths here

      - name: Get current time
        uses: josStorer/get-current-time@v2
        id: current-time
        with:
          format: YYYY-MM-DD-HH-mm-ss
          utcOffset: "-08:00"

      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: infra-diagram-${{ steps.current-time.outputs.formattedTime }}
          release_name: Infrastructure Diagram ${{ steps.current-time.outputs.formattedTime }}
          draft: false
          prerelease: false

      - name: Upload Release Asset
        id: upload-release-asset 
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./infra_diagram.png
          asset_name: infra_diagram_${{ steps.current-time.outputs.formattedTime }}.png
          asset_content_type: image/png

      - name: Comment PR
        if: github.event_name == 'pull_request'
        uses: actions/github-script@v6
        with:
          github-token: ${{secrets.GITHUB_TOKEN}}
          script: |
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: `## Updated Infrastructure Diagram\n\n![Infrastructure Diagram](${process.env.GITHUB_SERVER_URL}/${context.repo.owner}/${context.repo.repo}/releases/download/infra-diagram-${{ steps.current-time.outputs.formattedTime }}/infra_diagram_${{ steps.current-time.outputs.formattedTime }}.png)`
            })

About

Automatically generate cloud infrastructure diagrams based off of a Terraform State File.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages