summaryrefslogtreecommitdiff
path: root/lib/puppet/type/whole_line.rb
blob: f231602f4a6e9d3ddfccfb5757e53de91be1d249 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Puppet::Type.newtype(:whole_line) do

  desc <<-EOT
  Type that can append whole a line to a file if it does not already contain it.

  Example:

  whole_line { 'sudo_rule':
    path => '/etc/sudoers',
    line => '%admin ALL=(ALL) ALL',
  }

  EOT

  ensurable do
    defaultto :present
    newvalue(:present) do
      provider.create
    end
  end

  newparam(:name, :namevar => true) do
    desc 'arbitrary name used as identity'
  end

  newparam(:line) do
    desc 'The line to be appended to the path.'
  end

  newparam(:path) do
    desc 'File to possibly append a line to.'
    validate do |value|
      unless (Puppet.features.posix? and value =~ /^\//) or (Puppet.features.microsoft_windows? and (value =~ /^.:\// or value =~ /^\/\/[^\/]+\/[^\/]+/))
        raise(Puppet::Error, "File paths must be fully qualified, not '#{value}'")
      end
    end
  end

  validate do
    unless self[:line] and self[:path]
      raise(Puppet::Error, "Both line and path are required attributes")
    end
  end
end