On Wed, Oct 7, 2009 at 5:40 AM, David Lutterkort <[email protected]> wrote:
>
> These parameters allow loading a file anywhere on the filesystem; using
> them also greatly speeds up processing the resource.
>
> * lib/puppet/type/augeas.rb: add 'incl' and 'lens' parameters; change
> default for 'context' when 'incl' is given.
> * lib/puppet/provider/augeas/augeas.rb: when 'lens' and 'incl' are given,
> only load that file
> * spec/unit/type/augeas.rb: check that constraints on new parameters are
> enforced
>
some bikeshedding, "incl" kind of implies in addition to the default,
is that how it would work?, as in would I be able to use the
rsyncd.aug lens but 'incl' another file and have it operate only on
that file.
> This fixes ticket #2694
> ---
> lib/puppet/provider/augeas/augeas.rb | 7 +++++++
> lib/puppet/type/augeas.rb | 27 ++++++++++++++++++++++++---
> spec/unit/type/augeas.rb | 14 ++++++++++++++
> 3 files changed, 45 insertions(+), 3 deletions(-)
>
> diff --git a/lib/puppet/provider/augeas/augeas.rb
> b/lib/puppet/provider/augeas/augeas.rb
> index a645fbe..78be1d7 100644
> --- a/lib/puppet/provider/augeas/augeas.rb
> +++ b/lib/puppet/provider/augeas/augeas.rb
> @@ -133,6 +133,7 @@ Puppet::Type.type(:augeas).provide(:augeas) do
> unless @aug
> flags = Augeas::NONE
> flags = Augeas::TYPE_CHECK if resource[:type_check] == :true
> + flags |= Augeas::NO_MODL_AUTOLOAD if resource[:incl]
> root = resource[:root]
> load_path = resource[:load_path]
> debug("Opening augeas with root #{root}, lens path #{load_path},
> flags #{flags}")
> @@ -141,6 +142,12 @@ Puppet::Type.type(:augeas).provide(:augeas) do
> if get_augeas_version >= "0.3.6"
> debug("Augeas version #{get_augeas_version} is installed")
> end
> +
> + if resource[:incl]
> + aug.set("/augeas/load/Xfm/lens", resource[:lens])
> + aug.set("/augeas/load/Xfm/incl", resource[:incl])
> + aug.load
> + end
> end
> @aug
> end
> diff --git a/lib/puppet/type/augeas.rb b/lib/puppet/type/augeas.rb
> index 4ae3f06..b8d08bb 100644
> --- a/lib/puppet/type/augeas.rb
> +++ b/lib/puppet/type/augeas.rb
> @@ -58,10 +58,15 @@ Puppet::Type.newtype(:augeas) do
> end
>
> newparam (:context) do
> - desc "Optional context path. This value is pre-pended to the paths
> of all changes if the
> - path is relative. So a path specified as /files/foo will not
> be prepended with the
> - context whild files/foo will be prepended"
> + desc "Optional context path. This value is prepended to the paths of
> all changes if the path is relative. If INCL is set, defaults to '/files' +
> INCL, otherwise the empty string"
> defaultto ""
> + munge do |value|
> + if value.empty? and resource[:incl]
> + "/files" + resource[:incl]
> + else
> + value
> + end
> + end
> end
>
> newparam (:onlyif) do
> @@ -129,6 +134,22 @@ Puppet::Type.newtype(:augeas) do
> defaultto :false
> end
>
> + newparam(:lens) do
> + desc "Use a specific lens, e.g. 'Hosts.lns'. When this parameter is
> set, you must also set the incl parameter to indicate which file to load.
> Only that file will be loaded, which greatly speeds up execution of the type"
> + end
> +
> + newparam(:incl) do
> + desc "Load only a specific file, e.g. '/etc/hosts'. When this
> parameter is set, you must also set the lens parameter to indicate which lens
> to use."
> + end
> +
> + validate do
> + has_lens = !self[:lens].nil?
> + has_incl = !self[:incl].nil?
> + if has_lens != has_incl
> + self.fail "You must specify both the lens and incl parameters,
> or neither"
> + end
> + end
> +
> # This is the acutal meat of the code. It forces
> # augeas to be run and fails or not based on the augeas return
> # code.
> diff --git a/spec/unit/type/augeas.rb b/spec/unit/type/augeas.rb
> index 5276d2c..2c1b044 100644
> --- a/spec/unit/type/augeas.rb
> +++ b/spec/unit/type/augeas.rb
> @@ -103,4 +103,18 @@ describe augeas do
> changes.retrieve.should == :need_to_run
> end
> end
> +
> + describe "loading specific files" do
> + it "should require lens when incl is used" do
> + lambda { augeas.new(:name => :no_lens, :incl =>
> "/etc/hosts")}.should raise_error(Puppet::Error)
> + end
> +
> + it "should require incl when lens is used" do
> + lambda { augeas.new(:name => :no_incl, :lens => "Hosts.lns")
> }.should raise_error(Puppet::Error)
> + end
> +
> + it "should set the context when a specific file is used" do
> + augeas.new(:name => :no_incl, :lens => "Hosts.lns", :incl =>
> "/etc/hosts")[:context].should == "/files/etc/hosts"
> + end
> + end
> end
> --
> 1.6.2.5
>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---