├── .circleci ├── config.yml └── images │ └── antonbabenko │ └── terrapin │ └── Dockerfile ├── .gitignore ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── bin ├── generate_module.sh ├── generate_provider_data.rb ├── generate_resources_from_json.sh ├── run_module_tests.sh └── run_templates_tests.sh ├── docs └── README.md ├── jinja2_terraform ├── __init__.py └── terraform.py ├── modules ├── aws_bastion_s3_keys │ ├── meta.yml │ └── templates │ │ ├── main.tf.tpl │ │ └── user_data.sh └── just_an_example │ ├── meta.yml │ └── templates │ ├── features.yml │ ├── main.tf.tpl │ └── user_data.sh ├── resources ├── providers │ ├── alicloud.json │ ├── archive.json │ ├── arukas.json │ ├── atlas.json │ ├── aws.json │ ├── azure.json │ ├── azurerm.json │ ├── bitbucket.json │ ├── chef.json │ ├── circonus.json │ ├── clc.json │ ├── cloudflare.json │ ├── cloudstack.json │ ├── cobbler.json │ ├── consul.json │ ├── datadog.json │ ├── digitalocean.json │ ├── dme.json │ ├── dns.json │ ├── dnsimple.json │ ├── docker.json │ ├── dyn.json │ ├── external.json │ ├── fastly.json │ ├── github.json │ ├── gitlab.json │ ├── google.json │ ├── grafana.json │ ├── heroku.json │ ├── http.json │ ├── icinga2.json │ ├── ignition.json │ ├── influxdb.json │ ├── kubernetes.json │ ├── librato.json │ ├── local.json │ ├── logentries.json │ ├── mailgun.json │ ├── mysql.json │ ├── newrelic.json │ ├── nomad.json │ ├── ns1.json │ ├── null.json │ ├── oneandone.json │ ├── opc.json │ ├── openstack.json │ ├── opsgenie.json │ ├── packet.json │ ├── pagerduty.json │ ├── postgresql.json │ ├── powerdns.json │ ├── profitbricks.json │ ├── rabbitmq.json │ ├── rancher.json │ ├── random.json │ ├── rundeck.json │ ├── scaleway.json │ ├── softlayer.json │ ├── spotinst.json │ ├── statuscake.json │ ├── template.json │ ├── terraform.json │ ├── test.json │ ├── tls.json │ ├── triton.json │ ├── ultradns.json │ ├── vault.json │ ├── vcd.json │ └── vsphere.json └── providers_doc │ ├── alicloud.json │ ├── archive.json │ ├── arukas.json │ ├── atlas.json │ ├── aws.json │ ├── azure.json │ ├── azurerm.json │ ├── bitbucket.json │ ├── chef.json │ ├── circonus.json │ ├── clc.json │ ├── cloudflare.json │ ├── cloudstack.json │ ├── cobbler.json │ ├── consul.json │ ├── datadog.json │ ├── digitalocean.json │ ├── dme.json │ ├── dns.json │ ├── dnsimple.json │ ├── docker.json │ ├── dyn.json │ ├── external.json │ ├── fastly.json │ ├── github.json │ ├── gitlab.json │ ├── google.json │ ├── grafana.json │ ├── heroku.json │ ├── http.json │ ├── icinga2.json │ ├── ignition.json │ ├── influxdb.json │ ├── kubernetes.json │ ├── librato.json │ ├── local.json │ ├── logentries.json │ ├── mailgun.json │ ├── mysql.json │ ├── newrelic.json │ ├── nomad.json │ ├── ns1.json │ ├── null.json │ ├── oneandone.json │ ├── opc.json │ ├── openstack.json │ ├── opsgenie.json │ ├── packet.json │ ├── pagerduty.json │ ├── postgresql.json │ ├── powerdns.json │ ├── profitbricks.json │ ├── rabbitmq.json │ ├── rancher.json │ ├── random.json │ ├── rundeck.json │ ├── scaleway.json │ ├── softlayer.json │ ├── spotinst.json │ ├── statuscake.json │ ├── template.json │ ├── terraform.json │ ├── tls.json │ ├── triton.json │ ├── ultradns.json │ ├── vault.json │ ├── vcd.json │ └── vsphere.json ├── templates ├── docs │ ├── .gitignore │ ├── CHANGELOG.md │ ├── LICENSE │ └── README.md.tpl ├── examples │ └── default │ │ ├── README.md │ │ ├── main.tf.tpl │ │ └── outputs.tf.tpl ├── macros │ └── macros.jinja2 └── tests │ ├── .gitignore │ ├── .kitchen.yml.tpl │ ├── Gemfile │ ├── Gemfile.lock │ ├── README.md │ ├── test │ ├── fixtures │ │ └── default │ │ │ ├── module.tf │ │ │ └── outputs.tf │ └── integration │ │ └── default │ │ └── controls │ │ ├── aa.txt.tpl │ │ ├── sg_spec.rb │ │ └── state_file_spec.rb │ └── testing.tfvars ├── terrapin.png └── tests └── templates └── basic ├── basic.jinja2 ├── basic.tf ├── test_extension.jinja2 ├── test_extension.tf ├── variables.jinja2 └── variables.tf /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | jobs: 3 | build: 4 | working_directory: /terrapin 5 | 6 | docker: 7 | 8 | - image: antonbabenko/terrapin:0.1 9 | environment: 10 | TERRAPIN_RESOURCES_DIR: /terrapin/resources 11 | # Set region for kitchen tests 12 | AWS_REGION: eu-west-1 13 | 14 | steps: 15 | - checkout 16 | 17 | - run: 18 | name: Copy jinja2_terraform to Python modules directory 19 | command: cp -Rf jinja2_terraform /usr/lib/python2.7/site-packages/ 20 | 21 | - run: 22 | name: Run functional templates tests 23 | command: ./bin/run_templates_tests.sh 24 | 25 | - run: 26 | name: Generate Terraform module from templates 27 | command: ./bin/generate_module.sh --module aws_bastion_s3_keys 28 | 29 | # temporary disabling tests 30 | # - run: 31 | # name: Run integration tests 32 | # command: ./bin/run_module_tests.sh --module aws_bastion_s3_keys 33 | 34 | - store_artifacts: 35 | path: ./output 36 | 37 | # - type: store_test_results 38 | # path: ./output 39 | -------------------------------------------------------------------------------- /.circleci/images/antonbabenko/terrapin/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ruby:2.4-alpine 2 | 3 | ENV UTIL_PACKAGES bash curl wget openssh-client jq unzip zip ca-certificates git nano 4 | ENV BUILD_PACKAGES curl-dev ruby-dev build-base python-dev 5 | ENV RUBY_PACKAGES ruby ruby-io-console ruby-bundler 6 | ENV PYTHON_PACKAGES python py-pip 7 | ENV PIP_PACKAGES pip jinja2-cli shyaml awscli 8 | ENV GEM_PACKAGES test-kitchen kitchen-terraform awspec 9 | 10 | ENV TF_VERSION=0.9.10 11 | 12 | RUN apk update && \ 13 | apk upgrade && \ 14 | apk add --update $UTIL_PACKAGES && \ 15 | apk add --update $BUILD_PACKAGES && \ 16 | apk add --update $RUBY_PACKAGES && \ 17 | apk add --update $PYTHON_PACKAGES 18 | 19 | RUN pip install --upgrade $PIP_PACKAGES 20 | 21 | RUN gem install $GEM_PACKAGES 22 | 23 | RUN wget -q "https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_linux_amd64.zip" && \ 24 | unzip terraform_${TF_VERSION}_linux_amd64.zip -d /usr/local/bin && \ 25 | rm -f terraform_${TF_VERSION}_linux_amd64.zip 26 | 27 | # Reduce size a tiny bit, but doesn't make much difference given overall size of image 28 | RUN rm -rf /var/cache/apk/* && \ 29 | rm -rf /tmp/* 30 | 31 | CMD ["/bin/bash"] -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Autogenerated content 2 | output/* 3 | work/* 4 | 5 | # Terraform files 6 | .terraform 7 | terraform.tfstate 8 | terraform.tfvars 9 | *.tfstate* 10 | 11 | # OS X files 12 | .history 13 | .DS_Store 14 | 15 | # IntelliJ files 16 | .idea_modules 17 | *.iml 18 | *.iws 19 | *.ipr 20 | .idea/ 21 | build/ 22 | */build/ 23 | out/ 24 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. 6 | 7 | ## Our Standards 8 | 9 | Examples of behavior that contributes to creating a positive environment include: 10 | 11 | * Using welcoming and inclusive language 12 | * Being respectful of differing viewpoints and experiences 13 | * Gracefully accepting constructive criticism 14 | * Focusing on what is best for the community 15 | * Showing empathy towards other community members 16 | 17 | Examples of unacceptable behavior by participants include: 18 | 19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances 20 | * Trolling, insulting/derogatory comments, and personal or political attacks 21 | * Public or private harassment 22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission 23 | * Other conduct which could reasonably be considered inappropriate in a professional setting 24 | 25 | ## Our Responsibilities 26 | 27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. 28 | 29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. 30 | 31 | ## Scope 32 | 33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. 34 | 35 | ## Enforcement 36 | 37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at anton@antonbabenko.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. 38 | 39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. 40 | 41 | ## Attribution 42 | 43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] 44 | 45 | [homepage]: http://contributor-covenant.org 46 | [version]: http://contributor-covenant.org/version/1/4/ 47 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017 Anton Babenko 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /bin/generate_provider_data.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'nokogiri' 3 | require 'json' 4 | require 'open-uri' 5 | 6 | page = Nokogiri::HTML(open("https://terraform.io/docs/providers")) 7 | provider = [] 8 | 9 | page.css(".nav a").each do |x| 10 | if x['href'] =~ /docs\/providers\/.*\/index.html/ then 11 | provider.push(x['href']) 12 | end 13 | end 14 | 15 | if not Dir.exist? "provider_json/#{ARGV[0]}" 16 | Dir.mkdir "provider_json/#{ARGV[0]}" 17 | end 18 | 19 | provider.each do |i| 20 | page = Nokogiri::HTML(open("https://terraform.io#{i}")) 21 | provider_name = i.split('/')[-2] 22 | links = [] 23 | provider_arguments = [] 24 | 25 | puts "Starting Provider of #{provider_name}" 26 | 27 | page.css("#argument-reference ~ ul:first-of-type > li").each do |e| 28 | name = e.css('a').text() 29 | info = e.text() 30 | if not name.nil? then 31 | name = (not name.include? "-") ? name : name.split("-")[0] 32 | provider_arguments.push({ 'word' => name, "info" => info}) 33 | end 34 | end 35 | 36 | page.css(".docs-sidenav a").each do |x| 37 | 38 | if not x['href'] == '#' then 39 | if not x['href'] == "/docs/providers/#{provider_name}/index.html" then 40 | if not x['href'] == '/docs/providers/index.html' then 41 | links.push([x['href'], x.text()]) 42 | end 43 | end 44 | end 45 | end 46 | 47 | result = {} 48 | 49 | result["provider_arguments"] = provider_arguments 50 | result["resources"] = {} 51 | result["datas"] = {} 52 | result["unknowns"] = {} 53 | 54 | links.each do |x| 55 | page = Nokogiri::HTML(open("http://terraform.io#{x[0]}")) 56 | 57 | arguments = [] 58 | attributes = [] 59 | location = "" 60 | 61 | if x[0].match? /\/docs\/providers\/[^\/]*\/r\/.*/ 62 | location = "resources" 63 | elsif x[0].match? /\/docs\/providers\/[^\/]*\/d\/.*/ 64 | location = "datas" 65 | else 66 | location = "unknowns" 67 | end 68 | 69 | page.css("#argument-reference ~ ul:first-of-type > li").each do |i| 70 | begin 71 | begin 72 | name = i.css("a[name]")[0]['name'] 73 | rescue 74 | name = i.css("a[href]")[0]['href'] 75 | end 76 | if i.css("p").empty? 77 | info = i.text() 78 | else 79 | info = i.css("p")[0].text() 80 | end 81 | if not name.nil? then 82 | name = (not name.include? "-") ? name : name.split("-")[0] 83 | arguments.push({ 'word' => name, "info" => info}) 84 | end 85 | rescue 86 | end 87 | end 88 | 89 | page.css("#attributes-reference ~ ul:first-of-type li").each do |i| 90 | begin 91 | begin 92 | name = i.css("a[name]")[0]['name'] 93 | rescue 94 | name = i.css("a[href]")[0]['href'] 95 | end 96 | info = i.text() 97 | if not name.nil? then 98 | name = (not name.include? "-") ? name : name.split("-")[0] 99 | attributes.push({ 'word' => name, "info" => info}) 100 | end 101 | rescue 102 | end 103 | end 104 | 105 | page.css("#attribute-reference ~ ul:first-of-type li").each do |i| 106 | begin 107 | begin 108 | name = i.css("a[name]")[0]['name'] 109 | rescue 110 | name = i.css("a[href]")[0]['href'] 111 | end 112 | info = i.text() 113 | if not name.nil? then 114 | name = (not name.include? "-") ? name : name.split("-")[0] 115 | attributes.push({ 'word' => name, "info" => info}) 116 | end 117 | rescue 118 | end 119 | end 120 | 121 | name = x[1] 122 | if name.split('_')[0] == provider_name 123 | name = name.split('_')[1..-1].join('_') 124 | end 125 | result[location][name] = { "provider" => provider_name, "arguments" => arguments, "attributes" => attributes } 126 | puts "Finish #{name} of #{provider_name}" 127 | end 128 | 129 | if provider_name == "do" then 130 | provider_name = "digitalocean" 131 | end 132 | 133 | File.open("provider_json/#{ARGV[0]}/#{provider_name}.json", 'w') { |file| file.write(JSON.generate(result)) } 134 | end -------------------------------------------------------------------------------- /bin/generate_resources_from_json.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # This script saves Terraform models and documentation (arguments and attributes) from other repositories. 5 | # 6 | 7 | set -e 8 | 9 | # Locate the directory in which this script is located 10 | readonly SCRIPT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 11 | 12 | function log { 13 | local readonly message="$1" 14 | local readonly script_name="$(basename "$0")" 15 | 16 | >&2 echo -e "[$script_name] $message" 17 | } 18 | 19 | #################################################################### 20 | 21 | function generate_resources_from_json { 22 | 23 | local providers_dir="resources/providers/" 24 | local providers_doc_dir="resources/providers_doc/" 25 | 26 | mkdir -p "$providers_dir" "$providers_doc_dir" 27 | 28 | log "Updating models for all providers (using github repo VladRassokhin/intellij-hcl)" 29 | 30 | local tmp_dir=$(mktemp -d) 31 | git clone git@github.com:VladRassokhin/intellij-hcl.git "$tmp_dir" 32 | 33 | # force overwrite without asking 34 | \cp -f ${tmp_dir}/res/terraform/model/providers/*.json "$providers_dir" 35 | 36 | rm -rf "$tmp_dir" 37 | 38 | log "Updating documentation for all providers (using github repo juliosueiras/vim-terraform-completion)" 39 | local tmp_dir=$(mktemp -d) 40 | 41 | git clone git@github.com:juliosueiras/vim-terraform-completion.git "$tmp_dir" 42 | 43 | # force overwrite without asking 44 | \cp -f ${tmp_dir}/provider_json/*.json "$providers_doc_dir" 45 | 46 | rm -rf "$tmp_dir" 47 | 48 | log "Done!" 49 | 50 | } 51 | 52 | generate_resources_from_json 53 | -------------------------------------------------------------------------------- /bin/run_module_tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # This script runs all module tests 5 | # 6 | 7 | set -e 8 | 9 | # Locate the directory in which this script is located 10 | readonly SCRIPT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 11 | 12 | function run_module_tests { 13 | local module="" 14 | 15 | while [[ $# > 0 ]]; do 16 | local key="$1" 17 | 18 | case "$key" in 19 | --module) 20 | module="$2" 21 | shift 22 | ;; 23 | *) 24 | echo "ERROR: Unrecognized argument: $key" 25 | exit 1 26 | ;; 27 | esac 28 | 29 | shift 30 | done 31 | 32 | cd "$SCRIPT_PATH/../output/modules/$module/tests" 33 | 34 | # Make test provider configuration before running tests 35 | local test_provider_file="../test_provider.tf" 36 | echo 'provider "aws" { region = "eu-west-1" }' > "$test_provider_file" 37 | 38 | # "kitchen test" - do all this at once 39 | kitchen converge 40 | kitchen verify 41 | kitchen destroy 42 | 43 | # Remove test provider 44 | rm "$test_provider_file" 45 | } 46 | 47 | run_module_tests "$@" 48 | 49 | -------------------------------------------------------------------------------- /bin/run_templates_tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # This script runs all templates tests 5 | # 6 | 7 | set -e 8 | shopt -s dotglob 9 | 10 | # Locate the directory in which this script is located 11 | readonly SCRIPT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 12 | 13 | # Name of templates directory 14 | readonly TEMPLATES_DIR="templates" 15 | 16 | function log { 17 | local readonly message="$1" 18 | local readonly script_name="$(basename "$0")" 19 | 20 | >&2 echo -e "[$script_name] $message" 21 | } 22 | 23 | function assert_not_empty { 24 | local readonly arg_name="$1" 25 | local readonly arg_value="$2" 26 | 27 | if [[ -z "$arg_value" ]]; then 28 | echo "ERROR: The value for '$arg_name' cannot be empty" 29 | exit 1 30 | fi 31 | } 32 | 33 | function assert_file_exists { 34 | local readonly file="$1" 35 | 36 | if [[ ! -f "${file}" ]]; then 37 | echo "ERROR: The file '$file' is required by this script, but it does not exist." 38 | exit 1 39 | fi 40 | } 41 | 42 | # Assert that a given binary is installed 43 | function assert_is_installed { 44 | local readonly name="$1" 45 | 46 | if [[ ! $(command -v ${name}) ]]; then 47 | echo "ERROR: The binary '$name' is required by this script but is not installed or in the system's PATH." 48 | exit 1 49 | fi 50 | } 51 | 52 | # Assert that a given pip package is installed 53 | function assert_pip_package_is_installed { 54 | local readonly name="$1" 55 | 56 | if [[ ! $(pip list --format=columns | grep -F "$name") ]]; then 57 | echo "ERROR: The pip package '$name' is required by this script but is not installed or in the system's PATH. Run 'pip install $name'." 58 | exit 1 59 | fi 60 | } 61 | 62 | # Assert that the given directory exists 63 | function assert_dir_exists { 64 | local readonly dir="$1" 65 | 66 | if [[ ! -d "$dir" ]]; then 67 | log "ERROR: The directory $dir must exist." 68 | exit 1 69 | fi 70 | } 71 | 72 | #################################################################### 73 | function test_templates { 74 | local readonly templates_dir="$1" 75 | local readonly working_dir="$2" 76 | 77 | assert_not_empty "templates_dir" "$templates_dir" 78 | assert_not_empty "working_dir" "$working_dir" 79 | 80 | cd "$SCRIPT_PATH/.." 81 | 82 | local output_dir="$working_dir/output" 83 | 84 | # Recreate empty working directory 85 | rm -rf "$working_dir" 86 | mkdir -p "$working_dir" 87 | 88 | mkdir -p "$output_dir" 89 | 90 | # Render all tpl-files and remove .tpl extension 91 | local tpl_files=($(find "$templates_dir" -name "*.jinja2" -type f)) 92 | 93 | set +e 94 | 95 | for tpl_file in "${tpl_files[@]}"; do 96 | tpl_filename="$(basename ${tpl_file%.*})" 97 | out_filename="${tpl_filename}.tf" 98 | 99 | # Cleanup previous results 100 | rm -rf "$output_dir/*" 101 | 102 | # prepend 103 | cat < "$working_dir/${tpl_filename}.jinja2" 104 | $(cat $SCRIPT_PATH/../templates/macros/macros.jinja2) 105 | $(cat $tpl_file) 106 | EOF 107 | 108 | # log "jinja2 --strict $tpl_file $include_features_file > $output_dir/$output_file" 109 | 110 | jinja2 -e jinja2_terraform.TerraformExtension --strict "$working_dir/${tpl_filename}.jinja2" > "$output_dir/$out_filename" 111 | 112 | terraform_fmt "$output_dir" 113 | 114 | # Coloring sed is taken here - https://stackoverflow.com/questions/8800578/colorize-diff-on-the-command-line#comment48310602_16865578 115 | diff -Bwu "$templates_dir/$out_filename" "$output_dir/$out_filename" | \ 116 | sed 's/^-/\x1b[31m-/;s/^+/\x1b[32m+/;s/^@/\x1b[34m@/;s/$/\x1b[0m‌​/' 117 | done 118 | 119 | set -e 120 | 121 | } 122 | 123 | function terraform_fmt { 124 | local readonly dir="$1" 125 | 126 | terraform fmt "$SCRIPT_PATH/../$dir" 127 | } 128 | 129 | function run_tests { 130 | assert_is_installed "terraform" 131 | assert_pip_package_is_installed "jinja2-cli" 132 | 133 | local templates_dir="tests/templates/basic" 134 | local working_dir="work/$templates_dir" 135 | 136 | # Verify that all required files and directories exist 137 | assert_dir_exists "$templates_dir" 138 | 139 | log "Testing templates output $templates_dir" 140 | test_templates "$templates_dir" "$working_dir" 141 | 142 | } 143 | 144 | run_tests "$@" 145 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Documentation goes here 2 | 3 | List available modules, how to use, etc... -------------------------------------------------------------------------------- /jinja2_terraform/__init__.py: -------------------------------------------------------------------------------- 1 | from .terraform import TerraformExtension 2 | 3 | __author__ = 'Anton Babenko' 4 | __email__ = 'anton@antonbabenko.com' 5 | __version__ = '0.2.0' 6 | 7 | 8 | __all__ = ['TerraformExtension'] -------------------------------------------------------------------------------- /jinja2_terraform/terraform.py: -------------------------------------------------------------------------------- 1 | from jinja2 import nodes 2 | from jinja2.ext import Extension 3 | 4 | from pprint import pprint 5 | import json, os, re 6 | 7 | class TerraformExtension(Extension): 8 | tags = set(['get_argument', 'get_attributes']) 9 | 10 | def __init__(self, environment): 11 | super(TerraformExtension, self).__init__(environment) 12 | 13 | # Returns argument (for "variables") for "prefix" + "type" + "name" + "argument" 14 | # input example: "resource" "aws_security_group" "name" "Type" 15 | def _get_argument(self, prefix, type, name, argument): 16 | 17 | data_dir = os.getenv('TERRAPIN_RESOURCES_DIR', '/Users/Bob/Sites/terrapin/resources') 18 | data_dir = os.path.join(data_dir, 'providers') 19 | 20 | if prefix == 'resource': 21 | source = 'resources' 22 | elif prefix == 'data': 23 | source = 'data-sources' 24 | else: 25 | raise ValueError("Unknown prefix %s" % prefix) 26 | 27 | # aws_security_group => aws 28 | provider_type = re.search(r"^([^_]+)", type).group(0) 29 | 30 | files = [] 31 | for data_file in [f for f in os.listdir(data_dir) if f.endswith('.json')]: 32 | if data_file.startswith(provider_type): 33 | files.insert(0, data_file) 34 | else: 35 | files.append(data_file) 36 | 37 | # print(files) 38 | 39 | for data_file in files: 40 | filename = os.path.join(data_dir, data_file) 41 | 42 | input_file = open(filename, 'r') 43 | json_data = json.load(input_file) 44 | 45 | for item in json_data[source][type][name]: 46 | try: 47 | if item["name"] == argument: 48 | return item["value"] 49 | except KeyError: 50 | raise 51 | 52 | raise ValueError("'%s' in %s.%s.%s was not found! Bug in json data, probably." % (argument, prefix, type, name)) 53 | 54 | # Returns list of attributes (for "outputs") for "prefix" + "type" 55 | # input example: "resource" "aws_security_group" 56 | def _get_attributes(self, prefix, type): 57 | 58 | data_dir = os.getenv('TERRAPIN_RESOURCES_DIR', '/Users/Bob/Sites/terrapin/resources') 59 | data_dir = os.path.join(data_dir, 'providers_doc') 60 | 61 | if prefix == 'resource': 62 | source = 'resources' 63 | elif prefix == 'data': 64 | source = 'datas' 65 | else: 66 | raise ValueError(json.dumps(prefix)) 67 | 68 | # aws_security_group => aws + security_group 69 | match = re.search(r"^([^_]+)_(.+)", type) 70 | provider_type = match.group(1) 71 | key = match.group(2) 72 | 73 | files = [] 74 | for data_file in [f for f in os.listdir(data_dir) if f.endswith('.json')]: 75 | if data_file.startswith(provider_type): 76 | files.insert(0, data_file) 77 | else: 78 | files.append(data_file) 79 | 80 | # print(files) 81 | 82 | for data_file in files: 83 | filename = os.path.join(data_dir, data_file) 84 | 85 | input_file = open(filename, 'r') 86 | json_data = json.load(input_file) 87 | 88 | items = [] 89 | try: 90 | for item in json_data[source][key]['attributes']: 91 | items.append(item["word"]) 92 | except KeyError: 93 | continue 94 | 95 | return ",".join([str(x) for x in items]) 96 | 97 | raise ValueError("%s.%s was not found. Probably a misspelling error. Or bug in json data." % (prefix, type)) 98 | 99 | def parse(self, parser): 100 | stream = next(parser.stream) 101 | 102 | lineno = stream.lineno 103 | 104 | node = parser.parse_expression().items 105 | 106 | if stream.value == "get_attributes": 107 | call_method = self.call_method( 108 | '_get_attributes', 109 | [node[0], node[1]], 110 | lineno=lineno, 111 | ) 112 | elif stream.value == "get_argument": 113 | call_method = self.call_method( 114 | '_get_argument', 115 | [node[0], node[1], node[2], node[3]], 116 | lineno=lineno, 117 | ) 118 | else: 119 | raise NotImplementedError("Not implemented: %s" % stream.value) 120 | 121 | return nodes.Output([call_method], lineno=lineno) 122 | -------------------------------------------------------------------------------- /modules/aws_bastion_s3_keys/meta.yml: -------------------------------------------------------------------------------- 1 | module: aws_bastion_s3_keys 2 | 3 | description: A Terraform module for creating bastion host on AWS EC2 and populate its ~/.ssh/authorized_keys with public keys from S3 bucket 4 | 5 | git_repo_split: git@github.com:terraform-community-modules/tf_aws_bastion_s3_keys.git 6 | -------------------------------------------------------------------------------- /modules/aws_bastion_s3_keys/templates/main.tf.tpl: -------------------------------------------------------------------------------- 1 | {% call resource("aws_security_group", "bastion") %} 2 | 3 | {{ variable("name", description="Name of VPC") }} 4 | {{ variable("vpc_id") }} 5 | 6 | {{ variable("description", "Bastion security group (only SSH inbound access is allowed)") }} 7 | 8 | {{ variable("tags") }} 9 | 10 | {% endcall %} 11 | 12 | 13 | {% call resource("aws_security_group_rule", "allow_outbound_all") %} 14 | 15 | {{ variable("type", "egress") }} 16 | {{ variable("from_port", 0) }} 17 | {{ variable("to_port", 0) }} 18 | {{ variable("protocol", "-1") }} 19 | 20 | {{ variable("cidr_blocks", ["0.0.0.0/0"]) }} 21 | 22 | {{ variable("security_group_id", "${aws_security_group.bastion.id}") }} 23 | 24 | lifecycle { 25 | create_before_destroy = true 26 | } 27 | 28 | {% endcall %} 29 | 30 | 31 | {% call resource("aws_security_group_rule", "allow_inbound_ssh_access") %} 32 | 33 | {{ variable("type", "ingress") }} 34 | {{ variable("from_port", 22) }} 35 | {{ variable("to_port", 22) }} 36 | {{ variable("protocol", "tcp") }} 37 | 38 | {{ variable("cidr_blocks", ["0.0.0.0/0"]) }} 39 | 40 | {{ variable("security_group_id", "${aws_security_group.bastion.id}") }} 41 | 42 | lifecycle { 43 | create_before_destroy = true 44 | } 45 | 46 | {% endcall %} 47 | 48 | {% call data("template_file", "user_data") %} 49 | {{ variable("template", "${file(\"${path.module}/${var.user_data_file}\")}") }} 50 | 51 | vars { 52 | s3_bucket_name = "${var.s3_bucket_name}" 53 | s3_bucket_uri = "${var.s3_bucket_uri}" 54 | ssh_user = "${var.ssh_user}" 55 | keys_update_frequency = "${var.keys_update_frequency}" 56 | enable_hourly_cron_updates = "${var.enable_hourly_cron_updates}" 57 | additional_user_data_script = "${var.additional_user_data_script}" 58 | } 59 | 60 | {{ define_variable("user_data_file", default="\"user_data.sh\"") }} 61 | {{ define_variable("s3_bucket_name") }} 62 | {{ define_variable("s3_bucket_uri") }} 63 | {{ define_variable("ssh_user") }} 64 | {{ define_variable("keys_update_frequency") }} 65 | {{ define_variable("enable_hourly_cron_updates") }} 66 | {{ define_variable("additional_user_data_script") }} 67 | 68 | {% endcall %} 69 | 70 | {% call resource("aws_launch_configuration", "bastion") %} 71 | {{ variable("name_prefix", "${var.name}-") }} 72 | {{ variable("image_id") }} 73 | {{ variable("instance_type") }} 74 | {{ variable("user_data", "${data.template_file.user_data.rendered}") }} 75 | 76 | {{ variable("security_groups", ["${compact(concat(list(aws_security_group.bastion.id), var.security_group_ids))}"]) }} 77 | {{ define_variable("security_group_ids", "list") }} 78 | 79 | {{ variable("iam_instance_profile") }} 80 | 81 | lifecycle { 82 | create_before_destroy = true 83 | } 84 | {% endcall %} 85 | 86 | {% call resource("aws_autoscaling_group", "bastion") %} 87 | {{ variable("name") }} 88 | {{ variable("vpc_zone_identifier", ["${var.subnet_ids}"]) }} 89 | {{ define_variable("subnet_ids", "list", set_default=false) }} 90 | 91 | {{ variable("desired_capacity", "1") }} 92 | {{ variable("min_size", "1") }} 93 | {{ variable("max_size", "1") }} 94 | {{ variable("health_check_grace_period", "60") }} 95 | {{ variable("health_check_type", "EC2") }} 96 | {{ variable("force_delete", false, set_default=false) }} 97 | 98 | {{ variable("wait_for_capacity_timeout", "0") }} 99 | {{ variable("launch_configuration", "${aws_launch_configuration.bastion.name}") }} 100 | 101 | tag { 102 | key = "Name" 103 | value = "${var.name}" 104 | propagate_at_launch = true 105 | } 106 | 107 | tag { 108 | key = "EIP" 109 | value = "${var.eip}" 110 | propagate_at_launch = true 111 | } 112 | {{ define_variable("eip") }} 113 | 114 | lifecycle { 115 | create_before_destroy = true 116 | } 117 | {% endcall %} 118 | -------------------------------------------------------------------------------- /modules/aws_bastion_s3_keys/templates/user_data.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############## 4 | # Install deps 5 | ############## 6 | # Ubuntu 7 | apt-get update 8 | apt-get install python-pip jq -y 9 | ##################### 10 | 11 | # Amazon Linux (RHEL) - NAT instances 12 | yum update -y 13 | # epel provides python-pip & jq 14 | yum install -y epel-release 15 | yum install python-pip jq -y 16 | ##################### 17 | 18 | pip install --upgrade awscli 19 | 20 | ############## 21 | 22 | cat <<"EOF" > /home/${ssh_user}/update_ssh_authorized_keys.sh 23 | #!/usr/bin/env bash 24 | 25 | set -e 26 | 27 | BUCKET_NAME=${s3_bucket_name} 28 | BUCKET_URI=${s3_bucket_uri} 29 | SSH_USER=${ssh_user} 30 | MARKER="# KEYS_BELOW_WILL_BE_UPDATED_BY_TERRAFORM" 31 | KEYS_FILE=/home/$SSH_USER/.ssh/authorized_keys 32 | TEMP_KEYS_FILE=$(mktemp /tmp/authorized_keys.XXXXXX) 33 | PUB_KEYS_DIR=/home/$SSH_USER/pub_key_files/ 34 | PATH=/usr/local/bin:$PATH 35 | 36 | [[ -z $BUCKET_URI ]] && BUCKET_URI="s3://$BUCKET_NAME/" 37 | 38 | mkdir -p $PUB_KEYS_DIR 39 | 40 | # Add marker, if not present, and copy static content. 41 | grep -Fxq "$MARKER" $KEYS_FILE || echo -e "\n$MARKER" >> $KEYS_FILE 42 | line=$(grep -n "$MARKER" $KEYS_FILE | cut -d ":" -f 1) 43 | head -n $line $KEYS_FILE > $TEMP_KEYS_FILE 44 | 45 | # Synchronize the keys from the bucket. 46 | aws s3 sync --delete $BUCKET_URI $PUB_KEYS_DIR 47 | for filename in $PUB_KEYS_DIR/*; do 48 | sed 's/\n\?$/\n/' < $filename >> $TEMP_KEYS_FILE 49 | done 50 | 51 | # Move the new authorized keys in place. 52 | chown $SSH_USER:$SSH_USER $KEYS_FILE 53 | chmod 600 $KEYS_FILE 54 | mv $TEMP_KEYS_FILE $KEYS_FILE 55 | if [[ $(command -v "selinuxenabled") ]]; then 56 | restorecon -R -v $KEYS_FILE 57 | fi 58 | EOF 59 | 60 | cat <<"EOF" > /home/${ssh_user}/.ssh/config 61 | Host * 62 | StrictHostKeyChecking no 63 | EOF 64 | chmod 600 /home/${ssh_user}/.ssh/config 65 | chown ${ssh_user}:${ssh_user} /home/${ssh_user}/.ssh/config 66 | 67 | chown ${ssh_user}:${ssh_user} /home/${ssh_user}/update_ssh_authorized_keys.sh 68 | chmod 755 /home/${ssh_user}/update_ssh_authorized_keys.sh 69 | 70 | # Execute now 71 | su ${ssh_user} -c /home/${ssh_user}/update_ssh_authorized_keys.sh 72 | 73 | # Be backwards compatible with old cron update enabler 74 | if [ "${enable_hourly_cron_updates}" = 'true' -a -z "${keys_update_frequency}" ]; then 75 | keys_update_frequency="0 * * * *" 76 | else 77 | keys_update_frequency="${keys_update_frequency}" 78 | fi 79 | 80 | # Add to cron 81 | if [ -n "$keys_update_frequency" ]; then 82 | croncmd="/home/${ssh_user}/update_ssh_authorized_keys.sh" 83 | cronjob="$keys_update_frequency $croncmd" 84 | ( crontab -u ${ssh_user} -l | grep -v "$croncmd" ; echo "$cronjob" ) | crontab -u ${ssh_user} - 85 | fi 86 | 87 | # Append addition user-data script 88 | ${additional_user_data_script} 89 | -------------------------------------------------------------------------------- /modules/just_an_example/meta.yml: -------------------------------------------------------------------------------- 1 | module: aws_bastion_s3_keys 2 | 3 | template: aws_module 4 | 5 | git_repo_split: git@github.com:terraform-community-modules/tf_aws_bastion_s3_keys.git 6 | 7 | include_examples_dir: examples 8 | include_docs_dir: docs 9 | -------------------------------------------------------------------------------- /modules/just_an_example/templates/features.yml: -------------------------------------------------------------------------------- 1 | include_description: true 2 | include_something_else: false -------------------------------------------------------------------------------- /modules/just_an_example/templates/main.tf.tpl: -------------------------------------------------------------------------------- 1 | {% call resource("aws_security_group", "bastion") %} 2 | 3 | {{ variable("name", description="Name of VPC") }} 4 | {{ variable("vpc_id") }} 5 | 6 | {% if include_description %} 7 | description = "Bastion security group (only SSH inbound access is allowed)" 8 | {% endif %} 9 | 10 | {{ variable("tags") }} 11 | 12 | {% endcall %} 13 | 14 | 15 | {% call resource("aws_security_group_rule", "allow_outbound_all") %} 16 | 17 | {{ variable("type", "egress") }} 18 | {{ variable("from_port", 0) }} 19 | {{ variable("to_port", 0) }} 20 | {{ variable("protocol", "-1") }} 21 | 22 | {{ variable("cidr_blocks", ["0.0.0.0/0"]) }} 23 | 24 | {{ variable("security_group_id", "${aws_security_group.bastion.id}") }} 25 | 26 | lifecycle { 27 | create_before_destroy = true 28 | } 29 | 30 | {% endcall %} 31 | 32 | 33 | {% call resource("aws_security_group_rule", "allow_inbound_ssh_access") %} 34 | 35 | {{ variable("type", "ingress") }} 36 | {{ variable("from_port", 22) }} 37 | {{ variable("to_port", 22) }} 38 | {{ variable("protocol", "tcp") }} 39 | 40 | {{ variable("cidr_blocks", ["0.0.0.0/0"]) }} 41 | 42 | {{ variable("security_group_id", "${aws_security_group.bastion.id}") }} 43 | 44 | lifecycle { 45 | create_before_destroy = true 46 | } 47 | 48 | {% endcall %} 49 | 50 | {% call data("template_file", "user_data") %} 51 | {{ variable("template", "${file(\"${path.module}/${var.user_data_file}\")}") }} 52 | 53 | vars { 54 | s3_bucket_name = "${var.s3_bucket_name}" 55 | s3_bucket_uri = "${var.s3_bucket_uri}" 56 | ssh_user = "${var.ssh_user}" 57 | keys_update_frequency = "${var.keys_update_frequency}" 58 | enable_hourly_cron_updates = "${var.enable_hourly_cron_updates}" 59 | additional_user_data_script = "${var.additional_user_data_script}" 60 | } 61 | 62 | {{ define_variable("user_data_file", default="\"user_data.sh\"") }} 63 | {{ define_variable("s3_bucket_name") }} 64 | {{ define_variable("s3_bucket_uri") }} 65 | {{ define_variable("ssh_user") }} 66 | {{ define_variable("keys_update_frequency") }} 67 | {{ define_variable("enable_hourly_cron_updates") }} 68 | {{ define_variable("additional_user_data_script") }} 69 | 70 | {% endcall %} 71 | 72 | {% call resource("aws_launch_configuration", "bastion") %} 73 | {{ variable("name_prefix", "${var.name}-") }} 74 | {{ variable("image_id") }} 75 | {{ variable("instance_type") }} 76 | {{ variable("user_data", "${data.template_file.user_data.rendered}") }} 77 | 78 | {{ variable("security_groups", ["${compact(concat(list(aws_security_group.bastion.id), var.security_group_ids))}"]) }} 79 | {{ define_variable("security_group_ids", "list") }} 80 | 81 | {{ variable("iam_instance_profile") }} 82 | 83 | lifecycle { 84 | create_before_destroy = true 85 | } 86 | {% endcall %} 87 | 88 | {% call resource("aws_autoscaling_group", "bastion") %} 89 | {{ variable("name") }} 90 | {{ variable("vpc_zone_identifier", ["${var.subnet_ids}"]) }} 91 | {{ define_variable("subnet_ids", "list", set_default=false) }} 92 | 93 | {{ variable("desired_capacity", "1") }} 94 | {{ variable("min_size", "1") }} 95 | {{ variable("max_size", "1") }} 96 | {{ variable("health_check_grace_period", "60") }} 97 | {{ variable("health_check_type", "EC2") }} 98 | {{ variable("force_delete", false, set_default=false) }} {# @todo: do not render in variables() when static values are provided, because it is not customizable #} 99 | 100 | {{ variable("wait_for_capacity_timeout", "0") }} 101 | {{ variable("launch_configuration", "${aws_launch_configuration.bastion.name}") }} 102 | 103 | tag { 104 | key = "Name" 105 | value = "${var.name}" 106 | propagate_at_launch = true 107 | } 108 | 109 | tag { 110 | key = "EIP" 111 | value = "${var.eip}" 112 | propagate_at_launch = true 113 | } 114 | {{ define_variable("eip") }} 115 | 116 | lifecycle { 117 | create_before_destroy = true 118 | } 119 | {% endcall %} 120 | -------------------------------------------------------------------------------- /modules/just_an_example/templates/user_data.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############## 4 | # Install deps 5 | ############## 6 | # Ubuntu 7 | apt-get update 8 | apt-get install python-pip jq -y 9 | ##################### 10 | 11 | # Amazon Linux (RHEL) - NAT instances 12 | yum update -y 13 | # epel provides python-pip & jq 14 | yum install -y epel-release 15 | yum install python-pip jq -y 16 | ##################### 17 | 18 | pip install --upgrade awscli 19 | 20 | ############## 21 | 22 | cat <<"EOF" > /home/${ssh_user}/update_ssh_authorized_keys.sh 23 | #!/usr/bin/env bash 24 | 25 | set -e 26 | 27 | BUCKET_NAME=${s3_bucket_name} 28 | BUCKET_URI=${s3_bucket_uri} 29 | SSH_USER=${ssh_user} 30 | MARKER="# KEYS_BELOW_WILL_BE_UPDATED_BY_TERRAFORM" 31 | KEYS_FILE=/home/$SSH_USER/.ssh/authorized_keys 32 | TEMP_KEYS_FILE=$(mktemp /tmp/authorized_keys.XXXXXX) 33 | PUB_KEYS_DIR=/home/$SSH_USER/pub_key_files/ 34 | PATH=/usr/local/bin:$PATH 35 | 36 | [[ -z $BUCKET_URI ]] && BUCKET_URI="s3://$BUCKET_NAME/" 37 | 38 | mkdir -p $PUB_KEYS_DIR 39 | 40 | # Add marker, if not present, and copy static content. 41 | grep -Fxq "$MARKER" $KEYS_FILE || echo -e "\n$MARKER" >> $KEYS_FILE 42 | line=$(grep -n "$MARKER" $KEYS_FILE | cut -d ":" -f 1) 43 | head -n $line $KEYS_FILE > $TEMP_KEYS_FILE 44 | 45 | # Synchronize the keys from the bucket. 46 | aws s3 sync --delete $BUCKET_URI $PUB_KEYS_DIR 47 | for filename in $PUB_KEYS_DIR/*; do 48 | sed 's/\n\?$/\n/' < $filename >> $TEMP_KEYS_FILE 49 | done 50 | 51 | # Move the new authorized keys in place. 52 | chown $SSH_USER:$SSH_USER $KEYS_FILE 53 | chmod 600 $KEYS_FILE 54 | mv $TEMP_KEYS_FILE $KEYS_FILE 55 | if [[ $(command -v "selinuxenabled") ]]; then 56 | restorecon -R -v $KEYS_FILE 57 | fi 58 | EOF 59 | 60 | cat <<"EOF" > /home/${ssh_user}/.ssh/config 61 | Host * 62 | StrictHostKeyChecking no 63 | EOF 64 | chmod 600 /home/${ssh_user}/.ssh/config 65 | chown ${ssh_user}:${ssh_user} /home/${ssh_user}/.ssh/config 66 | 67 | chown ${ssh_user}:${ssh_user} /home/${ssh_user}/update_ssh_authorized_keys.sh 68 | chmod 755 /home/${ssh_user}/update_ssh_authorized_keys.sh 69 | 70 | # Execute now 71 | su ${ssh_user} -c /home/${ssh_user}/update_ssh_authorized_keys.sh 72 | 73 | # Be backwards compatible with old cron update enabler 74 | if [ "${enable_hourly_cron_updates}" = 'true' -a -z "${keys_update_frequency}" ]; then 75 | keys_update_frequency="0 * * * *" 76 | else 77 | keys_update_frequency="${keys_update_frequency}" 78 | fi 79 | 80 | # Add to cron 81 | if [ -n "$keys_update_frequency" ]; then 82 | croncmd="/home/${ssh_user}/update_ssh_authorized_keys.sh" 83 | cronjob="$keys_update_frequency $croncmd" 84 | ( crontab -u ${ssh_user} -l | grep -v "$croncmd" ; echo "$cronjob" ) | crontab -u ${ssh_user} - 85 | fi 86 | 87 | # Append addition user-data script 88 | ${additional_user_data_script} 89 | -------------------------------------------------------------------------------- /resources/providers/cloudflare.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cloudflare", 3 | "type": "provider", 4 | "schema": { 5 | "email": [ 6 | { 7 | "name": "Type", 8 | "type": "schema.ValueType", 9 | "value": "TypeString" 10 | }, 11 | { 12 | "name": "Required", 13 | "type": "bool", 14 | "value": "true" 15 | }, 16 | { 17 | "name": "Description", 18 | "type": "string", 19 | "value": "A registered CloudFlare email address." 20 | } 21 | ], 22 | "token": [ 23 | { 24 | "name": "Type", 25 | "type": "schema.ValueType", 26 | "value": "TypeString" 27 | }, 28 | { 29 | "name": "Required", 30 | "type": "bool", 31 | "value": "true" 32 | }, 33 | { 34 | "name": "Description", 35 | "type": "string", 36 | "value": "The token key for API operations." 37 | } 38 | ] 39 | }, 40 | "resources": { 41 | "cloudflare_record": { 42 | "domain": [ 43 | { 44 | "name": "Type", 45 | "type": "schema.ValueType", 46 | "value": "TypeString" 47 | }, 48 | { 49 | "name": "Required", 50 | "type": "bool", 51 | "value": "true" 52 | } 53 | ], 54 | "hostname": [ 55 | { 56 | "name": "Type", 57 | "type": "schema.ValueType", 58 | "value": "TypeString" 59 | }, 60 | { 61 | "name": "Computed", 62 | "type": "bool", 63 | "value": "true" 64 | } 65 | ], 66 | "name": [ 67 | { 68 | "name": "Type", 69 | "type": "schema.ValueType", 70 | "value": "TypeString" 71 | }, 72 | { 73 | "name": "Required", 74 | "type": "bool", 75 | "value": "true" 76 | } 77 | ], 78 | "priority": [ 79 | { 80 | "name": "Type", 81 | "type": "schema.ValueType", 82 | "value": "TypeInt" 83 | }, 84 | { 85 | "name": "Optional", 86 | "type": "bool", 87 | "value": "true" 88 | } 89 | ], 90 | "proxied": [ 91 | { 92 | "name": "Type", 93 | "type": "schema.ValueType", 94 | "value": "TypeBool" 95 | }, 96 | { 97 | "name": "Optional", 98 | "type": "bool", 99 | "value": "true" 100 | }, 101 | { 102 | "name": "Default", 103 | "type": "interface {}", 104 | "value": "false" 105 | } 106 | ], 107 | "ttl": [ 108 | { 109 | "name": "Type", 110 | "type": "schema.ValueType", 111 | "value": "TypeInt" 112 | }, 113 | { 114 | "name": "Optional", 115 | "type": "bool", 116 | "value": "true" 117 | }, 118 | { 119 | "name": "Computed", 120 | "type": "bool", 121 | "value": "true" 122 | } 123 | ], 124 | "type": [ 125 | { 126 | "name": "Type", 127 | "type": "schema.ValueType", 128 | "value": "TypeString" 129 | }, 130 | { 131 | "name": "Required", 132 | "type": "bool", 133 | "value": "true" 134 | } 135 | ], 136 | "value": [ 137 | { 138 | "name": "Type", 139 | "type": "schema.ValueType", 140 | "value": "TypeString" 141 | }, 142 | { 143 | "name": "Required", 144 | "type": "bool", 145 | "value": "true" 146 | } 147 | ], 148 | "zone_id": [ 149 | { 150 | "name": "Type", 151 | "type": "schema.ValueType", 152 | "value": "TypeString" 153 | }, 154 | { 155 | "name": "Computed", 156 | "type": "bool", 157 | "value": "true" 158 | } 159 | ] 160 | } 161 | }, 162 | "data-sources": {} 163 | } 164 | -------------------------------------------------------------------------------- /resources/providers/dme.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dme", 3 | "type": "provider", 4 | "schema": { 5 | "akey": [ 6 | { 7 | "name": "Type", 8 | "type": "schema.ValueType", 9 | "value": "TypeString" 10 | }, 11 | { 12 | "name": "Required", 13 | "type": "bool", 14 | "value": "true" 15 | }, 16 | { 17 | "name": "Description", 18 | "type": "string", 19 | "value": "A DNSMadeEasy API Key." 20 | } 21 | ], 22 | "skey": [ 23 | { 24 | "name": "Type", 25 | "type": "schema.ValueType", 26 | "value": "TypeString" 27 | }, 28 | { 29 | "name": "Required", 30 | "type": "bool", 31 | "value": "true" 32 | }, 33 | { 34 | "name": "Description", 35 | "type": "string", 36 | "value": "The Secret Key for API operations." 37 | } 38 | ], 39 | "usesandbox": [ 40 | { 41 | "name": "Type", 42 | "type": "schema.ValueType", 43 | "value": "TypeBool" 44 | }, 45 | { 46 | "name": "Required", 47 | "type": "bool", 48 | "value": "true" 49 | }, 50 | { 51 | "name": "Description", 52 | "type": "string", 53 | "value": "If true, use the DME Sandbox." 54 | } 55 | ] 56 | }, 57 | "resources": { 58 | "dme_record": { 59 | "description": [ 60 | { 61 | "name": "Type", 62 | "type": "schema.ValueType", 63 | "value": "TypeString" 64 | }, 65 | { 66 | "name": "Optional", 67 | "type": "bool", 68 | "value": "true" 69 | } 70 | ], 71 | "domainid": [ 72 | { 73 | "name": "Type", 74 | "type": "schema.ValueType", 75 | "value": "TypeString" 76 | }, 77 | { 78 | "name": "Required", 79 | "type": "bool", 80 | "value": "true" 81 | } 82 | ], 83 | "gtdLocation": [ 84 | { 85 | "name": "Type", 86 | "type": "schema.ValueType", 87 | "value": "TypeString" 88 | }, 89 | { 90 | "name": "Optional", 91 | "type": "bool", 92 | "value": "true" 93 | } 94 | ], 95 | "hardLink": [ 96 | { 97 | "name": "Type", 98 | "type": "schema.ValueType", 99 | "value": "TypeBool" 100 | }, 101 | { 102 | "name": "Optional", 103 | "type": "bool", 104 | "value": "true" 105 | } 106 | ], 107 | "keywords": [ 108 | { 109 | "name": "Type", 110 | "type": "schema.ValueType", 111 | "value": "TypeString" 112 | }, 113 | { 114 | "name": "Optional", 115 | "type": "bool", 116 | "value": "true" 117 | } 118 | ], 119 | "mxLevel": [ 120 | { 121 | "name": "Type", 122 | "type": "schema.ValueType", 123 | "value": "TypeInt" 124 | }, 125 | { 126 | "name": "Optional", 127 | "type": "bool", 128 | "value": "true" 129 | } 130 | ], 131 | "name": [ 132 | { 133 | "name": "Type", 134 | "type": "schema.ValueType", 135 | "value": "TypeString" 136 | }, 137 | { 138 | "name": "Required", 139 | "type": "bool", 140 | "value": "true" 141 | } 142 | ], 143 | "port": [ 144 | { 145 | "name": "Type", 146 | "type": "schema.ValueType", 147 | "value": "TypeInt" 148 | }, 149 | { 150 | "name": "Optional", 151 | "type": "bool", 152 | "value": "true" 153 | } 154 | ], 155 | "priority": [ 156 | { 157 | "name": "Type", 158 | "type": "schema.ValueType", 159 | "value": "TypeInt" 160 | }, 161 | { 162 | "name": "Optional", 163 | "type": "bool", 164 | "value": "true" 165 | } 166 | ], 167 | "redirectType": [ 168 | { 169 | "name": "Type", 170 | "type": "schema.ValueType", 171 | "value": "TypeString" 172 | }, 173 | { 174 | "name": "Optional", 175 | "type": "bool", 176 | "value": "true" 177 | } 178 | ], 179 | "title": [ 180 | { 181 | "name": "Type", 182 | "type": "schema.ValueType", 183 | "value": "TypeString" 184 | }, 185 | { 186 | "name": "Optional", 187 | "type": "bool", 188 | "value": "true" 189 | } 190 | ], 191 | "ttl": [ 192 | { 193 | "name": "Type", 194 | "type": "schema.ValueType", 195 | "value": "TypeInt" 196 | }, 197 | { 198 | "name": "Optional", 199 | "type": "bool", 200 | "value": "true" 201 | } 202 | ], 203 | "type": [ 204 | { 205 | "name": "Type", 206 | "type": "schema.ValueType", 207 | "value": "TypeString" 208 | }, 209 | { 210 | "name": "Required", 211 | "type": "bool", 212 | "value": "true" 213 | } 214 | ], 215 | "value": [ 216 | { 217 | "name": "Type", 218 | "type": "schema.ValueType", 219 | "value": "TypeString" 220 | }, 221 | { 222 | "name": "Required", 223 | "type": "bool", 224 | "value": "true" 225 | } 226 | ], 227 | "weight": [ 228 | { 229 | "name": "Type", 230 | "type": "schema.ValueType", 231 | "value": "TypeInt" 232 | }, 233 | { 234 | "name": "Optional", 235 | "type": "bool", 236 | "value": "true" 237 | } 238 | ] 239 | } 240 | }, 241 | "data-sources": {} 242 | } 243 | -------------------------------------------------------------------------------- /resources/providers/dnsimple.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dnsimple", 3 | "type": "provider", 4 | "schema": { 5 | "account": [ 6 | { 7 | "name": "Type", 8 | "type": "schema.ValueType", 9 | "value": "TypeString" 10 | }, 11 | { 12 | "name": "Required", 13 | "type": "bool", 14 | "value": "true" 15 | }, 16 | { 17 | "name": "Description", 18 | "type": "string", 19 | "value": "The account for API operations." 20 | } 21 | ], 22 | "email": [ 23 | { 24 | "name": "Type", 25 | "type": "schema.ValueType", 26 | "value": "TypeString" 27 | }, 28 | { 29 | "name": "Optional", 30 | "type": "bool", 31 | "value": "true" 32 | }, 33 | { 34 | "name": "Description", 35 | "type": "string", 36 | "value": "The DNSimple account email address." 37 | }, 38 | { 39 | "name": "DefaultValue_Computed", 40 | "type": "string", 41 | "value": "" 42 | } 43 | ], 44 | "token": [ 45 | { 46 | "name": "Type", 47 | "type": "schema.ValueType", 48 | "value": "TypeString" 49 | }, 50 | { 51 | "name": "Required", 52 | "type": "bool", 53 | "value": "true" 54 | }, 55 | { 56 | "name": "Description", 57 | "type": "string", 58 | "value": "The API v2 token for API operations." 59 | } 60 | ] 61 | }, 62 | "resources": { 63 | "dnsimple_record": { 64 | "domain": [ 65 | { 66 | "name": "Type", 67 | "type": "schema.ValueType", 68 | "value": "TypeString" 69 | }, 70 | { 71 | "name": "Required", 72 | "type": "bool", 73 | "value": "true" 74 | } 75 | ], 76 | "domain_id": [ 77 | { 78 | "name": "Type", 79 | "type": "schema.ValueType", 80 | "value": "TypeString" 81 | }, 82 | { 83 | "name": "Computed", 84 | "type": "bool", 85 | "value": "true" 86 | } 87 | ], 88 | "hostname": [ 89 | { 90 | "name": "Type", 91 | "type": "schema.ValueType", 92 | "value": "TypeString" 93 | }, 94 | { 95 | "name": "Computed", 96 | "type": "bool", 97 | "value": "true" 98 | } 99 | ], 100 | "name": [ 101 | { 102 | "name": "Type", 103 | "type": "schema.ValueType", 104 | "value": "TypeString" 105 | }, 106 | { 107 | "name": "Required", 108 | "type": "bool", 109 | "value": "true" 110 | } 111 | ], 112 | "priority": [ 113 | { 114 | "name": "Type", 115 | "type": "schema.ValueType", 116 | "value": "TypeString" 117 | }, 118 | { 119 | "name": "Optional", 120 | "type": "bool", 121 | "value": "true" 122 | }, 123 | { 124 | "name": "Computed", 125 | "type": "bool", 126 | "value": "true" 127 | } 128 | ], 129 | "ttl": [ 130 | { 131 | "name": "Type", 132 | "type": "schema.ValueType", 133 | "value": "TypeString" 134 | }, 135 | { 136 | "name": "Optional", 137 | "type": "bool", 138 | "value": "true" 139 | }, 140 | { 141 | "name": "Default", 142 | "type": "interface {}", 143 | "value": "3600" 144 | } 145 | ], 146 | "type": [ 147 | { 148 | "name": "Type", 149 | "type": "schema.ValueType", 150 | "value": "TypeString" 151 | }, 152 | { 153 | "name": "Required", 154 | "type": "bool", 155 | "value": "true" 156 | } 157 | ], 158 | "value": [ 159 | { 160 | "name": "Type", 161 | "type": "schema.ValueType", 162 | "value": "TypeString" 163 | }, 164 | { 165 | "name": "Required", 166 | "type": "bool", 167 | "value": "true" 168 | } 169 | ] 170 | } 171 | }, 172 | "data-sources": {} 173 | } 174 | -------------------------------------------------------------------------------- /resources/providers/dyn.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dyn", 3 | "type": "provider", 4 | "schema": { 5 | "customer_name": [ 6 | { 7 | "name": "Type", 8 | "type": "schema.ValueType", 9 | "value": "TypeString" 10 | }, 11 | { 12 | "name": "Required", 13 | "type": "bool", 14 | "value": "true" 15 | }, 16 | { 17 | "name": "Description", 18 | "type": "string", 19 | "value": "A Dyn customer name." 20 | } 21 | ], 22 | "password": [ 23 | { 24 | "name": "Type", 25 | "type": "schema.ValueType", 26 | "value": "TypeString" 27 | }, 28 | { 29 | "name": "Required", 30 | "type": "bool", 31 | "value": "true" 32 | }, 33 | { 34 | "name": "Description", 35 | "type": "string", 36 | "value": "The Dyn password." 37 | } 38 | ], 39 | "username": [ 40 | { 41 | "name": "Type", 42 | "type": "schema.ValueType", 43 | "value": "TypeString" 44 | }, 45 | { 46 | "name": "Required", 47 | "type": "bool", 48 | "value": "true" 49 | }, 50 | { 51 | "name": "Description", 52 | "type": "string", 53 | "value": "A Dyn username." 54 | } 55 | ] 56 | }, 57 | "resources": { 58 | "dyn_record": { 59 | "fqdn": [ 60 | { 61 | "name": "Type", 62 | "type": "schema.ValueType", 63 | "value": "TypeString" 64 | }, 65 | { 66 | "name": "Computed", 67 | "type": "bool", 68 | "value": "true" 69 | } 70 | ], 71 | "name": [ 72 | { 73 | "name": "Type", 74 | "type": "schema.ValueType", 75 | "value": "TypeString" 76 | }, 77 | { 78 | "name": "Required", 79 | "type": "bool", 80 | "value": "true" 81 | } 82 | ], 83 | "ttl": [ 84 | { 85 | "name": "Type", 86 | "type": "schema.ValueType", 87 | "value": "TypeString" 88 | }, 89 | { 90 | "name": "Optional", 91 | "type": "bool", 92 | "value": "true" 93 | }, 94 | { 95 | "name": "Default", 96 | "type": "interface {}", 97 | "value": "0" 98 | } 99 | ], 100 | "type": [ 101 | { 102 | "name": "Type", 103 | "type": "schema.ValueType", 104 | "value": "TypeString" 105 | }, 106 | { 107 | "name": "Required", 108 | "type": "bool", 109 | "value": "true" 110 | } 111 | ], 112 | "value": [ 113 | { 114 | "name": "Type", 115 | "type": "schema.ValueType", 116 | "value": "TypeString" 117 | }, 118 | { 119 | "name": "Required", 120 | "type": "bool", 121 | "value": "true" 122 | } 123 | ], 124 | "zone": [ 125 | { 126 | "name": "Type", 127 | "type": "schema.ValueType", 128 | "value": "TypeString" 129 | }, 130 | { 131 | "name": "Required", 132 | "type": "bool", 133 | "value": "true" 134 | } 135 | ] 136 | } 137 | }, 138 | "data-sources": {} 139 | } 140 | -------------------------------------------------------------------------------- /resources/providers/external.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "external", 3 | "type": "provider", 4 | "schema": {}, 5 | "resources": {}, 6 | "data-sources": { 7 | "external": { 8 | "program": [ 9 | { 10 | "name": "Type", 11 | "type": "schema.ValueType", 12 | "value": "TypeList" 13 | }, 14 | { 15 | "name": "Required", 16 | "type": "bool", 17 | "value": "true" 18 | }, 19 | { 20 | "name": "Elem", 21 | "type": "ResourceSchemaElements", 22 | "value": [ 23 | { 24 | "name": "Type", 25 | "type": "schema.ValueType", 26 | "value": "TypeString" 27 | } 28 | ] 29 | } 30 | ], 31 | "query": [ 32 | { 33 | "name": "Type", 34 | "type": "schema.ValueType", 35 | "value": "TypeMap" 36 | }, 37 | { 38 | "name": "Optional", 39 | "type": "bool", 40 | "value": "true" 41 | }, 42 | { 43 | "name": "Elem", 44 | "type": "ResourceSchemaElements", 45 | "value": [ 46 | { 47 | "name": "Type", 48 | "type": "schema.ValueType", 49 | "value": "TypeString" 50 | } 51 | ] 52 | } 53 | ], 54 | "result": [ 55 | { 56 | "name": "Type", 57 | "type": "schema.ValueType", 58 | "value": "TypeMap" 59 | }, 60 | { 61 | "name": "Computed", 62 | "type": "bool", 63 | "value": "true" 64 | }, 65 | { 66 | "name": "Elem", 67 | "type": "ResourceSchemaElements", 68 | "value": [ 69 | { 70 | "name": "Type", 71 | "type": "schema.ValueType", 72 | "value": "TypeString" 73 | } 74 | ] 75 | } 76 | ] 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /resources/providers/http.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "http", 3 | "type": "provider", 4 | "schema": {}, 5 | "resources": {}, 6 | "data-sources": { 7 | "http": { 8 | "body": [ 9 | { 10 | "name": "Type", 11 | "type": "schema.ValueType", 12 | "value": "TypeString" 13 | }, 14 | { 15 | "name": "Computed", 16 | "type": "bool", 17 | "value": "true" 18 | }, 19 | { 20 | "name": "Elem", 21 | "type": "ResourceSchemaElements", 22 | "value": [ 23 | { 24 | "name": "Type", 25 | "type": "schema.ValueType", 26 | "value": "TypeString" 27 | } 28 | ] 29 | } 30 | ], 31 | "request_headers": [ 32 | { 33 | "name": "Type", 34 | "type": "schema.ValueType", 35 | "value": "TypeMap" 36 | }, 37 | { 38 | "name": "Optional", 39 | "type": "bool", 40 | "value": "true" 41 | }, 42 | { 43 | "name": "Elem", 44 | "type": "ResourceSchemaElements", 45 | "value": [ 46 | { 47 | "name": "Type", 48 | "type": "schema.ValueType", 49 | "value": "TypeString" 50 | } 51 | ] 52 | } 53 | ], 54 | "url": [ 55 | { 56 | "name": "Type", 57 | "type": "schema.ValueType", 58 | "value": "TypeString" 59 | }, 60 | { 61 | "name": "Required", 62 | "type": "bool", 63 | "value": "true" 64 | }, 65 | { 66 | "name": "Elem", 67 | "type": "ResourceSchemaElements", 68 | "value": [ 69 | { 70 | "name": "Type", 71 | "type": "schema.ValueType", 72 | "value": "TypeString" 73 | } 74 | ] 75 | } 76 | ] 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /resources/providers/influxdb.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "influxdb", 3 | "type": "provider", 4 | "schema": { 5 | "password": [ 6 | { 7 | "name": "Type", 8 | "type": "schema.ValueType", 9 | "value": "TypeString" 10 | }, 11 | { 12 | "name": "Optional", 13 | "type": "bool", 14 | "value": "true" 15 | }, 16 | { 17 | "name": "DefaultValue_Computed", 18 | "type": "string", 19 | "value": "" 20 | } 21 | ], 22 | "url": [ 23 | { 24 | "name": "Type", 25 | "type": "schema.ValueType", 26 | "value": "TypeString" 27 | }, 28 | { 29 | "name": "Optional", 30 | "type": "bool", 31 | "value": "true" 32 | }, 33 | { 34 | "name": "DefaultValue_Computed", 35 | "type": "string", 36 | "value": "http://localhost:8086/" 37 | } 38 | ], 39 | "username": [ 40 | { 41 | "name": "Type", 42 | "type": "schema.ValueType", 43 | "value": "TypeString" 44 | }, 45 | { 46 | "name": "Optional", 47 | "type": "bool", 48 | "value": "true" 49 | }, 50 | { 51 | "name": "DefaultValue_Computed", 52 | "type": "string", 53 | "value": "" 54 | } 55 | ] 56 | }, 57 | "resources": { 58 | "influxdb_continuous_query": { 59 | "database": [ 60 | { 61 | "name": "Type", 62 | "type": "schema.ValueType", 63 | "value": "TypeString" 64 | }, 65 | { 66 | "name": "Required", 67 | "type": "bool", 68 | "value": "true" 69 | } 70 | ], 71 | "name": [ 72 | { 73 | "name": "Type", 74 | "type": "schema.ValueType", 75 | "value": "TypeString" 76 | }, 77 | { 78 | "name": "Required", 79 | "type": "bool", 80 | "value": "true" 81 | } 82 | ], 83 | "query": [ 84 | { 85 | "name": "Type", 86 | "type": "schema.ValueType", 87 | "value": "TypeString" 88 | }, 89 | { 90 | "name": "Required", 91 | "type": "bool", 92 | "value": "true" 93 | } 94 | ] 95 | }, 96 | "influxdb_database": { 97 | "name": [ 98 | { 99 | "name": "Type", 100 | "type": "schema.ValueType", 101 | "value": "TypeString" 102 | }, 103 | { 104 | "name": "Required", 105 | "type": "bool", 106 | "value": "true" 107 | } 108 | ] 109 | }, 110 | "influxdb_user": { 111 | "admin": [ 112 | { 113 | "name": "Type", 114 | "type": "schema.ValueType", 115 | "value": "TypeBool" 116 | }, 117 | { 118 | "name": "Optional", 119 | "type": "bool", 120 | "value": "true" 121 | }, 122 | { 123 | "name": "Computed", 124 | "type": "bool", 125 | "value": "true" 126 | } 127 | ], 128 | "grant": [ 129 | { 130 | "name": "Type", 131 | "type": "schema.ValueType", 132 | "value": "TypeList" 133 | }, 134 | { 135 | "name": "Optional", 136 | "type": "bool", 137 | "value": "true" 138 | }, 139 | { 140 | "name": "Elem", 141 | "type": "ResourceSchemaInfo", 142 | "value": { 143 | "database": [ 144 | { 145 | "name": "Type", 146 | "type": "schema.ValueType", 147 | "value": "TypeString" 148 | }, 149 | { 150 | "name": "Required", 151 | "type": "bool", 152 | "value": "true" 153 | } 154 | ], 155 | "privilege": [ 156 | { 157 | "name": "Type", 158 | "type": "schema.ValueType", 159 | "value": "TypeString" 160 | }, 161 | { 162 | "name": "Required", 163 | "type": "bool", 164 | "value": "true" 165 | } 166 | ] 167 | } 168 | } 169 | ], 170 | "name": [ 171 | { 172 | "name": "Type", 173 | "type": "schema.ValueType", 174 | "value": "TypeString" 175 | }, 176 | { 177 | "name": "Required", 178 | "type": "bool", 179 | "value": "true" 180 | } 181 | ], 182 | "password": [ 183 | { 184 | "name": "Type", 185 | "type": "schema.ValueType", 186 | "value": "TypeString" 187 | }, 188 | { 189 | "name": "Required", 190 | "type": "bool", 191 | "value": "true" 192 | } 193 | ] 194 | } 195 | }, 196 | "data-sources": {} 197 | } 198 | -------------------------------------------------------------------------------- /resources/providers/local.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "local", 3 | "type": "provider", 4 | "schema": {}, 5 | "resources": { 6 | "local_file": { 7 | "content": [ 8 | { 9 | "name": "Type", 10 | "type": "schema.ValueType", 11 | "value": "TypeString" 12 | }, 13 | { 14 | "name": "Required", 15 | "type": "bool", 16 | "value": "true" 17 | } 18 | ], 19 | "filename": [ 20 | { 21 | "name": "Type", 22 | "type": "schema.ValueType", 23 | "value": "TypeString" 24 | }, 25 | { 26 | "name": "Required", 27 | "type": "bool", 28 | "value": "true" 29 | }, 30 | { 31 | "name": "Description", 32 | "type": "string", 33 | "value": "Path to the output file" 34 | } 35 | ] 36 | } 37 | }, 38 | "data-sources": {} 39 | } 40 | -------------------------------------------------------------------------------- /resources/providers/logentries.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "logentries", 3 | "type": "provider", 4 | "schema": { 5 | "account_key": [ 6 | { 7 | "name": "Type", 8 | "type": "schema.ValueType", 9 | "value": "TypeString" 10 | }, 11 | { 12 | "name": "Required", 13 | "type": "bool", 14 | "value": "true" 15 | }, 16 | { 17 | "name": "Description", 18 | "type": "string", 19 | "value": "The Log Entries account key." 20 | } 21 | ] 22 | }, 23 | "resources": { 24 | "logentries_log": { 25 | "filename": [ 26 | { 27 | "name": "Type", 28 | "type": "schema.ValueType", 29 | "value": "TypeString" 30 | }, 31 | { 32 | "name": "Optional", 33 | "type": "bool", 34 | "value": "true" 35 | } 36 | ], 37 | "logset_id": [ 38 | { 39 | "name": "Type", 40 | "type": "schema.ValueType", 41 | "value": "TypeString" 42 | }, 43 | { 44 | "name": "Required", 45 | "type": "bool", 46 | "value": "true" 47 | } 48 | ], 49 | "name": [ 50 | { 51 | "name": "Type", 52 | "type": "schema.ValueType", 53 | "value": "TypeString" 54 | }, 55 | { 56 | "name": "Required", 57 | "type": "bool", 58 | "value": "true" 59 | } 60 | ], 61 | "retention_period": [ 62 | { 63 | "name": "Type", 64 | "type": "schema.ValueType", 65 | "value": "TypeString" 66 | }, 67 | { 68 | "name": "Optional", 69 | "type": "bool", 70 | "value": "true" 71 | }, 72 | { 73 | "name": "Default", 74 | "type": "interface {}", 75 | "value": "ACCOUNT_DEFAULT" 76 | } 77 | ], 78 | "source": [ 79 | { 80 | "name": "Type", 81 | "type": "schema.ValueType", 82 | "value": "TypeString" 83 | }, 84 | { 85 | "name": "Optional", 86 | "type": "bool", 87 | "value": "true" 88 | }, 89 | { 90 | "name": "Default", 91 | "type": "interface {}", 92 | "value": "token" 93 | } 94 | ], 95 | "token": [ 96 | { 97 | "name": "Type", 98 | "type": "schema.ValueType", 99 | "value": "TypeString" 100 | }, 101 | { 102 | "name": "Computed", 103 | "type": "bool", 104 | "value": "true" 105 | } 106 | ], 107 | "type": [ 108 | { 109 | "name": "Type", 110 | "type": "schema.ValueType", 111 | "value": "TypeString" 112 | }, 113 | { 114 | "name": "Optional", 115 | "type": "bool", 116 | "value": "true" 117 | }, 118 | { 119 | "name": "Default", 120 | "type": "interface {}", 121 | "value": "" 122 | } 123 | ] 124 | }, 125 | "logentries_logset": { 126 | "location": [ 127 | { 128 | "name": "Type", 129 | "type": "schema.ValueType", 130 | "value": "TypeString" 131 | }, 132 | { 133 | "name": "Optional", 134 | "type": "bool", 135 | "value": "true" 136 | }, 137 | { 138 | "name": "Default", 139 | "type": "interface {}", 140 | "value": "nonlocation" 141 | } 142 | ], 143 | "name": [ 144 | { 145 | "name": "Type", 146 | "type": "schema.ValueType", 147 | "value": "TypeString" 148 | }, 149 | { 150 | "name": "Required", 151 | "type": "bool", 152 | "value": "true" 153 | } 154 | ] 155 | } 156 | }, 157 | "data-sources": {} 158 | } 159 | -------------------------------------------------------------------------------- /resources/providers/mailgun.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mailgun", 3 | "type": "provider", 4 | "schema": { 5 | "api_key": [ 6 | { 7 | "name": "Type", 8 | "type": "schema.ValueType", 9 | "value": "TypeString" 10 | }, 11 | { 12 | "name": "Required", 13 | "type": "bool", 14 | "value": "true" 15 | } 16 | ] 17 | }, 18 | "resources": { 19 | "mailgun_domain": { 20 | "name": [ 21 | { 22 | "name": "Type", 23 | "type": "schema.ValueType", 24 | "value": "TypeString" 25 | }, 26 | { 27 | "name": "Required", 28 | "type": "bool", 29 | "value": "true" 30 | } 31 | ], 32 | "receiving_records": [ 33 | { 34 | "name": "Type", 35 | "type": "schema.ValueType", 36 | "value": "TypeList" 37 | }, 38 | { 39 | "name": "Computed", 40 | "type": "bool", 41 | "value": "true" 42 | }, 43 | { 44 | "name": "Elem", 45 | "type": "ResourceSchemaInfo", 46 | "value": { 47 | "priority": [ 48 | { 49 | "name": "Type", 50 | "type": "schema.ValueType", 51 | "value": "TypeString" 52 | }, 53 | { 54 | "name": "Computed", 55 | "type": "bool", 56 | "value": "true" 57 | } 58 | ], 59 | "record_type": [ 60 | { 61 | "name": "Type", 62 | "type": "schema.ValueType", 63 | "value": "TypeString" 64 | }, 65 | { 66 | "name": "Computed", 67 | "type": "bool", 68 | "value": "true" 69 | } 70 | ], 71 | "valid": [ 72 | { 73 | "name": "Type", 74 | "type": "schema.ValueType", 75 | "value": "TypeString" 76 | }, 77 | { 78 | "name": "Computed", 79 | "type": "bool", 80 | "value": "true" 81 | } 82 | ], 83 | "value": [ 84 | { 85 | "name": "Type", 86 | "type": "schema.ValueType", 87 | "value": "TypeString" 88 | }, 89 | { 90 | "name": "Computed", 91 | "type": "bool", 92 | "value": "true" 93 | } 94 | ] 95 | } 96 | } 97 | ], 98 | "sending_records": [ 99 | { 100 | "name": "Type", 101 | "type": "schema.ValueType", 102 | "value": "TypeList" 103 | }, 104 | { 105 | "name": "Computed", 106 | "type": "bool", 107 | "value": "true" 108 | }, 109 | { 110 | "name": "Elem", 111 | "type": "ResourceSchemaInfo", 112 | "value": { 113 | "name": [ 114 | { 115 | "name": "Type", 116 | "type": "schema.ValueType", 117 | "value": "TypeString" 118 | }, 119 | { 120 | "name": "Computed", 121 | "type": "bool", 122 | "value": "true" 123 | } 124 | ], 125 | "record_type": [ 126 | { 127 | "name": "Type", 128 | "type": "schema.ValueType", 129 | "value": "TypeString" 130 | }, 131 | { 132 | "name": "Computed", 133 | "type": "bool", 134 | "value": "true" 135 | } 136 | ], 137 | "valid": [ 138 | { 139 | "name": "Type", 140 | "type": "schema.ValueType", 141 | "value": "TypeString" 142 | }, 143 | { 144 | "name": "Computed", 145 | "type": "bool", 146 | "value": "true" 147 | } 148 | ], 149 | "value": [ 150 | { 151 | "name": "Type", 152 | "type": "schema.ValueType", 153 | "value": "TypeString" 154 | }, 155 | { 156 | "name": "Computed", 157 | "type": "bool", 158 | "value": "true" 159 | } 160 | ] 161 | } 162 | } 163 | ], 164 | "smtp_login": [ 165 | { 166 | "name": "Type", 167 | "type": "schema.ValueType", 168 | "value": "TypeString" 169 | }, 170 | { 171 | "name": "Optional", 172 | "type": "bool", 173 | "value": "true" 174 | }, 175 | { 176 | "name": "Computed", 177 | "type": "bool", 178 | "value": "true" 179 | } 180 | ], 181 | "smtp_password": [ 182 | { 183 | "name": "Type", 184 | "type": "schema.ValueType", 185 | "value": "TypeString" 186 | }, 187 | { 188 | "name": "Required", 189 | "type": "bool", 190 | "value": "true" 191 | } 192 | ], 193 | "spam_action": [ 194 | { 195 | "name": "Type", 196 | "type": "schema.ValueType", 197 | "value": "TypeString" 198 | }, 199 | { 200 | "name": "Optional", 201 | "type": "bool", 202 | "value": "true" 203 | }, 204 | { 205 | "name": "Computed", 206 | "type": "bool", 207 | "value": "true" 208 | } 209 | ], 210 | "wildcard": [ 211 | { 212 | "name": "Type", 213 | "type": "schema.ValueType", 214 | "value": "TypeBool" 215 | }, 216 | { 217 | "name": "Optional", 218 | "type": "bool", 219 | "value": "true" 220 | }, 221 | { 222 | "name": "Computed", 223 | "type": "bool", 224 | "value": "true" 225 | } 226 | ] 227 | } 228 | }, 229 | "data-sources": {} 230 | } 231 | -------------------------------------------------------------------------------- /resources/providers/mysql.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mysql", 3 | "type": "provider", 4 | "schema": { 5 | "endpoint": [ 6 | { 7 | "name": "Type", 8 | "type": "schema.ValueType", 9 | "value": "TypeString" 10 | }, 11 | { 12 | "name": "Required", 13 | "type": "bool", 14 | "value": "true" 15 | } 16 | ], 17 | "password": [ 18 | { 19 | "name": "Type", 20 | "type": "schema.ValueType", 21 | "value": "TypeString" 22 | }, 23 | { 24 | "name": "Optional", 25 | "type": "bool", 26 | "value": "true" 27 | } 28 | ], 29 | "username": [ 30 | { 31 | "name": "Type", 32 | "type": "schema.ValueType", 33 | "value": "TypeString" 34 | }, 35 | { 36 | "name": "Required", 37 | "type": "bool", 38 | "value": "true" 39 | } 40 | ] 41 | }, 42 | "resources": { 43 | "mysql_database": { 44 | "default_character_set": [ 45 | { 46 | "name": "Type", 47 | "type": "schema.ValueType", 48 | "value": "TypeString" 49 | }, 50 | { 51 | "name": "Optional", 52 | "type": "bool", 53 | "value": "true" 54 | }, 55 | { 56 | "name": "Default", 57 | "type": "interface {}", 58 | "value": "utf8" 59 | } 60 | ], 61 | "default_collation": [ 62 | { 63 | "name": "Type", 64 | "type": "schema.ValueType", 65 | "value": "TypeString" 66 | }, 67 | { 68 | "name": "Optional", 69 | "type": "bool", 70 | "value": "true" 71 | }, 72 | { 73 | "name": "Default", 74 | "type": "interface {}", 75 | "value": "utf8_general_ci" 76 | } 77 | ], 78 | "name": [ 79 | { 80 | "name": "Type", 81 | "type": "schema.ValueType", 82 | "value": "TypeString" 83 | }, 84 | { 85 | "name": "Required", 86 | "type": "bool", 87 | "value": "true" 88 | } 89 | ] 90 | }, 91 | "mysql_grant": { 92 | "database": [ 93 | { 94 | "name": "Type", 95 | "type": "schema.ValueType", 96 | "value": "TypeString" 97 | }, 98 | { 99 | "name": "Required", 100 | "type": "bool", 101 | "value": "true" 102 | } 103 | ], 104 | "grant": [ 105 | { 106 | "name": "Type", 107 | "type": "schema.ValueType", 108 | "value": "TypeBool" 109 | }, 110 | { 111 | "name": "Optional", 112 | "type": "bool", 113 | "value": "true" 114 | }, 115 | { 116 | "name": "Default", 117 | "type": "interface {}", 118 | "value": "false" 119 | } 120 | ], 121 | "host": [ 122 | { 123 | "name": "Type", 124 | "type": "schema.ValueType", 125 | "value": "TypeString" 126 | }, 127 | { 128 | "name": "Optional", 129 | "type": "bool", 130 | "value": "true" 131 | }, 132 | { 133 | "name": "Default", 134 | "type": "interface {}", 135 | "value": "localhost" 136 | } 137 | ], 138 | "privileges": [ 139 | { 140 | "name": "Type", 141 | "type": "schema.ValueType", 142 | "value": "TypeSet" 143 | }, 144 | { 145 | "name": "Required", 146 | "type": "bool", 147 | "value": "true" 148 | }, 149 | { 150 | "name": "Elem", 151 | "type": "ResourceSchemaElements", 152 | "value": [ 153 | { 154 | "name": "Type", 155 | "type": "schema.ValueType", 156 | "value": "TypeString" 157 | } 158 | ] 159 | } 160 | ], 161 | "user": [ 162 | { 163 | "name": "Type", 164 | "type": "schema.ValueType", 165 | "value": "TypeString" 166 | }, 167 | { 168 | "name": "Required", 169 | "type": "bool", 170 | "value": "true" 171 | } 172 | ] 173 | }, 174 | "mysql_user": { 175 | "host": [ 176 | { 177 | "name": "Type", 178 | "type": "schema.ValueType", 179 | "value": "TypeString" 180 | }, 181 | { 182 | "name": "Optional", 183 | "type": "bool", 184 | "value": "true" 185 | }, 186 | { 187 | "name": "Default", 188 | "type": "interface {}", 189 | "value": "localhost" 190 | } 191 | ], 192 | "password": [ 193 | { 194 | "name": "Type", 195 | "type": "schema.ValueType", 196 | "value": "TypeString" 197 | }, 198 | { 199 | "name": "Optional", 200 | "type": "bool", 201 | "value": "true" 202 | } 203 | ], 204 | "user": [ 205 | { 206 | "name": "Type", 207 | "type": "schema.ValueType", 208 | "value": "TypeString" 209 | }, 210 | { 211 | "name": "Required", 212 | "type": "bool", 213 | "value": "true" 214 | } 215 | ] 216 | } 217 | }, 218 | "data-sources": {} 219 | } 220 | -------------------------------------------------------------------------------- /resources/providers/nomad.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nomad", 3 | "type": "provider", 4 | "schema": { 5 | "address": [ 6 | { 7 | "name": "Type", 8 | "type": "schema.ValueType", 9 | "value": "TypeString" 10 | }, 11 | { 12 | "name": "Required", 13 | "type": "bool", 14 | "value": "true" 15 | }, 16 | { 17 | "name": "Description", 18 | "type": "string", 19 | "value": "URL of the root of the target Nomad agent." 20 | } 21 | ], 22 | "ca_file": [ 23 | { 24 | "name": "Type", 25 | "type": "schema.ValueType", 26 | "value": "TypeString" 27 | }, 28 | { 29 | "name": "Optional", 30 | "type": "bool", 31 | "value": "true" 32 | }, 33 | { 34 | "name": "Description", 35 | "type": "string", 36 | "value": "A path to a PEM-encoded certificate authority used to verify the remote agent's certificate." 37 | }, 38 | { 39 | "name": "DefaultValue_Computed", 40 | "type": "string", 41 | "value": "" 42 | } 43 | ], 44 | "cert_file": [ 45 | { 46 | "name": "Type", 47 | "type": "schema.ValueType", 48 | "value": "TypeString" 49 | }, 50 | { 51 | "name": "Optional", 52 | "type": "bool", 53 | "value": "true" 54 | }, 55 | { 56 | "name": "Description", 57 | "type": "string", 58 | "value": "A path to a PEM-encoded certificate provided to the remote agent; requires use of key_file." 59 | }, 60 | { 61 | "name": "DefaultValue_Computed", 62 | "type": "string", 63 | "value": "" 64 | } 65 | ], 66 | "key_file": [ 67 | { 68 | "name": "Type", 69 | "type": "schema.ValueType", 70 | "value": "TypeString" 71 | }, 72 | { 73 | "name": "Optional", 74 | "type": "bool", 75 | "value": "true" 76 | }, 77 | { 78 | "name": "Description", 79 | "type": "string", 80 | "value": "A path to a PEM-encoded private key, required if cert_file is specified." 81 | }, 82 | { 83 | "name": "DefaultValue_Computed", 84 | "type": "string", 85 | "value": "" 86 | } 87 | ], 88 | "region": [ 89 | { 90 | "name": "Type", 91 | "type": "schema.ValueType", 92 | "value": "TypeString" 93 | }, 94 | { 95 | "name": "Optional", 96 | "type": "bool", 97 | "value": "true" 98 | }, 99 | { 100 | "name": "Description", 101 | "type": "string", 102 | "value": "Region of the target Nomad agent." 103 | }, 104 | { 105 | "name": "DefaultValue_Computed", 106 | "type": "string", 107 | "value": "" 108 | } 109 | ] 110 | }, 111 | "resources": { 112 | "nomad_job": { 113 | "deregister_on_destroy": [ 114 | { 115 | "name": "Type", 116 | "type": "schema.ValueType", 117 | "value": "TypeBool" 118 | }, 119 | { 120 | "name": "Optional", 121 | "type": "bool", 122 | "value": "true" 123 | }, 124 | { 125 | "name": "Default", 126 | "type": "interface {}", 127 | "value": "true" 128 | }, 129 | { 130 | "name": "Description", 131 | "type": "string", 132 | "value": "If true, the job will be deregistered on destroy." 133 | } 134 | ], 135 | "deregister_on_id_change": [ 136 | { 137 | "name": "Type", 138 | "type": "schema.ValueType", 139 | "value": "TypeBool" 140 | }, 141 | { 142 | "name": "Optional", 143 | "type": "bool", 144 | "value": "true" 145 | }, 146 | { 147 | "name": "Default", 148 | "type": "interface {}", 149 | "value": "true" 150 | }, 151 | { 152 | "name": "Description", 153 | "type": "string", 154 | "value": "If true, the job will be deregistered when the job ID changes." 155 | } 156 | ], 157 | "jobspec": [ 158 | { 159 | "name": "Type", 160 | "type": "schema.ValueType", 161 | "value": "TypeString" 162 | }, 163 | { 164 | "name": "Required", 165 | "type": "bool", 166 | "value": "true" 167 | }, 168 | { 169 | "name": "Description", 170 | "type": "string", 171 | "value": "Job specification. If you want to point to a file use the file() function." 172 | } 173 | ] 174 | } 175 | }, 176 | "data-sources": {} 177 | } 178 | -------------------------------------------------------------------------------- /resources/providers/null.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "null", 3 | "type": "provider", 4 | "schema": {}, 5 | "resources": { 6 | "null_resource": { 7 | "triggers": [ 8 | { 9 | "name": "Type", 10 | "type": "schema.ValueType", 11 | "value": "TypeMap" 12 | }, 13 | { 14 | "name": "Optional", 15 | "type": "bool", 16 | "value": "true" 17 | } 18 | ] 19 | } 20 | }, 21 | "data-sources": { 22 | "null_data_source": { 23 | "has_computed_default": [ 24 | { 25 | "name": "Type", 26 | "type": "schema.ValueType", 27 | "value": "TypeString" 28 | }, 29 | { 30 | "name": "Optional", 31 | "type": "bool", 32 | "value": "true" 33 | }, 34 | { 35 | "name": "Computed", 36 | "type": "bool", 37 | "value": "true" 38 | } 39 | ], 40 | "inputs": [ 41 | { 42 | "name": "Type", 43 | "type": "schema.ValueType", 44 | "value": "TypeMap" 45 | }, 46 | { 47 | "name": "Optional", 48 | "type": "bool", 49 | "value": "true" 50 | } 51 | ], 52 | "outputs": [ 53 | { 54 | "name": "Type", 55 | "type": "schema.ValueType", 56 | "value": "TypeMap" 57 | }, 58 | { 59 | "name": "Computed", 60 | "type": "bool", 61 | "value": "true" 62 | } 63 | ], 64 | "random": [ 65 | { 66 | "name": "Type", 67 | "type": "schema.ValueType", 68 | "value": "TypeString" 69 | }, 70 | { 71 | "name": "Computed", 72 | "type": "bool", 73 | "value": "true" 74 | } 75 | ] 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /resources/providers/opsgenie.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "opsgenie", 3 | "type": "provider", 4 | "schema": { 5 | "api_key": [ 6 | { 7 | "name": "Type", 8 | "type": "schema.ValueType", 9 | "value": "TypeString" 10 | }, 11 | { 12 | "name": "Required", 13 | "type": "bool", 14 | "value": "true" 15 | } 16 | ] 17 | }, 18 | "resources": { 19 | "opsgenie_team": { 20 | "description": [ 21 | { 22 | "name": "Type", 23 | "type": "schema.ValueType", 24 | "value": "TypeString" 25 | }, 26 | { 27 | "name": "Optional", 28 | "type": "bool", 29 | "value": "true" 30 | } 31 | ], 32 | "member": [ 33 | { 34 | "name": "Type", 35 | "type": "schema.ValueType", 36 | "value": "TypeList" 37 | }, 38 | { 39 | "name": "Optional", 40 | "type": "bool", 41 | "value": "true" 42 | }, 43 | { 44 | "name": "Elem", 45 | "type": "ResourceSchemaInfo", 46 | "value": { 47 | "role": [ 48 | { 49 | "name": "Type", 50 | "type": "schema.ValueType", 51 | "value": "TypeString" 52 | }, 53 | { 54 | "name": "Optional", 55 | "type": "bool", 56 | "value": "true" 57 | }, 58 | { 59 | "name": "Default", 60 | "type": "interface {}", 61 | "value": "user" 62 | } 63 | ], 64 | "username": [ 65 | { 66 | "name": "Type", 67 | "type": "schema.ValueType", 68 | "value": "TypeString" 69 | }, 70 | { 71 | "name": "Required", 72 | "type": "bool", 73 | "value": "true" 74 | } 75 | ] 76 | } 77 | } 78 | ], 79 | "name": [ 80 | { 81 | "name": "Type", 82 | "type": "schema.ValueType", 83 | "value": "TypeString" 84 | }, 85 | { 86 | "name": "Required", 87 | "type": "bool", 88 | "value": "true" 89 | } 90 | ] 91 | }, 92 | "opsgenie_user": { 93 | "full_name": [ 94 | { 95 | "name": "Type", 96 | "type": "schema.ValueType", 97 | "value": "TypeString" 98 | }, 99 | { 100 | "name": "Required", 101 | "type": "bool", 102 | "value": "true" 103 | } 104 | ], 105 | "locale": [ 106 | { 107 | "name": "Type", 108 | "type": "schema.ValueType", 109 | "value": "TypeString" 110 | }, 111 | { 112 | "name": "Optional", 113 | "type": "bool", 114 | "value": "true" 115 | }, 116 | { 117 | "name": "Default", 118 | "type": "interface {}", 119 | "value": "en_US" 120 | } 121 | ], 122 | "role": [ 123 | { 124 | "name": "Type", 125 | "type": "schema.ValueType", 126 | "value": "TypeString" 127 | }, 128 | { 129 | "name": "Required", 130 | "type": "bool", 131 | "value": "true" 132 | } 133 | ], 134 | "timezone": [ 135 | { 136 | "name": "Type", 137 | "type": "schema.ValueType", 138 | "value": "TypeString" 139 | }, 140 | { 141 | "name": "Optional", 142 | "type": "bool", 143 | "value": "true" 144 | }, 145 | { 146 | "name": "Default", 147 | "type": "interface {}", 148 | "value": "America/New_York" 149 | } 150 | ], 151 | "username": [ 152 | { 153 | "name": "Type", 154 | "type": "schema.ValueType", 155 | "value": "TypeString" 156 | }, 157 | { 158 | "name": "Required", 159 | "type": "bool", 160 | "value": "true" 161 | } 162 | ] 163 | } 164 | }, 165 | "data-sources": { 166 | "opsgenie_user": { 167 | "full_name": [ 168 | { 169 | "name": "Type", 170 | "type": "schema.ValueType", 171 | "value": "TypeString" 172 | }, 173 | { 174 | "name": "Computed", 175 | "type": "bool", 176 | "value": "true" 177 | } 178 | ], 179 | "role": [ 180 | { 181 | "name": "Type", 182 | "type": "schema.ValueType", 183 | "value": "TypeString" 184 | }, 185 | { 186 | "name": "Computed", 187 | "type": "bool", 188 | "value": "true" 189 | } 190 | ], 191 | "username": [ 192 | { 193 | "name": "Type", 194 | "type": "schema.ValueType", 195 | "value": "TypeString" 196 | }, 197 | { 198 | "name": "Required", 199 | "type": "bool", 200 | "value": "true" 201 | } 202 | ] 203 | } 204 | } 205 | } 206 | -------------------------------------------------------------------------------- /resources/providers/powerdns.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "powerdns", 3 | "type": "provider", 4 | "schema": { 5 | "api_key": [ 6 | { 7 | "name": "Type", 8 | "type": "schema.ValueType", 9 | "value": "TypeString" 10 | }, 11 | { 12 | "name": "Required", 13 | "type": "bool", 14 | "value": "true" 15 | }, 16 | { 17 | "name": "Description", 18 | "type": "string", 19 | "value": "REST API authentication key" 20 | } 21 | ], 22 | "server_url": [ 23 | { 24 | "name": "Type", 25 | "type": "schema.ValueType", 26 | "value": "TypeString" 27 | }, 28 | { 29 | "name": "Required", 30 | "type": "bool", 31 | "value": "true" 32 | }, 33 | { 34 | "name": "Description", 35 | "type": "string", 36 | "value": "Location of PowerDNS server" 37 | } 38 | ] 39 | }, 40 | "resources": { 41 | "powerdns_record": { 42 | "name": [ 43 | { 44 | "name": "Type", 45 | "type": "schema.ValueType", 46 | "value": "TypeString" 47 | }, 48 | { 49 | "name": "Required", 50 | "type": "bool", 51 | "value": "true" 52 | } 53 | ], 54 | "records": [ 55 | { 56 | "name": "Type", 57 | "type": "schema.ValueType", 58 | "value": "TypeSet" 59 | }, 60 | { 61 | "name": "Required", 62 | "type": "bool", 63 | "value": "true" 64 | }, 65 | { 66 | "name": "Elem", 67 | "type": "ResourceSchemaElements", 68 | "value": [ 69 | { 70 | "name": "Type", 71 | "type": "schema.ValueType", 72 | "value": "TypeString" 73 | } 74 | ] 75 | } 76 | ], 77 | "ttl": [ 78 | { 79 | "name": "Type", 80 | "type": "schema.ValueType", 81 | "value": "TypeInt" 82 | }, 83 | { 84 | "name": "Required", 85 | "type": "bool", 86 | "value": "true" 87 | } 88 | ], 89 | "type": [ 90 | { 91 | "name": "Type", 92 | "type": "schema.ValueType", 93 | "value": "TypeString" 94 | }, 95 | { 96 | "name": "Required", 97 | "type": "bool", 98 | "value": "true" 99 | } 100 | ], 101 | "zone": [ 102 | { 103 | "name": "Type", 104 | "type": "schema.ValueType", 105 | "value": "TypeString" 106 | }, 107 | { 108 | "name": "Required", 109 | "type": "bool", 110 | "value": "true" 111 | } 112 | ] 113 | } 114 | }, 115 | "data-sources": {} 116 | } 117 | -------------------------------------------------------------------------------- /resources/providers/statuscake.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "statuscake", 3 | "type": "provider", 4 | "schema": { 5 | "apikey": [ 6 | { 7 | "name": "Type", 8 | "type": "schema.ValueType", 9 | "value": "TypeString" 10 | }, 11 | { 12 | "name": "Required", 13 | "type": "bool", 14 | "value": "true" 15 | }, 16 | { 17 | "name": "Description", 18 | "type": "string", 19 | "value": "API Key for StatusCake" 20 | } 21 | ], 22 | "username": [ 23 | { 24 | "name": "Type", 25 | "type": "schema.ValueType", 26 | "value": "TypeString" 27 | }, 28 | { 29 | "name": "Required", 30 | "type": "bool", 31 | "value": "true" 32 | }, 33 | { 34 | "name": "Description", 35 | "type": "string", 36 | "value": "Username for StatusCake Account." 37 | } 38 | ] 39 | }, 40 | "resources": { 41 | "statuscake_test": { 42 | "check_rate": [ 43 | { 44 | "name": "Type", 45 | "type": "schema.ValueType", 46 | "value": "TypeInt" 47 | }, 48 | { 49 | "name": "Optional", 50 | "type": "bool", 51 | "value": "true" 52 | }, 53 | { 54 | "name": "Default", 55 | "type": "interface {}", 56 | "value": "300" 57 | } 58 | ], 59 | "confirmations": [ 60 | { 61 | "name": "Type", 62 | "type": "schema.ValueType", 63 | "value": "TypeInt" 64 | }, 65 | { 66 | "name": "Optional", 67 | "type": "bool", 68 | "value": "true" 69 | } 70 | ], 71 | "contact_id": [ 72 | { 73 | "name": "Type", 74 | "type": "schema.ValueType", 75 | "value": "TypeInt" 76 | }, 77 | { 78 | "name": "Optional", 79 | "type": "bool", 80 | "value": "true" 81 | } 82 | ], 83 | "paused": [ 84 | { 85 | "name": "Type", 86 | "type": "schema.ValueType", 87 | "value": "TypeBool" 88 | }, 89 | { 90 | "name": "Optional", 91 | "type": "bool", 92 | "value": "true" 93 | }, 94 | { 95 | "name": "Default", 96 | "type": "interface {}", 97 | "value": "false" 98 | } 99 | ], 100 | "port": [ 101 | { 102 | "name": "Type", 103 | "type": "schema.ValueType", 104 | "value": "TypeInt" 105 | }, 106 | { 107 | "name": "Optional", 108 | "type": "bool", 109 | "value": "true" 110 | } 111 | ], 112 | "test_id": [ 113 | { 114 | "name": "Type", 115 | "type": "schema.ValueType", 116 | "value": "TypeString" 117 | }, 118 | { 119 | "name": "Computed", 120 | "type": "bool", 121 | "value": "true" 122 | } 123 | ], 124 | "test_type": [ 125 | { 126 | "name": "Type", 127 | "type": "schema.ValueType", 128 | "value": "TypeString" 129 | }, 130 | { 131 | "name": "Required", 132 | "type": "bool", 133 | "value": "true" 134 | } 135 | ], 136 | "timeout": [ 137 | { 138 | "name": "Type", 139 | "type": "schema.ValueType", 140 | "value": "TypeInt" 141 | }, 142 | { 143 | "name": "Optional", 144 | "type": "bool", 145 | "value": "true" 146 | }, 147 | { 148 | "name": "Default", 149 | "type": "interface {}", 150 | "value": "40" 151 | } 152 | ], 153 | "trigger_rate": [ 154 | { 155 | "name": "Type", 156 | "type": "schema.ValueType", 157 | "value": "TypeInt" 158 | }, 159 | { 160 | "name": "Optional", 161 | "type": "bool", 162 | "value": "true" 163 | }, 164 | { 165 | "name": "Default", 166 | "type": "interface {}", 167 | "value": "5" 168 | } 169 | ], 170 | "website_name": [ 171 | { 172 | "name": "Type", 173 | "type": "schema.ValueType", 174 | "value": "TypeString" 175 | }, 176 | { 177 | "name": "Required", 178 | "type": "bool", 179 | "value": "true" 180 | } 181 | ], 182 | "website_url": [ 183 | { 184 | "name": "Type", 185 | "type": "schema.ValueType", 186 | "value": "TypeString" 187 | }, 188 | { 189 | "name": "Required", 190 | "type": "bool", 191 | "value": "true" 192 | } 193 | ] 194 | } 195 | }, 196 | "data-sources": {} 197 | } 198 | -------------------------------------------------------------------------------- /resources/providers/terraform.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "terraform", 3 | "type": "provider", 4 | "schema": {}, 5 | "resources": { 6 | "terraform_remote_state": { 7 | "__has_dynamic_attributes": [ 8 | { 9 | "name": "Type", 10 | "type": "schema.ValueType", 11 | "value": "TypeString" 12 | }, 13 | { 14 | "name": "Optional", 15 | "type": "bool", 16 | "value": "true" 17 | } 18 | ], 19 | "backend": [ 20 | { 21 | "name": "Type", 22 | "type": "schema.ValueType", 23 | "value": "TypeString" 24 | }, 25 | { 26 | "name": "Required", 27 | "type": "bool", 28 | "value": "true" 29 | } 30 | ], 31 | "config": [ 32 | { 33 | "name": "Type", 34 | "type": "schema.ValueType", 35 | "value": "TypeMap" 36 | }, 37 | { 38 | "name": "Optional", 39 | "type": "bool", 40 | "value": "true" 41 | } 42 | ], 43 | "environment": [ 44 | { 45 | "name": "Type", 46 | "type": "schema.ValueType", 47 | "value": "TypeString" 48 | }, 49 | { 50 | "name": "Optional", 51 | "type": "bool", 52 | "value": "true" 53 | }, 54 | { 55 | "name": "Default", 56 | "type": "interface {}", 57 | "value": "default" 58 | } 59 | ] 60 | } 61 | }, 62 | "data-sources": { 63 | "terraform_remote_state": { 64 | "__has_dynamic_attributes": [ 65 | { 66 | "name": "Type", 67 | "type": "schema.ValueType", 68 | "value": "TypeString" 69 | }, 70 | { 71 | "name": "Optional", 72 | "type": "bool", 73 | "value": "true" 74 | } 75 | ], 76 | "backend": [ 77 | { 78 | "name": "Type", 79 | "type": "schema.ValueType", 80 | "value": "TypeString" 81 | }, 82 | { 83 | "name": "Required", 84 | "type": "bool", 85 | "value": "true" 86 | } 87 | ], 88 | "config": [ 89 | { 90 | "name": "Type", 91 | "type": "schema.ValueType", 92 | "value": "TypeMap" 93 | }, 94 | { 95 | "name": "Optional", 96 | "type": "bool", 97 | "value": "true" 98 | } 99 | ], 100 | "environment": [ 101 | { 102 | "name": "Type", 103 | "type": "schema.ValueType", 104 | "value": "TypeString" 105 | }, 106 | { 107 | "name": "Optional", 108 | "type": "bool", 109 | "value": "true" 110 | }, 111 | { 112 | "name": "Default", 113 | "type": "interface {}", 114 | "value": "default" 115 | } 116 | ] 117 | } 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /resources/providers_doc/archive.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{"file":{"arguments":[{"word":"output_path","kind":"String(R)"},{"word":"source","kind":"Set(O)(B)","subblock":[{"word":"content","kind":"String(R)"},{"word":"filename","kind":"String(R)"}]},{"word":"source_content","kind":"String(O)"},{"word":"source_content_filename","kind":"String(O)"},{"word":"source_dir","kind":"String(O)"},{"word":"source_file","kind":"String(O)"},{"word":"type","kind":"String(R)"}],"attributes":[{"word":"output_base64sha256","kind":"String"},{"word":"output_md5","kind":"String"},{"word":"output_path","kind":"String"},{"word":"output_sha","kind":"String"},{"word":"output_size","kind":"Int"},{"word":"source","kind":"Set(B)","subblock":[{"word":"content","kind":"String"},{"word":"filename","kind":"String"},{"word":"id","kind":"String"}]},{"word":"source_content","kind":"String"},{"word":"source_content_filename","kind":"String"},{"word":"source_dir","kind":"String"},{"word":"source_file","kind":"String"},{"word":"type","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{"file":{"provider":"archive","arguments":[{"word":"type","info":"type - (required) The type of archive to generate.\nNOTE: zip is supported.","kind":"String(R)"},{"word":"output_path","info":"output_path - (required) The output of the archive file.","kind":"String(R)"},{"word":"source_content","info":"source_content - (optional) Add only this content to the archive with source_content_filename as the filename.","kind":"String(O)"},{"word":"source_content_filename","info":"source_content_filename - (optional) Set this as the filename when using source_content.","kind":"String(O)"},{"word":"source_file","info":"source_file - (optional) Package this file into the archive.","kind":"String(O)"},{"word":"source","kind":"Set(O)(B)","subblock":[{"word":"content","kind":"String(R)"},{"word":"filename","kind":"String(R)"}]},{"word":"source_dir","kind":"String(O)"}],"attributes":[{"word":"output_size","info":"output_size - The size of the output archive file.\n","kind":"Int"},{"word":"output_sha","info":"output_sha - The SHA1 checksum of output archive file.\n","kind":"String"},{"word":"output_base64sha256","info":"output_base64sha256 - The base64-encoded SHA256 checksum of output archive file.\n","kind":"String"},{"word":"output_md5","kind":"String"},{"word":"output_path","kind":"String"},{"word":"source","kind":"Set(B)","subblock":[{"word":"content","kind":"String"},{"word":"filename","kind":"String"},{"word":"id","kind":"String"}]},{"word":"source_content","kind":"String"},{"word":"source_content_filename","kind":"String"},{"word":"source_dir","kind":"String"},{"word":"source_file","kind":"String"},{"word":"type","kind":"String"},{"word":"id","kind":"String"}]}},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/arukas.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"token","info":"token - (Required) This is the Arukas API token. It must be provided, but\nit can also be sourced from the ARUKAS_JSON_API_TOKEN environment variable.\n"},{"word":"secret","info":"secret - (Required) This is the Arukas API secret. It must be provided, but\nit can also be sourced from the ARUKAS_JSON_API_SECRET environment variable.\n"},{"word":"api_url","info":"api_url - (Optional) Override Arukas API Root URL. Also taken from the ARUKAS_JSON_API_URL\nenvironment variable if provided.\n"},{"word":"trace","info":"trace - (Optional) The flag of Arukas API trace log. Also taken from the ARUKAS_DEBUG\nenvironment variable if provided.\n"},{"word":"timeout","info":"timeout - (Optional) Override Arukas API timeout seconds. Also taken from the ARUKAS_TIMEOUT\nenvironment variable if provided.\n"}],"resources":{"container":{"provider":"arukas","arguments":[{"word":"name","info":"name - (Required, string) The name of the container.\n","kind":"String(R)"},{"word":"image","info":"image - (Required, string) The ID of the image to back this container.It must be a public image on DockerHub.\n","kind":"String(R)"},{"word":"instances","info":"instances - (Optional, int) The count of the instance. It must be between 1 and 10.\n","kind":"Int(O)"},{"word":"memory","info":"memory - (Optional, int) The size of the instance RAM.It must be 256 or 512.\n","kind":"Int(O)"},{"word":"endpoint","info":"endpoint - (Optional,string) The subdomain part of the endpoint assigned by Arukas. If it is not set, Arukas will do automatic assignment.\n","kind":"String(O)"},{"word":"ports","info":"ports - (Required , block) See Ports below for details.\n","kind":"List(R)(B)","subblock":[{"word":"number","kind":"Int(O)"},{"word":"protocol","kind":"String(O)"}]},{"word":"environments","info":"environments - (Required , block) See Environments below for details.\n","kind":"List(O)(B)","subblock":[{"word":"key","kind":"String(R)"},{"word":"value","kind":"String(R)"}]},{"word":"cmd","kind":"String(O)"}],"attributes":[{"word":"id","info":"id - The ID of the container.\n","kind":"String"},{"word":"app_id","info":"app_id - The ID of the Arukas application to which the container belongs.\n","kind":"String"},{"word":"name","info":"name - The name of the container.\n","kind":"String"},{"word":"image","info":"image - The ID of the image to back this container.\n","kind":"String"},{"word":"instances","info":"instances - The count of the instance.\n","kind":"Int"},{"word":"memory","info":"memory - The size of the instance RAM.\n","kind":"Int"},{"word":"endpoint","info":"endpoint - The subdomain part of the endpoint assigned by Arukas.\n","kind":"String"},{"word":"ports","info":"ports - See Ports below for details.\n","kind":"List(B)","subblock":[{"word":"number","kind":"Int"},{"word":"protocol","kind":"String"},{"word":"id","kind":"String"}]},{"word":"environments","info":"environments - See Environments below for details.\n","kind":"List(B)","subblock":[{"word":"key","kind":"String"},{"word":"value","kind":"String"},{"word":"id","kind":"String"}]},{"word":"cmd","info":"cmd - The command of the container.\n","kind":"String"},{"word":"port_mappings","info":"port_mappings - See PortMappings below for details.\n","kind":"List(B)","subblock":[{"word":"container_port","kind":"Int"},{"word":"host","kind":"String"},{"word":"ipaddress","kind":"String"},{"word":"service_port","kind":"Int"},{"word":"id","kind":"String"}]},{"word":"endpoint_full_url","info":"endpoint_full_url - The URL of endpoint.\n","kind":"String"},{"word":"endpoint_full_hostname","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/atlas.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"address","info":"address - (Optional) Terraform Enterprise server endpoint. Defaults to\npublic Terraform Enterprise. This is only required when using an on-premise\ndeployment of Terraform Enterprise. This can also be specified with the\nATLAS_ADDRESS shell environment variable.\n"},{"word":"token","info":"token - (Required) API token. This can also be specified with the\nATLAS_TOKEN shell environment variable.\n"}],"resources":{"artifact":{"provider":"terraform-enterprise","arguments":[{"word":"build","kind":"String(O)"},{"word":"metadata","kind":"Map(O)"},{"word":"metadata_keys","kind":"Set(O)"},{"word":"name","kind":"String(R)"},{"word":"type","kind":"String(R)"},{"word":"version","kind":"String(O)"}],"attributes":[{"word":"id","info":"id - The ID of the artifact. This could be an AMI ID, GCE Image ID, etc.\n","kind":"String"},{"word":"file_url","info":"file_url - For artifacts that are binaries, this is a download path.\n","kind":"String"},{"word":"metadata_full","info":"metadata_full - Contains the full metadata of the artifact. The keys are sanitized\nto replace any characters that are invalid in a resource name with a hyphen.\nFor example, the \"region.us-east-1\" key will become \"region-us-east-1\".\n","kind":"Map"},{"word":"version_real","info":"version_real - The matching version of the artifact\n","kind":"String"},{"word":"build","kind":"String"},{"word":"metadata","kind":"Map"},{"word":"metadata_keys","kind":"Set"},{"word":"name","kind":"String"},{"word":"slug","kind":"String"},{"word":"type","kind":"String"},{"word":"version","kind":"String"}]}},"datas":{"artifact":{"provider":"terraform-enterprise","arguments":[{"word":"build","kind":"String(O)"},{"word":"metadata","kind":"Map(O)"},{"word":"metadata_keys","kind":"Set(O)"},{"word":"name","kind":"String(R)"},{"word":"type","kind":"String(R)"},{"word":"version","kind":"String(O)"}],"attributes":[{"word":"file_url","info":"file_url - For artifacts that are binaries, this is a download path.\n","kind":"String"},{"word":"metadata_full","info":"metadata_full - Contains the full metadata of the artifact. The keys are sanitized\nto replace any characters that are invalid in a resource name with a hyphen.\nFor example, the \"region.us-east-1\" key will become \"region-us-east-1\".\n","kind":"Map"},{"word":"version_real","info":"version_real - The matching version of the artifact\n","kind":"String"},{"word":"build","kind":"String"},{"word":"metadata","kind":"Map"},{"word":"metadata_keys","kind":"Set"},{"word":"name","kind":"String"},{"word":"slug","kind":"String"},{"word":"type","kind":"String"},{"word":"version","kind":"String"},{"word":"id","kind":"String"}]}},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/bitbucket.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"username","info":"username - (Required) Your username used to connect to bitbucket. You can\nalso set this via the environment variable. BITBUCKET_USERNAME\n"},{"word":"password","info":"password - (Required) Your password used to connect to bitbucket. You can\nalso set this via the environment variable. BITBUCKET_PASSWORD\n"}],"resources":{"default_reviewers":{"provider":"bitbucket","arguments":[{"word":"owner","info":"owner - (Required) The owner of this repository. Can be you or any team you\nhave write access to.\n","kind":"String(R)"},{"word":"repository","info":"repository - (Required) The name of the repository.\n","kind":"String(R)"},{"word":"reviewers","kind":"Set(R)"}],"attributes":[{"word":"owner","kind":"String"},{"word":"repository","kind":"String"},{"word":"reviewers","kind":"Set"},{"word":"id","kind":"String"}]},"hook":{"provider":"bitbucket","arguments":[{"word":"owner","info":"owner - (Required) The owner of this repository. Can be you or any team you\nhave write access to.\n","kind":"String(R)"},{"word":"repository","info":"repository - (Required) The name of the repository.\n","kind":"String(R)"},{"word":"url","info":"url - (Required) Where to POST to.\n","kind":"String(R)"},{"word":"description","info":"description - (Required) The name / description to show in the UI.\n","kind":"String(R)"},{"word":"active","kind":"Bool(O)"},{"word":"events","kind":"Set(R)"}],"attributes":[{"word":"active","kind":"Bool"},{"word":"description","kind":"String"},{"word":"events","kind":"Set"},{"word":"owner","kind":"String"},{"word":"repository","kind":"String"},{"word":"url","kind":"String"},{"word":"uuid","kind":"String"},{"word":"id","kind":"String"}]},"repository":{"provider":"bitbucket","arguments":[{"word":"owner","info":"owner - (Required) The owner of this repository. Can be you or any team you\nhave write access to.\n","kind":"String(R)"},{"word":"name","info":"name - (Optional) The name of the repository.\n","kind":"String(R)"},{"word":"scm","info":"scm - (Optional) What SCM you want to use. Valid options are hg or git.\nDefaults to git.\n","kind":"String(O)"},{"word":"is_private","info":"is_private - (Optional) If this should be private or not. Defaults to true.\n","kind":"Bool(O)"},{"word":"website","info":"website - (Optional) URL of website associated with this repository.\n","kind":"String(O)"},{"word":"language","info":"language - (Optional) What the language of this repository should be.\n","kind":"String(O)"},{"word":"has_issues","info":"has_issues - (Optional) If this should have issues turned on or not.\n","kind":"Bool(O)"},{"word":"has_wiki","info":"has_wiki - (Optional) If this should have wiki turned on or not.\n","kind":"Bool(O)"},{"word":"project_key","info":"project_key - (Optional) If you want to have this repo associated with a\nproject.\n","kind":"String(O)"},{"word":"fork_policy","info":"fork_policy - (Optional) What the fork policy should be. Defaults to\nallow_forks.\n","kind":"String(O)"},{"word":"description","kind":"String(O)"}],"attributes":[{"word":"clone_https","kind":"String"},{"word":"clone_ssh","kind":"String"},{"word":"description","kind":"String"},{"word":"fork_policy","kind":"String"},{"word":"has_issues","kind":"Bool"},{"word":"has_wiki","kind":"Bool"},{"word":"is_private","kind":"Bool"},{"word":"language","kind":"String"},{"word":"name","kind":"String"},{"word":"owner","kind":"String"},{"word":"project_key","kind":"String"},{"word":"scm","kind":"String"},{"word":"website","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/chef.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"server_url","info":"server_url - (Required) The HTTP(S) API URL of the Chef server to use. If\nthe target Chef server supports organizations, use the full URL of the\norganization you wish to configure. May be provided instead via the\nCHEF_SERVER_URL environment variable.\n"},{"word":"client_name","info":"client_name - (Required) The name of the client account to use when making\nrequests. This must have been already configured on the Chef server.\nMay be provided instead via the CHEF_CLIENT_NAME environment variable.\n"},{"word":"key_material","info":"key_material - (Required) The PEM-formatted private key contents belonging to\nthe configured client. This is issued by the server when a new client object\nis created. May be provided via the\nCHEF_PRIVATE_KEY_FILE environment variable.\n"},{"word":"allow_unverified_ssl","info":"allow_unverified_ssl - (Optional) Boolean indicating whether to make\nrequests to a Chef server whose SSL certicate cannot be verified. Defaults\nto false.\n"}],"resources":{"data_bag":{"provider":"chef","arguments":[{"word":"name","kind":"String(R)"}],"attributes":[{"word":"api_uri","kind":"String"},{"word":"name","kind":"String"},{"word":"id","kind":"String"}]},"data_bag_item":{"provider":"chef","arguments":[{"word":"data_bag_name","info":"data_bag_name - (Required) The name of the data bag into which this item\nwill be placed.\n","kind":"String(R)"},{"word":"content_json","kind":"String(R)"}],"attributes":[{"word":"content_json","kind":"String"},{"word":"data_bag_name","kind":"String"},{"word":"id","kind":"String"},{"word":"id","kind":"String"}]},"environment":{"provider":"chef","arguments":[{"word":"name","info":"name - (Required) The unique name to assign to the environment. This name\nwill be used when nodes are created within the environment.\n","kind":"String(R)"},{"word":"description","info":"description - (Optional) A human-friendly description of the environment.\nIf not set, a placeholder of \"Managed by Terraform\" will be set.\n","kind":"String(O)"},{"word":"default_attributes_json","info":"default_attributes_json - (Optional) String containing a JSON-serialized\nobject containing the default attributes for the environment.\n","kind":"String(O)"},{"word":"override_attributes_json","info":"override_attributes_json - (Optional) String containing a JSON-serialized\nobject containing the override attributes for the environment.\n","kind":"String(O)"},{"word":"cookbook_constraints","kind":"Map(O)"}],"attributes":[{"word":"cookbook_constraints","kind":"Map"},{"word":"default_attributes_json","kind":"String"},{"word":"description","kind":"String"},{"word":"name","kind":"String"},{"word":"override_attributes_json","kind":"String"},{"word":"id","kind":"String"}]},"node":{"provider":"chef","arguments":[{"word":"name","info":"name - (Required) The unique name to assign to the node.\n","kind":"String(R)"},{"word":"automatic_attributes_json","info":"automatic_attributes_json - (Optional) String containing a JSON-serialized\nobject containing the automatic attributes for the node.\n","kind":"String(O)"},{"word":"normal_attributes_json","info":"normal_attributes_json - (Optional) String containing a JSON-serialized\nobject containing the normal attributes for the node.\n","kind":"String(O)"},{"word":"default_attributes_json","info":"default_attributes_json - (Optional) String containing a JSON-serialized\nobject containing the default attributes for the node.\n","kind":"String(O)"},{"word":"override_attributes_json","info":"override_attributes_json - (Optional) String containing a JSON-serialized\nobject containing the override attributes for the node.\n","kind":"String(O)"},{"word":"environment_name","kind":"String(O)"},{"word":"run_list","kind":"List(O)"}],"attributes":[{"word":"automatic_attributes_json","kind":"String"},{"word":"default_attributes_json","kind":"String"},{"word":"environment_name","kind":"String"},{"word":"name","kind":"String"},{"word":"normal_attributes_json","kind":"String"},{"word":"override_attributes_json","kind":"String"},{"word":"run_list","kind":"List"},{"word":"id","kind":"String"}]},"role":{"provider":"chef","arguments":[{"word":"name","info":"name - (Required) The unique name to assign to the role.\n","kind":"String(R)"},{"word":"description","info":"description - (Optional) A human-friendly description of the role.\nIf not set, a placeholder of \"Managed by Terraform\" will be set.\n","kind":"String(O)"},{"word":"default_attributes_json","info":"default_attributes_json - (Optional) String containing a JSON-serialized\nobject containing the default attributes for the role.\n","kind":"String(O)"},{"word":"override_attributes_json","info":"override_attributes_json - (Optional) String containing a JSON-serialized\nobject containing the override attributes for the role.\n","kind":"String(O)"},{"word":"run_list","kind":"List(O)"}],"attributes":[{"word":"default_attributes_json","kind":"String"},{"word":"description","kind":"String"},{"word":"name","kind":"String"},{"word":"override_attributes_json","kind":"String"},{"word":"run_list","kind":"List"},{"word":"id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/cloudflare.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"email","info":"email - (Required) The email associated with the account. This can also be\nspecified with the CLOUDFLARE_EMAIL shell environment variable.\n"},{"word":"token","info":"token - (Required) The Cloudflare API token. This can also be specified\nwith the CLOUDFLARE_TOKEN shell environment variable.\n"}],"resources":{"record":{"provider":"cloudflare","arguments":[{"word":"domain","info":"domain - (Required) The domain to add the record to\n","kind":"String(R)"},{"word":"name","info":"name - (Required) The name of the record\n","kind":"String(R)"},{"word":"value","info":"value - (Required) The value of the record\n","kind":"String(R)"},{"word":"type","info":"type - (Required) The type of the record\n","kind":"String(R)"},{"word":"ttl","info":"ttl - (Optional) The TTL of the record\n","kind":"Int(O)"},{"word":"priority","info":"priority - (Optional) The priority of the record\n","kind":"Int(O)"},{"word":"proxied","kind":"Bool(O)"}],"attributes":[{"word":"id","info":"id - The record ID\n","kind":"String"},{"word":"name","info":"name - The name of the record\n","kind":"String"},{"word":"value","info":"value - The value of the record\n","kind":"String"},{"word":"type","info":"type - The type of the record\n","kind":"String"},{"word":"ttl","info":"ttl - The TTL of the record\n","kind":"Int"},{"word":"priority","info":"priority - The priority of the record\n","kind":"Int"},{"word":"hostname","info":"hostname - The FQDN of the record\n","kind":"String"},{"word":"domain","kind":"String"},{"word":"proxied","kind":"Bool"},{"word":"zone_id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/dme.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"akey","info":"akey - (Required) The DNSMadeEasy API key. This can also be specified with\nthe DME_AKEY shell environment variable.\n"},{"word":"skey","info":"skey - (Required) The DNSMadeEasy Secret key. This can also be specified\nwith the DME_SKEY shell environment variable.\n"},{"word":"usesandbox","info":"usesandbox - (Optional) If true, the DNSMadeEasy sandbox will be\nused. This can also be specified with the DME_USESANDBOX shell environment\nvariable.\n"}],"resources":{"record":{"provider":"dme","arguments":[{"word":"domainid","info":"domainid - (String, Required) The domain id to add the\nrecord to\n","kind":"String(R)"},{"word":"name","info":"name - (Required) The name of the record type - (Required) The type of\n","kind":"String(R)"},{"word":"description","kind":"String(O)"},{"word":"gtdLocation","kind":"String(O)"},{"word":"hardLink","kind":"Bool(O)"},{"word":"keywords","kind":"String(O)"},{"word":"mxLevel","kind":"Int(O)"},{"word":"port","kind":"Int(O)"},{"word":"priority","kind":"Int(O)"},{"word":"redirectType","kind":"String(O)"},{"word":"title","kind":"String(O)"},{"word":"ttl","kind":"Int(O)"},{"word":"type","kind":"String(R)"},{"word":"value","kind":"String(R)"},{"word":"weight","kind":"Int(O)"}],"attributes":[{"word":"name","info":"name - The name of the record\n","kind":"String"},{"word":"type","info":"type - The type of the record\n","kind":"String"},{"word":"value","info":"value - The value of the record\ntype (see below)\n","kind":"String"},{"word":"ttl","info":"ttl - The TTL of the record\n","kind":"Int"},{"word":"description","kind":"String"},{"word":"domainid","kind":"String"},{"word":"gtdLocation","kind":"String"},{"word":"hardLink","kind":"Bool"},{"word":"keywords","kind":"String"},{"word":"mxLevel","kind":"Int"},{"word":"port","kind":"Int"},{"word":"priority","kind":"Int"},{"word":"redirectType","kind":"String"},{"word":"title","kind":"String"},{"word":"weight","kind":"Int"},{"word":"id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/dns.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{"a_record_set":{"provider":"dns","arguments":[{"word":"zone","info":"zone - (Required) DNS zone the record set belongs to. It must be an FQDN, that is, include the trailing dot.\n","kind":"String(R)"},{"word":"name","info":"name - (Required) The name of the record set. The zone argument will be appended to this value to create the full record path.\n","kind":"String(R)"},{"word":"addresses","info":"addresses - (Required) The IPv4 addresses this record set will point to.\n","kind":"Set(R)"},{"word":"ttl","kind":"Int(O)"}],"attributes":[{"word":"zone","info":"zone - See Argument Reference above.\n","kind":"String"},{"word":"name","info":"name - See Argument Reference above.\n","kind":"String"},{"word":"addresses","info":"addresses - See Argument Reference above.\n","kind":"Set"},{"word":"ttl","kind":"Int"},{"word":"id","kind":"String"}]},"aaaa_record_set":{"provider":"dns","arguments":[{"word":"zone","info":"zone - (Required) DNS zone the record set belongs to. It must be an FQDN, that is, include the trailing dot.\n","kind":"String(R)"},{"word":"name","info":"name - (Required) The name of the record set. The zone argument will be appended to this value to create the full record path.\n","kind":"String(R)"},{"word":"addresses","info":"addresses - (Required) The IPv6 addresses this record set will point to.\n","kind":"Set(R)"},{"word":"ttl","kind":"Int(O)"}],"attributes":[{"word":"zone","info":"zone - See Argument Reference above.\n","kind":"String"},{"word":"name","info":"name - See Argument Reference above.\n","kind":"String"},{"word":"addresses","info":"addresses - See Argument Reference above.\n","kind":"Set"},{"word":"ttl","kind":"Int"},{"word":"id","kind":"String"}]},"cname_record":{"provider":"dns","arguments":[{"word":"zone","info":"zone - (Required) DNS zone the record belongs to. It must be an FQDN, that is, include the trailing dot.\n","kind":"String(R)"},{"word":"name","info":"name - (Required) The name of the record. The zone argument will be appended to this value to create the full record path.\n","kind":"String(R)"},{"word":"cname","info":"cname - (Required) The canonical name this record will point to.\n","kind":"String(R)"},{"word":"ttl","kind":"Int(O)"}],"attributes":[{"word":"zone","info":"zone - See Argument Reference above.\n","kind":"String"},{"word":"name","info":"name - See Argument Reference above.\n","kind":"String"},{"word":"cname","info":"cname - See Argument Reference above.\n","kind":"String"},{"word":"ttl","kind":"Int"},{"word":"id","kind":"String"}]},"ptr_record":{"provider":"dns","arguments":[{"word":"zone","info":"zone - (Required) DNS zone the record belongs to. It must be an FQDN, that is, include the trailing dot.\n","kind":"String(R)"},{"word":"name","info":"name - (Required) The name of the record. The zone argument will be appended to this value to create the full record path.\n","kind":"String(R)"},{"word":"ptr","info":"ptr - (Required) The canonical name this record will point to.\n","kind":"String(R)"},{"word":"ttl","kind":"Int(O)"}],"attributes":[{"word":"zone","info":"zone - See Argument Reference above.\n","kind":"String"},{"word":"name","info":"name - See Argument Reference above.\n","kind":"String"},{"word":"ptr","info":"ptr - See Argument Reference above.\n","kind":"String"},{"word":"ttl","kind":"Int"},{"word":"id","kind":"String"}]}},"datas":{"a_record_set":{"provider":"dns","arguments":[{"word":"host","kind":"String(R)"}],"attributes":[{"word":"addrs","kind":"List"},{"word":"host","kind":"String"},{"word":"id","kind":"String"}]},"cname_record_set":{"provider":"dns","arguments":[{"word":"host","kind":"String(R)"}],"attributes":[{"word":"cname","kind":"String"},{"word":"host","kind":"String"},{"word":"id","kind":"String"}]},"txt_record_set":{"provider":"dns","arguments":[{"word":"host","kind":"String(R)"}],"attributes":[{"word":"record","info":"record - The first TXT record.\n","kind":"String"},{"word":"host","kind":"String"},{"word":"records","kind":"List"},{"word":"id","kind":"String"}]}},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/dnsimple.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"tokenAPI v2 token","info":"token - (Required) The DNSimple API v2 token. It must be provided, but it can also be sourced from the DNSIMPLE_TOKEN environment variable. Please note that this must be an API v2 token. You can use either an User or Account token, but an Account token is recommended.\n"},{"word":"account","info":"account - (Required) The ID of the account associated with the token. It must be provided, but it can also be sourced from the DNSIMPLE_ACCOUNT environment variable.\n"}],"resources":{"record":{"provider":"dnsimple","arguments":[{"word":"domain","info":"domain - (Required) The domain to add the record to\n","kind":"String(R)"},{"word":"name","info":"name - (Required) The name of the record\n","kind":"String(R)"},{"word":"value","info":"value - (Required) The value of the record\n","kind":"String(R)"},{"word":"type","info":"type - (Required) The type of the record\n","kind":"String(R)"},{"word":"ttl","info":"ttl - (Optional) The TTL of the record\n","kind":"String(O)"},{"word":"priority","kind":"String(O)"}],"attributes":[{"word":"id","info":"id - The record ID\n","kind":"String"},{"word":"name","info":"name - The name of the record\n","kind":"String"},{"word":"value","info":"value - The value of the record\n","kind":"String"},{"word":"type","info":"type - The type of the record\n","kind":"String"},{"word":"ttl","info":"ttl - The TTL of the record\n","kind":"String"},{"word":"priority","info":"priority - The priority of the record\n","kind":"String"},{"word":"domain_id","info":"domain_id - The domain ID of the record\n","kind":"String"},{"word":"domain","kind":"String"},{"word":"hostname","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/dyn.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"customer_name","info":"customer_name - (Required) The Dyn customer name. It must be provided, but it can also be sourced from the DYN_CUSTOMER_NAME environment variable.\n"},{"word":"username","info":"username - (Required) The Dyn username. It must be provided, but it can also be sourced from the DYN_USERNAME environment variable.\n"},{"word":"password","info":"password - (Required) The Dyn password. It must be provided, but it can also be sourced from the DYN_PASSWORD environment variable.\n"}],"resources":{"record":{"provider":"dyn","arguments":[{"word":"name","info":"name - (Required) The name of the record.\n","kind":"String(R)"},{"word":"type","info":"type - (Required) The type of the record.\n","kind":"String(R)"},{"word":"value","info":"value - (Required) The value of the record.\n","kind":"String(R)"},{"word":"zone","info":"zone - (Required) The DNS zone to add the record to.\n","kind":"String(R)"},{"word":"ttl","kind":"String(O)"}],"attributes":[{"word":"id","info":"id - The record ID.\n","kind":"String"},{"word":"fqdn","kind":"String"},{"word":"name","kind":"String"},{"word":"ttl","kind":"String"},{"word":"type","kind":"String"},{"word":"value","kind":"String"},{"word":"zone","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/external.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{},"datas":{},"unknowns":{"Data Source":{"provider":"external","arguments":[{"word":"program","info":"program - (Required) A list of strings, whose first element is the program\nto run and whose subsequent elements are optional command line arguments\nto the program. Terraform does not execute the program through a shell, so\nit is not necessary to escape shell metacharacters nor add quotes around\narguments containing spaces."},{"word":"query","info":"query - (Optional) A map of string values to pass to the external program\nas the query arguments. If not supplied, the program will receive an empty\nobject as its input."}],"attributes":[{"word":"result","info":"result - A map of string values returned from the external program.\n"}]}}} -------------------------------------------------------------------------------- /resources/providers_doc/gitlab.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"token","info":"token - (Optional) This is the GitLab personal access token. It must be provided, but\nit can also be sourced from the GITLAB_TOKEN environment variable.\n"},{"word":"base_url","info":"base_url - (Optional) This is the target GitLab base API endpoint. Providing a value is a\nrequirement when working with GitLab CE or GitLab Enterprise. It is optional to provide this value and\nit can also be sourced from the GITLAB_BASE_URL environment variable. The value must end with a slash.\n"}],"resources":{"project":{"provider":"gitlab","arguments":[{"word":"name","info":"name - (Required) The name of the project.","kind":"String(R)"},{"word":"description","info":"description - (Optional) A description of the project.","kind":"String(O)"},{"word":"default_branch","info":"default_branch - (Optional) The default branch for the project.","kind":"String(O)"},{"word":"issues_enabled","info":"issues_enabled - (Optional) Enable issue tracking for the project.","kind":"Bool(O)"},{"word":"merge_requests_enabled","info":"merge_requests_enabled - (Optional) Enable merge requests for the project.","kind":"Bool(O)"},{"word":"wiki_enabled","info":"wiki_enabled - (Optional) Enable wiki for the project.","kind":"Bool(O)"},{"word":"snippets_enabled","info":"snippets_enabled - (Optional) Enable snippets for the project.","kind":"Bool(O)"},{"word":"visibility_level","kind":"String(O)"}],"attributes":[{"word":"ssh_url_to_repo","info":"ssh_url_to_repo - URL that can be provided to git clone to clone the\nrepository via SSH.\n","kind":"String"},{"word":"http_url_to_repo","info":"http_url_to_repo - URL that can be provided to git clone to clone the\nrepository via HTTP.\n","kind":"String"},{"word":"default_branch","kind":"String"},{"word":"description","kind":"String"},{"word":"issues_enabled","kind":"Bool"},{"word":"merge_requests_enabled","kind":"Bool"},{"word":"name","kind":"String"},{"word":"snippets_enabled","kind":"Bool"},{"word":"visibility_level","kind":"String"},{"word":"web_url","kind":"String"},{"word":"wiki_enabled","kind":"Bool"},{"word":"id","kind":"String"}]},"project_hook":{"arguments":[{"word":"build_events","kind":"Bool(O)"},{"word":"enable_ssl_verification","kind":"Bool(O)"},{"word":"issues_events","kind":"Bool(O)"},{"word":"merge_requests_events","kind":"Bool(O)"},{"word":"note_events","kind":"Bool(O)"},{"word":"pipeline_events","kind":"Bool(O)"},{"word":"project","kind":"String(R)"},{"word":"push_events","kind":"Bool(O)"},{"word":"tag_push_events","kind":"Bool(O)"},{"word":"token","kind":"String(O)"},{"word":"url","kind":"String(R)"},{"word":"wiki_page_events","kind":"Bool(O)"}],"attributes":[{"word":"build_events","kind":"Bool"},{"word":"enable_ssl_verification","kind":"Bool"},{"word":"issues_events","kind":"Bool"},{"word":"merge_requests_events","kind":"Bool"},{"word":"note_events","kind":"Bool"},{"word":"pipeline_events","kind":"Bool"},{"word":"project","kind":"String"},{"word":"push_events","kind":"Bool"},{"word":"tag_push_events","kind":"Bool"},{"word":"token","kind":"String"},{"word":"url","kind":"String"},{"word":"wiki_page_events","kind":"Bool"},{"word":"id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/grafana.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{"dashboard":{"provider":"grafana","arguments":[{"word":"config_json","kind":"String(R)"}],"attributes":[{"word":"config_json","kind":"String"},{"word":"slug","kind":"String"},{"word":"id","kind":"String"}]},"data_source":{"provider":"grafana","arguments":[{"word":"type","info":"type - (Required) The data source type. Must be one of the data source\nkeywords supported by the Grafana server.","kind":"String(R)"},{"word":"name","info":"name - (Required) A unique name for the data source within the Grafana\nserver.","kind":"String(R)"},{"word":"url","info":"url - (Required) The URL for the data source. The type of URL required\nvaries depending on the chosen data source type.","kind":"String(R)"},{"word":"is_default","info":"is_default - (Optional) If true, the dashboard will be shown as the\nroot page on the Grafana server. Only one dashboard on a server can be\nthe default.","kind":"Bool(O)"},{"word":"basic_auth_enabled","info":"basic_auth_enabled - (Optional) - If true, HTTP basic authentication will\nbe used to make requests.","kind":"Bool(O)"},{"word":"basic_auth_username","info":"basic_auth_username - (Required if basic_auth_enabled is true) The\nusername to use for basic auth.","kind":"String(O)"},{"word":"basic_auth_password","info":"basic_auth_password - (Required if basic_auth_enabled is true) The\npassword to use for basic auth.","kind":"String(O)"},{"word":"username","info":"username - (Required by some data source types) The username to use to\nauthenticate to the data source.","kind":"String(O)"},{"word":"password","info":"password - (Required by some data source types) The password to use to\nauthenticate to the data source.","kind":"String(O)"},{"word":"database_name","info":"database_name - (Required by some data source types) The name of the\ndatabase to use on the selected data source server.","kind":"String(O)"},{"word":"access_mode","kind":"String(O)"}],"attributes":[{"word":"access_mode","kind":"String"},{"word":"basic_auth_enabled","kind":"Bool"},{"word":"basic_auth_password","kind":"String"},{"word":"basic_auth_username","kind":"String"},{"word":"database_name","kind":"String"},{"word":"id","kind":"String"},{"word":"is_default","kind":"Bool"},{"word":"name","kind":"String"},{"word":"password","kind":"String"},{"word":"type","kind":"String"},{"word":"url","kind":"String"},{"word":"username","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/heroku.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"api_key","info":"api_key - (Required) Heroku API token. It must be provided, but it can also\nbe sourced from the HEROKU_API_KEY environment variable.\n"},{"word":"email","info":"email - (Required) Email to be notified by Heroku. It must be provided, but\nit can also be sourced from the HEROKU_EMAIL environment variable.\n"}],"resources":{"addon":{"provider":"heroku","arguments":[{"word":"app","info":"app - (Required) The Heroku app to add to.\n","kind":"String(R)"},{"word":"plan","info":"plan - (Required) The addon to add.\n","kind":"String(R)"},{"word":"config","kind":"List(O)"}],"attributes":[{"word":"id","info":"id - The ID of the add-on\n","kind":"String"},{"word":"plan","info":"plan - The plan name\n","kind":"String"},{"word":"app","kind":"String"},{"word":"config","kind":"List"},{"word":"config_vars","kind":"List"},{"word":"provider_id","kind":"String"}]},"app":{"provider":"heroku","arguments":[{"word":"name","info":"name - (Required) The name of the application. In Heroku, this is also the\nunique ID, so it must be unique and have a minimum of 3 characters.\n","kind":"String(R)"},{"word":"region","info":"region - (Required) The region that the app should be deployed in.\n","kind":"String(R)"},{"word":"stack","info":"stack - (Optional) The application stack is what platform to run the application\nin.\n","kind":"String(O)"},{"word":"buildpacks","info":"buildpacks - (Optional) Buildpack names or URLs for the application.\n Buildpacks configured externally won't be altered if this is not present.\n","kind":"List(O)"},{"word":"config_vars","info":"config_vars - (Optional) Configuration variables for the application.\n The config variables in this map are not the final set of configuration\n variables, but rather variables you want present. That is, other\n configuration variables set externally won't be removed by Terraform\n if they aren't present in this list.\n","kind":"List(O)"},{"word":"space","info":"space - (Optional) The name of a private space to create the app in.\n","kind":"String(O)"},{"word":"organization","kind":"List(O)(B)","subblock":[{"word":"locked","kind":"Bool(O)"},{"word":"name","kind":"String(R)"},{"word":"personal","kind":"Bool(O)"}]}],"attributes":[{"word":"id","info":"id - The ID of the app. This is also the name of the application.\n","kind":"String"},{"word":"name","info":"name - The name of the application. In Heroku, this is also the\nunique ID.\n","kind":"String"},{"word":"stack","info":"stack - The application stack is what platform to run the application\nin.\n","kind":"String"},{"word":"space","info":"space - The private space the app should run in.\n","kind":"String"},{"word":"region","info":"region - The region that the app should be deployed in.\n","kind":"String"},{"word":"git_url","info":"git_url - The Git URL for the application. This is used for\ndeploying new versions of the app.\n","kind":"String"},{"word":"web_url","info":"web_url - The web (HTTP) URL that the application can be accessed\nat by default.\n","kind":"String"},{"word":"heroku_hostname","info":"heroku_hostname - A hostname for the Heroku application, suitable\nfor pointing DNS records.\n","kind":"String"},{"word":"all_config_vars","kind":"Map"},{"word":"buildpacks","kind":"List"},{"word":"config_vars","kind":"List"},{"word":"organization","kind":"List(B)","subblock":[{"word":"locked","kind":"Bool"},{"word":"name","kind":"String"},{"word":"personal","kind":"Bool"},{"word":"id","kind":"String"}]}]},"app_feature":{"provider":"heroku","arguments":[{"word":"app","info":"app - (Required) The Heroku app to link to.\n","kind":"String(R)"},{"word":"name","info":"name - (Required) The name of the App Feature to manage.\n","kind":"String(R)"},{"word":"enabled","kind":"Bool(O)"}],"attributes":[{"word":"app","kind":"String"},{"word":"enabled","kind":"Bool"},{"word":"name","kind":"String"},{"word":"id","kind":"String"}]},"cert":{"provider":"heroku","arguments":[{"word":"app","info":"app - (Required) The Heroku app to add to.\n","kind":"String(R)"},{"word":"certificate_chain","info":"certificate_chain - (Required) The certificate chain to add\n","kind":"String(R)"},{"word":"private_key","kind":"String(R)"}],"attributes":[{"word":"id","info":"id - The ID of the add-on\n","kind":"String"},{"word":"cname","info":"cname - The CNAME for the SSL endpoint\n","kind":"String"},{"word":"app","kind":"String"},{"word":"certificate_chain","kind":"String"},{"word":"name","kind":"String"},{"word":"private_key","kind":"String"}]},"domain":{"provider":"heroku","arguments":[{"word":"hostname","info":"hostname - (Required) The hostname to serve requests from.\n","kind":"String(R)"},{"word":"app","kind":"String(R)"}],"attributes":[{"word":"id","info":"id - The ID of the of the domain record.\n","kind":"String"},{"word":"hostname","info":"hostname - The hostname traffic will be served as.\n","kind":"String"},{"word":"app","kind":"String"},{"word":"cname","kind":"String"}]},"drain":{"provider":"heroku","arguments":[{"word":"url","info":"url - (Required) The URL for Heroku to drain your logs to.\n","kind":"String(R)"},{"word":"app","kind":"String(R)"}],"attributes":[{"word":"app","kind":"String"},{"word":"token","kind":"String"},{"word":"url","kind":"String"},{"word":"id","kind":"String"}]},"pipeline":{"provider":"heroku","arguments":[{"word":"name","kind":"String(R)"}],"attributes":[{"word":"id","info":"id - The UUID of the pipeline.\n","kind":"String"},{"word":"name","kind":"String"}]},"pipeline_coupling":{"provider":"heroku","arguments":[{"word":"app","info":"app - (Required) The name of the app for this coupling.\n","kind":"String(R)"},{"word":"pipeline","info":"pipeline - (Required) The ID of the pipeline to add this app to.\n","kind":"String(R)"},{"word":"stage","kind":"String(R)"}],"attributes":[{"word":"id","info":"id - The UUID of this pipeline coupling.\n","kind":"String"},{"word":"app","info":"app - The name of the application.\n","kind":"String"},{"word":"pipeline","info":"pipeline - The UUID of the pipeline.\n","kind":"String"},{"word":"stage","kind":"String"}]},"space":{"provider":"heroku","arguments":[{"word":"name","info":"name - (Required) The name of the space.\n","kind":"String(R)"},{"word":"organization","info":"organization - (Required) The name of the organization which will own the space.\n","kind":"String(R)"},{"word":"region","kind":"String(O)"}],"attributes":[{"word":"id","info":"id - The ID of the space.\n","kind":"String"},{"word":"name","info":"name - The space's name.\n","kind":"String"},{"word":"organization","info":"organization - The space's organization.\n","kind":"String"},{"word":"region","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/http.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{},"datas":{"":{"arguments":[],"attributes":[{"word":"id","kind":"String"}]},"":{"arguments":[{"word":"request_headers","kind":"Map(O)"},{"word":"url","kind":"String(R)"}],"attributes":[{"word":"body","kind":"String"},{"word":"request_headers","kind":"Map"},{"word":"url","kind":"String"},{"word":"id","kind":"String"}]}},"unknowns":{"Data Source":{"provider":"http","arguments":[{"word":"url","info":"url - (Required) The URL to request data from. This URL must respond with\na 200 OK response and a text/* or application/json Content-Type."},{"word":"request_headers","info":"request_headers - (Optional) A map of strings representing additional HTTP\nheaders to include in the request."}],"attributes":[{"word":"body","info":"body - The raw body of the HTTP response.\n"}]}}} -------------------------------------------------------------------------------- /resources/providers_doc/icinga2.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"api_url","info":"api_url - (Required) The root API URL of an Icinga2 server. May alternatively be\nset via the ICINGA2_API_URL environment variable.\n"},{"word":"api_user","info":"api_user - (Required) The API username to use to\nauthenticate to the Icinga2 server. May alternatively\nbe set via the ICINGA2_API_USER environment variable.\n"},{"word":"api_password","info":"api_password - (Required) The password to use to\nauthenticate to the Icinga2 server. May alternatively\nbe set via the ICINGA2_API_PASSWORD environment variable.\n"},{"word":"insecure_skip_tls_verify","info":"insecure_skip_tls_verify - (optional) Defaults to false. If set to true,\nverification of the Icinga2 server's SSL certificate is disabled. This is a security\nrisk and should be avoided. May alternatively be set via the\nICINGA2_INSECURE_SKIP_TLS_VERIFY environment variable.\n"}],"resources":{"checkcommand":{"provider":"icinga2","arguments":[{"word":"arguments","info":"arguments - (Optional) A mapping of arguments to include with the command.\n","kind":"Map(O)"},{"word":"command","info":"command - (Required) Path to the command te be executed.\n","kind":"String(R)"},{"word":"name","info":"name - (Required) Name by which to reference the checkcommand\n","kind":"String(R)"},{"word":"templates","kind":"List(R)"}],"attributes":[{"word":"arguments","kind":"Map"},{"word":"command","kind":"String"},{"word":"name","kind":"String"},{"word":"templates","kind":"List"},{"word":"id","kind":"String"}]},"host":{"provider":"icinga2","arguments":[{"word":"address","info":"address - (Required) The address of the host.\n","kind":"String(R)"},{"word":"check_command","info":"check_command - (Required) The name of an existing Icinga2 CheckCommand object that is used to determine if the host is available or not.\n","kind":"String(R)"},{"word":"hostname","info":"hostname - (Required) The hostname of the host.\n","kind":"String(R)"},{"word":"vars","kind":"Map(O)"}],"attributes":[{"word":"address","kind":"String"},{"word":"check_command","kind":"String"},{"word":"hostname","kind":"String"},{"word":"vars","kind":"Map"},{"word":"id","kind":"String"}]},"hostgroup":{"provider":"icinga2","arguments":[{"word":"name","info":"name - (Required) The name of the hostgroup.\n","kind":"String(R)"},{"word":"display_name","kind":"String(R)"}],"attributes":[{"word":"display_name","kind":"String"},{"word":"name","kind":"String"},{"word":"id","kind":"String"}]},"service":{"provider":"icinga2","arguments":[{"word":"check_command","info":"check_command - (Required) The name of an existing Icinga2 CheckCommand object that is used to determine if the service is available on the host.\n","kind":"String(R)"},{"word":"hostname","info":"hostname - (Required) The host to check the service's status on\n","kind":"String(R)"},{"word":"name","kind":"String(R)"}],"attributes":[{"word":"check_command","kind":"String"},{"word":"hostname","kind":"String"},{"word":"name","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/influxdb.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{"database":{"provider":"influxdb","arguments":[{"word":"name","kind":"String(R)"}],"attributes":[{"word":"name","kind":"String"},{"word":"id","kind":"String"}]},"user":{"provider":"influxdb","arguments":[{"word":"name","info":"name - (Required) The name for the user. \n","kind":"String(R)"},{"word":"password","info":"password - (Required) The password for the user. \n","kind":"String(R)"},{"word":"admin","info":"admin - (Optional) Mark the user as admin.\n","kind":"Bool(O)"},{"word":"grant","kind":"List(O)(B)","subblock":[{"word":"database","kind":"String(R)"},{"word":"privilege","kind":"String(R)"}]}],"attributes":[{"word":"admin","kind":"Bool"},{"word":"grant","kind":"List(B)","subblock":[{"word":"database","kind":"String"},{"word":"privilege","kind":"String"},{"word":"id","kind":"String"}]},{"word":"name","kind":"String"},{"word":"password","kind":"String"},{"word":"id","kind":"String"}]},"continuous_query":{"provider":"influxdb","arguments":[{"word":"name","info":"name - (Required) The name for the continuous_query. This must be unique on the InfluxDB server.\n","kind":"String(R)"},{"word":"database","info":"database - (Required) The database for the continuous_query. This must be an existing influxdb database.\n","kind":"String(R)"},{"word":"query","kind":"String(R)"}],"attributes":[{"word":"database","kind":"String"},{"word":"name","kind":"String"},{"word":"query","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/librato.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"token","info":"token - (Required) Librato API token. It must be provided, but it can also\nbe sourced from the LIBRATO_TOKEN environment variable.\n"},{"word":"email","info":"email - (Required) Librato email address. It must be provided, but it can\nalso be sourced from the LIBRATO_EMAIL environment variable.\n"}],"resources":{"alert":{"provider":"librato","arguments":[{"word":"name","info":"name - (Required) The name of the alert.\n","kind":"String(R)"},{"word":"description","info":"description - (Required) Description of the alert.\n","kind":"String(O)"},{"word":"active","info":"active - whether the alert is active (can be triggered). Defaults to true.\n","kind":"Bool(O)"},{"word":"rearm_seconds","info":"rearm_seconds - minimum amount of time between sending alert notifications, in seconds.\n","kind":"Int(O)"},{"word":"services","info":"services - list of notification service IDs.\n","kind":"Set(O)"},{"word":"condition","info":"condition - A trigger condition for the alert. Conditions documented below.\n","kind":"Set(O)(B)","subblock":[{"word":"detect_reset","kind":"Bool(O)"},{"word":"duration","kind":"Int(O)"},{"word":"metric_name","kind":"String(R)"},{"word":"source","kind":"String(O)"},{"word":"summary_function","kind":"String(O)"},{"word":"threshold","kind":"Float(O)"},{"word":"type","kind":"String(R)"}]},{"word":"attributes","kind":"List(O)(B)","subblock":[{"word":"runbook_url","kind":"String(O)"}]}],"attributes":[{"word":"id","info":"id - The ID of the alert.\n","kind":"String"},{"word":"name","info":"name - The name of the alert.\n","kind":"String"},{"word":"description","info":"description - (Required) Description of the alert.\n","kind":"String"},{"word":"active","info":"active - whether the alert is active (can be triggered). Defaults to true.\n","kind":"Bool"},{"word":"rearm_seconds","info":"rearm_seconds - minimum amount of time between sending alert notifications, in seconds.\n","kind":"Int"},{"word":"services","info":"services - list of notification service IDs.\n","kind":"Set"},{"word":"attributes","kind":"List(B)","subblock":[{"word":"runbook_url","kind":"String"},{"word":"id","kind":"String"}]},{"word":"condition","kind":"Set(B)","subblock":[{"word":"detect_reset","kind":"Bool"},{"word":"duration","kind":"Int"},{"word":"metric_name","kind":"String"},{"word":"source","kind":"String"},{"word":"summary_function","kind":"String"},{"word":"threshold","kind":"Float"},{"word":"type","kind":"String"},{"word":"id","kind":"String"}]}]},"service":{"provider":"librato","arguments":[{"word":"type","info":"type - (Required) The type of notificaion.\n","kind":"String(R)"},{"word":"title","info":"title - (Required) The alert title.\n","kind":"String(R)"},{"word":"settings","kind":"String(R)"}],"attributes":[{"word":"id","info":"id - The ID of the alert.\n","kind":"Int"},{"word":"type","info":"type - The type of notificaion.\n","kind":"String"},{"word":"title","info":"title - The alert title.\n","kind":"String"},{"word":"settings","kind":"String"}]},"space":{"provider":"librato","arguments":[{"word":"name","kind":"String(R)"}],"attributes":[{"word":"id","info":"id - The ID of the space.\n","kind":"Int"},{"word":"name","kind":"String"}]},"space_chart":{"provider":"librato","arguments":[{"word":"space_id","info":"space_id - (Required) The ID of the space this chart should be in.\n","kind":"Int(R)"},{"word":"name","info":"name - (Required) The title of the chart when it is displayed.\n","kind":"String(R)"},{"word":"type","info":"type - (Optional) Indicates the type of chart. Must be one of line or\nstacked (default to line).\n","kind":"String(R)"},{"word":"min","info":"min - (Optional) The minimum display value of the chart's Y-axis.\n","kind":"Float(O)"},{"word":"max","info":"max - (Optional) The maximum display value of the chart's Y-axis.\n","kind":"Float(O)"},{"word":"label","info":"label - (Optional) The Y-axis label.\n","kind":"String(O)"},{"word":"related_space","info":"related_space - (Optional) The ID of another space to which this chart is\nrelated.\n","kind":"Int(O)"},{"word":"stream","kind":"Set(O)(B)","subblock":[{"word":"color","kind":"String(O)"},{"word":"composite","kind":"String(O)"},{"word":"group_function","kind":"String(O)"},{"word":"max","kind":"Float(O)"},{"word":"metric","kind":"String(O)"},{"word":"min","kind":"Float(O)"},{"word":"name","kind":"String(O)"},{"word":"period","kind":"Int(O)"},{"word":"source","kind":"String(O)"},{"word":"summary_function","kind":"String(O)"},{"word":"transform_function","kind":"String(O)"},{"word":"units_long","kind":"String(O)"},{"word":"units_short","kind":"String(O)"}]}],"attributes":[{"word":"id","info":"id - The ID of the chart.\n","kind":"String"},{"word":"space_id","info":"space_id - The ID of the space this chart should be in.\n","kind":"Int"},{"word":"label","kind":"String"},{"word":"max","kind":"Float"},{"word":"min","kind":"Float"},{"word":"name","kind":"String"},{"word":"related_space","kind":"Int"},{"word":"stream","kind":"Set(B)","subblock":[{"word":"color","kind":"String"},{"word":"composite","kind":"String"},{"word":"group_function","kind":"String"},{"word":"max","kind":"Float"},{"word":"metric","kind":"String"},{"word":"min","kind":"Float"},{"word":"name","kind":"String"},{"word":"period","kind":"Int"},{"word":"source","kind":"String"},{"word":"summary_function","kind":"String"},{"word":"transform_function","kind":"String"},{"word":"units_long","kind":"String"},{"word":"units_short","kind":"String"},{"word":"id","kind":"String"}]},{"word":"type","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/local.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{"file":{"provider":"local","arguments":[{"word":"content","info":"content - (Required) The content of file to create.","kind":"String(R)"},{"word":"filename","kind":"String(R)"}],"attributes":[{"word":"content","kind":"String"},{"word":"filename","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/logentries.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"account_keyaccount key documentation","info":"account_key - (Required) The Logentries account key. This can also be specified with the LOGENTRIES_ACCOUNT_KEY environment variable. See the Logentries account key documentation for more information.\n"}],"resources":{"log":{"provider":"logentries","arguments":[{"word":"logset_id","info":"logset_id - (Required) The id of the logentries_logset resource.\n","kind":"String(R)"},{"word":"name","info":"name - (Required) The name of the log. The name should be short and descriptive. For example, Apache Access, Hadoop Namenode.\n","kind":"String(R)"},{"word":"retention_period","info":"retention_period - (Optional, default ACCOUNT_DEFAULT) The retention period (1W, 2W, 1M, 2M, 6M, 1Y, 2Y, UNLIMITED, ACCOUNT_DEFAULT)\n","kind":"String(O)"},{"word":"source","info":"source - (Optional, default token) The log source (token, syslog, agent, api). Review the Logentries log inputs documentation for more information.\n","kind":"String(O)"},{"word":"filename","kind":"String(O)"},{"word":"type","kind":"String(O)"}],"attributes":[{"word":"filename","kind":"String"},{"word":"logset_id","kind":"String"},{"word":"name","kind":"String"},{"word":"retention_period","kind":"String"},{"word":"source","kind":"String"},{"word":"token","kind":"String"},{"word":"type","kind":"String"},{"word":"id","kind":"String"}]},"logset":{"provider":"logentries","arguments":[{"word":"name","info":"name - (Required) The log set name, which should be short and descriptive. For example, www, db1.\n","kind":"String(R)"},{"word":"location","kind":"String(O)"}],"attributes":[{"word":"location","kind":"String"},{"word":"name","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/mailgun.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"api_key","info":"api_key - (Required) Mailgun API key\n"}],"resources":{"domain":{"provider":"mailgun","arguments":[{"word":"name","info":"name - (Required) The domain to add to Mailgun\n","kind":"String(R)"},{"word":"smtp_password","info":"smtp_password - (Required) Password for SMTP authentication\n","kind":"String(R)"},{"word":"spam_action","info":"spam_action - (Optional) disabled or tag Disable, no spam\nfiltering will occur for inbound messages. Tag, messages\nwill be tagged with a spam header.\n","kind":"String(O)"},{"word":"smtp_login","kind":"String(O)"},{"word":"wildcard","kind":"Bool(O)"}],"attributes":[{"word":"name","info":"name - The name of the domain.\n","kind":"String"},{"word":"smtp_login","info":"smtp_login - The login email for the SMTP server.\n","kind":"String"},{"word":"smtp_password","info":"smtp_password - The password to the SMTP server.\n","kind":"String"},{"word":"wildcard","info":"wildcard - Whether or not the domain will accept email for sub-domains.\n","kind":"Bool"},{"word":"spam_action","info":"spam_action - The spam filtering setting.\n","kind":"String"},{"word":"receiving_records","info":"receiving_records - A list of DNS records for receiving validation.\n\n\npriority - The priority of the record.\n\nrecord_type - The record type.\n\nvalid - \"valid\" if the record is valid.\n\nvalue - The value of the record.\n\n\n","kind":"List(B)","subblock":[{"word":"priority","kind":"String"},{"word":"record_type","kind":"String"},{"word":"valid","kind":"String"},{"word":"value","kind":"String"},{"word":"id","kind":"String"}]},{"word":"sending_records","info":"sending_records - A list of DNS records for sending validation.\n\n\nname - The name of the record.\n\nrecord_type - The record type.\n\nvalid - \"valid\" if the record is valid.\n\nvalue - The value of the record.\n\n\n","kind":"List(B)","subblock":[{"word":"name","kind":"String"},{"word":"record_type","kind":"String"},{"word":"valid","kind":"String"},{"word":"value","kind":"String"},{"word":"id","kind":"String"}]},{"word":"id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/mysql.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"endpoint","info":"endpoint - (Required) The address of the MySQL server to use. Most often a \"hostname:port\" pair, but may also be an absolute path to a Unix socket when the host OS is Unix-compatible.\n"},{"word":"username","info":"username - (Required) Username to use to authenticate with the server.\n"},{"word":"password","info":"password - (Optional) Password for the given user, if that user has a password.\n"}],"resources":{"database":{"provider":"mysql","arguments":[{"word":"name","info":"name - (Required) The name of the database. This must be unique within\na given MySQL server and may or may not be case-sensitive depending on\nthe operating system on which the MySQL server is running.","kind":"String(R)"},{"word":"default_character_set","info":"default_character_set - (Optional) The default character set to use when\na table is created without specifying an explicit character set. Defaults\nto \"utf8\".","kind":"String(O)"},{"word":"default_collation","kind":"String(O)"}],"attributes":[{"word":"default_character_set","kind":"String"},{"word":"default_collation","kind":"String"},{"word":"name","kind":"String"},{"word":"id","kind":"String"}]},"grant":{"provider":"mysql","arguments":[{"word":"user","info":"user - (Required) The name of the user.","kind":"String(R)"},{"word":"host","info":"host - (Optional) The source host of the user. Defaults to \"localhost\".","kind":"String(O)"},{"word":"database","info":"database - (Required) The database to grant privileges on. At this time,\nprivileges are given to all tables on the database (mydb.*).","kind":"String(R)"},{"word":"privileges","info":"privileges - (Required) A list of privileges to grant to the user. Refer\nto a list of privileges (such as\nhere) for applicable\nprivileges.","kind":"Set(R)"},{"word":"grant","kind":"Bool(O)"}],"attributes":[{"word":"database","kind":"String"},{"word":"grant","kind":"Bool"},{"word":"host","kind":"String"},{"word":"privileges","kind":"Set"},{"word":"user","kind":"String"},{"word":"id","kind":"String"}]},"user":{"provider":"mysql","arguments":[{"word":"user","info":"user - (Required) The name of the user.","kind":"String(R)"},{"word":"host","info":"host - (Optional) The source host of the user. Defaults to \"localhost\".","kind":"String(O)"},{"word":"password","kind":"String(O)"}],"attributes":[{"word":"host","kind":"String"},{"word":"password","kind":"String"},{"word":"user","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/newrelic.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"api_key","info":"api_key - (Required) Your New Relic API key.\n"}],"resources":{"alert_channel":{"provider":"newrelic","arguments":[{"word":"name","info":"name - (Required) The name of the channel.\n","kind":"String(R)"},{"word":"type","info":"type - (Required) The type of channel. One of: campfire, email, hipchat, opsgenie, pagerduty, slack, victorops, or webhook.\n","kind":"String(R)"},{"word":"configuration","kind":"Map(R)"}],"attributes":[{"word":"configuration","kind":"Map"},{"word":"name","kind":"String"},{"word":"type","kind":"String"},{"word":"id","kind":"String"}]},"alert_condition":{"provider":"newrelic","arguments":[{"word":"policy_id","info":"policy_id - (Required) The ID of the policy where this condition should be used.\n","kind":"Int(R)"},{"word":"name","info":"name - (Required) The title of the condition\n","kind":"String(R)"},{"word":"type","info":"type - (Required) The type of condition. One of: apm_app_metric, apm_kt_metric, servers_metric, browser_metric, mobile_metric\n","kind":"String(R)"},{"word":"entities","info":"entities - (Required) The instance IDS associated with this condition.\n","kind":"List(R)"},{"word":"metric","info":"metric - (Required) The metric field accepts parameters based on the type set.\n","kind":"String(R)"},{"word":"runbook_url","info":"runbook_url - (Optional) Runbook URL to display in notifications.\n","kind":"String(O)"},{"word":"condition_scope","info":"condition_scope - (Optional) instance or application. This is required if you are using the JVM plugin in New Relic.\n","kind":"String(O)"},{"word":"term","info":"term - (Required) A list of terms for this condition. See Terms below for details.\n","kind":"List(R)(B)","subblock":[{"word":"duration","kind":"Int(R)"},{"word":"operator","kind":"String(O)"},{"word":"priority","kind":"String(O)"},{"word":"threshold","kind":"Float(R)"},{"word":"time_function","kind":"String(R)"}]},{"word":"user_defined_metric","info":"user_defined_metric - (Optional) A custom metric to be evaluated.\n","kind":"String(O)"},{"word":"user_defined_value_function","kind":"String(O)"}],"attributes":[{"word":"condition_scope","kind":"String"},{"word":"entities","kind":"List"},{"word":"metric","kind":"String"},{"word":"name","kind":"String"},{"word":"policy_id","kind":"Int"},{"word":"runbook_url","kind":"String"},{"word":"term","kind":"List(B)","subblock":[{"word":"duration","kind":"Int"},{"word":"operator","kind":"String"},{"word":"priority","kind":"String"},{"word":"threshold","kind":"Float"},{"word":"time_function","kind":"String"},{"word":"id","kind":"String"}]},{"word":"type","kind":"String"},{"word":"user_defined_metric","kind":"String"},{"word":"user_defined_value_function","kind":"String"},{"word":"id","kind":"String"}]},"alert_policy":{"provider":"newrelic","arguments":[{"word":"name","info":"name - (Required) The name of the policy.\n","kind":"String(R)"},{"word":"incident_preference","kind":"String(O)"}],"attributes":[{"word":"id","info":"id - The ID of the policy.\n","kind":"String"},{"word":"created_at","info":"created_at - The time the policy was created.\n","kind":"Int"},{"word":"incident_preference","kind":"String"},{"word":"name","kind":"String"},{"word":"updated_at","kind":"Int"}]},"alert_policy_channel":{"provider":"newrelic","arguments":[{"word":"policy_id","info":"policy_id - (Required) The ID of the policy.\n","kind":"Int(R)"},{"word":"channel_id","kind":"Int(R)"}],"attributes":[{"word":"channel_id","kind":"Int"},{"word":"policy_id","kind":"Int"},{"word":"id","kind":"String"}]}},"datas":{"application":{"provider":"newrelic","arguments":[{"word":"name","kind":"String(R)"}],"attributes":[{"word":"instance_ids","info":"instance_ids - A list of instance IDs associated with the application.\n","kind":"List"},{"word":"host_ids","kind":"List"},{"word":"name","kind":"String"},{"word":"id","kind":"String"}]}},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/nomad.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"address","info":"address - (Optional) The HTTP(S) API address of the Nomad agent to use. Defaults to http://127.0.0.1:4646. The NOMAD_ADDR environment variable can also be used.\n"},{"word":"region","info":"region - (Optional) The Nomad region to target. The NOMAD_REGION environment variable can also be used.\n"},{"word":"ca_file","info":"ca_file - (Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. The NOMAD_CACERT environment variable can also be used.\n"},{"word":"cert_file","info":"cert_file - (Optional) A path to a PEM-encoded certificate provided to the remote agent; requires use of key_file. The NOMAD_CLIENT_CERT environment variable can also be used.\n"},{"word":"key_file","info":"key_file- (Optional) A path to a PEM-encoded private key, required if cert_file is specified. The NOMAD_CLIENT_KEY environment variable can also be used.\n"}],"resources":{"job":{"provider":"nomad","arguments":[{"word":"jobspec","info":"jobspec - (Required) The contents of the jobspec to register.","kind":"String(R)"},{"word":"deregister_on_destroy","info":"deregister_on_destroy - (Optional) If true, the job will be deregistered\nwhen this resource is destroyed in Terraform. Defaults to true.","kind":"Bool(O)"},{"word":"deregister_on_id_change","kind":"Bool(O)"}],"attributes":[{"word":"deregister_on_destroy","kind":"Bool"},{"word":"deregister_on_id_change","kind":"Bool"},{"word":"jobspec","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/null.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{"resource":{"arguments":[{"word":"triggers","kind":"Map(O)"}],"attributes":[{"word":"triggers","kind":"Map"},{"word":"id","kind":"String"}]}},"datas":{"data_source":{"arguments":[{"word":"has_computed_default","kind":"String(O)"},{"word":"inputs","kind":"Map(O)"}],"attributes":[{"word":"has_computed_default","kind":"String"},{"word":"inputs","kind":"Map"},{"word":"outputs","kind":"Map"},{"word":"random","kind":"String"},{"word":"id","kind":"String"}]}},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/opsgenie.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{"team":{"provider":"opsgenie","arguments":[{"word":"name","info":"name - (Required) The name associated with this team. OpsGenie defines that this must not be longer than 100 characters.","kind":"String(R)"},{"word":"description","info":"description - (Optional) A description for this team.","kind":"String(O)"},{"word":"member","kind":"List(O)(B)","subblock":[{"word":"role","kind":"String(O)"},{"word":"username","kind":"String(R)"}]}],"attributes":[{"word":"description","kind":"String"},{"word":"member","kind":"List(B)","subblock":[{"word":"role","kind":"String"},{"word":"username","kind":"String"},{"word":"id","kind":"String"}]},{"word":"name","kind":"String"},{"word":"id","kind":"String"}]},"user":{"provider":"opsgenie","arguments":[{"word":"username","info":"username - (Required) The email address associated with this user. OpsGenie defines that this must not be longer than 100 characters.","kind":"String(R)"},{"word":"full_name","info":"full_name - (Required) The Full Name of the User.","kind":"String(R)"},{"word":"role","info":"role - (Required) The Role assigned to the User. Either a built-in such as 'Owner', 'Admin' or 'User' - or the name of a custom role.","kind":"String(R)"},{"word":"locale","info":"locale - (Optional) Location information for the user. Please look at Supported Locale Ids for available locales - Defaults to \"en_US\".","kind":"String(O)"},{"word":"timezone","kind":"String(O)"}],"attributes":[{"word":"full_name","kind":"String"},{"word":"locale","kind":"String"},{"word":"role","kind":"String"},{"word":"timezone","kind":"String"},{"word":"username","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{"user":{"provider":"opsgenie","arguments":[{"word":"username","kind":"String(R)"}],"attributes":[{"word":"full_name","info":"full_name - The full name of the found user.\n","kind":"String"},{"word":"role","kind":"String"},{"word":"username","kind":"String"},{"word":"id","kind":"String"}]}},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/packet.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"auth_token","info":"auth_token - (Required) This is your Packet API Auth token. This can also be specified\nwith the PACKET_AUTH_TOKEN shell environment variable.\n"}],"resources":{"device":{"provider":"packet","arguments":[{"word":"hostname","info":"hostname - (Required) The device name\n","kind":"String(R)"},{"word":"project_id","info":"project_id - (Required) The id of the project in which to create the device\n","kind":"String(R)"},{"word":"operating_system","info":"operating_system - (Required) The operating system slug\n","kind":"String(R)"},{"word":"facility","info":"facility - (Required) The facility in which to create the device\n","kind":"String(R)"},{"word":"plan","info":"plan - (Required) The hardware config slug\n","kind":"String(R)"},{"word":"billing_cycle","info":"billing_cycle - (Required) monthly or hourly\n","kind":"String(R)"},{"word":"tags","kind":"List(O)"},{"word":"user_data","kind":"String(O)"}],"attributes":[{"word":"id","info":"id - The ID of the device\n","kind":"String"},{"word":"hostname","info":"hostname- The hostname of the device\n","kind":"String"},{"word":"project_id","info":"project_id- The ID of the project the device belongs to\n","kind":"String"},{"word":"facility","info":"facility - The facility the device is in\n","kind":"String"},{"word":"plan","info":"plan - The hardware config of the device\n","kind":"String"},{"word":"network","info":"network - The private and public v4 and v6 IPs assigned to the device\n","kind":"List(B)","subblock":[{"word":"address","kind":"String"},{"word":"cidr","kind":"Int"},{"word":"family","kind":"Int"},{"word":"gateway","kind":"String"},{"word":"public","kind":"Bool"},{"word":"id","kind":"String"}]},{"word":"locked","info":"locked - Whether the device is locked\n","kind":"Bool"},{"word":"billing_cycle","info":"billing_cycle - The billing cycle of the device (monthly or hourly)\n","kind":"String"},{"word":"operating_system","info":"operating_system - The operating system running on the device\n","kind":"String"},{"word":"created","info":"created - The timestamp for when the device was created\n","kind":"String"},{"word":"state","kind":"String"},{"word":"tags","kind":"List"},{"word":"updated","kind":"String"},{"word":"user_data","kind":"String"}]},"project":{"provider":"packet","arguments":[{"word":"name","info":"name - (Required) The name of the Project on Packet.net\n","kind":"String(R)"},{"word":"payment_method","kind":"String(O)"}],"attributes":[{"word":"id","info":"id - The unique ID of the project\n","kind":"String"},{"word":"payment_method","info":"payment_method - The unique ID of the payment method on file to use for services created\nin this project.\n","kind":"String"},{"word":"created","info":"created - The timestamp for when the Project was created\n","kind":"String"},{"word":"name","kind":"String"},{"word":"updated","kind":"String"}]},"ssh_key":{"provider":"packet","arguments":[{"word":"name","info":"name - (Required) The name of the SSH key for identification\n","kind":"String(R)"},{"word":"public_key","kind":"String(R)"}],"attributes":[{"word":"id","info":"id - The unique ID of the key\n","kind":"String"},{"word":"name","info":"name - The name of the SSH key\n","kind":"String"},{"word":"public_key","info":"public_key - The text of the public key\n","kind":"String"},{"word":"fingerprint","info":"fingerprint - The fingerprint of the SSH key\n","kind":"String"},{"word":"created","info":"created - The timestamp for when the SSH key was created\n","kind":"String"},{"word":"updated","kind":"String"}]},"volume":{"provider":"packet","arguments":[{"word":"plan","info":"plan - (Required) The service plan slug of the volume\n","kind":"String(R)"},{"word":"facility","info":"facility - (Required) The facility to create the volume in\n","kind":"String(R)"},{"word":"project_id","info":"project_id - (Required) The packet project ID to deploy the volume in\n","kind":"String(R)"},{"word":"size","info":"size - (Required) The size in GB to make the volume\n","kind":"Int(R)"},{"word":"billing_cycle","info":"billing_cycle - The billing cycle, defaults to \"hourly\"\n","kind":"String(O)"},{"word":"description","info":"description - Optional description for the volume\n","kind":"String(O)"},{"word":"locked","kind":"Bool(O)"},{"word":"snapshot_policies","kind":"List(O)(B)","subblock":[{"word":"snapshot_count","kind":"Int(R)"},{"word":"snapshot_frequency","kind":"String(R)"}]}],"attributes":[{"word":"id","info":"id - The unique ID of the volume\n","kind":"String"},{"word":"name","info":"name - The name of the volume\n","kind":"String"},{"word":"description","info":"description - The description of the volume\n","kind":"String"},{"word":"size","info":"size - The size in GB of the volume\n","kind":"Int"},{"word":"plan","info":"plan - Performance plan the volume is on\n","kind":"String"},{"word":"billing_cycle","info":"billing_cycle - The billing cycle, defaults to hourly\n","kind":"String"},{"word":"facility","info":"facility - The facility slug the volume resides in\n","kind":"String"},{"word":"state","info":"state - The state of the volume\n","kind":"String"},{"word":"locked","info":"locked - Whether the volume is locked or not\n","kind":"Bool"},{"word":"project_id","info":"project_id - The project id the volume is in\n","kind":"String"},{"word":"created","info":"created - The timestamp for when the volume was created\n","kind":"String"},{"word":"attachments","kind":"List(B)","subblock":[{"word":"href","kind":"String"},{"word":"id","kind":"String"}]},{"word":"snapshot_policies","kind":"List(B)","subblock":[{"word":"snapshot_count","kind":"Int"},{"word":"snapshot_frequency","kind":"String"},{"word":"id","kind":"String"}]},{"word":"updated","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/powerdns.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"api_key","info":"api_key - (Required) The PowerDNS API key. This can also be specified with PDNS_API_KEY environment variable.\n"},{"word":"server_url","info":"server_url - (Required) The address of PowerDNS server. This can also be specified with PDNS_SERVER_URL environment variable.\n"}],"resources":{"record":{"provider":"powerdns","arguments":[{"word":"zone","info":"zone - (Required) The name of zone to contain this record.\n","kind":"String(R)"},{"word":"name","info":"name - (Required) The name of the record.\n","kind":"String(R)"},{"word":"type","info":"type - (Required) The record type.\n","kind":"String(R)"},{"word":"ttl","info":"ttl - (Required) The TTL of the record.\n","kind":"Int(R)"},{"word":"records","kind":"Set(R)"}],"attributes":[{"word":"name","kind":"String"},{"word":"records","kind":"Set"},{"word":"ttl","kind":"Int"},{"word":"type","kind":"String"},{"word":"zone","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/rabbitmq.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[{"word":"endpoint","info":"endpoint - (Required) The HTTP URL of the management plugin on the\nRabbitMQ server. The RabbitMQ management plugin must be enabled in order\nto use this provder. Note: This is not the IP address or hostname of the\nRabbitMQ server that you would use to access RabbitMQ directly.\n"},{"word":"username","info":"username - (Required) Username to use to authenticate with the server.\n"},{"word":"password","info":"password - (Optional) Password for the given user.\n"},{"word":"insecure","info":"insecure - (Optional) Trust self-signed certificates.\n"},{"word":"cacert_file","info":"cacert_file - (Optional) The path to a custom CA / intermediate certificate.\n"}],"resources":{"binding":{"provider":"rabbitmq","arguments":[{"word":"source","info":"source - (Required) The source exchange.","kind":"String(R)"},{"word":"vhost","info":"vhost - (Required) The vhost to create the resource in.","kind":"String(R)"},{"word":"destination","info":"destination - (Required) The destination queue or exchange.","kind":"String(R)"},{"word":"destination_type","info":"destination_type - (Required) The type of destination (queue or exchange).","kind":"String(R)"},{"word":"properties_key","info":"properties_key - (Required) A unique key to refer to the binding.","kind":"String(R)"},{"word":"routing_key","info":"routing_key - (Optional) A routing key for the binding.","kind":"String(O)"},{"word":"arguments","kind":"Map(O)"}],"attributes":[{"word":"arguments","kind":"Map"},{"word":"destination","kind":"String"},{"word":"destination_type","kind":"String"},{"word":"properties_key","kind":"String"},{"word":"routing_key","kind":"String"},{"word":"source","kind":"String"},{"word":"vhost","kind":"String"},{"word":"id","kind":"String"}]},"exchange":{"provider":"rabbitmq","arguments":[{"word":"name","info":"name - (Required) The name of the exchange.","kind":"String(R)"},{"word":"vhost","info":"vhost - (Required) The vhost to create the resource in.","kind":"String(O)"},{"word":"settings","kind":"List(R)(B)","subblock":[{"word":"arguments","kind":"Map(O)"},{"word":"auto_delete","kind":"Bool(O)"},{"word":"durable","kind":"Bool(O)"},{"word":"type","kind":"String(R)"}]}],"attributes":[{"word":"name","kind":"String"},{"word":"settings","kind":"List(B)","subblock":[{"word":"arguments","kind":"Map"},{"word":"auto_delete","kind":"Bool"},{"word":"durable","kind":"Bool"},{"word":"type","kind":"String"},{"word":"id","kind":"String"}]},{"word":"vhost","kind":"String"},{"word":"id","kind":"String"}]},"permissions":{"provider":"rabbitmq","arguments":[{"word":"user","info":"user - (Required) The user to apply the permissions to.","kind":"String(R)"},{"word":"vhost","info":"vhost - (Required) The vhost to create the resource in.","kind":"String(O)"},{"word":"permissions","kind":"List(R)(B)","subblock":[{"word":"configure","kind":"String(R)"},{"word":"read","kind":"String(R)"},{"word":"write","kind":"String(R)"}]}],"attributes":[{"word":"permissions","kind":"List(B)","subblock":[{"word":"configure","kind":"String"},{"word":"read","kind":"String"},{"word":"write","kind":"String"},{"word":"id","kind":"String"}]},{"word":"user","kind":"String"},{"word":"vhost","kind":"String"},{"word":"id","kind":"String"}]},"policy":{"provider":"rabbitmq","arguments":[{"word":"name","info":"name - (Required) The name of the policy.","kind":"String(R)"},{"word":"vhost","info":"vhost - (Required) The vhost to create the resource in.","kind":"String(R)"},{"word":"policy","kind":"List(R)(B)","subblock":[{"word":"apply_to","kind":"String(R)"},{"word":"definition","kind":"Map(R)"},{"word":"pattern","kind":"String(R)"},{"word":"priority","kind":"Int(R)"}]}],"attributes":[{"word":"name","kind":"String"},{"word":"policy","kind":"List(B)","subblock":[{"word":"apply_to","kind":"String"},{"word":"definition","kind":"Map"},{"word":"pattern","kind":"String"},{"word":"priority","kind":"Int"},{"word":"id","kind":"String"}]},{"word":"vhost","kind":"String"},{"word":"id","kind":"String"}]},"queue":{"provider":"rabbitmq","arguments":[{"word":"name","info":"name - (Required) The name of the queue.","kind":"String(R)"},{"word":"vhost","info":"vhost - (Required) The vhost to create the resource in.","kind":"String(O)"},{"word":"settings","kind":"List(R)(B)","subblock":[{"word":"arguments","kind":"Map(O)"},{"word":"auto_delete","kind":"Bool(O)"},{"word":"durable","kind":"Bool(O)"}]}],"attributes":[{"word":"name","kind":"String"},{"word":"settings","kind":"List(B)","subblock":[{"word":"arguments","kind":"Map"},{"word":"auto_delete","kind":"Bool"},{"word":"durable","kind":"Bool"},{"word":"id","kind":"String"}]},{"word":"vhost","kind":"String"},{"word":"id","kind":"String"}]},"user":{"provider":"rabbitmq","arguments":[{"word":"name","info":"name - (Required) The name of the user.","kind":"String(R)"},{"word":"password","info":"password - (Required) The password of the user. The value of this argument\nis plain-text so make sure to secure where this is defined.","kind":"String(R)"},{"word":"tags","kind":"List(O)"}],"attributes":[{"word":"name","kind":"String"},{"word":"password","kind":"String"},{"word":"tags","kind":"List"},{"word":"id","kind":"String"}]},"vhost":{"provider":"rabbitmq","arguments":[{"word":"name","kind":"String(R)"}],"attributes":[{"word":"name","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/random.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{"id":{"provider":"random","arguments":[{"word":"byte_length","info":"byte_length - (Required) The number of random bytes to produce. The\nminimum value is 1, which produces eight bits of randomness.","kind":"Int(R)"},{"word":"keepers","info":"keepers - (Optional) Arbitrary map of values that, when changed, will\ntrigger a new id to be generated. See\nthe main provider documentation for more information.","kind":"Map(O)"},{"word":"prefix","kind":"String(O)"}],"attributes":[{"word":"b64","info":"b64 - The generated id presented in base64, using the URL-friendly character set: case-sensitive letters, digits and the characters _ and -.\n","kind":"String"},{"word":"hex","info":"hex - The generated id presented in padded hexadecimal digits. This result will always be twice as long as the requested byte length.\n","kind":"String"},{"word":"b64_std","kind":"String"},{"word":"b64_url","kind":"String"},{"word":"byte_length","kind":"Int"},{"word":"dec","kind":"String"},{"word":"keepers","kind":"Map"},{"word":"prefix","kind":"String"},{"word":"id","kind":"String"}]},"pet":{"provider":"random","arguments":[{"word":"keepers","info":"keepers - (Optional) Arbitrary map of values that, when changed, will\ntrigger a new id to be generated. See\nthe main provider documentation for more information.","kind":"Map(O)"},{"word":"length","info":"length - (Optional) The length (in words) of the pet name.","kind":"Int(O)"},{"word":"prefix","info":"prefix - (Optional) A string to prefix the name with.","kind":"String(O)"},{"word":"separator","kind":"String(O)"}],"attributes":[{"word":"keepers","kind":"Map"},{"word":"length","kind":"Int"},{"word":"prefix","kind":"String"},{"word":"separator","kind":"String"},{"word":"id","kind":"String"}]},"shuffle":{"provider":"random","arguments":[{"word":"input","info":"input - (Required) The list of strings to shuffle.","kind":"List(R)"},{"word":"result_count","info":"result_count - (Optional) The number of results to return. Defaults to\nthe number of items in the input list. If fewer items are requested,\nsome elements will be excluded from the result. If more items are requested,\nitems will be repeated in the result but not more frequently than the number\nof items in the input list.","kind":"Int(O)"},{"word":"keepers","info":"keepers - (Optional) Arbitrary map of values that, when changed, will\ntrigger a new id to be generated. See\nthe main provider documentation for more information.","kind":"Map(O)"},{"word":"seed","kind":"String(O)"}],"attributes":[{"word":"input","kind":"List"},{"word":"keepers","kind":"Map"},{"word":"result","kind":"List"},{"word":"result_count","kind":"Int"},{"word":"seed","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/scaleway.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{"ip":{"provider":"scaleway","arguments":[{"word":"server","kind":"String(O)"}],"attributes":[{"word":"id","info":"id - id of the new resource\n","kind":"String"},{"word":"ip","kind":"String"},{"word":"server","kind":"String"}]},"server":{"provider":"scaleway","arguments":[{"word":"name","info":"name - (Required) name of server\n","kind":"String(R)"},{"word":"image","info":"image - (Required) base image of server\n","kind":"String(R)"},{"word":"type","info":"type - (Required) type of server\n","kind":"String(R)"},{"word":"bootscript","info":"bootscript - (Optional) server bootscript\n","kind":"String(O)"},{"word":"tags","info":"tags - (Optional) list of tags for server\n","kind":"List(O)"},{"word":"enable_ipv6","info":"enable_ipv6 - (Optional) enable ipv6\n","kind":"Bool(O)"},{"word":"dynamic_ip_required","info":"dynamic_ip_required - (Optional) make server publicly available\n","kind":"Bool(O)"},{"word":"security_group","kind":"String(O)"},{"word":"state","kind":"String(O)"},{"word":"volume","kind":"List(O)(B)","subblock":[{"word":"size_in_gb","kind":"Int(R)"},{"word":"type","kind":"String(R)"}]}],"attributes":[{"word":"id","info":"id - id of the new resource\n","kind":"String"},{"word":"private_ip","info":"private_ip - private ip of the new resource\n","kind":"String"},{"word":"bootscript","kind":"String"},{"word":"dynamic_ip_required","kind":"Bool"},{"word":"enable_ipv6","kind":"Bool"},{"word":"image","kind":"String"},{"word":"name","kind":"String"},{"word":"public_ip","kind":"String"},{"word":"public_ipv6","kind":"String"},{"word":"security_group","kind":"String"},{"word":"state","kind":"String"},{"word":"state_detail","kind":"String"},{"word":"tags","kind":"List"},{"word":"type","kind":"String"},{"word":"volume","kind":"List(B)","subblock":[{"word":"size_in_gb","kind":"Int"},{"word":"type","kind":"String"},{"word":"volume_id","kind":"String"},{"word":"id","kind":"String"}]}]},"security_group":{"provider":"scaleway","arguments":[{"word":"name","info":"name - (Required) name of security group\n","kind":"String(R)"},{"word":"description","kind":"String(R)"}],"attributes":[{"word":"description","kind":"String"},{"word":"name","kind":"String"},{"word":"id","kind":"String"}]},"security_group_rule":{"provider":"scaleway","arguments":[{"word":"action","info":"action - (Required) action of rule (accept, drop)\n","kind":"String(R)"},{"word":"direction","info":"direction - (Required) direction of rule (inbound, outbound)\n","kind":"String(R)"},{"word":"ip_range","info":"ip_range - (Required) ip_range of rule\n","kind":"String(R)"},{"word":"protocol","info":"protocol - (Required) protocol of rule (ICMP, TCP, UDP)\n","kind":"String(R)"},{"word":"port","kind":"Int(O)"},{"word":"security_group","kind":"String(R)"}],"attributes":[{"word":"action","kind":"String"},{"word":"direction","kind":"String"},{"word":"ip_range","kind":"String"},{"word":"port","kind":"Int"},{"word":"protocol","kind":"String"},{"word":"security_group","kind":"String"},{"word":"id","kind":"String"}]},"volume":{"provider":"scaleway","arguments":[{"word":"name","info":"name - (Required) name of volume\n","kind":"String(R)"},{"word":"size_in_gb","info":"size_in_gb - (Required) size of the volume in GB\n","kind":"Int(R)"},{"word":"type","kind":"String(R)"}],"attributes":[{"word":"name","kind":"String"},{"word":"server","kind":"String"},{"word":"size_in_gb","kind":"Int"},{"word":"type","kind":"String"},{"word":"id","kind":"String"}]},"volume_attachment":{"provider":"scaleway","arguments":[{"word":"server","info":"server - (Required) id of the server\n","kind":"String(R)"},{"word":"volume","kind":"String(R)"}],"attributes":[{"word":"server","kind":"String"},{"word":"volume","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{"bootscript":{"provider":"scaleway","arguments":[{"word":"architecture","info":"architecture - (Optional) any supported Scaleway architecture, e.g. x86_64, arm","kind":"String(O)"},{"word":"name_filter","info":"name_filter - (Optional) Regexp to match Bootscript name by","kind":"String(O)"},{"word":"name","kind":"String(O)"}],"attributes":[{"word":"architecture","info":"architecture - architecture of the Bootscript, e.g. arm or x86_64\n","kind":"String"},{"word":"organization","info":"organization - uuid of the organization owning this Bootscript\n","kind":"String"},{"word":"public","info":"public - is this a public bootscript\n","kind":"Bool"},{"word":"boot_cmd_args","info":"boot_cmd_args - command line arguments used for booting\n","kind":"String"},{"word":"dtb","info":"dtb - path to Device Tree Blob detailing hardware information\n","kind":"String"},{"word":"initrd","info":"initrd - URL to initial ramdisk content\n","kind":"String"},{"word":"kernel","kind":"String"},{"word":"name","kind":"String"},{"word":"name_filter","kind":"String"},{"word":"id","kind":"String"}]},"image":{"provider":"scaleway","arguments":[{"word":"architecture","info":"architecture - (Required) any supported Scaleway architecture, e.g. x86_64, arm","kind":"String(R)"},{"word":"name_filter","info":"name_filter - (Optional) Regexp to match Image name by","kind":"String(O)"},{"word":"name","kind":"String(O)"}],"attributes":[{"word":"architecture","info":"architecture - architecture of the Image, e.g. arm or x86_64\n","kind":"String"},{"word":"organization","info":"organization - uuid of the organization owning this Image\n","kind":"String"},{"word":"public","info":"public - is this a public bootscript\n","kind":"Bool"},{"word":"creation_date","kind":"String"},{"word":"name","kind":"String"},{"word":"name_filter","kind":"String"},{"word":"id","kind":"String"}]}},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/softlayer.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{"virtual_guest":{"provider":"softlayer","arguments":[{"word":"name","info":"name | string\n\n\nHostname for the computing instance.\n\nRequired\n\n\n","kind":"String(R)"},{"word":"domain","info":"domain | string\n\n\nDomain for the computing instance.\n\nRequired\n\n\n","kind":"String(R)"},{"word":"cpu","info":"cpu | int\n\n\nThe number of CPU cores to allocate.\n\nRequired\n\n\n","kind":"Int(R)"},{"word":"ram","info":"ram | int\n\n\nThe amount of memory to allocate in megabytes.\n\nRequired\n\n\n","kind":"Int(R)"},{"word":"region","info":"region | string\n\n\nSpecifies which datacenter the instance is to be provisioned in.\n\nRequired\n\n\n","kind":"String(R)"},{"word":"hourly_billing","info":"hourly_billing | boolean\n\n\nSpecifies the billing type for the instance. When true, the computing instance will be billed on hourly usage, otherwise it will be billed on a monthly basis.\n\nRequired\n\n\n","kind":"Bool(R)"},{"word":"local_disk","info":"local_disk | boolean\n\n\nSpecifies the disk type for the instance. When true, the disks for the computing instance will be provisioned on the host which it runs, otherwise SAN disks will be provisioned.\n\nRequired\n\n\n","kind":"Bool(R)"},{"word":"dedicated_acct_host_only","info":"dedicated_acct_host_only | boolean\n\n\nSpecifies whether or not the instance must only run on hosts with instances from the same account\n\nDefault: nil\n\nOptional\n\n\n","kind":"Bool(O)"},{"word":"image","info":"image | string\n\n\nAn identifier for the operating system to provision the computing instance with.\n\nConditionally required - Disallowed when blockDeviceTemplateGroup.globalIdentifier is provided, as the template will specify the operating system.\n\n\n","kind":"String(O)"},{"word":"block_device_template_group_gid","info":"block_device_template_group_gid | string\n\n\nA global identifier for the template to be used to provision the computing instance.\n\nConditionally required - Disallowed when operatingSystemReferenceCode is provided, as the template will specify the operating system.\n\n\n","kind":"String(O)"},{"word":"public_network_speed","info":"public_network_speed | int\n\n\nSpecifies the connection speed for the instance's network components.\n\nDefault: 10\n\nOptional\n\n\n","kind":"Int(O)"},{"word":"private_network_only","info":"private_network_only | boolean\n\n\nSpecifies whether or not the instance only has access to the private network. When true this flag specifies that a compute instance is to only have access to the private network.\n\nDefault: False\n\nOptional\n\n\n","kind":"Bool(O)"},{"word":"frontend_vlan_id","info":"frontend_vlan_id | int\n\n\nSpecifies the network VLAN which is to be used for the front end interface of the computing instance.\n\nDefault: nil\n\nOptional\n\n\n","kind":"String(O)"},{"word":"backend_vlan_id","info":"backend_vlan_id | int\n\n\nSpecifies the network VLAN which is to be used for the back end interface of the computing instance.\n\nDefault: nil\n\nOptional\n\n\n","kind":"String(O)"},{"word":"disks","info":"disks | array\n\n\nBlock device and disk image settings for the computing instance\n\nOptional\n\nDefault: The smallest available capacity for the primary disk will be used. If an image template is specified the disk capacity will be be provided by the template.\n\n\n","kind":"List(O)"},{"word":"user_data","info":"user_data | string\n\n\nArbitrary data to be made available to the computing instance.\n\nDefault: nil\n\nOptional\n\n\n","kind":"String(O)"},{"word":"ssh_keys","info":"ssh_keys | array\n\n\nSSH keys to install on the computing instance upon provisioning.\n\nDefault: nil\n\nOptional\n\n\n","kind":"List(O)"},{"word":"post_install_script_uri","kind":"String(O)"}],"attributes":[{"word":"backend_vlan_id","kind":"String"},{"word":"block_device_template_group_gid","kind":"String"},{"word":"cpu","kind":"Int"},{"word":"dedicated_acct_host_only","kind":"Bool"},{"word":"disks","kind":"List"},{"word":"domain","kind":"String"},{"word":"frontend_vlan_id","kind":"String"},{"word":"hourly_billing","kind":"Bool"},{"word":"image","kind":"String"},{"word":"ipv4_address","kind":"String"},{"word":"ipv4_address_private","kind":"String"},{"word":"local_disk","kind":"Bool"},{"word":"name","kind":"String"},{"word":"post_install_script_uri","kind":"String"},{"word":"private_network_only","kind":"Bool"},{"word":"public_network_speed","kind":"Int"},{"word":"ram","kind":"Int"},{"word":"region","kind":"String"},{"word":"ssh_keys","kind":"List"},{"word":"user_data","kind":"String"},{"word":"id","kind":"String"}]},"ssh_key":{"provider":"softlayer","arguments":[{"word":"name","info":"name - (Required) A descriptive name used to identify an SSH key.\n","kind":"String(R)"},{"word":"public_key","info":"public_key - (Required) The public SSH key.\n","kind":"String(R)"},{"word":"notes","kind":"String(O)"}],"attributes":[{"word":"id","info":"id - The ID of the new SSH key\n","kind":"Int"},{"word":"fingerprint","kind":"String"},{"word":"name","kind":"String"},{"word":"notes","kind":"String"},{"word":"public_key","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/statuscake.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{"test":{"provider":"statuscake","arguments":[{"word":"website_name","info":"website_name - (Required) This is the name of the test and the website to be monitored.\n","kind":"String(R)"},{"word":"website_url","info":"website_url - (Required) The URL of the website to be monitored\n","kind":"String(R)"},{"word":"check_rate","info":"check_rate - (Optional) Test check rate in seconds. Defaults to 300\n","kind":"Int(O)"},{"word":"contact_id","info":"contact_id - (Optional) The id of the contact group to be add to the test. Each test can have only one.\n","kind":"Int(O)"},{"word":"test_type","info":"test_type - (Required) The type of Test. Either HTTP or TCP\n","kind":"String(R)"},{"word":"paused","info":"paused - (Optional) Whether or not the test is paused. Defaults to false.\n","kind":"Bool(O)"},{"word":"timeout","info":"timeout - (Optional) The timeout of the test in seconds.\n","kind":"Int(O)"},{"word":"confirmations","info":"confirmations - (Optional) The number of confirmation servers to use in order to detect downtime. Defaults to 0.\n","kind":"Int(O)"},{"word":"port","info":"port - (Optional) The port to use when specifying a TCP test.\n","kind":"Int(O)"},{"word":"trigger_rate","kind":"Int(O)"}],"attributes":[{"word":"check_rate","kind":"Int"},{"word":"confirmations","kind":"Int"},{"word":"contact_id","kind":"Int"},{"word":"paused","kind":"Bool"},{"word":"port","kind":"Int"},{"word":"test_id","kind":"String"},{"word":"test_type","kind":"String"},{"word":"timeout","kind":"Int"},{"word":"trigger_rate","kind":"Int"},{"word":"website_name","kind":"String"},{"word":"website_url","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/template.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{"dir":{"provider":"template","arguments":[{"word":"source_dir","info":"source_dir - (Required) Path to the directory where the files to template reside.","kind":"String(R)"},{"word":"destination_dir","info":"destination_dir - (Required) Path to the directory where the templated files will be written.","kind":"String(R)"},{"word":"vars","kind":"Map(O)"}],"attributes":[{"word":"destination_dir","kind":"String"},{"word":"source_dir","kind":"String"},{"word":"vars","kind":"Map"},{"word":"id","kind":"String"}]},"cloudinit_config":{"arguments":[{"word":"base64_encode","kind":"Bool(O)"},{"word":"gzip","kind":"Bool(O)"},{"word":"part","kind":"List(R)(B)","subblock":[{"word":"content","kind":"String(R)"},{"word":"content_type","kind":"String(O)"},{"word":"filename","kind":"String(O)"},{"word":"merge_type","kind":"String(O)"}]}],"attributes":[{"word":"base64_encode","kind":"Bool"},{"word":"gzip","kind":"Bool"},{"word":"part","kind":"List(B)","subblock":[{"word":"content","kind":"String"},{"word":"content_type","kind":"String"},{"word":"filename","kind":"String"},{"word":"merge_type","kind":"String"},{"word":"id","kind":"String"}]},{"word":"rendered","kind":"String"},{"word":"id","kind":"String"}]},"file":{"arguments":[{"word":"filename","kind":"String(O)"},{"word":"template","kind":"String(O)"},{"word":"vars","kind":"Map(O)"}],"attributes":[{"word":"filename","kind":"String"},{"word":"rendered","kind":"String"},{"word":"template","kind":"String"},{"word":"vars","kind":"Map"},{"word":"id","kind":"String"}]}},"datas":{"file":{"provider":"template","arguments":[{"word":"template","info":"template - (Required) The contents of the template. These can be loaded\nfrom a file on disk using the file() interpolation\nfunction.","kind":"String(O)"},{"word":"filename","kind":"String(O)"},{"word":"vars","kind":"Map(O)"}],"attributes":[{"word":"template","info":"template - See Argument Reference above.\n","kind":"String"},{"word":"vars","info":"vars - See Argument Reference above.\n","kind":"Map"},{"word":"filename","kind":"String"},{"word":"rendered","kind":"String"},{"word":"id","kind":"String"}]},"cloudinit_config":{"provider":"template","arguments":[{"word":"gzip","info":"gzip - (Optional) Specify whether or not to gzip the rendered output. Default to true","kind":"Bool(O)"},{"word":"base64_encode","info":"base64_encode - (Optional) Base64 encoding of the rendered output. Default to true","kind":"Bool(O)"},{"word":"part","kind":"List(R)(B)","subblock":[{"word":"content","kind":"String(R)"},{"word":"content_type","kind":"String(O)"},{"word":"filename","kind":"String(O)"},{"word":"merge_type","kind":"String(O)"}]}],"attributes":[{"word":"base64_encode","kind":"Bool"},{"word":"gzip","kind":"Bool"},{"word":"part","kind":"List(B)","subblock":[{"word":"content","kind":"String"},{"word":"content_type","kind":"String"},{"word":"filename","kind":"String"},{"word":"merge_type","kind":"String"},{"word":"id","kind":"String"}]},{"word":"rendered","kind":"String"},{"word":"id","kind":"String"}]}},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/terraform.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{"remote_state":{"arguments":[{"word":"__has_dynamic_attributes","kind":"String(O)"},{"word":"backend","kind":"String(R)"},{"word":"config","kind":"Map(O)"},{"word":"environment","kind":"String(O)"}],"attributes":[{"word":"__has_dynamic_attributes","kind":"String"},{"word":"backend","kind":"String"},{"word":"config","kind":"Map"},{"word":"environment","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{"remote_state":{"provider":"terraform","arguments":[{"word":"backend","info":"backend - (Required) The remote backend to use.\n","kind":"String(R)"},{"word":"environment","info":"environment - (Optional) The Terraform environment to use.\n","kind":"String(O)"},{"word":"__has_dynamic_attributes","kind":"String(O)"},{"word":"config","kind":"Map(O)"}],"attributes":[{"word":"backend","info":"backend - See Argument Reference above.\n","kind":"String"},{"word":"__has_dynamic_attributes","kind":"String"},{"word":"config","kind":"Map"},{"word":"environment","kind":"String"},{"word":"id","kind":"String"}]}},"unknowns":{}} -------------------------------------------------------------------------------- /resources/providers_doc/vault.json: -------------------------------------------------------------------------------- 1 | {"provider_arguments":[],"resources":{"generic_secret":{"provider":"vault","arguments":[{"word":"path","info":"path - (Required) The full logical path at which to write the given\ndata. To write data into the \"generic\" secret backend mounted in Vault by\ndefault, this should be prefixed with secret/. Writing to other backends\nwith this resource is possible; consult each backend's documentation to\nsee which endpoints support the PUT and DELETE methods.","kind":"String(R)"},{"word":"data_json","info":"data_json - (Required) String containing a JSON-encoded object that\nwill be written as the secret data at the given path.","kind":"String(R)"},{"word":"allow_read","kind":"Bool(O)"}],"attributes":[{"word":"allow_read","kind":"Bool"},{"word":"data_json","kind":"String"},{"word":"path","kind":"String"},{"word":"id","kind":"String"}]},"policy":{"provider":"vault","arguments":[{"word":"name","info":"name - (Required) The name of the policy","kind":"String(R)"},{"word":"policy","kind":"String(R)"}],"attributes":[{"word":"name","kind":"String"},{"word":"policy","kind":"String"},{"word":"id","kind":"String"}]},"auth_backend":{"arguments":[{"word":"description","kind":"String(O)"},{"word":"path","kind":"String(O)"},{"word":"type","kind":"String(R)"}],"attributes":[{"word":"description","kind":"String"},{"word":"path","kind":"String"},{"word":"type","kind":"String"},{"word":"id","kind":"String"}]}},"datas":{"generic_secret":{"provider":"vault","arguments":[{"word":"path","kind":"String(R)"}],"attributes":[{"word":"data_json","info":"data_json - A string containing the full data payload retrieved from\nVault, serialized in JSON format.\n","kind":"String"},{"word":"data","info":"data - A mapping whose keys are the top-level data keys returned from\nVault and whose values are the corresponding values. This map can only\nrepresent string data, so any non-string values returned from Vault are\nserialized as JSON.\n","kind":"Map"},{"word":"lease_id","info":"lease_id - The lease identifier assigned by Vault, if any.\n","kind":"String"},{"word":"lease_duration","info":"lease_duration - The duration of the secret lease, in seconds relative\nto the time the data was requested. Once this time has passed any plan\ngenerated with this data may fail to apply.\n","kind":"Int"},{"word":"lease_start_time","info":"lease_start_time - As a convenience, this records the current time\non the computer where Terraform is running when the data is requested.\nThis can be used to approximate the absolute time represented by\nlease_duration, though users must allow for any clock drift and response\nlatency relative to to the Vault server.\n","kind":"String"},{"word":"lease_renewable","kind":"Bool"},{"word":"path","kind":"String"},{"word":"id","kind":"String"}]}},"unknowns":{}} -------------------------------------------------------------------------------- /templates/docs/.gitignore: -------------------------------------------------------------------------------- 1 | # Terraform files 2 | .terraform 3 | terraform.tfvars 4 | *.tfstate* 5 | -------------------------------------------------------------------------------- /templates/docs/CHANGELOG.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonbabenko/terrapin/19501e0367ef5c7b3f58c7b04637dcd995cb843e/templates/docs/CHANGELOG.md -------------------------------------------------------------------------------- /templates/docs/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017 Anton Babenko 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /templates/docs/README.md.tpl: -------------------------------------------------------------------------------- 1 | # {{ module_name|default('something') }} 2 | 3 | Terraform module which creates bastion host on AWS. 4 | 5 | # Example 6 | ``` 7 | module "new" { 8 | source = "https://modules.tf/terraform-community-modules/aws_bastion_s3_keys/v1.0.4" 9 | 10 | 11 | } 12 | ``` 13 | 14 | # Input variables 15 | ... 16 | 17 | # Output variables 18 | ... 19 | 20 | # License 21 | ... -------------------------------------------------------------------------------- /templates/examples/default/README.md: -------------------------------------------------------------------------------- 1 | # This is default example showing use of the module 2 | 3 | This example sets all required variables and outputs everything... 4 | 5 | # Variables 6 | {# {{ cached_variables }} #} 7 | 8 | # Outputs 9 | {# {{ cached_outputs }} #} 10 | -------------------------------------------------------------------------------- /templates/examples/default/main.tf.tpl: -------------------------------------------------------------------------------- 1 | # we only need to add provider here and not wrap it in the module, really 2 | provider "aws" { 3 | region = "eu-west-1" 4 | } 5 | 6 | module "default" { 7 | source = "../../src" 8 | 9 | # @todo: iterate through the whole set of variables required by this module and print them 10 | } 11 | -------------------------------------------------------------------------------- /templates/examples/default/outputs.tf.tpl: -------------------------------------------------------------------------------- 1 | # @todo: iterate through the whole set of outputs from the module and print them here 2 | 3 | //output "name" { 4 | // value = "${module.default.aws_instance_name}" 5 | //} 6 | 7 | -------------------------------------------------------------------------------- /templates/tests/.gitignore: -------------------------------------------------------------------------------- 1 | .terraform 2 | .kitchen -------------------------------------------------------------------------------- /templates/tests/.kitchen.yml.tpl: -------------------------------------------------------------------------------- 1 | --- 2 | driver: 3 | name: terraform 4 | 5 | platforms: 6 | - name: aws 7 | 8 | suites: 9 | - name: default 10 | verifier: 11 | name: terraform 12 | format: doc 13 | groups: 14 | - name: default 15 | attributes: 16 | sg_name: aws_security_group_bastion_id 17 | 18 | provisioner: 19 | name: terraform 20 | apply_timeout: 600 21 | color: true 22 | variable_files: 23 | - testing.tfvars 24 | directory: ../ 25 | -------------------------------------------------------------------------------- /templates/tests/Gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | source 'https://rubygems.org' 3 | 4 | group :testing do 5 | gem 'awspec' 6 | gem 'kitchen-terraform' 7 | gem 'rake' 8 | end 9 | -------------------------------------------------------------------------------- /templates/tests/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | activesupport (4.2.8) 5 | i18n (~> 0.7) 6 | minitest (~> 5.1) 7 | thread_safe (~> 0.3, >= 0.3.4) 8 | tzinfo (~> 1.1) 9 | addressable (2.5.1) 10 | public_suffix (~> 2.0, >= 2.0.2) 11 | artifactory (2.8.2) 12 | aws-sdk (2.9.40) 13 | aws-sdk-resources (= 2.9.40) 14 | aws-sdk-core (2.9.40) 15 | aws-sigv4 (~> 1.0) 16 | jmespath (~> 1.0) 17 | aws-sdk-resources (2.9.40) 18 | aws-sdk-core (= 2.9.40) 19 | aws-sigv4 (1.0.0) 20 | aws_config (0.1.0) 21 | awsecrets (1.11.0) 22 | aws-sdk (~> 2) 23 | aws_config (~> 0.1.0) 24 | awspec (0.81.1) 25 | activesupport (~> 4.0) 26 | aws-sdk (>= 2.2, < 2.10) 27 | awsecrets (~> 1.11) 28 | rspec (~> 3.0) 29 | rspec-its 30 | term-ansicolor 31 | thor 32 | blankslate (2.1.2.4) 33 | builder (3.2.3) 34 | coderay (1.1.1) 35 | diff-lcs (1.3) 36 | docker-api (1.33.4) 37 | excon (>= 0.38.0) 38 | json 39 | erubis (2.7.0) 40 | excon (0.57.0) 41 | faraday (0.12.1) 42 | multipart-post (>= 1.2, < 3) 43 | ffi (1.9.18) 44 | gssapi (1.2.0) 45 | ffi (>= 1.0.1) 46 | gyoku (1.3.1) 47 | builder (>= 2.1.2) 48 | hashie (3.5.5) 49 | httpclient (2.8.3) 50 | i18n (0.8.4) 51 | inspec (1.27.0) 52 | addressable (~> 2.4) 53 | faraday (>= 0.9.0) 54 | hashie (~> 3.4) 55 | json (>= 1.8, < 3.0) 56 | method_source (~> 0.8) 57 | mixlib-log 58 | parallel (~> 1.9) 59 | parslet (~> 1.5) 60 | pry (~> 0) 61 | rainbow (~> 2) 62 | rspec (~> 3) 63 | rspec-its (~> 1.2) 64 | rubyzip (~> 1.1) 65 | semverse 66 | sslshake (~> 1.2) 67 | thor (~> 0.19) 68 | toml (~> 0.1) 69 | train (>= 0.24.0, < 1.0) 70 | jmespath (1.3.1) 71 | json (2.1.0) 72 | kitchen-inspec (0.19.0) 73 | hashie (~> 3.4) 74 | inspec (>= 0.34.0, < 2.0.0) 75 | test-kitchen (~> 1.6) 76 | kitchen-terraform (0.7.0) 77 | hashie (~> 3.5) 78 | inspec (~> 1.0) 79 | kitchen-inspec (~> 0.14, >= 0.14.0) 80 | mixlib-shellout (~> 2.2, >= 2.2.6) 81 | ptools (~> 1.3) 82 | test-kitchen (~> 1.10, >= 1.10.0) 83 | little-plugger (1.1.4) 84 | logging (2.2.2) 85 | little-plugger (~> 1.1) 86 | multi_json (~> 1.10) 87 | method_source (0.8.2) 88 | minitest (5.10.2) 89 | mixlib-install (2.1.12) 90 | artifactory 91 | mixlib-shellout 92 | mixlib-versioning 93 | thor 94 | mixlib-log (1.7.1) 95 | mixlib-shellout (2.2.7) 96 | mixlib-versioning (1.1.0) 97 | multi_json (1.12.1) 98 | multipart-post (2.0.0) 99 | net-scp (1.2.1) 100 | net-ssh (>= 2.6.5) 101 | net-ssh (4.1.0) 102 | net-ssh-gateway (1.3.0) 103 | net-ssh (>= 2.6.5) 104 | nori (2.6.0) 105 | parallel (1.11.2) 106 | parslet (1.5.0) 107 | blankslate (~> 2.0) 108 | pry (0.10.4) 109 | coderay (~> 1.1.0) 110 | method_source (~> 0.8.1) 111 | slop (~> 3.4) 112 | ptools (1.3.3) 113 | public_suffix (2.0.5) 114 | rainbow (2.2.2) 115 | rake 116 | rake (12.0.0) 117 | rspec (3.6.0) 118 | rspec-core (~> 3.6.0) 119 | rspec-expectations (~> 3.6.0) 120 | rspec-mocks (~> 3.6.0) 121 | rspec-core (3.6.0) 122 | rspec-support (~> 3.6.0) 123 | rspec-expectations (3.6.0) 124 | diff-lcs (>= 1.2.0, < 2.0) 125 | rspec-support (~> 3.6.0) 126 | rspec-its (1.2.0) 127 | rspec-core (>= 3.0.0) 128 | rspec-expectations (>= 3.0.0) 129 | rspec-mocks (3.6.0) 130 | diff-lcs (>= 1.2.0, < 2.0) 131 | rspec-support (~> 3.6.0) 132 | rspec-support (3.6.0) 133 | rubyntlm (0.6.2) 134 | rubyzip (1.2.1) 135 | safe_yaml (1.0.4) 136 | semverse (2.0.0) 137 | slop (3.6.0) 138 | sslshake (1.2.0) 139 | term-ansicolor (1.6.0) 140 | tins (~> 1.0) 141 | test-kitchen (1.16.0) 142 | mixlib-install (>= 1.2, < 3.0) 143 | mixlib-shellout (>= 1.2, < 3.0) 144 | net-scp (~> 1.1) 145 | net-ssh (>= 2.9, < 5.0) 146 | net-ssh-gateway (~> 1.2) 147 | safe_yaml (~> 1.0) 148 | thor (~> 0.19, < 0.19.2) 149 | thor (0.19.1) 150 | thread_safe (0.3.6) 151 | tins (1.14.0) 152 | toml (0.1.2) 153 | parslet (~> 1.5.0) 154 | train (0.24.0) 155 | docker-api (~> 1.26) 156 | json (>= 1.8, < 3.0) 157 | mixlib-shellout (~> 2.0) 158 | net-scp (~> 1.2) 159 | net-ssh (>= 2.9, < 5.0) 160 | winrm (~> 2.0) 161 | winrm-fs (~> 1.0) 162 | tzinfo (1.2.3) 163 | thread_safe (~> 0.1) 164 | winrm (2.2.3) 165 | builder (>= 2.1.2) 166 | erubis (~> 2.7) 167 | gssapi (~> 1.2) 168 | gyoku (~> 1.0) 169 | httpclient (~> 2.2, >= 2.2.0.2) 170 | logging (>= 1.6.1, < 3.0) 171 | nori (~> 2.0) 172 | rubyntlm (~> 0.6.0, >= 0.6.1) 173 | winrm-fs (1.0.1) 174 | erubis (~> 2.7) 175 | logging (>= 1.6.1, < 3.0) 176 | rubyzip (~> 1.1) 177 | winrm (~> 2.0) 178 | 179 | PLATFORMS 180 | ruby 181 | 182 | DEPENDENCIES 183 | awspec 184 | kitchen-terraform 185 | rake 186 | 187 | BUNDLED WITH 188 | 1.15.1 189 | -------------------------------------------------------------------------------- /templates/tests/README.md: -------------------------------------------------------------------------------- 1 | Put testing requirements here in yaml-like format, for eg: 2 | * Required version of Terraform 3 | * Required version of testing framework 4 | 5 | terraform_version: latest 6 | terraform_kitchen: latest 7 | 8 | # Install dependencies 9 | 10 | sudo gem install -n /usr/local/bin test-kitchen kitchen-terraform awspec kitchen-verifier-awspec 11 | 12 | Some examples: 13 | https://github.com/search?utf8=%E2%9C%93&q=spec_helper+terraform+vpc&type=Code 14 | https://github.com/johnrengelman/terraform-spec/blob/master/example-module/Makefile 15 | https://github.com/tobyclemson/terraform-aws-base-networking/ 16 | 17 | Working example: 18 | https://github.com/howdoicomputer/terrashovel/tree/master/templates 19 | 20 | Action plan 21 | ----------- 22 | * During template rendering generate list of resources, variables, types, outputs in cached-meta-file 23 | * Using cached-meta-file generate kitchen-terraform files, terraform.tfvars 24 | * Run tests using specific version of Terraform (using docker, or not) 25 | 26 | Tests should verify that requested resources were created properly with correct values. 27 | 28 | Extra: Add acceptance tests which act more as smoke tests 29 | 30 | Use kitchen.ci + awsspec or terraform-kitchen 31 | 32 | Generate report, which should be included in the documentation -------------------------------------------------------------------------------- /templates/tests/test/fixtures/default/module.tf: -------------------------------------------------------------------------------- 1 | # we only need to add provider here and not wrap it in the module, really 2 | provider "aws" { 3 | region = "eu-west-1" 4 | } 5 | 6 | module "default" { 7 | source = "../../../../" 8 | } 9 | -------------------------------------------------------------------------------- /templates/tests/test/fixtures/default/outputs.tf: -------------------------------------------------------------------------------- 1 | //output "name" { 2 | // value = "${module.default.aws_instance_name}" 3 | //} 4 | -------------------------------------------------------------------------------- /templates/tests/test/integration/default/controls/aa.txt.tpl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonbabenko/terrapin/19501e0367ef5c7b3f58c7b04637dcd995cb843e/templates/tests/test/integration/default/controls/aa.txt.tpl -------------------------------------------------------------------------------- /templates/tests/test/integration/default/controls/sg_spec.rb: -------------------------------------------------------------------------------- 1 | require 'awspec' 2 | Awsecrets.load 3 | 4 | sg_name = attribute 'sg_name', {} 5 | 6 | control 'default' do 7 | describe "the sg #{sg_name}" do 8 | subject { security_group(sg_name) } 9 | 10 | it { should exist } 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /templates/tests/test/integration/default/controls/state_file_spec.rb: -------------------------------------------------------------------------------- 1 | terraform_state = attribute 'terraform_state', {} 2 | 3 | control 'state_file' do 4 | describe 'the Terraform state file' do 5 | subject { json(terraform_state).terraform_version } 6 | 7 | it('is accessible') { is_expected.to match(/\d+\.\d+\.\d+/) } 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /templates/tests/testing.tfvars: -------------------------------------------------------------------------------- 1 | image_id = "ami-6c101b0a" # ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server in eu-west-1 2 | 3 | instance_type = "t2.micro" 4 | max_size = 1 5 | min_size = 1 6 | desired_capacity = 1 7 | 8 | vpc_id = "vpc-9651acf1" # static one with cidr 172.31.0.0/16 9 | subnet_ids = ["subnet-6fe3d837"] # static in eu-west-1c -------------------------------------------------------------------------------- /terrapin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonbabenko/terrapin/19501e0367ef5c7b3f58c7b04637dcd995cb843e/terrapin.png -------------------------------------------------------------------------------- /tests/templates/basic/basic.jinja2: -------------------------------------------------------------------------------- 1 | {% call resource('aws_security_group', 'bastion') %} 2 | 3 | {{ variable('name', description="Name of VPC") }} 4 | {{ variable('vpc_id') }} 5 | {{ variable('tags') }} 6 | 7 | {% endcall %} 8 | 9 | {{ variables() }} 10 | 11 | {{ outputs() }} -------------------------------------------------------------------------------- /tests/templates/basic/basic.tf: -------------------------------------------------------------------------------- 1 | resource "aws_security_group" "bastion" { 2 | name = "${var.name}" 3 | 4 | vpc_id = "${var.vpc_id}" 5 | 6 | tags = "${var.tags}" 7 | } 8 | 9 | variable "name" { 10 | description = "Name of VPC" 11 | 12 | default = "" 13 | } 14 | 15 | variable "tags" { 16 | type = "map" 17 | 18 | default = {} 19 | } 20 | 21 | variable "vpc_id" { 22 | default = "" 23 | } 24 | 25 | # aws_security_group.bastion 26 | output "aws_security_group_bastion_id" { 27 | value = "${aws_security_group.bastion.id}" 28 | } 29 | 30 | output "aws_security_group_bastion_vpc_id" { 31 | value = "${aws_security_group.bastion.vpc_id}" 32 | } 33 | 34 | output "aws_security_group_bastion_owner_id" { 35 | value = "${aws_security_group.bastion.owner_id}" 36 | } 37 | 38 | output "aws_security_group_bastion_name" { 39 | value = "${aws_security_group.bastion.name}" 40 | } 41 | 42 | output "aws_security_group_bastion_description" { 43 | value = "${aws_security_group.bastion.description}" 44 | } 45 | 46 | output "aws_security_group_bastion_ingress" { 47 | value = "${aws_security_group.bastion.ingress}" 48 | } 49 | 50 | output "aws_security_group_bastion_egress" { 51 | value = "${aws_security_group.bastion.egress}" 52 | } 53 | 54 | output "aws_security_group_bastion_name_prefix" { 55 | value = "${aws_security_group.bastion.name_prefix}" 56 | } 57 | 58 | output "aws_security_group_bastion_tags" { 59 | value = "${aws_security_group.bastion.tags}" 60 | } -------------------------------------------------------------------------------- /tests/templates/basic/test_extension.jinja2: -------------------------------------------------------------------------------- 1 | # Arguments (variables): 2 | # type1 (String)={% get_argument('resource', 'aws_security_group', 'name', 'Type') %} 3 | # type2 (String)={% get_argument('data', 'aws_iam_server_certificate', 'name', 'Type') %} 4 | # type3 (Map)={% get_argument('resource', 'random_pet', 'keepers', 'Type') %} 5 | # type4 (Int)={% get_argument('resource', 'random_pet', 'length', 'Type') %} 6 | # type5 (List)={% get_argument('resource', 'random_shuffle', 'input', 'Type') %} 7 | 8 | # Attributes (outputs): 9 | # attr1={% get_attributes('resource', 'random_shuffle') %} 10 | # attr2={% get_attributes('data', 'aws_iam_server_certificate') %} 11 | 12 | -------------------------------------------------------------------------------- /tests/templates/basic/test_extension.tf: -------------------------------------------------------------------------------- 1 | # Arguments (variables): 2 | # type1 (String)=TypeString 3 | # type2 (String)=TypeString 4 | # type3 (Map)=TypeMap 5 | # type4 (Int)=TypeInt 6 | # type5 (List)=TypeList 7 | # Attributes (outputs): 8 | # attr1=input,keepers,result,result_count,seed,id 9 | # attr2=arn,expiration_date,id,latest,name,name_prefix,path 10 | --------------------------------------------------------------------------------