diff --git a/blastradius/handlers/terraform.py b/blastradius/handlers/terraform.py index 00b41d9..7b64ac6 100644 --- a/blastradius/handlers/terraform.py +++ b/blastradius/handlers/terraform.py @@ -3,9 +3,12 @@ import io import os import re +import json # 3rd party libraries -import hcl # hashicorp configuration language (.tf) +# hcl2json convert hcl to json +import subprocess +from pkg_resources import resource_filename class Terraform: """Finds terraform/hcl files (*.tf) in CWD or a supplied directory, parses @@ -13,17 +16,23 @@ class Terraform: def __init__(self, directory=None, settings=None): self.settings = settings if settings else {} - # handle the root module first... self.directory = directory if directory else os.getcwd() - #print(self.directory) - self.config_str = '' + self.config_str:str = '' iterator = iglob( self.directory + '/*.tf') + data = {} + for fname in iterator: - with open(fname, 'r', encoding='utf-8') as f: - self.config_str += f.read() + ' ' - config_io = io.StringIO(self.config_str) - self.config = hcl.load(config_io) + out=subprocess.getoutput(["hcl2json {}".format(fname)]) + file_data = json.loads(out) + for key in file_data: + if not key in data.keys(): + data.update(file_data) + else: + for k,v in file_data[key].items(): + data[key][k]=v + + self.config = data # then any submodules it may contain, skipping any remote modules for # the time being. @@ -66,7 +75,6 @@ def __init__(self, directory=None, settings=None): # fixme path join. eek. self.modules[name] = Terraform(directory=self.directory+'/'+source, settings=mod) - def get_def(self, node, module_depth=0): # FIXME 'data' resources (incorrectly) handled as modules, necessitating @@ -89,10 +97,10 @@ def get_def(self, node, module_depth=0): '' : lambda x: '' } if node.type in types: return types[node.type](node) - + # resources are a little different _many_ possible types, # nested within the 'resource' field. else: return self.config['resource'][node.type][node.resource_name] except: - return '' + return '' \ No newline at end of file diff --git a/blastradius/server/templates/index.html b/blastradius/server/templates/index.html index f39e933..1dd3ae2 100644 --- a/blastradius/server/templates/index.html +++ b/blastradius/server/templates/index.html @@ -1,41 +1,108 @@ -
-