starhawking / python-terrascript

Create Terraform files using Python scripts.
BSD 2-Clause "Simplified" License
515 stars 76 forks source link

Currently only a single provisioner per resource is possible. #29

Closed mjuenema closed 4 years ago

nielsonsantana commented 5 years ago

I think that this problem was solved. I'm using multiples providers. Example:

from terrascript import Terrascript
from terrascript import provider
from terrascript.aws.r import aws_instance

ts = Terrascript()

AWS_REGION_LIST = [
    'us-east-1',
    'ap-southeast-1',
    'eu-central-1',
]

aws_providers_map = {}
for _region in AWS_REGION_LIST:
    _provider = ts.add(provider(
        'aws',
        version="~> 1.38",
        access_key='AWS_ACCESS_KEY',
        secret_key='AWS_SECRET_KEY',
        region=_region,
        alias=_region,
    ))
    aws_providers_map[_region] = _provider

# Default Provider
ts.add(provider(
    'aws',
    version="~> 1.38",
    access_key='AWS_ACCESS_KEY',
    secret_key='AWS_SECRET_KEY',
    region='us-east-1',
))

instance_example1 = ts.add(aws_instance(
    'example2', ami='ami-2757f631', instance_type='t2.micro',
    provider=aws_providers_map['us-east-1'].id,
))

print(ts.dump())

Output:

{
  "provider": {
    "aws": {
      "__DEFAULT__": {
        "access_key": "AWS_ACCESS_KEY",
        "region": "us-east-1",
        "secret_key": "AWS_SECRET_KEY",
        "version": "~> 1.38"
      },
      "ap-southeast-1": {
        "access_key": "AWS_ACCESS_KEY",
        "alias": "ap-southeast-1",
        "region": "ap-southeast-1",
        "secret_key": "AWS_SECRET_KEY",
        "version": "~> 1.38"
      },
      "eu-central-1": {
        "access_key": "AWS_ACCESS_KEY",
        "alias": "eu-central-1",
        "region": "eu-central-1",
        "secret_key": "AWS_SECRET_KEY",
        "version": "~> 1.38"
      },
      "us-east-1": {
        "access_key": "AWS_ACCESS_KEY",
        "alias": "us-east-1",
        "region": "us-east-1",
        "secret_key": "AWS_SECRET_KEY",
        "version": "~> 1.38"
      }
    }
  },
  "resource": {
    "aws_instance": {
      "example2": {
        "ami": "ami-2757f631",
        "instance_type": "t2.micro",
        "provider": "${provider.aws.us-east-1.id}"
      }
    }
  }
}