Python Terraform JSON configuration generator
Project description
Helicopyter
Helicopyter allows people to conveniently describe infrastructure using Python.
Perhaps like a helicopter hovering between the clouds and the ground, it allows this in a way that's less like the AWS Cloud Development Kit (CDK) and more like Terraform.
Background
Helicopyter uses CDKTF and is inspired by Configerator and Terraformpy.
What Helicopyter does (goals)
- Name in the resource-prefix Terraform style, instead of the hash-suffix CDK style. This makes reviewing plan output easier, and aligns with "Namespaces are one honking great idea -- let's do more of those!"
- Simplify
main.py
files by- Removing the
App
class, which does not correspond to a Terraform concept. Instead- A string attribute provides name information
- Resource-specific scopes are provided by
HeliStack.push()
- The
synth
method is replaced by a module-level function, and called from a central location instead of distributed boilerplate.
- Making custom TerraformStack/HeliStack subclasses optional instead of required. Defining a subclass only to instantiate one instance of it is more complicated than instantiating the base class and modifying the instance.
- Removing the
--- documentation/learn_cdktf_docker.py 2024-08-05 08:47:30
+++ documentation/learn_helicopyter_docker.py 2024-08-05 08:47:25
@@ -1,28 +1,18 @@
-from cdktf import App, TerraformStack
from cdktf_cdktf_provider_docker.container import Container
from cdktf_cdktf_provider_docker.image import Image
-from cdktf_cdktf_provider_docker.provider import DockerProvider
-from constructs import Construct
+from helicopyter import HeliStack
-class MyStack(TerraformStack):
- def __init__(self, scope: Construct, ns: str):
- super().__init__(scope, ns)
+def synth(stack: HeliStack):
-
- DockerProvider(self, 'docker')
+ stack.provide('docker')
- docker_image = Image(self, 'nginxImage', name='nginx:latest', keep_locally=False)
+ docker_image = stack.push(Image, 'nginxImage', name='nginx:latest', keep_locally=False)
- Container(
- self,
- 'nginxContainer',
- name='tutorial',
- image=docker_image.name,
- ports=[{'internal': 80, 'external': 8000}],
- )
+ stack.push(
+ Container,
+ 'nginxContainer',
+ name='tutorial',
+ image=docker_image.name,
+ ports=[{'internal': 80, 'external': 8000}],
+ )
-
-
-app = App()
-MyStack(app, 'learn-cdktf-docker')
-
-app.synth()
- Enable hand-written and auto-generated Hashicorp Configuration Language (HCL) files to co-exist, allowing incremental adoption.
- Separate object instantiation from synthesis, allowing Python script to import the objects/data and do completely different things with them.
- Golang Terraform has a pretty good command line interface. The
ht[aip]
functions inincludes.sh
try to wrap it very lightly.
What Helicopyter will probably never do (non-goals)
- Support languages other than Python
- Make use of CDKTF's command line interface. Integration with it is untested and not recommended.
What Helicopyter might do in the future
- Support multiple backend configurations per codename
- Iterate on supported directory structures. For hysterical raisins, the currently supported
directory structure is
f'deploys/{cona}/terraform'
, grouping- Primarily by COdeNAme (CONA), which is probably synonymous with application, deployment, and service
- Secondarily by tool, such as
ansible
,docker
,terraform
,python
__str__()
forto_string()
, etc.- Why do we need a Node.js server? Can we build dataclasses or Pydantic models out of the type annotations already being generated?
- Provide helper classes or functions for useful but annoyingly verbose patterns such as local-exec provisioner command
- Backend / state file linter such as: prod must exist, and region/bucket/workspace_key_prefix/key must follow pattern
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
helicopyter-2024.39.1.tar.gz
(67.2 kB
view details)
Built Distribution
File details
Details for the file helicopyter-2024.39.1.tar.gz
.
File metadata
- Download URL: helicopyter-2024.39.1.tar.gz
- Upload date:
- Size: 67.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 17be10dcbc47a236eb66db40785551093d7fe82445622b464d1878c474a6adc2 |
|
MD5 | f9e91739afd2cf6f1ffa2946447b892b |
|
BLAKE2b-256 | 616cada1cf6fd7bb5a2cb622d43593211eaa96cc111d59606ad3e1c105e3bab9 |
File details
Details for the file helicopyter-2024.39.1-py3-none-any.whl
.
File metadata
- Download URL: helicopyter-2024.39.1-py3-none-any.whl
- Upload date:
- Size: 23.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7281c2f407cec4c138295178ccef5405773a1a5cdd5006bd6e42ef61ca91634a |
|
MD5 | 84f9806f3fe60b81bfddeec4b7e1a715 |
|
BLAKE2b-256 | 292f2c1de1ea4f3b3972acb636bb94ca6a0a7af5ac8fb63e62770be5ec9f7cbb |