【问题标题】:How to set chef node "normal" attributes in Terraform如何在 Terraform 中设置厨师节点“正常”属性
【发布时间】:2017-07-24 02:46:15
【问题描述】:

我有以下地形文件:

resource "aws_instance" "hazelcast" {
ami           = "ami-11aa8c74"
instance_type = "t2.micro"
key_name      = "demo_terraform"
security_groups = ["ssh"]
tags {
      Name = "chef node - hazelcast"
}
provisioner "chef" {
  environment     = "${var.chef_environment}"
  run_list        = "${var.chef_run_list_hazelcast}"
  node_name       = "hazelcast_node"
  server_url      = "https://${var.chef_server}/organizations/${var.chef_organization}"
  secret_key      = "${file("~/terraform/chef-repo/encrypted_data_bag_secret")}"
  recreate_client = true
  ssl_verify_mode = ":verify_none"
  user_name       = "${var.chef_username}"
  user_key        = "${file("~/terraform/chef-repo/.chef/${var.chef_username}.pem")}"
  version         = "${var.chef_client_version}"
  attributes_json = <<-EOF
  {
    "team": "Cloud",
    "install_mancenter": false,
    "hazelcast_version": "3.6.2-2",
    "max_heap_size": "1G",
    "min_heap_size": "1G"      }
}
connection {
  type     = "ssh"
  user = "ec2-user"
  private_key = "${file("/temp/basics/demo_terraform.pem")}"
  agent = false
}
}
resource "aws_eip" "hazelcast" {
  instance   = "${aws_instance.hazelcast.id}"
  depends_on = ["aws_instance.hazelcast"]
}
output "address_hazelcast" {
    value = "${aws_instance.hazelcast.public_ip}"
}

在 hazelcast 配方中,我使用上面定义的普通属性来搜索具有相同特征的节点:

nodes = search(:node, "role:lc_hazelcast AND chef_environment:#{node.chef_environment} AND team:#{node.team}")

我还将普通属性存储在一些变量中,例如:

hazelcast_version=node.hazelcast_version
min_heap_size=node.min_heap_size
max_heap_size=node.max_heap_size

问题是当我运行 terraform apply 时,我得到了这个错误:

aws_instance.hazelcast (chef): NoMethodError
aws_instance.hazelcast (chef): -------------
aws_instance.hazelcast (chef): undefined method `team' for #
<Chef::Node::Attribute:0x00000003752350>

说它找不到我在我的 tf 文件中定义的任何属性。

我应该如何定义普通属性,以便在节点引导并运行运行列表时可以看到这些属性?

我错过了什么? 谢谢, 加布里埃尔

【问题讨论】:

    标签: chef-infra terraform


    【解决方案1】:

    应该是node["team"]。我们很久以前就弃用了方法语法,并在 Chef 13 中将其删除。

    【讨论】:

    • 你是正确的,就像往常一样。谢谢!