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.
