Vagrant ansible和ansible playbook对内核事实的回复值不同

Vagrant ansible和ansible playbook对内核事实的回复值不同,vagrant,ansible,ansible-playbook,Vagrant,Ansible,Ansible Playbook,我正在运行一个流浪虚拟机来测试ansible剧本 其中一个剧本包括一些基于内核版本的测试。 流浪者虚拟机是一个Ubuntu 12.04。这是流浪汉的档案 # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure(2) do |config| config.vm.box = "ubuntu/precise64" config.vm.provider "virtualbox" do |v| v.customize ["m

我正在运行一个流浪虚拟机来测试ansible剧本

其中一个剧本包括一些基于内核版本的测试。 流浪者虚拟机是一个Ubuntu 12.04。这是流浪汉的档案

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|

  config.vm.box = "ubuntu/precise64"
  config.vm.provider "virtualbox" do |v|
    v.customize ["modifyvm", :id, "--cpuexecutioncap", "90", "--memory", "2048"]
  end

  config.vm.provision :shell, path: "vagrant/bootstrap.sh"
  config.vm.network :private_network, ip: "192.168.2.2"
  config.vm.provision :ansible do |ansible|
    ansible.playbook = "vagrant/setup.yml"
  end
end
现在在虚拟机中,我更新了内核以反映我的生产环境,从3.8到3.11,登录到虚拟机时使用:

sudo apt-get install --install-recommends linux-generic-lts-saucy xserver-xorg-lts-saucy libgl1-mesa-glx-lts-saucy
现在,当我使用ansible命令收集流浪VM的事实时,我得到:

“ansible_内核”:“3.11.0-26-generic”

但是,使用little playbook(因此使用ansible playbook命令)

我得到:


我很困惑,为什么我在这里看不到内核版本的相同值呢?

根据执行任务的用户不同,事实有所不同: 我猜你用过

ansible -m setup machine_name
获取ansible内核。 还可以尝试:

ansible -s -m setup machine_name

您将看到不同之处

看起来您将ansible剧本作为供应脚本运行。由于内核更新后没有重新启动,事实告诉您当前使用的内核,而不是更新的内核。我认为,您在vm重新启动后运行了ansible命令。在这种情况下,虚拟机使用新内核,事实告诉您新版本。不,对不起,我没有编写它,但我在更新后重新启动了机器。我可以同时运行playbook和命令,在多次重新启动后仍然可以获得差异,但实际上,这可能与事实缓存有关。我会调查一下的,找到了@SebastianStigler这几乎就是你说的事实上,我在重新启动之前缓存了错误的值,但从未更新缓存的值。清除缓存成功了!谢谢
ansible -m setup machine_name
ansible -s -m setup machine_name