diff options
| author | elijah <elijah@riseup.net> | 2013-02-10 23:39:04 -0800 | 
|---|---|---|
| committer | elijah <elijah@riseup.net> | 2013-02-10 23:39:04 -0800 | 
| commit | 7680ed13b47561ab0bf96bdb63c3aff3f022ee0d (patch) | |
| tree | f1cdbc7cbb97311682259dda55ac62ad2938f39a /puppet/modules | |
| parent | 3cdd7f5f02c237da0f8a3f3eb898982883fd9b97 (diff) | |
added 'try' module
Diffstat (limited to 'puppet/modules')
| -rw-r--r-- | puppet/modules/try/README.md | 13 | ||||
| -rw-r--r-- | puppet/modules/try/manifests/file.pp | 51 | ||||
| -rw-r--r-- | puppet/modules/try/manifests/init.pp | 3 | 
3 files changed, 67 insertions, 0 deletions
| diff --git a/puppet/modules/try/README.md b/puppet/modules/try/README.md new file mode 100644 index 00000000..3888661e --- /dev/null +++ b/puppet/modules/try/README.md @@ -0,0 +1,13 @@ +This module provides a "try" wrapper around common resource types. + +For example: + +    try::file { +      '/path/to/file': +        ensure => 'link', +        target => $target; +    } + +This will work just like `file`, but will silently fail if `$target` is undefined or the file does not exist. + +So far, only `file` type with symlinks works. diff --git a/puppet/modules/try/manifests/file.pp b/puppet/modules/try/manifests/file.pp new file mode 100644 index 00000000..406c0b7a --- /dev/null +++ b/puppet/modules/try/manifests/file.pp @@ -0,0 +1,51 @@ +# +# like built-in type "file", but gets gracefully ignored if the target does not exist or is undefined. +# +# /bin/true and /usr/bin/test are hardcoded to their paths in debian. +# + +define try::file ( +  $ensure = undef, +  $target = undef, +  $restore = true) { + +  if $target != undef { +    exec { "check_${name}": +      command => "/bin/true", +      onlyif => "/usr/bin/test -e '${target}'", +      loglevel => info; +    } +    file { "$name": +      ensure => $ensure, +      target => $target, +      require => Exec["check_${name}"], +      loglevel => info; +    } +  } + +  # +  # if the target does not exist (or is undef), and the file happens to be in a git repo, +  # then restore the file to its original state. +  # +  if $target == undef or $restore { +    $file_basename = basename($name) +    $file_dirname  = dirname($name) +    $command = "git rev-parse && unlink '${name}'; git checkout -- '${file_basename}' && chown --reference='${file_dirname}' '${name}'; true" +    debug($command) + +    if $target == undef { +      exec { "restore_${name}": +        command => $command, +        cwd => $file_dirname, +        loglevel => info; +      } +    } else { +      exec { "restore_${name}": +        unless => "/usr/bin/test -e '${target}'", +        command => $command, +        cwd => $file_dirname, +        loglevel => info; +      } +    } +  } +} diff --git a/puppet/modules/try/manifests/init.pp b/puppet/modules/try/manifests/init.pp new file mode 100644 index 00000000..1d2108c9 --- /dev/null +++ b/puppet/modules/try/manifests/init.pp @@ -0,0 +1,3 @@ +class try { + +} | 
