From 05c44c2cdcf48d8041f618a825dd083e812d74e4 Mon Sep 17 00:00:00 2001 From: DJDavisson Date: Fri, 3 May 2019 13:54:28 -0700 Subject: [PATCH 01/12] Adding workspace support. --- python_terraform/__init__.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/python_terraform/__init__.py b/python_terraform/__init__.py index 4e0ff7d..7017af2 100644 --- a/python_terraform/__init__.py +++ b/python_terraform/__init__.py @@ -49,7 +49,8 @@ class Terraform(object): parallelism=None, var_file=None, terraform_bin_path=None, - is_env_vars_included=True): + is_env_vars_included=True, + workspace=None): """ :param working_dir: the folder of the working folder, if not given, will be current working folder @@ -65,6 +66,7 @@ class Terraform(object): :param terraform_bin_path: binary path of terraform :type is_env_vars_included: bool :param is_env_vars_included: included env variables when calling terraform cmd + :param workspace: current workspace. """ self.is_env_vars_included = is_env_vars_included self.working_dir = working_dir @@ -76,6 +78,7 @@ class Terraform(object): if terraform_bin_path else 'terraform' self.var_file = var_file self.temp_var_files = VariableFiles() + self.workspace = workspace # store the tfstate data self.tfstate = None @@ -387,6 +390,21 @@ class Terraform(object): self.tfstate = Tfstate.load_file(file_path) + def set_workspace(self, workspace=None, dir_or_plan=None, **kwargs): + """ + set workspace + :param workspace: the desired workspace. + :param dir: The dir we want to swap workspace in. + :return: nothing + """ + + working_dir = self.working_dir if self.working_dir else None + options = kwargs + options['workspace'] = workspace + options = self._generate_default_options(options) + args = self._generate_default_args(dir_or_plan) + return self.cmd('workspace', *args, **options) + def __exit__(self, exc_type, exc_value, traceback): self.temp_var_files.clean_up() From 57a80d7e71be17a5409ef9a8971283d17071326d Mon Sep 17 00:00:00 2001 From: DJDavisson Date: Fri, 3 May 2019 13:55:38 -0700 Subject: [PATCH 02/12] Removing working dir. --- python_terraform/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/python_terraform/__init__.py b/python_terraform/__init__.py index 7017af2..e5d31db 100644 --- a/python_terraform/__init__.py +++ b/python_terraform/__init__.py @@ -398,7 +398,6 @@ class Terraform(object): :return: nothing """ - working_dir = self.working_dir if self.working_dir else None options = kwargs options['workspace'] = workspace options = self._generate_default_options(options) From 749bec79e43cf4bf210d01299f89f16174eb2c9e Mon Sep 17 00:00:00 2001 From: DJDavisson Date: Fri, 3 May 2019 13:59:48 -0700 Subject: [PATCH 03/12] Adding additional workspace items. --- python_terraform/__init__.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/python_terraform/__init__.py b/python_terraform/__init__.py index e5d31db..d554019 100644 --- a/python_terraform/__init__.py +++ b/python_terraform/__init__.py @@ -399,10 +399,35 @@ class Terraform(object): """ options = kwargs - options['workspace'] = workspace options = self._generate_default_options(options) args = self._generate_default_args(dir_or_plan) - return self.cmd('workspace', *args, **options) + return self.cmd('workspace select ' + workspace, *args, **options) + + def create_workspace(self, workspace=None, dir_or_plan=None, **kwargs): + """ + set workspace + :param workspace: the desired workspace. + :param dir: The dir we want to swap workspace in. + :return: nothing + """ + + options = kwargs + options = self._generate_default_options(options) + args = self._generate_default_args(dir_or_plan) + return self.cmd('workspace new ' + workspace, *args, **options) + + def show_workspace(self, workspace=None, dir_or_plan=None, **kwargs): + """ + set workspace + :param workspace: the desired workspace. + :param dir: The dir we want to swap workspace in. + :return: nothing + """ + + options = kwargs + options = self._generate_default_options(options) + args = self._generate_default_args(dir_or_plan) + return self.cmd('workspace show', *args, **options) def __exit__(self, exc_type, exc_value, traceback): self.temp_var_files.clean_up() From 0228de1a60e7da69b18e210f5f29fa0c74cadfed Mon Sep 17 00:00:00 2001 From: DJDavisson Date: Fri, 3 May 2019 14:17:46 -0700 Subject: [PATCH 04/12] Cleanup. --- python_terraform/__init__.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/python_terraform/__init__.py b/python_terraform/__init__.py index d554019..4e0ccb1 100644 --- a/python_terraform/__init__.py +++ b/python_terraform/__init__.py @@ -394,7 +394,6 @@ class Terraform(object): """ set workspace :param workspace: the desired workspace. - :param dir: The dir we want to swap workspace in. :return: nothing """ @@ -407,7 +406,6 @@ class Terraform(object): """ set workspace :param workspace: the desired workspace. - :param dir: The dir we want to swap workspace in. :return: nothing """ @@ -416,11 +414,9 @@ class Terraform(object): args = self._generate_default_args(dir_or_plan) return self.cmd('workspace new ' + workspace, *args, **options) - def show_workspace(self, workspace=None, dir_or_plan=None, **kwargs): + def show_workspace(self, dir_or_plan=None, **kwargs): """ set workspace - :param workspace: the desired workspace. - :param dir: The dir we want to swap workspace in. :return: nothing """ From 64e804e7a01c903d4c551bdc80421eeca7167c99 Mon Sep 17 00:00:00 2001 From: DJDavisson Date: Tue, 7 May 2019 09:55:13 -0700 Subject: [PATCH 05/12] Removing uncessary workspace from __init__ Will add back with some checking in the future. --- python_terraform/__init__.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/python_terraform/__init__.py b/python_terraform/__init__.py index 4e0ccb1..dd0e0d3 100644 --- a/python_terraform/__init__.py +++ b/python_terraform/__init__.py @@ -50,7 +50,7 @@ class Terraform(object): var_file=None, terraform_bin_path=None, is_env_vars_included=True, - workspace=None): + ): """ :param working_dir: the folder of the working folder, if not given, will be current working folder @@ -78,7 +78,6 @@ class Terraform(object): if terraform_bin_path else 'terraform' self.var_file = var_file self.temp_var_files = VariableFiles() - self.workspace = workspace # store the tfstate data self.tfstate = None @@ -394,7 +393,7 @@ class Terraform(object): """ set workspace :param workspace: the desired workspace. - :return: nothing + :return: status """ options = kwargs @@ -404,9 +403,9 @@ class Terraform(object): def create_workspace(self, workspace=None, dir_or_plan=None, **kwargs): """ - set workspace + create workspace :param workspace: the desired workspace. - :return: nothing + :return: status """ options = kwargs @@ -416,8 +415,8 @@ class Terraform(object): def show_workspace(self, dir_or_plan=None, **kwargs): """ - set workspace - :return: nothing + show workspace + :return: workspace """ options = kwargs From 3ddab331f02c3eff4a50234dd304a5531d6add0a Mon Sep 17 00:00:00 2001 From: DJDavisson Date: Tue, 7 May 2019 11:39:07 -0700 Subject: [PATCH 06/12] Adding tests, 2 are failing, looking into how to handle. --- test/test_terraform.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/test_terraform.py b/test/test_terraform.py index d787ae6..1a7d04e 100644 --- a/test/test_terraform.py +++ b/test/test_terraform.py @@ -320,3 +320,23 @@ class TestTerraform(object): tf = Terraform(working_dir=current_path) tf.import_cmd('aws_instance.foo', 'i-abc1234', no_color=IsFlagged) assert 'command: terraform import -no-color aws_instance.foo i-abc1234' in string_logger() + + def test_create_workspace(self): + tf = Terraform(working_dir=current_path) + ret, out, err = tf.create_workspace('test') + assert ret == 0 + assert err == '' + + def test_set_workspace(self): + tf = Terraform(working_dir=current_path) + tf.create_workspace('test') + ret, out, err = tf.set_workspace('test') + assert ret == 0 + assert err == '' + + def test_show_workspace(self): + tf = Terraform(working_dir=current_path) + tf.create_workspace('test') + ret, out, err = tf.show_workspace('test') + assert ret == 0 + assert err == '' \ No newline at end of file From 01e3dbb05a0e9ba427a62c5b945bf16096d94738 Mon Sep 17 00:00:00 2001 From: DJDavisson Date: Tue, 7 May 2019 12:11:28 -0700 Subject: [PATCH 07/12] Removing optiosn and args pass from state stuff, state stuff doesn't take options or args. --- python_terraform/__init__.py | 21 ++++++--------------- test/test_terraform.py | 7 +++++-- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/python_terraform/__init__.py b/python_terraform/__init__.py index dd0e0d3..468a114 100644 --- a/python_terraform/__init__.py +++ b/python_terraform/__init__.py @@ -389,40 +389,31 @@ class Terraform(object): self.tfstate = Tfstate.load_file(file_path) - def set_workspace(self, workspace=None, dir_or_plan=None, **kwargs): + def set_workspace(self, workspace): """ set workspace :param workspace: the desired workspace. :return: status """ - options = kwargs - options = self._generate_default_options(options) - args = self._generate_default_args(dir_or_plan) - return self.cmd('workspace select ' + workspace, *args, **options) + return self.cmd('workspace select ' + workspace) - def create_workspace(self, workspace=None, dir_or_plan=None, **kwargs): + def create_workspace(self, workspace): """ create workspace :param workspace: the desired workspace. :return: status """ - options = kwargs - options = self._generate_default_options(options) - args = self._generate_default_args(dir_or_plan) - return self.cmd('workspace new ' + workspace, *args, **options) + return self.cmd('workspace new ' + workspace) - def show_workspace(self, dir_or_plan=None, **kwargs): + def show_workspace(self): """ show workspace :return: workspace """ - options = kwargs - options = self._generate_default_options(options) - args = self._generate_default_args(dir_or_plan) - return self.cmd('workspace show', *args, **options) + return self.cmd('workspace show') def __exit__(self, exc_type, exc_value, traceback): self.temp_var_files.clean_up() diff --git a/test/test_terraform.py b/test/test_terraform.py index 1a7d04e..f49be62 100644 --- a/test/test_terraform.py +++ b/test/test_terraform.py @@ -323,12 +323,14 @@ class TestTerraform(object): def test_create_workspace(self): tf = Terraform(working_dir=current_path) + tf.init() ret, out, err = tf.create_workspace('test') assert ret == 0 assert err == '' def test_set_workspace(self): tf = Terraform(working_dir=current_path) + tf.init() tf.create_workspace('test') ret, out, err = tf.set_workspace('test') assert ret == 0 @@ -336,7 +338,8 @@ class TestTerraform(object): def test_show_workspace(self): tf = Terraform(working_dir=current_path) + tf.init() tf.create_workspace('test') - ret, out, err = tf.show_workspace('test') + ret, out, err = tf.show_workspace() assert ret == 0 - assert err == '' \ No newline at end of file + assert err == '' \ No newline at end of file From 70920d828c3e199c2d356f07d76746ecb552d00f Mon Sep 17 00:00:00 2001 From: DJDavisson Date: Wed, 8 May 2019 10:55:53 -0700 Subject: [PATCH 08/12] Adding workspace deletion. --- python_terraform/__init__.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/python_terraform/__init__.py b/python_terraform/__init__.py index 468a114..64be9e7 100644 --- a/python_terraform/__init__.py +++ b/python_terraform/__init__.py @@ -405,7 +405,16 @@ class Terraform(object): :return: status """ - return self.cmd('workspace new ' + workspace) + return self.cmd('workspace new ' + workspace) + + def delete_workspace(self, workspace): + """ + delete workspace + :param workspace: the desired workspace. + :return: status + """ + + return self.cmd('workspace delete ' + workspace) def show_workspace(self): """ From c000d00504a6ec2c91afa073fcb52c47e2bc88f4 Mon Sep 17 00:00:00 2001 From: DJDavisson Date: Mon, 20 May 2019 11:34:42 -0700 Subject: [PATCH 09/12] Fixing tests. --- test/test_terraform.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/test/test_terraform.py b/test/test_terraform.py index f49be62..3b76e32 100644 --- a/test/test_terraform.py +++ b/test/test_terraform.py @@ -325,6 +325,8 @@ class TestTerraform(object): tf = Terraform(working_dir=current_path) tf.init() ret, out, err = tf.create_workspace('test') + tf.set_workspace('default') + tf.delete_workspace('test') assert ret == 0 assert err == '' @@ -332,7 +334,9 @@ class TestTerraform(object): tf = Terraform(working_dir=current_path) tf.init() tf.create_workspace('test') - ret, out, err = tf.set_workspace('test') + tf.set_workspace('test') + tf.set_workspace('default') + ret, out, err = tf.delete_workspace('test') assert ret == 0 assert err == '' @@ -341,5 +345,17 @@ class TestTerraform(object): tf.init() tf.create_workspace('test') ret, out, err = tf.show_workspace() + tf.set_workspace('default') + tf.delete_workspace('test') assert ret == 0 - assert err == '' \ No newline at end of file + assert err == '' + + def test_delete_workspace(self): + tf = Terraform(working_dir=current_path) + tf.init() + tf.create_workspace('test') + tf.set_workspace('default') + ret, out, err = tf.delete_workspace('test') + tf.show_workspace() + assert ret == 0 + assert err == '' From 29daa9c40a597c055a9a800aa48e72d39f0543ad Mon Sep 17 00:00:00 2001 From: DJDavisson Date: Fri, 31 May 2019 11:31:30 -0700 Subject: [PATCH 10/12] Modifying returns to use proper format. --- python_terraform/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/python_terraform/__init__.py b/python_terraform/__init__.py index 64be9e7..a41e123 100644 --- a/python_terraform/__init__.py +++ b/python_terraform/__init__.py @@ -396,7 +396,7 @@ class Terraform(object): :return: status """ - return self.cmd('workspace select ' + workspace) + return self.cmd('workspace' ,'select', workspace) def create_workspace(self, workspace): """ @@ -405,7 +405,7 @@ class Terraform(object): :return: status """ - return self.cmd('workspace new ' + workspace) + return self.cmd('workspace', 'new', workspace) def delete_workspace(self, workspace): """ @@ -414,7 +414,7 @@ class Terraform(object): :return: status """ - return self.cmd('workspace delete ' + workspace) + return self.cmd('workspace', 'delete', workspace) def show_workspace(self): """ @@ -422,7 +422,7 @@ class Terraform(object): :return: workspace """ - return self.cmd('workspace show') + return self.cmd('workspace' 'show') def __exit__(self, exc_type, exc_value, traceback): self.temp_var_files.clean_up() From 35db7917b09531cd0ef9adbd7c060f6cbbcb5741 Mon Sep 17 00:00:00 2001 From: DJDavisson Date: Fri, 31 May 2019 11:36:53 -0700 Subject: [PATCH 11/12] Fixing missing , --- python_terraform/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python_terraform/__init__.py b/python_terraform/__init__.py index a41e123..9c6d24f 100644 --- a/python_terraform/__init__.py +++ b/python_terraform/__init__.py @@ -422,7 +422,7 @@ class Terraform(object): :return: workspace """ - return self.cmd('workspace' 'show') + return self.cmd('workspace', 'show') def __exit__(self, exc_type, exc_value, traceback): self.temp_var_files.clean_up() From c6d37cbaeb2482583f9de2371531f789ec20a992 Mon Sep 17 00:00:00 2001 From: DJDavisson Date: Fri, 31 May 2019 11:49:32 -0700 Subject: [PATCH 12/12] Removing uncessary comment in __init__. --- python_terraform/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/python_terraform/__init__.py b/python_terraform/__init__.py index 9c6d24f..ba98610 100644 --- a/python_terraform/__init__.py +++ b/python_terraform/__init__.py @@ -66,7 +66,6 @@ class Terraform(object): :param terraform_bin_path: binary path of terraform :type is_env_vars_included: bool :param is_env_vars_included: included env variables when calling terraform cmd - :param workspace: current workspace. """ self.is_env_vars_included = is_env_vars_included self.working_dir = working_dir