From 684af33924b1edf032fbfbbc2008dab63263f389 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Mu=C3=B1oz?= Date: Wed, 17 Aug 2022 15:28:44 +0200 Subject: [PATCH] WIP --- cloud/sample/resources_gcloud.json | 34 +++++++++++++++++++++++- cloud/terraform/aws_config_builder.py | 5 ++-- cloud/terraform/gcloud_config_builder.py | 23 +++++++++------- 3 files changed, 50 insertions(+), 12 deletions(-) diff --git a/cloud/sample/resources_gcloud.json b/cloud/sample/resources_gcloud.json index fdd4b3a2..39135a79 100644 --- a/cloud/sample/resources_gcloud.json +++ b/cloud/sample/resources_gcloud.json @@ -3,12 +3,44 @@ "project": "redhat-marketplace-dev", "instances": [ { - "image": "rhel-9-v20220524", + "image": "rhel-9-v20220719", "region": "us-east1", "zone": "us-east1-c", "instance_type": "", "username": "google", "name": "rhel-9.0-x86_64" + }, + { + "image": "rhel-8-v20220719", + "region": "us-east1", + "zone": "us-east1-c", + "instance_type": "", + "username": "google", + "name": "rhel-8.x-x86_64" + }, + { + "image": "rhel-8-6-sap-v20220801", + "region": "us-east1", + "zone": "us-east1-c", + "instance_type": "", + "username": "google", + "name": "rhel-8.6-sap-x86_64" + }, + { + "image": "rhel-9-arm64-v20220719", + "region": "us-central1", + "zone": "us-central1-a", + "instance_type": "t2a-standard-4", + "username": "google", + "name": "rhel-9.0-aarch64" + }, + { + "image": "rhel-7-v20220719", + "region": "us-east1", + "zone": "us-east1-c", + "instance_type": "", + "username": "google", + "name": "rhel-7.x-x86_64" } ] } \ No newline at end of file diff --git a/cloud/terraform/aws_config_builder.py b/cloud/terraform/aws_config_builder.py index f3193d84..859b8866 100644 --- a/cloud/terraform/aws_config_builder.py +++ b/cloud/terraform/aws_config_builder.py @@ -13,7 +13,7 @@ def __init__(self, resources_dict, ssh_key_path): def build_providers(self): all_regions = self.__get_all_regions_from_resources_file() for region in all_regions: - self.providers_tf['provider'][self.cloud_providers[self.cloud_name]]\ + self.providers_tf['provider'][self.cloud_providers[self.cloud_name]] \ .append(self.__new_aws_provider(region)) return self.providers_tf @@ -60,7 +60,8 @@ def __new_aws_instance(self, instance): name_tag = instance['name'].replace('.', '-') name = self.create_resource_name([name_tag]) - aliases = [provider['alias'] for provider in self.providers_tf['provider'][self.cloud_name]] + aliases = [provider['alias'] for provider in + self.providers_tf['provider'][self.cloud_providers[self.cloud_name]]] if instance['region'] not in aliases: raise Exception('Cannot add an instance if region provider is not set up') diff --git a/cloud/terraform/gcloud_config_builder.py b/cloud/terraform/gcloud_config_builder.py index 64d9667a..6cb9541a 100644 --- a/cloud/terraform/gcloud_config_builder.py +++ b/cloud/terraform/gcloud_config_builder.py @@ -18,7 +18,7 @@ def __init__(self, resources_dict, ssh_key_path): def build_providers(self): all_regions = self.__get_all_regions_from_resources_file() for region in all_regions: - self.providers_tf['provider'][self.cloud_providers[self.cloud_name]]\ + self.providers_tf['provider'][self.cloud_providers[self.cloud_name]] \ .append(self.__new_gcloud_provider(self.project, region)) return self.providers_tf @@ -35,6 +35,7 @@ def __new_gcloud_provider(self, project, region): 'project': project, 'region': region, 'zone': zone, + 'alias': region, } def build_resources(self): @@ -42,19 +43,19 @@ def build_resources(self): self.resources_tf['resource']['google_compute_firewall'] = {} self.resources_tf['resource']['google_compute_instance'] = {} - network_name = self.create_resource_name(['vpc']) + for instance in self.resources_dict['instances']: + network_name = self.create_resource_name(['vpc', instance['region']]) - self.__new_gcloud_network(network_name) - self.__new_gcloud_firewall_rule(network_name) + self.__new_gcloud_network(network_name, instance) + self.__new_gcloud_firewall_rule(network_name, instance) - for instance in self.resources_dict['instances']: instance['google_compute_network'] = network_name self.__new_gcloud_instance(instance) return self.resources_tf - def __new_gcloud_firewall_rule(self, network_name): - name = self.create_resource_name(['firewall-rule']) + def __new_gcloud_firewall_rule(self, network_name, instance): + name = self.create_resource_name(['firewall-rule', instance['region']]) allow_rule = { 'protocol': 'tcp', @@ -62,6 +63,7 @@ def __new_gcloud_firewall_rule(self, network_name): } new_rule = { + 'provider': f'google.{instance["region"]}', 'name': name, 'network': network_name, 'target_tags': [self.ssh_enabled_tag], @@ -74,8 +76,9 @@ def __new_gcloud_firewall_rule(self, network_name): self.resources_tf['resource']['google_compute_firewall'][name] = new_rule - def __new_gcloud_network(self, network_name): + def __new_gcloud_network(self, network_name, instance): new_vpc = { + 'provider': f'google.{instance["region"]}', 'name': network_name, 'auto_create_subnetworks': True } @@ -90,7 +93,8 @@ def __new_gcloud_instance(self, instance): formatted_name = instance['name'].replace('.', '-').replace('_', '-') name = self.create_resource_name([formatted_name]) - aliases = [provider['region'] for provider in self.providers_tf['provider'][self.cloud_providers[self.cloud_name]]] + aliases = [provider['alias'] for provider in + self.providers_tf['provider'][self.cloud_providers[self.cloud_name]]] if instance['region'] not in aliases: raise Exception('Cannot add an instance if region provider is not set up') @@ -117,6 +121,7 @@ def __new_gcloud_instance(self, instance): } new_instance = { + 'provider': f'google.{instance["region"]}', 'name': name, 'machine_type': instance['instance_type'], 'boot_disk': boot_disk,