Skip to content

Commit

Permalink
Rd 3131 handle boolean env (#75)
Browse files Browse the repository at this point in the history
* Handle bools in environment variables
make sure that tests do not actually download terraform binary and install it

* add update provider command

* __NODOCS__
  • Loading branch information
EarthmanT authored Sep 13, 2021
1 parent 5a5d03a commit 3f768b5
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 9 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -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:
Expand Down
19 changes: 16 additions & 3 deletions cloudify_tf/terraform/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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):
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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')
Expand All @@ -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
23 changes: 19 additions & 4 deletions cloudify_tf/tests/test_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
apply,
set_directory_config)
from ..utils import RELATIONSHIP_INSTANCE
from ..terraform import Terraform


test_dir1 = mkdtemp()
Expand Down Expand Up @@ -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)
Expand All @@ -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, _):
Expand Down Expand Up @@ -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'})
10 changes: 10 additions & 0 deletions cloudify_tf/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"""
Expand Down
7 changes: 5 additions & 2 deletions plugin.yaml
Original file line number Diff line number Diff line change
@@ -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:

Expand Down Expand Up @@ -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:
Expand Down

0 comments on commit 3f768b5

Please sign in to comment.