【发布时间】:2018-09-08 00:51:08
【问题描述】:
我正在尝试使用 vagrant 的 ansible 配置器来配置虚拟机。但我有两本剧本,都需要使用不同的 ssh 用户。我的用例是这样的,我有一个在默认设置的vagrant ssh 用户下运行的预配置脚本。然后,我的预配置脚本添加了一个不同的 ssh 用户 provisioner,该用户设置为使用自己的密钥 ssh 到 VM 上。实际配置脚本的任务是删除系统上不安全的 vagrant 用户,因此它必须以不同的 ssh 用户 provsioner(预配置程序创建的用户)身份运行。
我不知道如何更改 Vagrantfile 中的 ssh 用户。下面的例子是我已经走了多远。尽管更改了 config.ssh.username vagrant 始终将 ssh 用户设置为最后一个值,在本例中为 provisioner 并且在运行预配置脚本时不会进行身份验证,因为它尚未创建。
我可以以某种方式覆盖 ssh 用户吗?也许在 do |ansible| 块(下)内有一个 ansible 变量本身?
我想要实现的目标可能吗?看起来很简单,我很震惊我遇到了这么多麻烦。
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "base_box"
config.vm.box_url = "s3://bucket/base-box/base.box"
config.vm.network "private_network", ip: "10.0.3.10"
config.ssh.keep_alive = true
config.vm.define "vagrant_image"
config.vm.provision "ansible" do |ansible_pre|
config.ssh.username = "vagrant"
ansible_pre.playbook = "provisioning/pre_provisioning.yml"
ansible_pre.host_vars = {
"vagrant_image" => {
"ansible_host" => "127.0.0.1",
}
}
ansible_pre.vault_password_file = ENV['ANSIBLE_VAULT_PASSWORD_FILE']
end
config.vm.provision "ansible" do |ansible|
config.ssh.username = "provisioner"
ansible.playbook = "provisioning/provisioning.yml"
ansible.host_vars = {
"vagrant_image" => {
"ansible_host" => "127.0.0.1",
}
}
ansible.vault_password_file = ENV['ANSIBLE_VAULT_PASSWORD_FILE']
end
end
(如果您想知道 s3 框 url 仅适用于我已安装 vagrant-s3auth (1.3.2) 插件)
【问题讨论】: