diff options
author | Chris Price <chris@puppetlabs.com> | 2012-06-07 09:09:14 -0700 |
---|---|---|
committer | Chris Price <chris@puppetlabs.com> | 2012-06-07 09:09:14 -0700 |
commit | 9e0256aabfd58dfce8cff65147722a844f56e006 (patch) | |
tree | 1eb1b72036a9a1b5c6f31b3a5dda63906eb554d5 /lib/puppet/type | |
parent | cf7ac0286043d01aa807743d75574d450536582d (diff) | |
download | puppet-stdlib-9e0256aabfd58dfce8cff65147722a844f56e006.tar.gz puppet-stdlib-9e0256aabfd58dfce8cff65147722a844f56e006.tar.bz2 |
Add support for a 'match' parameter to file_line
This commit adds a new parameter called "match"
to the file_line resource type, and support for
this new parameter to the corresponding ruby
provider.
This parameter is optional; file_line should work
just as before if you do not specify this parameter...
so this change should be backwards-compatible.
If you do specify the parameter, it is treated
as a regular expression that should be used when
looking through the file for a line. This allows
you to do things like find a line that begins with
a certain prefix (e.g., "foo=.*"), and *replace*
the existing line with the line you specify in your
"line" parameter. Without this capability, if you
already had a line "foo=bar" in your file and your
"line" parameter was set to "foo=baz", you'd end up
with *both* lines in the final file. In many cases
this is undesirable.
Diffstat (limited to 'lib/puppet/type')
-rw-r--r-- | lib/puppet/type/file_line.rb | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/puppet/type/file_line.rb b/lib/puppet/type/file_line.rb index f6fe1d0..6b35902 100644 --- a/lib/puppet/type/file_line.rb +++ b/lib/puppet/type/file_line.rb @@ -32,6 +32,11 @@ Puppet::Type.newtype(:file_line) do desc 'An arbitrary name used as the identity of the resource.' end + newparam(:match) do + desc 'An optional regular expression to run against existing lines in the file;\n' + + 'if a match is found, we replace that line rather than adding a new line.' + end + newparam(:line) do desc 'The line to be appended to the file located by the path parameter.' end @@ -49,5 +54,12 @@ Puppet::Type.newtype(:file_line) do unless self[:line] and self[:path] raise(Puppet::Error, "Both line and path are required attributes") end + + if (self[:match]) + unless Regexp.new(self[:match]).match(self[:line]) + raise(Puppet::Error, "When providing a 'match' parameter, the value must be a regex that matches against the value of your 'line' parameter") + end + end + end end |