def generate_terraform_files(self, resources, terraform_with_targets): if exists_teraform_lock(): self.warn_another_process_running() raise Exception(K.ANOTHER_PROCESS_RUNNING) self.show_step_heading(K.TERRAFORM_GEN_STARTED) for resource in resources: try: resource.pre_generate_terraform() except Exception as e: self.show_step_inner_error(str(e)) raise Exception(e) # If all resources need to be rebuild, then need to destroy those who have been removed from code if not terraform_with_targets: self._delete_all_terraform_files() self._create_terraform_support_dirs() for resource in resources: resource.generate_terraform() self._create_terraform_provider_file() self._copy_supporting_files() self.show_step_finish(K.TERRAFORM_GEN_COMPLETED, color=self.GREEN_ANSI)
def terraform_plan(self, resources=None): """ Run terraform plan and raise excpetion if there is any error or response of the command Args: resources (list): List of resources if there are targets else None Returns: response (dict): Response after terraform plan """ if exists_teraform_lock(): raise Exception(K.ANOTHER_PROCESS_RUNNING) terraform = Terraform( working_dir=Settings.TERRAFORM_DIR, targets=self.get_target_resources(resources) ) self.log_obj.write_debug_log(K.TERRAFORM_PLAN_STARTED) response = terraform.plan() if response[0] == 1: self.log_obj.write_debug_log(K.TERRAFORM_PLAN_ERROR) raise Exception(response[2]) self.log_obj.write_terraform_plan_log(response) return response
def terraform_apply(self, resources=None): """ Run terraform apply and raise excpetion if there is any error or response of the command Args: resources (list): List of resources if there are targets else None Returns: response (dict): Response after terraform apply """ if exists_teraform_lock(): raise Exception(K.ANOTHER_PROCESS_RUNNING) CMD = Settings.get('running_command', "Terraform Apply") terraform = Terraform( working_dir=Settings.TERRAFORM_DIR, targets=self.get_target_resources(resources), stdout_log_file=self.log_obj.get_terraform_install_log_file() ) self.log_obj.write_terraform_apply_log_header() # In order to -auto-approve we need to pass skip_plan=True for python3 response = terraform.apply(skip_plan=True) if response[0] == 1: self.log_obj.write_debug_log(K.TERRAFORM_APPLY_ERROR) self.write_current_status(CMD, K.APPLY_STATUS_ERROR, response[2]) raise Exception(response[2]) self.write_current_status(CMD, K.APPLY_STATUS_COMPLETED, K.TERRAFORM_APPLY_COMPLETED) return response
def terraform_destroy(self, resources=None): """ Run terraform destroy and raise excpetion if there is any error or response of the command Args: resources (list): List of resources if there are targets else None Returns: response (dict): Response after terraform destroy """ if exists_teraform_lock(): raise Exception(K.ANOTHER_PROCESS_RUNNING) CMD = Settings.get('running_command', "Terraform Destroy") terraform = Terraform( working_dir=Settings.TERRAFORM_DIR, targets=self.get_target_resources(resources), stdout_log_file=self.log_obj.get_terraform_destroy_log_file() ) self.log_obj.write_terraform_destroy_log_header() kwargs = {"auto_approve": True} response = terraform.destroy(**kwargs) if response[0] == 1: self.log_obj.write_debug_log(K.TERRAFORM_DESTROY_ERROR) self.write_current_status(CMD, K.DESTROY_STATUS_ERROR, response[2]) raise Exception(response[2]) self.write_current_status(CMD, K.DESTROY_STATUS_COMPLETED, K.TERRAFORM_DESTROY_COMPLETED) return response
def terraform_taint(self, resources): """ Run terraform taint on the mentioned resources Args: resources (list): List of resources if there are targets else None Returns: response (dict): Response after terraform taint """ if exists_teraform_lock(): raise Exception(K.ANOTHER_PROCESS_RUNNING) terraform = Terraform( working_dir=Settings.TERRAFORM_DIR, ) taint_resources = self.get_taint_resources(resources) self.log_obj.write_debug_log(K.TERRAFORM_TAINT_STARTED) for resource_name in taint_resources: response = terraform.cmd("taint", resource_name) if response[0] == 1: self.log_obj.write_debug_log(K.TERRAFORM_TAINT_ERROR) raise Exception(response[2]) self.log_obj.write_debug_log(K.TERRAFORM_TAINT_COMPLETED) return response
def generate_terraform_files(self, resources, terraform_with_targets): """ Generate terraform files for the resources passed Args: resources (list): Resources to be created terraform_with_targets (boolean): If partial install is to be done (if --tags is supplied) dry_run (boolean): Decides whether original install should be done """ if exists_teraform_lock(): self.warn_another_process_running() raise Exception(K.ANOTHER_PROCESS_RUNNING) self.show_step_heading(K.TERRAFORM_GEN_STARTED) for resource in resources: try: resource.pre_generate_terraform() except Exception as e: self.show_step_inner_error(str(e)) raise Exception(e) # If all resources need to be rebuild, then need to destroy those who have been removed from code if not terraform_with_targets: self._delete_all_terraform_files() self._create_terraform_support_dirs() for resource in resources: resource.generate_terraform() self._create_terraform_provider_file() self._copy_supporting_files() self.show_step_finish(K.TERRAFORM_GEN_COMPLETED, color=self.GREEN_ANSI)
def is_another_process_running(self): """ This method checks whether another Command is running currently Returns: Boolean: If another process is running then it returns True else False """ if exists_teraform_lock(): self.warn_another_process_running() return True return False
def terraform_init(self): if exists_teraform_lock(): raise Exception(K.ANOTHER_PROCESS_RUNNING) terraform = Terraform(working_dir=Settings.TERRAFORM_DIR, ) self.log_obj.write_debug_log(K.TERRAFORM_INIT_STARTED) response = terraform.init() if response[0] == 1: self.log_obj.write_debug_log(K.TERRAFORM_INIT_ERROR) raise Exception(response[2]) self.log_obj.write_terraform_init_log(response) return response
def terraform_plan(self, resources=None): if exists_teraform_lock(): raise Exception(K.ANOTHER_PROCESS_RUNNING) terraform = Terraform(working_dir=Settings.TERRAFORM_DIR, targets=self.get_target_resources(resources)) self.log_obj.write_debug_log(K.TERRAFORM_PLAN_STARTED) response = terraform.plan() if response[0] == 1: self.log_obj.write_debug_log(K.TERRAFORM_PLAN_ERROR) raise Exception(response[2]) self.log_obj.write_terraform_plan_log(response) return response
def terraform_taint(self, resources): if exists_teraform_lock(): raise Exception(K.ANOTHER_PROCESS_RUNNING) terraform = Terraform(working_dir=Settings.TERRAFORM_DIR, ) taint_resources = self.get_taint_resources(resources) self.log_obj.write_debug_log(K.TERRAFORM_TAINT_STARTED) for resource_name in taint_resources: response = terraform.cmd("taint", resource_name) if response[0] == 1: self.log_obj.write_debug_log(K.TERRAFORM_TAINT_ERROR) raise Exception(response[2]) self.log_obj.write_debug_log(K.TERRAFORM_TAINT_COMPLETED) return response
def terraform_init(self): """ Run terraform init and raise excpetion if there is any error or response of the command Returns: response (dict): Response after terraform init """ if exists_teraform_lock(): raise Exception(K.ANOTHER_PROCESS_RUNNING) terraform = Terraform(working_dir=Settings.TERRAFORM_DIR, ) self.log_obj.write_debug_log(K.TERRAFORM_INIT_STARTED) response = terraform.init() if response[0] == 1: self.log_obj.write_debug_log(K.TERRAFORM_INIT_ERROR) raise Exception(response[2]) self.log_obj.write_terraform_init_log(response) return response
def terraform_destroy(self, resources=None): if exists_teraform_lock(): raise Exception(K.ANOTHER_PROCESS_RUNNING) CMD = Settings.get('running_command', "Terraform Destroy") terraform = Terraform( working_dir=Settings.TERRAFORM_DIR, targets=self.get_target_resources(resources), stdout_log_file=self.log_obj.get_terraform_destroy_log_file() ) self.log_obj.write_terraform_destroy_log_header() kwargs = {"auto_approve": True} response = terraform.destroy(**kwargs) if response[0] == 1: self.log_obj.write_debug_log(K.TERRAFORM_DESTROY_ERROR) self.write_current_status(CMD, K.DESTROY_STATUS_ERROR, response[2]) raise Exception(response[2]) self.write_current_status(CMD, K.DESTROY_STATUS_COMPLETED, K.TERRAFORM_DESTROY_COMPLETED) return response
def is_another_process_running(self): if exists_teraform_lock(): self.warn_another_process_running() return True return False