Terraform `local-exec` 设置本地别名

Posted

技术标签:

【中文标题】Terraform `local-exec` 设置本地别名【英文标题】:Terraform `local-exec` to set a local alias 【发布时间】:2015-11-26 13:12:32 【问题描述】:

当我在terraform 中创建 AWS 实例时,我正在尝试设置一个别名以快速 ssh 进入新创建的主机。我通过运行来做到这一点

# Handy alias to quickly ssh into newly created host
provisioner "local-exec" 
    command = "alias sshopenldap='ssh -i $var.key_path ubuntu@$aws_instance.ldap_instance.public_dns'"

当我看到这个执行的输出时:

aws_instance.ldap_instance (local-exec): Executing: /bin/sh -c "alias sshopenldap='ssh -i ~/.ssh/mykey.pem ubuntu@ec2-IP.compute-1.amazonaws.com'"

好像没问题,但是没有设置别名。这可能是命令运行的方式将它包装在一个新的范围内,而不是当前的 shell 之一?如果我将命令按原样复制粘贴到控制台,则别名设置良好。

有解决办法吗?

我正在运行 terraform 一个 MacOS X Mountain Lion 的终端。

【问题讨论】:

【参考方案1】:

你可以试试这样的:

# Handy alias to quickly ssh into newly created host
provisioner "local-exec" 
  command = "echo \"alias sshopenldap='ssh -i $var.key_path ubuntu@$aws_instance.ldap_instance.public_dns'\" > script.sh && source script.sh && rm -rf source.sh"

不确定引号转义会如何...

【讨论】:

【参考方案2】:

确实不可能在脚本文件中为当前 shell 设置别名,而这正是您正在尝试做的。摆脱这种情况的唯一方法是运行脚本,而是获取它。所以:

source somefile.sh

而不是执行它应该可以解决问题。

【讨论】:

感谢@Stephan W.,我会尝试一下并回复您。

以上是关于Terraform `local-exec` 设置本地别名的主要内容,如果未能解决你的问题,请参考以下文章

如何在 local-exec 配置程序中从 terraform 继承 aws 凭据

如何使用 Terraform local-exec 将命名参数传递给 powershell 脚本?

如何使用 cloud-init 和 Terraform 设置主机名?

如何使用 Terraform 使 AWS CloudFront Distribution 缓存失效?

可以在控制台输出中使用Terraform屏蔽变量吗?

使用powershell的Local-exec不执行命令