Vagrant为多个ssh用户提供多个剧本

时间:2018-03-29 06:49:18

标签: ssh vagrant ansible

我正在尝试使用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)插件)

1 个答案:

答案 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_usermeta: reset_connection