On 10 November 2010 01:13, Paul Berry <[email protected]> wrote:
> On Mon, Oct 18, 2010 at 3:45 PM, Rein Henrichs <[email protected]> wrote:
>>
>> Parses `/usr/sbin/xm list` and returns a comma-separated list of
>> domains. Based on a patch submitted by Jonas Genannt.
>> ---
>>
>>  Jonas,
>>
>>  Thanks for sending us your patch. I've made a few minor changes but kept
>> the
>>  behavior mostly the same.
>>
>>  I've modified the implementation to use Resolution.exec instead of %x{}
>> and
>>  I've modified the spec to stub its call. I've also added a spec for the
>> case
>>  when /usr/sbin/xm isn't available that states that it should return nil.
>> This
>>  is a change in design but will have end-user behavior equivalent to the
>>  previous behavior of returning "".
>>
>>  I've split the string returned by Resolution.exec on "\n" to give an
>> array of
>>  lines because String#each has been removed in Ruby 1.9.
>>
>>  I've also refactored the implementation of get_domains to make use of the
>>  map/reduce-like functionality of Ruby's #reject and #map.
>>
>>  lib/facter/util/xendomains.rb |   10 ++++++++++
>>  lib/facter/xendomains.rb      |   10 ++++++++++
>>  spec/unit/data/xendomains     |    4 ++++
>>  spec/unit/util/xendomains.rb  |   23 +++++++++++++++++++++++
>>  4 files changed, 47 insertions(+), 0 deletions(-)
>>  create mode 100644 lib/facter/util/xendomains.rb
>>  create mode 100644 lib/facter/xendomains.rb
>>  create mode 100644 spec/unit/data/xendomains
>>  create mode 100644 spec/unit/util/xendomains.rb
>>
>> diff --git a/lib/facter/util/xendomains.rb b/lib/facter/util/xendomains.rb
>> new file mode 100644
>> index 0000000..4f590a8
>> --- /dev/null
>> +++ b/lib/facter/util/xendomains.rb
>> @@ -0,0 +1,10 @@
>> +# A module to gather running Xen Domains
>> +#
>> +module Facter::Util::Xendomains
>> +  def self.get_domains
>> +    if xm_list = Facter::Util::Resolution.exec('/usr/sbin/xm list')
>> +      domains = xm_list.split("\n").reject { |line| line =~
>> /^(Name|Domain-0)/ }
>> +      domains.map { |line| line.split(/\s/)[0] }.join(',')
>> +    end
>> +  end
>> +end
>> diff --git a/lib/facter/xendomains.rb b/lib/facter/xendomains.rb
>> new file mode 100644
>> index 0000000..972ac90
>> --- /dev/null
>> +++ b/lib/facter/xendomains.rb
>> @@ -0,0 +1,10 @@
>> +require 'facter/util/xendomains'
>> +
>> +Facter.add("xendomains") do
>> +  confine :kernel => %w{Linux FreeBSD OpenBSD SunOS}
>> +  confine :virtual => 'xen0'
>> +
>> +  setcode do
>> +    Facter::Util::Xendomains.get_domains
>> +  end
>> +end
>> diff --git a/spec/unit/data/xendomains b/spec/unit/data/xendomains
>> new file mode 100644
>> index 0000000..9b112bc
>> --- /dev/null
>> +++ b/spec/unit/data/xendomains
>> @@ -0,0 +1,4 @@
>> +Name                                        ID   Mem VCPUs      State
>> Time(s)
>> +Domain-0                                     0   656     4     r-----
>>  48140.9
>> +web01                                       48   512     2     -b----
>>  97651.5
>> +mailserver                                  53   512     4     -b----
>> 7536.1
>> diff --git a/spec/unit/util/xendomains.rb b/spec/unit/util/xendomains.rb
>> new file mode 100644
>> index 0000000..a0fa345
>> --- /dev/null
>> +++ b/spec/unit/util/xendomains.rb
>> @@ -0,0 +1,23 @@
>> +#!/usr/bin/env ruby
>> +
>> +require File.dirname(__FILE__) + '/../../spec_helper'
>> +
>> +require 'facter/util/xendomains'
>> +
>> +describe Facter::Util::Xendomains do
>> +  describe ".get_domains" do
>> +    it "should return a list of running Xen Domains on Xen0" do
>> +      sample_output_file = File.dirname(__FILE__) + '/../data/xendomains'
>> +      xen0_domains = File.read(sample_output_file)
>> +      Facter::Util::Resolution.stubs(:exec).with('/usr/sbin/xm
>> list').returns(xen0_domains)
>> +      Facter::Util::Xendomains.get_domains.should == %{web01,mailserver}
>> +    end
>> +
>> +    context "when xm list isn't executable" do
>> +      it "should be nil" do
>> +        Facter::Util::Resolution.stubs(:exec).with('/usr/sbin/xm
>> list').returns(nil)
>> +        Facter::Util::Xendomains.get_domains.should == nil
>> +      end
>> +    end
>> +  end
>> +end
>> --
>> 1.7.0.4
>>
>
> Available in next as commit:06fb622e293100b214ac0de4f9d09d06dcbdb36e

What versions of xen have you tested this against Paul?

Paul

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to