Question

I'm learning about vagrant and puppet. When I use the vagrant lucid32 (Ubuntu 10.04), puppet seems very slow. I've fixed the fqdn problem (question 7780322) but it's still very slow.

I've traced (part of) the problem to facter. Asking for ipaddress is very quick, but ipaddress_eth0 takes 20 seconds:

root@a:/# time facter ipaddress
10.0.2.15

real    0m0.031s
user    0m0.024s
sys     0m0.004s
root@a:/# time facter ipaddress_eth0
10.0.2.15

real    0m20.126s
user    0m0.080s
sys     0m0.020s
root@a:/# 

Looking for ipaddress_lo is also slow.

Can anyone help me with a solution or a suggestion for how to debug this? I'm new to Ruby, but willing to learn.

Thanks.

Was it helpful?

Solution 2

Problem was that arp -a runs very slowly.

vagrant@lucid32:~$ time arp -a
? (10.0.2.3) at 52:54:00:12:35:03 [ether] on eth0
? (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0

real    0m20.022s
user    0m0.004s
sys     0m0.000s
vagrant@lucid32:~$

I assume that this is a problem with some combination of virtualbox (4.1.12_77245), host-only networking, ubuntu 10.04, and windows 7 host OS.

As a workaround, assuming that I can learn a bit about puppet without it knowing my mac addresses, I replaced line 7 of /opt/ruby/lib/ruby/gems/1.8/gems/facter-1.6.0/lib/facter/arp.rb as follows:

require 'facter/util/ip'

Facter.add(:arp) do
  confine :kernel => :linux
  setcode do
    ### output = Facter::Util::Resolution.exec('arp -a') # disable for slow arp
    output = "" ### return a blank, rather than the real (but slow) arp
    if not output.nil?
      arp = ""
      output.each_line do |s|
        if s =~ /^\S+\s\S+\s\S+\s(\S+)\s\S+\s\S+\s\S+$/
          arp = $1.downcase
          break # stops on the first match
        end
      end
    end
    "fe:ff:ff:ff:ff:ff" == arp ? arp : nil
  end
end

Facter::Util::IP.get_interfaces.each do |interface|
  Facter.add("arp_" + Facter::Util::IP.alphafy(interface)) do
    confine :kernel => :linux
    setcode do
      arp = Facter::Util::IP.get_arp_value(interface)
      "fe:ff:ff:ff:ff:ff" == arp ? arp : nil
    end
  end
end

OTHER TIPS

I just defined the unknown hosts(?) in /etc/hosts:

10.0.2.3 computer1
10.0.2.2 computer2 

After this, the arp -a was very quick and hence improved the response of facter -p in-turn improved the performance of puppet agent --test

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top