我正在尝试使用vagrant的ansible provisioner配置vm。但我有两个剧本,都需要使用不同的ssh用户。我的用例就是这样,我有一个预配置脚本,它在默认情况下设置的vagrant
ssh用户下运行。然后,我的预配置脚本会添加一个不同的ssh用户provisioner
,该用户设置为使用自己的密钥ssh到VM上。实际配置脚本的任务是删除系统上不安全的vagrant用户,因此必须以不同的ssh用户provsioner
(预配置程序创建的用户)运行。
我无法弄清楚如何更改Vagrantfile中的ssh用户。下面的例子是我走了多远。尽管更改config.ssh.username
vagrant总是将ssh用户设置为最后一个值,在这种情况下为provisioner
,并且在运行预配置脚本时不会进行身份验证,因为它尚未创建。< / p>
我可以以某种方式覆盖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盒子网址只能运行,因为我已经安装了vagrant-s3auth (1.3.2)
插件)
答案 0 :(得分:1)
您可以在多个地方进行设置。 Vagrantfile(但不是config
,它将被覆盖),通过Ansible extravars:
config.vm.provision "ansible" do |ansible_pre|
ansible_pre.playbook = "provisioning/pre_provisioning.yml"
ansible_pre.host_vars = {
"vagrant_image" => {
"ansible_host" => "127.0.0.1",
}
}
ansible_pre.extra_vars = {
ansible_user: "vagrant"
}
ansible_pre.vault_password_file = ENV['ANSIBLE_VAULT_PASSWORD_FILE']
end
config.vm.provision "ansible" do |ansible|
ansible.playbook = "provisioning/provisioning.yml"
ansible.host_vars = {
"vagrant_image" => {
"ansible_host" => "127.0.0.1",
}
ansible.extra_vars = {
ansible_user: "provisioner"
}
ansible.raw_ssh_args = "-i /path/to/private/key/id_rsa"
ansible.vault_password_file = ENV['ANSIBLE_VAULT_PASSWORD_FILE']
end
但你也可以写一个单一的剧本并在里面切换用户。请参阅ansible_user
和meta: reset_connection
。