【发布时间】:2014-09-11 09:35:46
【问题描述】:
我正在使用 Vagrant 部署虚拟机进行开发。其中一个要求是vagrant provision 创建一个新用户(在我编写的配置脚本中完成),然后vagrant ssh 以该用户身份连接到该框。
我不知道如何判断盒子是否已配置。
我看到 Vagrant 配置 code 设置 env[:provision_enabled] 如果此运行应该进行配置,所以我想我可以做这样的事情:
if env[:provision_enabled]
config.ssh.username = "#{data['ssh']['provision_username']}"
else
config.ssh.username = "#{data['ssh']['username']}"
end
这个想法是用于配置的 SSH 连接将使用一个连接,而用于其他一切的 SSH 连接将使用另一个。
但是,env[:provision_enabled] 似乎无法在 Vagrantfile 中访问。
有没有办法做到这一点?
【问题讨论】:
-
您为什么要这样做?配置始终以 root afaik 身份完成。此外,Vagrant 会知道它是否已在
vagrant up上配置 -
@Jahaja 始终以 root 身份进行配置是不正确的。如果设置了
config.ssh.username,则以该用户的身份进行配置。我想继续以vagrant或root用户的身份进行配置,但随后切换到在配置期间为所有未来 SSH 访问创建的用户。 -
我还没有需要更改 ssh 的用户名,所以你可能是对的。但是文档指出,对于 SSH,默认设置是以特权用户身份运行。
privileged (boolean) - Specifies whether to execute the shell script as a privileged user or not (sudo). By default this is "true".所以我猜你想在配置之外切换到非特权用户? -
@Jahaja 重点是:我想在配置开始时切换到VM 上尚不存在的用户。
-
env[:provision_enabled]不可访问,因为在创建环境之前解析了 Vagrantfile。由于加载顺序,此信息可用于供应商和插件,但不能用于 Vagrantfile 本身。 (见Vagrant issue #7043)
标签: vagrant