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
--
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.