从零开始的Terraform之旅- 4命令部分-代码编写相关命令

4命令部分-代码编写相关命令

terraform 主要使用的就是代码,这里有几个跟代码相关的命令介绍一下

console命令

这个命令可以提供一个交互式,测试很好用

也可以通过echo 传脚本进去

[waooo!!@terraform ~]$ echo 'split(",", "foo,bar,baz")' | terraform console
tolist([
  "foo",
  "bar",
  "baz",
])

console 命令会从state 文件读值, 输出的话直接给地址就行

测试1. 直接进console, (当前已经apply 过了 所以有state文件)

> aws_s3_bucket.bucket.region
"cn-north-1"

测试2 把这个state删了, 就拿不到这个

> aws_s3_bucket.bucket
(known after apply)

测试3 把这个命令加上-plan 可以像plan一样给一些plan出来的值用于调用

[waooo!!@terraform providertest]$ terraform console -plan
> aws_s3_bucket.bucket.region
"cn-north-1"
>

测试4 这里使用console去测试一下带出的结果,这里可以用函数测试

variable "apps" {
  type = map(any)
  default = {
    "foo" = {
      "region" = "us-east-1",
    },
    "bar" = {
      "region" = "eu-west-1",
    },
    "baz" = {
      "region" = "ap-south-1",
    },
  }
}

resource "random_pet" "example" {
  for_each = var.apps
}



> { for key, value in var.apps : key => value if value.region == "us-east-1" }
{
  "foo" = {
    "region" = "us-east-1"
  }
}


> random_pet.example
{
  "bar" = {
    "id" = (known after apply)
    "keepers" = tomap(null) /* of string */
    "length" = 2
    "prefix" = tostring(null)
    "separator" = "-"
  }
  "baz" = {
    "id" = (known after apply)
    "keepers" = tomap(null) /* of string */
    "length" = 2
    "prefix" = tostring(null)
    "separator" = "-"
  }
  "foo" = {
    "id" = (known after apply)
    "keepers" = tomap(null) /* of string */
    "length" = 2
    "prefix" = tostring(null)
    "separator" = "-"
  }
}

>  cidrnetmask("172.16.0.0/12")
"255.240.0.0"

fmt命令

用于格式化tf文件,通常来讲直接用就行, 有时候希望执行多个目录可以加-recursive参数, 递归格式化

validate命令

这个命令用于验证语法是否合规,如果要验证资源创建逻辑可以用plan命令

使用json模式可以看到一些详细信息,比如:

[ec2-user@ip-10-0-0-34 ec]$ terraform validate -json
{
  "format_version": "1.0",
  "valid": true,
  "error_count": 0,
  "warning_count": 0,
  "diagnostics": []
}
[ec2-user@ip-10-0-0-34 ec]$



[waooo!!@terraform providertest]$ terraform validate -json
{
  "format_version": "1.0",
  "valid": false,
  "error_count": 1,
  "warning_count": 0,
  "diagnostics": [
    {
      "severity": "error",
      "summary": "Unsupported argument",
      "detail": "An argument named \"buciket\" is not expected here. Did you mean \"bucket\"?",
      "range": {
        "filename": "s3.tf",
        "start": {
          "line": 2,
          "column": 3,
          "byte": 41
        },
        "end": {
          "line": 2,
          "column": 10,
          "byte": 48
        }
      },
      "snippet": {
        "context": "resource \"aws_s3_bucket\" \"felixtest\"",
        "code": "  buciket = \"felixtftestprovider1\"",
        "start_line": 2,
        "highlight_start_offset": 2,
        "highlight_end_offset": 9,
        "values": []
      }
    }
  ]
}
[waooo!!@terraform providertest]$ terraform validate
╷
│ Error: Unsupported argument
│
│   on s3.tf line 2, in resource "aws_s3_bucket" "felixtest":2:   buciket = "felixtftestprovider1"
│
│ An argument named "buciket" is not expected here. Did you mean "bucket"?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值