diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 48ae072..489d55a 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,3 +1,6 @@ +0.16.5: + - RD-3131: Handle bools in Env vars + - RD-3130: Support provider upgrade flag. 0.16.4: - RD-3109: Fix Issue In Reload Template 0.16.3: diff --git a/cloudify_tf/terraform/__init__.py b/cloudify_tf/terraform/__init__.py index fdfd511..8b95cf3 100644 --- a/cloudify_tf/terraform/__init__.py +++ b/cloudify_tf/terraform/__init__.py @@ -32,7 +32,8 @@ def __init__(self, plugins_dir, root_module, variables=None, - environment_variables=None): + environment_variables=None, + provider_upgrade=False): self.binary_path = binary_path self.plugins_dir = self.set_plugins_dir(plugins_dir) @@ -51,8 +52,16 @@ def __init__(self, "dict): {0}".format(type( variables))) - self.env = environment_variables + self.env = self.convert_bools_in_env(environment_variables) self.variables = variables + self.provider_upgrade = provider_upgrade + + @staticmethod + def convert_bools_in_env(env): + for k, v in env.items(): + if isinstance(v, bool): + env[k] = str(v).lower() + return env @staticmethod def set_plugins_dir(path): @@ -89,6 +98,8 @@ def init(self, additional_args=None): cmdline = ['init', '-no-color', '-input=false'] if self.plugins_dir: cmdline.append('--plugin-dir=%s' % self.plugins_dir) + if self.provider_upgrade: + cmdline.append('--upgrade') command = self._tf_command(cmdline) if additional_args: command.extend(additional_args) @@ -160,6 +171,7 @@ def from_ctx(ctx, terraform_source): utils.get_binary_location_from_rel() plugins_dir = utils.get_plugins_dir() resource_config = utils.get_resource_config() + provider_upgrade = utils.get_provider_upgrade() if not os.path.exists(plugins_dir) and utils.is_using_existing(): utils.mkdir_p(plugins_dir) env_variables = resource_config.get('environment_variables') @@ -169,5 +181,6 @@ def from_ctx(ctx, terraform_source): plugins_dir, terraform_source, variables=resource_config.get('variables'), - environment_variables=env_variables) + environment_variables=env_variables, + provider_upgrade=provider_upgrade) return tf diff --git a/cloudify_tf/tests/test_plugin.py b/cloudify_tf/tests/test_plugin.py index f01b6a8..d8eb435 100644 --- a/cloudify_tf/tests/test_plugin.py +++ b/cloudify_tf/tests/test_plugin.py @@ -29,6 +29,7 @@ apply, set_directory_config) from ..utils import RELATIONSHIP_INSTANCE +from ..terraform import Terraform test_dir1 = mkdtemp() @@ -82,7 +83,9 @@ def get_terraform_module_conf_props(self, module_root): } @patch('cloudify_tf.utils.get_node_instance_dir', return_value=test_dir1) - def test_install(self, _): + @patch('cloudify_tf.utils.run_subprocess') + @patch('cloudify_tf.utils.install_binary') + def test_install(self, *_): conf = self.get_terraform_conf_props(test_dir1) ctx = self.mock_ctx("test_install", conf) current_ctx.set(ctx=ctx) @@ -99,9 +102,6 @@ def test_install(self, _): self.assertEqual( ctx.instance.runtime_properties.get("plugins_dir"), conf.get("terraform_config").get("plugins_dir")) - self.assertTrue( - path.isfile(ctx.instance.runtime_properties.get( - "executable_path"))) @patch('cloudify_tf.utils.get_node_instance_dir', return_value=test_dir2) def test_set_directory_config(self, _): @@ -194,3 +194,18 @@ def test_apply_with_output(self, *_): {'eip': tf_pulled_resources.get('resources')[0]}) self.assertEqual(ctx.instance.runtime_properties['outputs'], tf_output) + + @patch('cloudify_tf.terraform.Terraform.set_plugins_dir') + @patch('cloudify_tf.utils.get_executable_path') + @patch('cloudify_tf.utils.get_plugins_dir') + @patch('cloudify_tf.utils.install_binary') + def test_env_vars(self, *_): + conf = self.get_terraform_module_conf_props(test_dir3) + conf['resource_config']['environment_variables'] = { # noqa + 'true': True, + 'false': False} + + ctx = self.mock_ctx("test_apply_with_output", conf) + current_ctx.set(ctx=ctx) + t = Terraform.from_ctx(ctx, 'foo') + self.assertEqual(t.env, {'true': 'true', 'false': 'false'}) diff --git a/cloudify_tf/utils.py b/cloudify_tf/utils.py index a74d82f..cb84585 100644 --- a/cloudify_tf/utils.py +++ b/cloudify_tf/utils.py @@ -414,6 +414,16 @@ def get_resource_config(target=False): return resource_config +def get_provider_upgrade(target=False): + """Get the cloudify.nodes.terraform.Module provider_upgrade""" + instance = get_instance(target=target) + provider_upgrade = instance.runtime_properties.get('provider_upgrade') + if not provider_upgrade: + node = get_node(target=target) + provider_upgrade = node.properties.get('provider_upgrade', False) + return provider_upgrade + + def get_terraform_config(target=False): """get the cloudify.nodes.terraform or cloudify.nodes.terraform.Module terraform_config""" diff --git a/plugin.yaml b/plugin.yaml index 7dca50b..3d15448 100644 --- a/plugin.yaml +++ b/plugin.yaml @@ -1,9 +1,8 @@ plugins: - tf: executor: central_deployment_agent package_name: cloudify-terraform-plugin - package_version: '0.16.4' + package_version: '0.16.5' dsl_definitions: @@ -143,6 +142,10 @@ node_types: type: boolean description: Whether to store terraform binary plugins. Protect your manager. default: false + provider_upgrade: + type: boolean + description: Whether to add "--upgrade" to init command. + default: false interfaces: cloudify.interfaces.lifecycle: configure: