85 lines
2 KiB
Python
85 lines
2 KiB
Python
|
from app import app
|
||
|
from app.terraform.bridge import BridgeAutomation
|
||
|
|
||
|
|
||
|
class BridgeAWSAutomation(BridgeAutomation):
|
||
|
short_name = "bridge_aws"
|
||
|
provider = "aws"
|
||
|
|
||
|
template_parameters = [
|
||
|
"aws_access_key",
|
||
|
"aws_secret_key",
|
||
|
"ssh_public_key_path"
|
||
|
]
|
||
|
|
||
|
template = """
|
||
|
terraform {
|
||
|
required_providers {
|
||
|
aws = {
|
||
|
version = "~> 4.2.0"
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
provider "aws" {
|
||
|
access_key = "{{ aws_access_key }}"
|
||
|
secret_key = "{{ aws_secret_key }}"
|
||
|
region = "us-east-1"
|
||
|
}
|
||
|
|
||
|
locals {
|
||
|
ssh_key = file("{{ ssh_public_key_path }}")
|
||
|
}
|
||
|
|
||
|
{% for group in groups %}
|
||
|
module "label_{{ group.id }}" {
|
||
|
source = "cloudposse/label/null"
|
||
|
version = "0.25.0"
|
||
|
namespace = "{{ global_namespace }}"
|
||
|
tenant = "{{ group.group_name }}"
|
||
|
label_order = ["namespace", "tenant", "name", "attributes"]
|
||
|
}
|
||
|
{% endfor %}
|
||
|
|
||
|
{% for bridgeconf in bridgeconfs %}
|
||
|
{% for bridge in bridgeconf.bridges %}
|
||
|
{% if not bridge.destroyed %}
|
||
|
module "bridge_{{ bridge.id }}" {
|
||
|
source = "sr2c/tor-bridge/aws"
|
||
|
version = "0.0.1"
|
||
|
ssh_key = local.ssh_key
|
||
|
contact_info = "hi"
|
||
|
context = module.label_{{ bridgeconf.group.id }}.context
|
||
|
name = "br"
|
||
|
attributes = ["{{ bridge.id }}"]
|
||
|
distribution_method = "{{ bridge.conf.method }}"
|
||
|
}
|
||
|
|
||
|
output "bridge_hashed_fingerprint_{{ bridge.id }}" {
|
||
|
value = module.bridge_{{ bridge.id }}.hashed_fingerprint
|
||
|
}
|
||
|
|
||
|
output "bridge_bridgeline_{{ bridge.id }}" {
|
||
|
value = module.bridge_{{ bridge.id }}.bridgeline
|
||
|
sensitive = true
|
||
|
}
|
||
|
{% endif %}
|
||
|
{% endfor %}
|
||
|
{% endfor %}
|
||
|
"""
|
||
|
|
||
|
|
||
|
def automate():
|
||
|
auto = BridgeAWSAutomation()
|
||
|
auto.destroy_expired()
|
||
|
auto.create_missing()
|
||
|
auto.generate_terraform()
|
||
|
auto.terraform_init()
|
||
|
auto.terraform_apply()
|
||
|
auto.import_terraform()
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
with app.app_context():
|
||
|
automate()
|