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 设置主机名?