在 Vagrant 中完成所有虚拟机的构建后,Ansible 运行 通过 playbook 两次

Anisble running through playbook twice after all Virtual Machines are done building in Vagrant

我有一个 100% 有效的 Vagrantfile。想要的结果真的很简单。启动 8 Ubuntu 16.04 虚拟机,然后使用 Ansible 剧本配置所有服务器。然而,就在最后它做了一些烦人的事情,出于某种原因剧本 运行 两次,我不明白为什么。这是我的 Vagrantfile。

# This guide is optimized for Vagrant 1.7 and above.
# Although versions 1.6.x should behave very similarly, it is recommended
# to upgrade instead of disabling the requirement below.
Vagrant.require_version ">= 1.7.0"

Vagrant.configure(2) do |config|
  N = 8
        (1..N).each do |hpc_id|
          config.vm.define "hpc#{hpc_id}" do |hpc|
            hpc.vm.hostname = "hpc#{hpc_id}"
            hpc.vm.network "private_network", ip: "192.168.30.#{200+hpc_id}"
            hpc.vm.box = "ubuntu/xenial64"
            hpc.ssh.insert_key = false

            hpc.vm.provider 'virtualbox' do |vb|
              vb.name = "hpc#{hpc_id}"
              vb.memory = 512
              vb.cpus = 1
              vb.gui = false

          if hpc_id == N
            hpc.vm.provision :ansible do |ansible|
              # Disable default limit to connect to all the hpcs
              ansible.limit = "all"
              ansible.playbook = "site.yml"
              ansible.become_user = "root"
              ansible.groups = {
                 "Slurm_Primary_Controller" => ["hpc1"],
                 "Slurm_Backup_Controller" => ["hpc2"],
                 "Slurm_Primary_Database" => ["hpc3"],
                 "Slurm_Backup_Database" => ["hpc4"],
                 "My_SQL_Database" => ["hpc5"],
                 "Slurm_Worker" => ["hpc6", "hpc7", "hpc8"],
              }
           end
         end
       end
     end
   end
end

这是 ansible 剧本 运行 的输出,如下所示。为了简洁起见,我没有包括 vagrant build 输出,因为虚拟机都没有任何问题。但是,如果需要,我可以添加。

    hpc8: Running ansible-playbook...

PLAY [hpc1] ********************************************************************

TASK [install python2 for ansible] *********************************************
Friday 22 June 2018  13:34:35 -0700 (0:00:00.106)       0:00:00.106 ***********
changed: [hpc1]

TASK [Gathering Facts] *********************************************************
Friday 22 June 2018  13:35:08 -0700 (0:00:32.548)       0:00:32.654 ***********
ok: [hpc1]

TASK [hosts-setup : install required package] **********************************
Friday 22 June 2018  13:35:10 -0700 (0:00:01.934)       0:00:34.589 ***********
changed: [hpc1] => (item=[u'htop'])

PLAY [hpc2] ********************************************************************

TASK [install python2 for ansible] *********************************************
Friday 22 June 2018  13:35:24 -0700 (0:00:14.522)       0:00:49.111 ***********
changed: [hpc2]

TASK [Gathering Facts] *********************************************************
Friday 22 June 2018  13:35:56 -0700 (0:00:32.010)       0:01:21.121 ***********
ok: [hpc2]

TASK [hosts-setup : install required package] **********************************
Friday 22 June 2018  13:35:57 -0700 (0:00:01.406)       0:01:22.528 ***********
changed: [hpc2] => (item=[u'htop'])

PLAY [hpc3] ********************************************************************

TASK [install python2 for ansible] *********************************************
Friday 22 June 2018  13:36:13 -0700 (0:00:15.293)       0:01:37.822 ***********
changed: [hpc3]

TASK [Gathering Facts] *********************************************************
Friday 22 June 2018  13:36:44 -0700 (0:00:31.712)       0:02:09.535 ***********
ok: [hpc3]

TASK [hosts-setup : install required package] **********************************
Friday 22 June 2018  13:36:46 -0700 (0:00:01.873)       0:02:11.409 ***********
changed: [hpc3] => (item=[u'htop'])

PLAY [hpc4] ********************************************************************

TASK [install python2 for ansible] *********************************************
Friday 22 June 2018  13:37:01 -0700 (0:00:14.514)       0:02:25.923 ***********
changed: [hpc4]

TASK [Gathering Facts] *********************************************************
Friday 22 June 2018  13:37:30 -0700 (0:00:29.562)       0:02:55.486 ***********
ok: [hpc4]

TASK [hosts-setup : install required package] **********************************
Friday 22 June 2018  13:37:32 -0700 (0:00:01.337)       0:02:56.824 ***********
changed: [hpc4] => (item=[u'htop'])

PLAY [hpc5] ********************************************************************

TASK [install python2 for ansible] *********************************************
Friday 22 June 2018  13:37:47 -0700 (0:00:14.825)       0:03:11.650 ***********
changed: [hpc5]

TASK [Gathering Facts] *********************************************************
Friday 22 June 2018  13:38:16 -0700 (0:00:29.061)       0:03:40.712 ***********
ok: [hpc5]

TASK [hosts-setup : install required package] **********************************
Friday 22 June 2018  13:38:17 -0700 (0:00:01.376)       0:03:42.089 ***********
changed: [hpc5] => (item=[u'htop'])

PLAY [hpc6 hpc7 hpc8] **********************************************************

TASK [install python2 for ansible] *********************************************
Friday 22 June 2018  13:38:29 -0700 (0:00:11.708)       0:03:53.797 ***********
changed: [hpc8]
changed: [hpc7]
changed: [hpc6]

TASK [Gathering Facts] *********************************************************
Friday 22 June 2018  13:39:56 -0700 (0:01:27.055)       0:05:20.852 ***********
ok: [hpc8]
ok: [hpc6]
ok: [hpc7]

TASK [hosts-setup : install required package] **********************************
Friday 22 June 2018  13:39:59 -0700 (0:00:02.874)       0:05:23.727 ***********
changed: [hpc8] => (item=[u'htop'])
changed: [hpc6] => (item=[u'htop'])
changed: [hpc7] => (item=[u'htop'])

PLAY RECAP *********************************************************************
hpc1                       : ok=3    changed=2    unreachable=0    failed=0
hpc2                       : ok=3    changed=2    unreachable=0    failed=0
hpc3                       : ok=3    changed=2    unreachable=0    failed=0
hpc4                       : ok=3    changed=2    unreachable=0    failed=0
hpc5                       : ok=3    changed=2    unreachable=0    failed=0
hpc6                       : ok=3    changed=2    unreachable=0    failed=0
hpc7                       : ok=3    changed=2    unreachable=0    failed=0
hpc8                       : ok=3    changed=2    unreachable=0    failed=0

Friday 22 June 2018  13:40:32 -0700 (0:00:33.328)       0:05:57.056 ***********
===============================================================================
install python2 for ansible -------------------------------------------- 87.06s
hosts-setup : install required package --------------------------------- 33.33s
install python2 for ansible -------------------------------------------- 32.55s
install python2 for ansible -------------------------------------------- 32.01s
install python2 for ansible -------------------------------------------- 31.71s
install python2 for ansible -------------------------------------------- 29.56s
install python2 for ansible -------------------------------------------- 29.06s
hosts-setup : install required package --------------------------------- 15.29s
hosts-setup : install required package --------------------------------- 14.83s
hosts-setup : install required package --------------------------------- 14.52s
hosts-setup : install required package --------------------------------- 14.51s
hosts-setup : install required package --------------------------------- 11.71s
Gathering Facts --------------------------------------------------------- 2.87s
Gathering Facts --------------------------------------------------------- 1.94s
Gathering Facts --------------------------------------------------------- 1.87s
Gathering Facts --------------------------------------------------------- 1.41s
Gathering Facts --------------------------------------------------------- 1.38s
Gathering Facts --------------------------------------------------------- 1.34s
==> hpc8: Running provisioner: ansible...
Vagrant has automatically selected the compatibility mode '2.0'
according to the Ansible version installed (2.5.3).

Alternatively, the compatibility mode can be specified in your Vagrantfile:
https://www.vagrantup.com/docs/provisioning/ansible_common.html#compatibility_mode

    hpc8: Running ansible-playbook...

PLAY [hpc1] ********************************************************************

TASK [install python2 for ansible] *********************************************
Friday 22 June 2018  13:40:36 -0700 (0:00:00.106)       0:00:00.106 ***********
changed: [hpc1]

TASK [Gathering Facts] *********************************************************
Friday 22 June 2018  13:40:37 -0700 (0:00:00.654)       0:00:00.761 ***********
ok: [hpc1]

TASK [hosts-setup : install required package] **********************************
Friday 22 June 2018  13:40:38 -0700 (0:00:01.135)       0:00:01.897 ***********
ok: [hpc1] => (item=[u'htop'])

PLAY [hpc2] ********************************************************************

TASK [install python2 for ansible] *********************************************
Friday 22 June 2018  13:40:39 -0700 (0:00:01.110)       0:00:03.007 ***********
changed: [hpc2]

TASK [Gathering Facts] *********************************************************
Friday 22 June 2018  13:40:40 -0700 (0:00:00.690)       0:00:03.698 ***********
ok: [hpc2]

TASK [hosts-setup : install required package] **********************************
Friday 22 June 2018  13:40:41 -0700 (0:00:00.818)       0:00:04.516 ***********
ok: [hpc2] => (item=[u'htop'])

PLAY [hpc3] ********************************************************************

TASK [install python2 for ansible] *********************************************
Friday 22 June 2018  13:40:42 -0700 (0:00:00.960)       0:00:05.476 ***********
changed: [hpc3]

TASK [Gathering Facts] *********************************************************
Friday 22 June 2018  13:40:43 -0700 (0:00:01.098)       0:00:06.574 ***********
ok: [hpc3]

TASK [hosts-setup : install required package] **********************************
Friday 22 June 2018  13:40:44 -0700 (0:00:00.849)       0:00:07.424 ***********
ok: [hpc3] => (item=[u'htop'])

PLAY [hpc4] ********************************************************************

TASK [install python2 for ansible] *********************************************
Friday 22 June 2018  13:40:45 -0700 (0:00:00.968)       0:00:08.392 ***********
changed: [hpc4]

TASK [Gathering Facts] *********************************************************
Friday 22 June 2018  13:40:45 -0700 (0:00:00.615)       0:00:09.008 ***********
ok: [hpc4]

TASK [hosts-setup : install required package] **********************************
Friday 22 June 2018  13:40:46 -0700 (0:00:00.769)       0:00:09.777 ***********
ok: [hpc4] => (item=[u'htop'])

PLAY [hpc5] ********************************************************************

TASK [install python2 for ansible] *********************************************
Friday 22 June 2018  13:40:47 -0700 (0:00:00.993)       0:00:10.771 ***********
changed: [hpc5]

TASK [Gathering Facts] *********************************************************
Friday 22 June 2018  13:40:48 -0700 (0:00:00.592)       0:00:11.363 ***********
ok: [hpc5]

TASK [hosts-setup : install required package] **********************************
Friday 22 June 2018  13:40:48 -0700 (0:00:00.802)       0:00:12.166 ***********
ok: [hpc5] => (item=[u'htop'])

PLAY [hpc6 hpc7 hpc8] **********************************************************

TASK [install python2 for ansible] *********************************************
Friday 22 June 2018  13:40:49 -0700 (0:00:00.864)       0:00:13.031 ***********
changed: [hpc6]
changed: [hpc7]
changed: [hpc8]

TASK [Gathering Facts] *********************************************************
Friday 22 June 2018  13:40:49 -0700 (0:00:00.179)       0:00:13.210 ***********
ok: [hpc6]
ok: [hpc7]
ok: [hpc8]

TASK [hosts-setup : install required package] **********************************
Friday 22 June 2018  13:40:51 -0700 (0:00:01.498)       0:00:14.708 ***********
ok: [hpc6] => (item=[u'htop'])
ok: [hpc8] => (item=[u'htop'])
ok: [hpc7] => (item=[u'htop'])

PLAY RECAP *********************************************************************
hpc1                       : ok=3    changed=1    unreachable=0    failed=0
hpc2                       : ok=3    changed=1    unreachable=0    failed=0
hpc3                       : ok=3    changed=1    unreachable=0    failed=0
hpc4                       : ok=3    changed=1    unreachable=0    failed=0
hpc5                       : ok=3    changed=1    unreachable=0    failed=0
hpc6                       : ok=3    changed=1    unreachable=0    failed=0
hpc7                       : ok=3    changed=1    unreachable=0    failed=0
hpc8                       : ok=3    changed=1    unreachable=0    failed=0

Friday 22 June 2018  13:40:52 -0700 (0:00:01.522)       0:00:16.231 ***********
===============================================================================
hosts-setup : install required package ---------------------------------- 1.52s
Gathering Facts --------------------------------------------------------- 1.50s
Gathering Facts --------------------------------------------------------- 1.14s
hosts-setup : install required package ---------------------------------- 1.11s
install python2 for ansible --------------------------------------------- 1.10s
hosts-setup : install required package ---------------------------------- 0.99s
hosts-setup : install required package ---------------------------------- 0.97s
hosts-setup : install required package ---------------------------------- 0.96s
hosts-setup : install required package ---------------------------------- 0.86s
Gathering Facts --------------------------------------------------------- 0.85s
Gathering Facts --------------------------------------------------------- 0.82s
Gathering Facts --------------------------------------------------------- 0.80s
Gathering Facts --------------------------------------------------------- 0.77s
install python2 for ansible --------------------------------------------- 0.69s
install python2 for ansible --------------------------------------------- 0.65s
install python2 for ansible --------------------------------------------- 0.62s
install python2 for ansible --------------------------------------------- 0.59s
install python2 for ansible --------------------------------------------- 0.18s

如果您想 运行 自己从头到尾完成所有事情,我已将其发布在 Github 上。我还没有完成 Ansible 剧本的构建,所以这个项目显然是不完整的。

Github Code

hpc.vm.provider 中删除 hpc.vm.provision


正确格式化和缩进代码是有原因的。

我已经解决了这个问题。这是正确的代码。在进入提供部分之前,我需要使用 end 关闭提供者部分。

Vagrant.require_version ">= 1.7.0"

Vagrant.configure(2) do |config|
    N = 8
    (1..N).each do |hpc_id|
      config.vm.define "hpc#{hpc_id}" do |hpc|
        hpc.vm.hostname = "hpc#{hpc_id}"
        hpc.vm.network "private_network", ip: "192.168.30.#{200+hpc_id}"
        hpc.vm.box = "ubuntu/xenial64"
        hpc.ssh.insert_key = false
        hpc.vm.provider 'virtualbox' do |vb|
          vb.name = "hpc#{hpc_id}"
          vb.memory = 512
          vb.cpus = 1
          vb.gui = false
        end

      if hpc_id == N
        hpc.vm.provision :ansible do |ansible|
          # Disable default limit to connect to all the hpcs
          ansible.limit = "all"
          ansible.playbook = "site.yml"
          ansible.become_user = "root"
          ansible.groups = {
             "Slurm_Primary_Controller" => ["hpc1"],
             "Slurm_Backup_Controller" => ["hpc2"],
             "Slurm_Primary_Database" => ["hpc3"],
             "Slurm_Backup_Database" => ["hpc4"],
             "My_SQL_Database" => ["hpc5"],
             "Slurm_Worker" => ["hpc6", "hpc7", "hpc8"],
          }
        end
      end
    end
  end
end