我正在尝试使用Vagrant的Ansible Provisioner提供VM。但是我有两本剧本,都需要使用不同的SSH用户。我的用例是,我有一个预处理脚本,该脚本在vagrant
SSH用户下运行,默认设置。然后,我的预处理脚本将使用其自己的密钥设置为SSH的其他SSH用户provisioner
。实际的配置脚本具有一个任务,可以删除系统上不安全的流浪用户,因此必须以其他SSH用户provsioner
(Previsioner创建的用户(运行。
我无法弄清楚如何更改VagrantFile中的SSH用户。下面的示例是我走了多远。尽管更改了config.ssh.username
Vagrant始终将SSH用户设置为最后一个值,但在这种情况下,provisioner
并且在运行PROVISION脚本时尚未进行身份验证,因为尚未创建它。
我可以以某种方式覆盖SSH用户吗?也许在do |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
(如果您已经安装了vagrant-s3auth (1.3.2)
插件,则想知道S3框URL仅能工作(
您可以在多个地方设置它。VagrantFile(但不得config
,它将被覆盖(,通过Ansible奢侈品:
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
。