Skip to content
Snippets Groups Projects
textline.pp 1.55 KiB
Newer Older
Adam Lewenberg's avatar
Adam Lewenberg committed

# Example of how to set an textline
#   base::textline { "kernel.sysreq = 0": ensure => "/etc/sysctl.conf"  }
#
# Example of how to ensure there is no textline
#   base::textline { "kernel.sysreq = 0": 
#       file => "/etc/sysctl.conf",
#       ensure => absent  
#   }
#
# If you are using any special characters in line, you will want to specify a
# escaped version so the existance of the line can be properly determined:
#   base::textline { "something=*": 
#       ensure => "/etc/somefile",
#       escaped_name => "something=\*"
#   }

define base::textline($ensure, $file="/tmp/nothing", $escaped_name="BASIC_REGEX") {
    $fn = $ensure ? {
        absent => $file,
        default => $ensure
    }

    $selector_pattern = $escaped_name ? {
        BASIC_REGEX => "^${name}$",
        default => $escaped_name
    }

    case $ensure {
        absent: {
            exec { "rm-txt-${fn}-${name}":
                command => "sed -i -e '/${selector_pattern}/d' ${fn}",
                onlyif => "grep '^[^#]' ${fn} | grep ${selector_pattern}"
            }
        }
        default: {
            $line = $name
            exec { "add-txt-${fn}-${name}":
                command => "echo '${line}' >> ${fn}",
                unless => "grep '${selector_pattern}' ${fn}"
            }
            exec { "fix-txt-${fn}-${name}":
                command => "sed -i -e '/${selector_pattern}/d' ${fn}; echo '${line}' >> ${fn}",
                unless => "grep '${selector_pattern}' ${fn}",
                require => Exec["add-txt-${fn}-${name}"]
            }
        }
    }
}