{"id":16203062,"url":"https://github.com/michidk/multiform","last_synced_at":"2025-06-30T22:05:54.298Z","repository":{"id":73861283,"uuid":"494408822","full_name":"michidk/multiform","owner":"michidk","description":"A Multi-Cloud Templating System","archived":false,"fork":false,"pushed_at":"2024-03-26T10:53:39.000Z","size":53,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-02T14:50:21.510Z","etag":null,"topics":["aws","cloud","hacktoberfest","infrastructure-as-code","multi-cloud","terraform"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/michidk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-20T09:50:16.000Z","updated_at":"2024-03-14T22:44:49.000Z","dependencies_parsed_at":"2024-11-03T11:41:09.540Z","dependency_job_id":"7b1ffcea-df22-443a-8d9d-7cdab067c52a","html_url":"https://github.com/michidk/multiform","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/michidk/multiform","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michidk%2Fmultiform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michidk%2Fmultiform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michidk%2Fmultiform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michidk%2Fmultiform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michidk","download_url":"https://codeload.github.com/michidk/multiform/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michidk%2Fmultiform/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262857262,"owners_count":23375490,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","cloud","hacktoberfest","infrastructure-as-code","multi-cloud","terraform"],"created_at":"2024-10-10T09:51:04.299Z","updated_at":"2025-06-30T22:05:54.231Z","avatar_url":"https://github.com/michidk.png","language":"Python","readme":"Multiform - A Multi-Cloud Templating System\n====\n\nA templating system that helps to manage [Terraform](https://www.terraform.io/) deployments in [multi-cloud](https://www.cloudflare.com/learning/cloud/what-is-multicloud/) environments.\n\n## About this Project\n\nThis command-line tool allows transforming a generic (platform-independent) cloud architecture into Terraform deployments that target different platforms. While [Terraform exposes the full functionality and provides a \"single common denominator\"](https://www.terraform.io/language/modules/develop/composition#multi-cloud-abstractions), this tool aims to provide an interface for only the common functionality to abstract platform-specific knowledge away.\n\nThis repo contains an [example architecture](example/architecture.yaml) together with [templates](example/templates/) required for this architecture. This architecture describes the required infrastructure for a [serverless](https://www.cloudflare.com/learning/serverless/what-is-serverless/) web application. Deployments for each platform (that the templates in this repo are based on), as well as the files for the FaaS code and website, can be found in this [repository](https://github.com/michidk/serverless-webapp/).\n\n## Contents\n\nThe relevant parts of this repository are:\n\n| Folder/File | Description |\n| ----------- | ----------- |\n| [.devcontainer/](.devcontainer) | The [vscode devcontainer](https://code.visualstudio.com/docs/remote/containers) for this project |\n| [.github/](.github/) | Reamd resources |\n| [.vscode/](.vscode/) | [vscode](https://code.visualstudio.com/) settings |\n| [example/](example/) | The serverless webapp sample |\n| [src/](src/) | The Python source code of the tool |\n| [justfile](justfile) | The just configuration |\n\n## How it works\n\nThis tool parses [Jinja](https://palletsprojects.com/p/jinja/) templates and instantiates the according to the architecture file. This file is a YAML file that generically describes the required cloud infrastructure. The templates have definition (YAML) files that describe the structure, inputs and supported platforms of the Terraform-Jinja (`.tf.j2`) files. All YAML files are validated with [Cerberus](https://docs.python-cerberus.org/en/stable/) schemes.\n\nExample architecture file:\n\n```yaml\nkind: Architecture\nmetadata:\n  name: simple-web-service\nspec:\n  platforms:\n    - name: aws\n      properties:\n        region: us-east-1\n  components:\n    - name: backend-code\n      type: object-storage\n      properties:\n        uniqueName: 23423-faas-files\n    - name: backend-faas\n      type: function\n      properties:\n        uniqueName: 23423455-faas-backend\n        language: javascript\n        source:\n          bucket: !ref backend-code\n          object: function.zip\n```\n\n## Setup \u0026 Quickstart\n\nThis repository uses [just](https://github.com/casey/just/) - which is a command runner utility similar to make. Either use just (installed in this devcontainer) or look up the command in the [justfile](justfile).\n\nInstall with `just install` and then use `multiform` command-line interface.\nTo run the example use `just run` to run the transpiler on the [example](example/).\n\n## Usage\n\nThe `-h` flag is available for all `multiform` commands.\n\nThe `-v` flag is used to set the verbosity level (see help for more info).\n\nThere are two main subcommands: `transpile` and `plot`.\n`multiform transpile` provides a CLI to the transpiler, while `multiform plot` generates a graph of the provided architecture.\n\n### Transpile\n\nThe `multiform transpile` command can be used to transpile a generic architecture file together with a set of templates to platform-specific Terraform files.\n`multiform transpile -h` will show the help for the transpiler.\n\nThe following flags are available:\n\n| Flag | Description |\n| ---- | ----------- |\n| `-a \u003cfile\u003e` | The architecture file to use |\n| `-t \u003cfolder\u003e` | The folder that contains all templates and the `root.yaml` file |\n| `-o \u003cfolder\u003e` | The folder where the outputs should be stored in |\n| `-r` | Will generate a `report.yaml` file that contains additional information about the transpilation |\n| `-d` | Will add debug information to the report |\n\n### Plot\n\nThe `multiform plot` command can be used to generate a graph of the architecture file.\n`multiform plot -h` will show the help for the transpiler.\n\nThe following flags are available:\n\n| Flag | Description |\n| ---- | ----------- |\n| `-a \u003cfile\u003e` | The architecture file to use |\n| `-o \u003cfile\u003e` | The output file |\n| `-f \u003cformat\u003e` | Will output the graph in the given format (see help for options) |\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichidk%2Fmultiform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichidk%2Fmultiform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichidk%2Fmultiform/lists"}