{ "info": { "author": "Will Rubel", "author_email": "willrubel@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "Terraform-Validator\n========================\n\nFeatures\n========\n\n############### NOT READY FOR USE YET, BUT SOON ##############\n\nterraform\\_validator provides type checking and other base\nfunctionality out of the box and is designed to be non-blocking and\neasily extensible, allowing for custom validation. It has no\ndependencies and is thoroughly tested under Python 2.7, Python 3.3,\nPython 3.4, Python 3.5, Python 3.6.\n\nFunding\n=======\n\nterraform\\_validator is an open source project. \n\nWant Custom Rules and Support For Your Application\n==================================================\n\nSubmit an issue on my github page if you would like additional custom\nrules and I will try and get them added as soon as possible.\n\nI you would like other functionality, just submit an issue and I will\nsee what I can do to get it added.\n\nInstallation\n============\n\nterraform-validator is on PyPI so all you need is:\n\n``` {.sourceCode .console}\n$ pip install terraform-validator\n```\n\n\nDemonstration\n=============\n\n

\"Terraform

\n\n\nJust run:\n\n``` {.sourceCode .console\n$ pip install virtualenv\n$ which python\n$ virtualenv ~/virtualenvs/my_project -p /home/example_username/opt/python-3.6.2/bin/python3\n$ git clone https://github.com/rubelw/terraform-validator.git\n$ cd terraform-validator\n$ pip install -r requirements-dev.txt\n$ python setup.py install --force\n$ python setup.py test}\n```\n\nOr you can use tox to run the tests under all supported Python versions.\nMake sure the required python versions are installed and run:\n\n``` {.sourceCode .console\n$ pip install virtualenv\n$ which python\n$ virtualenv ~/virtualenvs/my_project -p /home/example_username/opt/python-3.6.2/bin/python3\n$ git clone https://github.com/rubelw/terraform-validator.git\n$ cd terraform-validator\n$ pip install -r requirements-dev.txt\n$ python setup.py install --force\n$ pip install tox # first time only\n$ tox}\n```\n\nListing Rules\n=============\n\n``` {.sourceCode .console}\n$ tf-validator dump_rules\n##################################\n########## WARNINGS ##############\n##################################\n{'id': 'F4', 'type': 'VIOLATION::WARNING', 'message': 'IAM policy should not allow * action'}\n{'id': 'W1', 'type': 'VIOLATION::WARNING', 'message': 'Specifying credentials in the template itself is probably not the safest thing'}\n...\n```\n\nExample\n=======\n\nGetting help\n\n``` {.sourceCode .console}\n$ tf-validator validate --help\nUsage: tf-validator validate [OPTIONS]\n\n primary function for validating a template :param template_path: :param\n template_file: :param debug: :param rules_directory: :param profile_path:\n :param allow_suppression: :param print_suppression: :param\n parameter_values_path: :param isolate_custom_rule_exceptions: :param\n version: :return:\n\nOptions:\n -s, --suppress-errors Whether to suppress misc errors to get hash only\n -t, --template-path TEXT base directory to search for templates\n --debug Turn on debugging\n -r, --rules-directory TEXT Extra rule directory\n -o, --profile-path TEXT Path to a profile file\n --allow-suppression / --no-allow-suppression\n Allow using Metadata to suppress violations\n -p, --print-suppression Emit suppressions to stderr\n -m, --parameter-values-path TEXT\n Path to a JSON file to pull Parameter values\n from\n -i, --isolate-custom-rule-exceptions\n Isolate custom rule exceptions - just emit\n the exception without stack trace and keep\n chugging\n -v, --version Print version and exit\n --help Show this message and exit.\n```\n\nValidate a file\n\n``` {.sourceCode .console}\n$tf-validator validate -t /tmp\n\nEvaluating: terraform_distribution_without_logging.tf\n[\n {\n 'failure_count': '0',\n 'filename': '/tmp/terraform_distribution_without_logging.tf',\n 'file_results': [\n {\n 'id': 'W10',\n 'type': 'VIOLATION::WARNING',\n 'message': 'CloudFront Distribution should enable access logging',\n 'logical_resource_ids': [\n 'rDistribution2'\n ]\n }\n ]\n }\n]\n```\n\nValidate all files in a path\n\n``` {.sourceCode .console}\n$tf-validator validate -f /projects\n...\n```\n\nProgrammatically call tf-validator to analyze a file\n\n``` {.sourceCode .console}\nfrom terraform_validator.ValidateUtility import ValidateUtility\n\nconfig_dict = {}\nconfig_dict['template_file'] = '/tmp/template.tf'\nvalidator = ValidateUtility(config_dict)\nreal_result = validator.validate()\nprint(real_result)\n\n[\n {\n 'failure_count': '0',\n 'filename': '/tmp/template.tf',\n 'file_results': [\n {\n 'id': 'W1',\n 'type': 'VIOLATION::WARNING',\n 'message': 'Specifying credentials in the template itself is probably not the safest thing',\n 'logical_resource_ids': [\n 'EC2I4LBA1'\n ]\n }\n ]\n }\n]\n```\n\nI you get some errors and warnings in your out put, you can pass-in the\nflag to suppress all errors\n\n``` {.sourceCode .console}\nfrom terraform_validator.ValidateUtility import ValidateUtility\n\nconfig_dict = {}\nconfig_dict['suppress_errors'] = True\nconfig_dict['template_file'] = '/tmp/template.tf'\nvalidator = ValidateUtility(config_dict)\nreal_result = validator.validate()\nprint(real_result)\n\n[\n {\n 'failure_count': '0',\n 'filename': '/tmp/template.tf',\n 'file_results': [\n {\n 'id': 'W1',\n 'type': 'VIOLATION::WARNING',\n 'message': 'Specifying credentials in the template itself is probably not the safest thing',\n 'logical_resource_ids': [\n 'EC2I4LBA1'\n ]\n }\n ]\n }\n]\n```\n\nWriting your own rules\n\n> - Utilize the format for existing rules in the\n> /terraform\\_validator/custom\\_rules directory\n> - Places the files in a new directory\n> - The \\_\\_init\\_\\_, rule\\_text, rule\\_type and rule\\_id methods\n> should be amount the same, just change of the rule, the text for a\n> failure, and the type to either \\'VIOLATION::FAILING\\_VIOLATION\\'\n> or VIOLATION::WARNNING\\'\n> - Set the id to \\'W\\' for warnings, and \\'F\\' for failure. Pick a\n> number not utilized elsewhere\\...\n> - NOTE: Currently working on functionality for controlling and\n> listing rules\n> - For the audit\\_impl function - portion with will test the resource\n> objects, you will need to review the object model for the resource\n> to see what objects are available, and then review the parser for\n> the resource. Also, look at other similar rules for the resource,\n> and model after them. The basic concept of the function is to\n> identify resources which apply, iterate over the selected\n> resources, and identify specific aspects to evaluate in the rule\n> - pass in the \\--rules-directory /directory in the command line, and\n> the extra rules directory will get added to the existing rules\n\n``` {.sourceCode .console}\ndef audit_impl(self):\n\n violating_rules = []\n\n # This defines which type of resource we are going to test\n resources = self.cfn_model.resources_by_type('AWS::SQS::QueuePolicy')\n\n if len(resources)>0:\n for resource in resources:\n if hasattr(resource, 'policy_document'):\n if resource.policy_document:\n if resource.policy_document.wildcard_allowed_actions():\n violating_rules.append(resource.logical_resource_id)\n\n return violating_rules\n```\n\nExample of writing a rule which requires custom tags for EC2 instances\n======================================================================\n\n- Create a directory to store your custom rule\n- Create the custom rule\n\n``` {.sourceCode .console}\nmkdir ~/custom_validator_rules\n```\n\n``` {.sourceCode .console}\nfrom __future__ import absolute_import, division, print_function\nimport inspect\nimport sys\nfrom builtins import (str)\nfrom cloudformation_validator.custom_rules.BaseRule import BaseRule\nfrom collections import Iterable\nfrom six import StringIO, string_types\nfrom builtins import (str)\n\nclass Ec2CustomTagsRule(BaseRule):\n\n def __init__(self, cfn_model=None, debug=None):\n '''\n Initialize Ec2HasTagsRule\n :param cfn_model:\n '''\n BaseRule.__init__(self, cfn_model, debug=debug)\n\n def rule_text(self):\n '''\n Returns rule text\n :return:\n '''\n if self.debug:\n print('rule_text')\n return 'EC2 instance does not have the required tags'\n\n def rule_type(self):\n '''\n Returns rule type\n :return:\n '''\n self.type= 'VIOLATION::FAILING_VIOLATION'\n return 'VIOLATION::FAILING_VIOLATION'\n\n def rule_id(self):\n '''\n Returns rule id\n :return:\n '''\n if self.debug:\n print('rule_id')\n self.id ='F86'\n return 'F86'\n\n def tags_to_dict(self, aws_tags):\n \"\"\" Convert a list of AWS tags into a python dict \"\"\"\n return {str(tag['Key']): str(tag['Value']) for tag in self.ensure_list(aws_tags)}\n\n def ensure_list(self, value):\n \"\"\"\n Coerces a variable into a list; strings will be converted to a singleton list,\n and `None` or an empty string will be converted to an empty list.\n Args:\n value: a list, or string to be converted into a list.\n\n Returns:\n :py:class:`list`\n \"\"\"\n ret_value = value\n if not value:\n ret_value = []\n elif not isinstance(value, Iterable) or isinstance(value, string_types):\n ret_value = [value]\n return ret_value\n\n\n def audit_impl(self):\n '''\n Audit\n :return: violations\n '''\n if self.debug:\n print('Ec2HasTagsRule - audit_impl')\n\n violating_volumes = []\n\n resources = self.cfn_model.resources_by_type('AWS::EC2::Instance')\n\n if len(resources) > 0:\n\n for resource in resources:\n if self.debug:\n print('resource: ' + str(resource))\n print('vars: '+str(vars(resource)))\n\n if hasattr(resource, 'tags'):\n tags_dict = self.tags_to_dict(resource.cfn_model['Properties']['Tags'])\n required_tags = ('Name', 'ResourceOwner','DeployedBy','Project')\n if not set(required_tags).issubset(tags_dict):\n violating_volumes.append(str(resource.logical_resource_id))\n else:\n if self.debug:\n print('does not tags property')\n violating_volumes.append(str(resource.logical_resource_id))\n\n else:\n if self.debug:\n print('no violating_volumes')\n\n return violating_volumes\n```\n\n- Test the rule by creating a terraform template without the\n necessary tags and testing\n\n``` {.sourceCode .console}\n{\n \"Parameters\": {\n \"subnetId\": {\n \"Type\": \"String\",\n \"Default\": \"subnet-4fd01116\"\n }\n },\n\n \"Resources\": {\n \"EC2I4LBA1\": {\n \"Type\": \"AWS::EC2::Instance\",\n \"Properties\": {\n \"ImageId\": \"ami-6df1e514\",\n \"InstanceType\": \"t2.micro\",\n \"SubnetId\": {\n \"Ref\": \"subnetId\"\n }\n },\n \"Metadata\": {\n \"AWS::CloudFormation::Authentication\": {\n \"testBasic\" : {\n \"type\" : \"basic\",\n \"username\" : \"biff\",\n \"password\" : \"badpassword\",\n \"uris\" : [ \"http://www.example.com/test\" ]\n }\n }\n }\n }\n }\n}\n```\n\n- Run the test\n\n``` {.sourceCode .console\ntf-validator validate --template-path test/ --rules-directory=/home/user/custom_validator_rules}\n```\n\n- You should receive the following violations\n\n``` {.sourceCode .console}\n{\n 'failure_count': '1',\n 'filename': '/tmp/template.tf',\n 'file_results': [\n {\n 'id': 'F86',\n 'type': 'VIOLATION::FAILING_VIOLATION',\n 'message': 'EC2 instance does not have the required tags',\n 'logical_resource_ids': [\n 'EC2I4LBA1'\n ]\n },\n {\n 'id': 'W1',\n 'type': 'VIOLATION::WARNING',\n 'message': 'Specifying credentials in the template itself is probably not the safest thing',\n 'logical_resource_ids': [\n 'EC2I4LBA1'\n ]\n }\n ]\n}\n```\n\n- No add tags property to the tf template and run again\n\n``` {.sourceCode .console\n{\n\"Parameters\": {\n\"subnetId\": {\n\"Type\": \"String\",\n\"Default\": \"subnet-4fd01116\"\n}\n},}\n\"Resources\": {\n \"EC2I4LBA1\": {\n \"Type\": \"AWS::EC2::Instance\",\n \"Properties\": {\n \"ImageId\": \"ami-6df1e514\",\n \"InstanceType\": \"t2.micro\",\n \"SubnetId\": {\n \"Ref\": \"subnetId\"\n },\n \"Tags\" : [\n {\"Key\" : \"Name\", \"Value\":\"value\"},\n {\"Key\":\"ResourceOwner\",\"Value\":\"resourceowner\"},\n {\"Key\":\"DeployedBy\",\"Value\":\"deployedby\"},\n {\"Key\":\"Project\",\"Value\":\"project\"}\n ]\n },\n \"Metadata\": {\n \"AWS::CloudFormation::Authentication\": {\n \"testBasic\" : {\n \"type\" : \"basic\",\n \"username\" : \"biff\",\n \"password\" : \"badpassword\",\n \"uris\" : [ \"http://www.example.com/test\" ]\n }\n }\n }\n }\n}\n```\n\n> }\n\n- You should receive the following violations\n\n``` {.sourceCode .console\n{\n'failure_count': '0',\n'filename': '/tmp/template.tf',\n'file_results': [\n{\n'id': 'W1',\n'type': 'VIOLATION::WARNING',\n'message': 'Specifying credentials in the template itself is probably not the safest thing',\n'logical_resource_ids': [\n'EC2I4LBA1'\n]\n}\n]\n}}\n```\n\nUnit Testing\n============\n\nRun unit tests\n\n``` {.sourceCode .console}\n(python3) => pytest\n================================================ test session starts =================================================\ncollected 22 items\n\ntest/test_cloudfront_distribution.py . [ 4%]\ntest/test_ec2_instance.py . [ 9%]\ntest/test_ec2_volume.py .. [ 18%]\ntest/test_elasticloadbalancing_loadbalancer.py . [ 22%]\ntest/test_iam_user.py . [ 27%]\ntest/test_lambda_permission.py . [ 31%]\ntest/test_rds_instance.py ... [ 45%]\ntest/test_s3_bucket.py . [ 50%]\ntest/test_s3_bucket_policy.py . [ 54%]\ntest/test_security_group.py ........ [ 90%]\ntest/test_sns_policy.py . [ 95%]\ntest/test_sqs_policy.py . [100%]\n```\n\nSource\n======\n\nI am just getting started on this, so any suggestions would be welcome.\n\\<\\>\n\nCopyright\n=========\n\nterraform\\_validator is an open source project by Will Rubel\n\\<\\>, that was ported\nfrom my cloudformation-validator project.\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/rubelw/terraform-validator", "keywords": "validation,schema,dictionaries,aws,cloudformation,python,rules,linter", "license": "", "maintainer": "", "maintainer_email": "", "name": "terraform-validator", "package_url": "https://pypi.org/project/terraform-validator/", "platform": "any", "project_url": "https://pypi.org/project/terraform-validator/", "project_urls": { "Homepage": "https://github.com/rubelw/terraform-validator" }, "release_url": "https://pypi.org/project/terraform-validator/0.6.42/", "requires_dist": [ "boto3 (>=1.4.3)", "requests (>=2.18)", "Click (>=6.7)", "PyYAML (>=3.12)", "pymongo (>=3.4.0)", "tabulate (>=0.8)", "configparser (>=3.5.0)", "jinja2 (>=2.10)", "dill (>=0.2.8)", "pykwalify (>=1.6.1)", "schema (>=0.6.8)", "future (>=0.16.0)", "six (>=1.11.0)", "pip", "botocore" ], "requires_python": "", "summary": "Lightweight, extensible schema and data validation tool for Cloudformation Templates.", "version": "0.6.42" }, "last_serial": 4400945, "releases": { "0.6.35": [ { "comment_text": "", "digests": { "md5": "1ae859fad76d10c375d63b35711d8860", "sha256": "1774be15187f0e54b0b9dbf85d25129631c3e13ca241468f35bd4e5d2bc05496" }, "downloads": -1, "filename": "terraform_validator-0.6.35-py3-none-any.whl", "has_sig": false, "md5_digest": "1ae859fad76d10c375d63b35711d8860", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 223507, "upload_time": "2018-10-07T00:47:34", "url": "https://files.pythonhosted.org/packages/f8/5c/1aa2149b82859ca82745af24af5545e07afdb877058651f180576e3e8c85/terraform_validator-0.6.35-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b2ecf63785dc73e08d18718118b37da1", "sha256": "f26fbbe54c2bcb1314a7d3f1f82d1dd24c23d3d974cca10dbf51d4f751c1982c" }, "downloads": -1, "filename": "terraform_validator-0.6.35.tar.gz", "has_sig": false, "md5_digest": "b2ecf63785dc73e08d18718118b37da1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90123, "upload_time": "2018-10-07T00:47:36", "url": "https://files.pythonhosted.org/packages/c9/22/50a8248335714abb65623d76d091e9cb87a7e655dd65c5baf3ea3f7192ac/terraform_validator-0.6.35.tar.gz" } ], "0.6.36": [ { "comment_text": "", "digests": { "md5": "cfbefe2046f0ce07e8ed1449eb31c18c", "sha256": "962806af5cf9ecc74295ec5da2bb47cdc4ff93cc04a702ad9dff1dafee3fa4c7" }, "downloads": -1, "filename": "terraform_validator-0.6.36-py3-none-any.whl", "has_sig": false, "md5_digest": "cfbefe2046f0ce07e8ed1449eb31c18c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 223510, "upload_time": "2018-10-07T01:10:22", "url": "https://files.pythonhosted.org/packages/69/fa/981c11dc48c3622950999e2baa0a8cf58a1ee91c3c16df35c8135d909ac3/terraform_validator-0.6.36-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a5973eb6f5fb85ed3a1f1c7b5cc17a42", "sha256": "74a9881ab682fede8ff5f85813c174c00ed420bc46d2b9a5b153b0438cda1fa7" }, "downloads": -1, "filename": "terraform_validator-0.6.36.tar.gz", "has_sig": false, "md5_digest": "a5973eb6f5fb85ed3a1f1c7b5cc17a42", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90131, "upload_time": "2018-10-07T01:10:23", "url": "https://files.pythonhosted.org/packages/84/71/27f4945cbe1a7fc3df0a963d370bd799c603d9955909ce986968d2602e52/terraform_validator-0.6.36.tar.gz" } ], "0.6.37": [ { "comment_text": "", "digests": { "md5": "1c15bc98bd2f8d2d4451032270451046", "sha256": "e2020d2f1abcc0eb2b8a6819c427a9ae8116949b449fff300868f5f9fea0dd9f" }, "downloads": -1, "filename": "terraform_validator-0.6.37-py2-none-any.whl", "has_sig": false, "md5_digest": "1c15bc98bd2f8d2d4451032270451046", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 223504, "upload_time": "2018-10-07T01:13:56", "url": "https://files.pythonhosted.org/packages/e5/84/9ac3b7122a2db49e271ab2e6e2eb524ad4dec36ba3a3901a170f0cb30461/terraform_validator-0.6.37-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ddacec1869e1efce4594dc12ca315987", "sha256": "dd05495acaf21b2c1bb49f912c7cd3c810a5870d028c60020b0da318d30e4747" }, "downloads": -1, "filename": "terraform_validator-0.6.37-py3-none-any.whl", "has_sig": false, "md5_digest": "ddacec1869e1efce4594dc12ca315987", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 223504, "upload_time": "2018-10-07T01:13:58", "url": "https://files.pythonhosted.org/packages/3e/92/ef6cd3602b5e4e64edaf4489ef71ae977e27b9d988dc3efbecde3b0c50d6/terraform_validator-0.6.37-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bc67e484f7c71a3800086a38cd0e48f6", "sha256": "30089ef292f1fcd20349ed556d51001adf633a948c768716955c87516c113209" }, "downloads": -1, "filename": "terraform_validator-0.6.37.tar.gz", "has_sig": false, "md5_digest": "bc67e484f7c71a3800086a38cd0e48f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90129, "upload_time": "2018-10-07T01:14:00", "url": "https://files.pythonhosted.org/packages/d9/b0/d0ce542f3b95703043d00770867612ac088eb7bbfb96507ec994703e3c34/terraform_validator-0.6.37.tar.gz" } ], "0.6.38": [ { "comment_text": "", "digests": { "md5": "e9b797dba7e1c6e5f6885561fbb3659b", "sha256": "ffd0c03cd0b942f37e412cc6e35ec943cee30198b10b55b26b429e5e5dd590f0" }, "downloads": -1, "filename": "terraform_validator-0.6.38-py3-none-any.whl", "has_sig": false, "md5_digest": "e9b797dba7e1c6e5f6885561fbb3659b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 223499, "upload_time": "2018-10-07T01:16:01", "url": "https://files.pythonhosted.org/packages/93/12/3d3864bab1e4ba0160c5390c2a9b7fa32debdbe0561335dd418493fa4b00/terraform_validator-0.6.38-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ad1cd131e82871730afad3edf1442db2", "sha256": "272ca9ed1f15b27ff2dc97c783e9788e3bfa40b97b2c4e497e6f9f385f677289" }, "downloads": -1, "filename": "terraform_validator-0.6.38.tar.gz", "has_sig": false, "md5_digest": "ad1cd131e82871730afad3edf1442db2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90120, "upload_time": "2018-10-07T01:16:03", "url": "https://files.pythonhosted.org/packages/09/ae/57ff6ff0f36816fd88a43aa97d5c1db882c3ac6a8966b537909e00369d87/terraform_validator-0.6.38.tar.gz" } ], "0.6.39": [ { "comment_text": "", "digests": { "md5": "c41b87f54874dd57536e53bf5f68931d", "sha256": "2cc544c4e6e657d3c6dd6ca221f1bd455a21657ed3b82c40786d82e2e427ae60" }, "downloads": -1, "filename": "terraform_validator-0.6.39-py3-none-any.whl", "has_sig": false, "md5_digest": "c41b87f54874dd57536e53bf5f68931d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 230755, "upload_time": "2018-10-14T23:25:59", "url": "https://files.pythonhosted.org/packages/35/56/8548256fa82e5ce71d5600ca4f73a76bbc6e76154f9579523aa343c6aff7/terraform_validator-0.6.39-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e9929789d90605a834f2bd3c098c06c", "sha256": "5fb5c3818cb41927d739a7d67225b7a5b986d2cb7794b0197be503b047a05c6c" }, "downloads": -1, "filename": "terraform_validator-0.6.39.tar.gz", "has_sig": false, "md5_digest": "9e9929789d90605a834f2bd3c098c06c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 94128, "upload_time": "2018-10-14T23:26:01", "url": "https://files.pythonhosted.org/packages/29/8a/f9e3d6149e43a5d59c5dbab951e12d77a1bc20435cc8fed271acbb09fd07/terraform_validator-0.6.39.tar.gz" } ], "0.6.40": [ { "comment_text": "", "digests": { "md5": "ac3a0bd696cca1abfb4cf7f4c1af8e49", "sha256": "f4fd70466aa41ee46ca2ce632c4179eeb4f4f9923de6683b92067a4006fa0a22" }, "downloads": -1, "filename": "terraform_validator-0.6.40-py3-none-any.whl", "has_sig": false, "md5_digest": "ac3a0bd696cca1abfb4cf7f4c1af8e49", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 230751, "upload_time": "2018-10-15T00:09:35", "url": "https://files.pythonhosted.org/packages/e0/a8/2cd0ac75e4f2c5656a619b1e844a76bdd19e8fe44a9ada0ef018c212dfad/terraform_validator-0.6.40-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f6b0179d236fbf3bc54b1fe90681e80", "sha256": "56e2bd9ba8bc1561b1e6025366d5ac6b597e27bbe2478a63999664e8ef584545" }, "downloads": -1, "filename": "terraform_validator-0.6.40.tar.gz", "has_sig": false, "md5_digest": "8f6b0179d236fbf3bc54b1fe90681e80", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 94112, "upload_time": "2018-10-15T00:09:37", "url": "https://files.pythonhosted.org/packages/91/4c/544d7dd422ed97af244f2bda71b19b0ae1b038f1dab1ca8d551c93b44a4f/terraform_validator-0.6.40.tar.gz" } ], "0.6.41": [ { "comment_text": "", "digests": { "md5": "d933c4c832f674ac8285696ce4f06967", "sha256": "df700c560fd16e4d22a8d24db874ed91c93fb2b7eead945bbc10b38d8e2a71f6" }, "downloads": -1, "filename": "terraform_validator-0.6.41-py3-none-any.whl", "has_sig": false, "md5_digest": "d933c4c832f674ac8285696ce4f06967", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 234272, "upload_time": "2018-10-22T01:43:53", "url": "https://files.pythonhosted.org/packages/0a/d1/a91f6e9ecc4b24a84391b318708621d685bec52e3d5768d4b5f10f53d31d/terraform_validator-0.6.41-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9640d6c465c6eec37ce8e299c0241692", "sha256": "22c4e4fad3916b6cc8a11160f18ad4c9139138c6f7774d3afe52da40cc1bce48" }, "downloads": -1, "filename": "terraform_validator-0.6.41.tar.gz", "has_sig": false, "md5_digest": "9640d6c465c6eec37ce8e299c0241692", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 103416, "upload_time": "2018-10-22T01:43:55", "url": "https://files.pythonhosted.org/packages/6a/e1/4b3efbddc361a7fc3a2c0e5d56e2835ba8b4882985201cd832cb1d723820/terraform_validator-0.6.41.tar.gz" } ], "0.6.42": [ { "comment_text": "", "digests": { "md5": "d63a3a933b4105fea711584e696a3b78", "sha256": "a21447a5abae8ce5f2ac9b284eb87f223677ec1ed12226f32411df6cadc9d452" }, "downloads": -1, "filename": "terraform_validator-0.6.42-py3-none-any.whl", "has_sig": false, "md5_digest": "d63a3a933b4105fea711584e696a3b78", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 234270, "upload_time": "2018-10-22T01:45:43", "url": "https://files.pythonhosted.org/packages/11/ed/7ee259d84eb64bdfe97717ed0a4103eb099ef1a6faf714fcbb7d16472e11/terraform_validator-0.6.42-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b93d168114c737686b84608b814a2743", "sha256": "5f639829595d38443bd8a2c8b11b95ff26de7b44f0fe5cfa44eff02df8c28bd8" }, "downloads": -1, "filename": "terraform_validator-0.6.42.tar.gz", "has_sig": false, "md5_digest": "b93d168114c737686b84608b814a2743", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 103405, "upload_time": "2018-10-22T01:45:45", "url": "https://files.pythonhosted.org/packages/35/e0/772914987e8ba339e799261ae82989e0ac05d12f362f7b89c8337121741d/terraform_validator-0.6.42.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d63a3a933b4105fea711584e696a3b78", "sha256": "a21447a5abae8ce5f2ac9b284eb87f223677ec1ed12226f32411df6cadc9d452" }, "downloads": -1, "filename": "terraform_validator-0.6.42-py3-none-any.whl", "has_sig": false, "md5_digest": "d63a3a933b4105fea711584e696a3b78", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 234270, "upload_time": "2018-10-22T01:45:43", "url": "https://files.pythonhosted.org/packages/11/ed/7ee259d84eb64bdfe97717ed0a4103eb099ef1a6faf714fcbb7d16472e11/terraform_validator-0.6.42-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b93d168114c737686b84608b814a2743", "sha256": "5f639829595d38443bd8a2c8b11b95ff26de7b44f0fe5cfa44eff02df8c28bd8" }, "downloads": -1, "filename": "terraform_validator-0.6.42.tar.gz", "has_sig": false, "md5_digest": "b93d168114c737686b84608b814a2743", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 103405, "upload_time": "2018-10-22T01:45:45", "url": "https://files.pythonhosted.org/packages/35/e0/772914987e8ba339e799261ae82989e0ac05d12f362f7b89c8337121741d/terraform_validator-0.6.42.tar.gz" } ] }