Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
    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
Exemplo n.º 9
0
    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
Exemplo n.º 10
0
    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
Exemplo n.º 11
0
    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
Exemplo n.º 12
0
    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
Exemplo n.º 13
0
    def is_another_process_running(self):
        if exists_teraform_lock():
            self.warn_another_process_running()
            return True

        return False