terraform内联函数错误,包含无效字符

terraform内联函数错误,包含无效字符,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我正在尝试在内联函数中添加以下内容,以设置主机名、更新resolv.conf并向/etc/hosts添加IP。如果我只是使用它来设置主机名,那么这很好,但是当我尝试执行其余部分时,会出现以下错误 inline = [ "sudo hostnamectl set-hostname --static ${format("%s%s", self.tags["Name"], ".mydomain.com")}", &

我正在尝试在内联函数中添加以下内容,以设置主机名、更新resolv.conf并向/etc/hosts添加IP。如果我只是使用它来设置主机名,那么这很好,但是当我尝试执行其余部分时,会出现以下错误

inline = [
  "sudo hostnamectl set-hostname --static ${format("%s%s", self.tags["Name"], ".mydomain.com")}",
  "sudo sed -i.bak "1s/.*/search mydomain.com mydomain.local/" /etc/resolv.conf",
  "echo -e "192.168.1.1\ttesting.mydomain.com\ttesting" | sudo tee -a /etc/hosts > /dev/null"
]
地形图输出


  on main.tf line 52, in resource "aws_instance" "temp":
  50: 
  51: 
  52:       "sudo sed -i.bak "1s/.*/search mydomain.com mydomain.local/" /etc/resolv.conf",

Expected a comma to mark the beginning of the next item.


Error: Invalid character

  on main.tf line 53, in resource "aws_instance" "temp":
  53:       "echo -e "192.168.1.1\ttesting.mydomain.com\ttesting" | sudo tee -a /etc/hosts > /dev/null"

This character is not used within the language.


Error: Invalid character

  on main.tf line 53, in resource "aws_instance" "temp":
  53:       "echo -e "192.168.1.1\ttesting.mydomain.com\ttesting" | sudo tee -a /etc/hosts > /dev/null"

This character is not used within the language.


Error: Invalid character

  on main.tf line 53, in resource "aws_instance" "temp":
  53:       "echo -e "192.168.1.1\ttesting.mydomain.com\ttesting" | sudo tee -a /etc/hosts > /dev/null"

This character is not used within the language.
有什么想法吗


谢谢

您的命令没有正确填充和执行。只要适当地逃离他们

inline = [
  "sudo hostnamectl set-hostname --static ${format("%s%s", self.tags[\"Name\"], \".mydomain.com\")}",
  "sudo sed -i.bak "1s/.*/search mydomain.com mydomain.local/" /etc/resolv.conf",
  "echo -e \"192.168.1.1\ttesting.mydomain.com\ttesting \" | sudo tee -a /etc/hosts > /dev/null"
]

使用其他Terraform语言功能将您的集合转换为适合内嵌的形状

inline = flatten([
 "sudo hostnamectl set-hostname --static ${format("%s%s", self.tags["Name"], 
 ".mydomain.com")}",
 "sudo sed -i.bak "1s/.*/search mydomain.com mydomain.local/" /etc/resolv.conf",
 "echo -e "192.168.1.1\ttesting.mydomain.com\ttesting" | sudo tee -a /etc/hosts > 
 /dev/null"
])

我可以通过添加一个文件provisioner来绕过这个问题,将两行代码作为脚本添加到rile provisioner中,然后远程执行。使用一个内联远程执行资源调配器试图避免这种情况,但只是共享有效的资源

您是否尝试过转义,比如
“echo-e\”192.168.1.1\ttesting.mydomain.com\ttesting\“| sudo tee-a/etc/hosts>/dev/null”
或者这样:`“echo-e'192.168.1.1\ttesting.mydomain.com\ttesting';sudo tee-a/etc/hosts>/dev/null”@布鲁诺克里亚多-谢谢。是的,我试过了。它们似乎不起作用(包括单引号和转义字符)。我在资源“aws_instance”“temp”中的main.tf行53上得到了以下“错误:缺少项分隔符”:51:52:53:“sudo sed-I.bak'1s/*/search mydomain.com mydomain.local/'/etc/resolv.conf,应使用逗号标记下一项的开头```展平选项似乎也不起作用