提供一个decorator,它为数据源实现terraform的外部程序协议。

terraform-external-data的Python项目详细描述


关于

提供一个decorator,该decorator为数据源实现terraform的external program protocol

  • stdin读取json。
  • 验证输入。
  • 将json输出到stdout
  • 验证输出。
  • stderr上打印可读的单行错误。
  • 返回错误时的非零状态代码。

这样可以避免修改规范,并且可以轻松编写多个外部数据脚本而无需重复 代码。

包装的函数必须期望其第一个位置参数是查询数据的字典。

有关开发和运行测试的说明,请参见contributing guide

示例用法

  1. 一如既往,创建并激活一个venv

    python -m venv env
    source env/bin/activate
    
  2. 在env中安装terraform_external_data。

    pip install terraform_external_data
    
  3. terraform_external_data(下面的@语法)修饰的数据收集函数编写脚本。函数必须至少接受一个参数,即terraform传入的查询数据。例如,get_cool_data.py

    fromterraform_external_dataimportterraform_external_data@terraform_external_datadefget_cool_data(query):"""
        Dummy function that simulates data collection with a count.
    
        Here you could reach out to an API, inspect local files, etc.
        """count=0foriinrange(3):count+=1# Terraform requires the values you return be strings,# so terraform_external_data will error if they aren't.return{query['thing_to_count']:str(count)}if__name__=='__main__':# Always protect Python scripts from import side effects with# a condition to check the __name__. Not specifically necessary# for terraform_external_data, but it's a best practice in general.get_cool_data()
  4. data资源添加到terraform文件中。例如,terraform.tf

    data "external" "cars_count" {
      program = ["python", "${path.module}/get_cool_data.py"]
    
      query = {
        # This is the query data your function will receive as an argument.
        thing_to_count = "cars"
      }
    }
    
    # Reference the data like any terraform var. This example uses an
    # output so it doesn't modify infrastructure.
    output "cars_count" {
      value = data.external.cars_count.result.cars
    }
    

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在OSGI中使用cxf生成的客户端时出现Java类装入器问题和JaxB异常   java为什么要在javamail中迭代多部分电子邮件中的部分?   并发编程问题   JFileChooser&&System中未调用java windowClosing。退出功能不正常?   SQL查询的java语法分析   java如何使用AspectJ声明字段上的警告   什么是java向量。元素()C#等价物   java解析Android应用程序中tornado web服务中的CSV文件   java我试过c2dm,我需要服务器端   java调整JPanel大小以适应新的JLabel图标   Java与Python脚本的通信   java使用Saxon通过XSLT生成URL   java net::ERR_complete_CHUNKED_编码200(OK)来自struts应用程序中的tomcat   java如何为我的窗格设置不同的位置?   java使用Cypher Neo4j获取给定类型的所有节点(从SQL世界中的tablename中选择*)   nio使用Java解析文件值   java使用WSDL生成REST客户端会是错误的方向吗?   java如何在我的应用程序中构建类映射?   java按钮。setEnabled在第一个循环中不起作用   xPath适用于最后一页,但不适用于第一页