Vagrant提供了多个SSH用户的多个剧本



我正在尝试使用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_usermeta: reset_connection

最新更新