diff --git a/.bumpversion.cfg b/.bumpversion.cfg new file mode 100644 index 0000000..9aa9e0c --- /dev/null +++ b/.bumpversion.cfg @@ -0,0 +1,7 @@ +[bumpversion] +current_version = 0.7.7 +commit = True +tag = False + +[bumpversion:file:VERSION] + diff --git a/.gitignore b/.gitignore index 9bdd69e..901668c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ .idea .cache /.pypirc +/.tox/ diff --git a/.travis.yml b/.travis.yml index e15438a..b434792 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,16 +17,12 @@ before_script: install: - "curl https://bootstrap.pypa.io/ez_setup.py -o - | python" - - "pip install -r test/requirements.txt" - - "sudo apt-get -y install pandoc" - - "pip install pypandoc" + - "pip install tox-travis" - "pip install ." # command to run tests script: - "export PATH=$PATH:$PWD/tf_bin" - - cd test - - py.test - - cd .. + - tox deploy: # test pypi diff --git a/README.md b/README.md index 01c7b0d..8594eb4 100644 --- a/README.md +++ b/README.md @@ -29,10 +29,6 @@ For any terraform command if a value is None, will skip this option :return: ret_code, out, err -For apply/destroy method, the flag options, like, `-no-color` or `-force` -have been implemented as boolean argument. simply use `is_no_color=True/False` for -apply/destroy method - ## Examples ### Have a test.tf file under folder "/home/test" @@ -46,7 +42,7 @@ In python-terraform: from python_terraform import Terraform tf = terraform(working_dir='/home/test') - tf.apply(is_no_color=True, refresh=False, var={'a':'b', 'c':'d'}) + tf.apply(no_color=IsFlagged, refresh=False, var={'a':'b', 'c':'d'}) #### taint command, allow-missing and no color In shell: diff --git a/VERSION b/VERSION index 4d01880..11d9d6c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.7.6 \ No newline at end of file +0.7.7 \ No newline at end of file diff --git a/python_terraform/__init__.py b/python_terraform/__init__.py index 9c7dfb1..63ef189 100644 --- a/python_terraform/__init__.py +++ b/python_terraform/__init__.py @@ -53,57 +53,40 @@ class Terraform: # store the tfstate data self.tfstate = dict() - def apply(self, - dir=None, - is_no_color=True, - is_input=False, - **kwargs): + def apply(self, dir_or_plan=None, **kwargs): """ refer to https://terraform.io/docs/commands/apply.html - :raise RuntimeError when return code is not zero - :param is_no_color: if True, add flag -no-color - :param is_input: if True, add option -input=true - :param dir: folder relative to working folder + no-color is flagged by default + :param dir_or_plan: folder relative to working folder :param kwargs: same as kwags in method 'cmd' :returns return_code, stdout, stderr """ - - args, option_dict = self._create_cmd_args(is_input, - is_no_color, - dir, - kwargs) + default = dict() + args, option_dict = self._create_cmd_args(dir_or_plan, default, kwargs) return self.cmd('apply', *args, **option_dict) - def _create_cmd_args(self, is_input, is_no_color, dir, kwargs): - option_dict = dict() + def _create_cmd_args(self, dir_or_plan, default_dict, kwargs): + option_dict = default_dict option_dict['state'] = self.state option_dict['target'] = self.targets option_dict['var'] = self.variables option_dict['var_file'] = self.var_file option_dict['parallelism'] = self.parallelism - if is_no_color: - option_dict['no_color'] = IsFlagged - option_dict['input'] = is_input + option_dict['no_color'] = IsFlagged + option_dict['input'] = True option_dict.update(kwargs) - args = [dir] if dir else [] + args = [dir_or_plan] if dir_or_plan else [] return args, option_dict - def destroy(self, working_dir=None, is_force=True, - is_no_color=True, is_input=False, **kwargs): + def destroy(self, dir_or_plan=None, **kwargs): """ refer to https://www.terraform.io/docs/commands/destroy.html - :raise RuntimeError when return code is not zero + force/no-color option is flagged by default :return: ret_code, stdout, stderr """ - - args, option_dict = self._create_cmd_args(is_input, - is_no_color, - working_dir, - kwargs) - if is_force: - option_dict['force'] = IsFlagged - + default = {'force': IsFlagged} + args, option_dict = self._create_cmd_args(dir_or_plan, default, kwargs) return self.cmd('destroy', *args, **option_dict) def generate_cmd_string(self, cmd, *args, **kwargs): diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..0740785 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +tox-pyenv +pytest +tox \ No newline at end of file diff --git a/test/requirements.txt b/test/requirements.txt deleted file mode 100644 index 55b033e..0000000 --- a/test/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -pytest \ No newline at end of file diff --git a/test/test_terraform.py b/test/test_terraform.py index d5a9c83..a1d0cfb 100644 --- a/test/test_terraform.py +++ b/test/test_terraform.py @@ -5,7 +5,7 @@ import logging import re logging.basicConfig(level=logging.WARN) - +current_path = os.path.dirname(os.path.realpath(__file__)) STRING_CASES = [ [ @@ -61,28 +61,40 @@ class TestTerraform: @pytest.mark.parametrize(*CMD_CASES) def test_cmd(self, method, expected_output): - tf = Terraform() + tf = Terraform(working_dir=current_path) ret, out, err = method(tf) assert expected_output in out assert ret == 0 def test_state_data(self): - tf = Terraform(working_dir='test_tfstate_file', state='tfstate.test') + cwd = os.path.join(current_path, 'test_tfstate_file') + tf = Terraform(working_dir=cwd, state='tfstate.test') tf.read_state_file() assert tf.tfstate.modules[0]['path'] == ['root'] def test_apply(self): - tf = Terraform(working_dir='apply_tf', variables={'test_var': 'test'}) + cwd = os.path.join(current_path, 'apply_tf') + tf = Terraform(working_dir=cwd, variables={'test_var': 'test'}) ret, out, err = tf.apply(var={'test_var': 'test2'}) assert ret == 0 + def test_override_no_color(self): + cwd = os.path.join(current_path, 'apply_tf') + tf = Terraform(working_dir=cwd, variables={'test_var': 'test'}) + ret, out, err = tf.apply(var={'test_var': 'test2'}, + no_color=IsNotFlagged) + out = out.replace('\n', '') + assert '\x1b[0m\x1b[1m\x1b[32mApply' in out + def test_get_output(self): - tf = Terraform(working_dir='apply_tf', variables={'test_var': 'test'}) + cwd = os.path.join(current_path, 'apply_tf') + tf = Terraform(working_dir=cwd, variables={'test_var': 'test'}) tf.apply() assert tf.output('test_output') == 'test' def test_destroy(self): - tf = Terraform(working_dir='apply_tf', variables={'test_var': 'test'}) + cwd = os.path.join(current_path, 'apply_tf') + tf = Terraform(working_dir=cwd, variables={'test_var': 'test'}) ret, out, err = tf.destroy() assert ret == 0 assert 'Destroy complete! Resources: 0 destroyed.' in out diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..9d0b810 --- /dev/null +++ b/tox.ini @@ -0,0 +1,11 @@ +# content of: tox.ini , put in same dir as setup.py +[tox] +envlist = py27, py35 +[testenv] +deps=pytest +commands=py.test test + +[travis] +python = + 2.7: py27 + 3.5: py35 \ No newline at end of file