I could see it being useful but +1 for a module -- in fact this is a point I'd
like to see more discusson on -- IMO plugins like this are way more easily
shared and reused on the forge than manifests are. Almost everyone's manifest
is going to differ just enough to prevent easy reuse, but it's super easy for
me to pull in an additional parser function, custom fact, or type/provider and
go to town with my own manifest. I just think the forge (and puppet code reuse
more generally) is very "write-only"; perhaps the emphasis on manifests rather
than code like this is what's holding it back.
On Feb 3, 2011, at 10:19 PM, Luke Kanies wrote:
> To me it seems a bit special-purpose and could be made available in a module
> pretty easily, which is what I'd recommend at this point.
>
> How many others would use this?
>
> On Feb 3, 2011, at 6:11 AM, Dean Wilson wrote:
>
>> This was asked about on the puppet-users lists recently so I thought I'd
>> have a go at writing it. Is this something we'd want in the core?
>>
>> ---
>> lib/puppet/parser/functions/ip_in_range.rb | 15 +++++++++
>> spec/unit/parser/functions/ip_in_range_spec.rb | 37
>> ++++++++++++++++++++++++
>> 2 files changed, 52 insertions(+), 0 deletions(-)
>> create mode 100644 lib/puppet/parser/functions/ip_in_range.rb
>> create mode 100644 spec/unit/parser/functions/ip_in_range_spec.rb
>>
>> diff --git a/lib/puppet/parser/functions/ip_in_range.rb
>> b/lib/puppet/parser/functions/ip_in_range.rb
>> new file mode 100644
>> index 0000000..b762b45
>> --- /dev/null
>> +++ b/lib/puppet/parser/functions/ip_in_range.rb
>> @@ -0,0 +1,15 @@
>> +require 'ipaddr'
>> +
>> +Puppet::Parser::Functions::newfunction(:ip_in_range, :type => :rvalue, :doc
>> => "Return true if the ip is within the network range.") do |args|
>> +
>> + raise Puppet::ParseError, "ip_in_range requires two arguments, ip and
>> range" unless args.length == 2
>> +
>> + begin
>> + ip = IPAddr.new( args[0] )
>> + range = IPAddr.new( args[1] )
>> + rescue ArgumentError => e
>> + raise Puppet::ParseError, e.to_s
>> + end
>> +
>> + return range.include?( ip )
>> +end
>> diff --git a/spec/unit/parser/functions/ip_in_range_spec.rb
>> b/spec/unit/parser/functions/ip_in_range_spec.rb
>> new file mode 100644
>> index 0000000..01e2947
>> --- /dev/null
>> +++ b/spec/unit/parser/functions/ip_in_range_spec.rb
>> @@ -0,0 +1,37 @@
>> +#! /usr/bin/env ruby
>> +
>> +require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
>> +
>> +describe "ip_in_range function" do
>> +
>> + before :each do
>> + @scope = Puppet::Parser::Scope.new
>> + end
>> +
>> + it "should exist" do
>> + Puppet::Parser::Functions.function("ip_in_range").should ==
>> "function_ip_in_range"
>> + end
>> +
>> + it "should raise a ParseError if there are less than 2 arguments" do
>> + lambda { @scope.function_ip_in_range([]) }.should(
>> raise_error(Puppet::ParseError))
>> + end
>> +
>> + it "should return true when an ip is in the range" do
>> + @scope.function_ip_in_range( ["192.168.100.12", "192.168.100.0/24"]
>> ).should be_true
>> + end
>> +
>> + it "should return false when an ip is not in the range" do
>> + @scope.function_ip_in_range( ["10.10.10.10", "192.168.100.0/24"]
>> ).should be_false
>> + end
>> +
>> + it "should raise a ParseError when given an invalid IP address" do
>> + lambda { @scope.function_ip_in_range( ["a.b.c.d", "192.168.100.0/24"] )
>> }.should( raise_error(Puppet::ParseError))
>> + end
>> +
>> + it "should raise a ParseError when given an invalid IP range" do
>> + lambda { @scope.function_ip_in_range( ["192.168.100.12",
>> "192.168.100.0/CC"] ) }.should( raise_error(Puppet::ParseError))
>> + lambda { @scope.function_ip_in_range( ["192.168.100.12", "192.168/24"]
>> ) }.should( raise_error(Puppet::ParseError))
>> + lambda { @scope.function_ip_in_range( ["192.168.100.12",
>> "aaa.168.100.0/CC"] ) }.should( raise_error(Puppet::ParseError))
>> + end
>> +
>> +end
>> --
>> 1.7.1
>>
>>
>> --
>> Dean Wilson
>> http://www.unixdaemon.net @unixdaemon
>> http://www.puppetcookbook.com @puppetcookbook
>>
>> --
>> 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.
>>
>
>
> --
> 'Tis better to be silent and be thought a fool, than to speak and
> remove all doubt. --Abraham Lincoln
> ---------------------------------------------------------------------
> Luke Kanies -|- http://puppetlabs.com -|- +1(615)594-8199
>
>
>
>
> --
> 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.
>
--
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.