用puppet添加文件并在运行后将其删除

我想添加一个木偶文件,只能在木偶运行时存在。

该文件应该在那里,以防止启动任何服务(失败)在我的木偶运行。

这是我到目前为止没有工作的类,因为有同一个文件的重复声明:

# Opensips package install class opensips::package { case $::osfamily { 'Debian' : { file { 'opensips-enable-apt-policy': ensure => 'present', path => '/usr/sbin/policy-rc.d', mode => '0755', content => "#!/bin/sh echo \"All runlevel operations denied by puppet module ${module_name}\" >&2 exit 101 ", } -> package { $opensips::opensips_debs: ensure => $opensips::package_ensure, } -> file { 'opensips-disable-apt-policy': ensure => 'absent', path => '/usr/sbin/policy-rc.d', } } default : { fail("Unsupported OS: ${::osfamily}") } } } 

这应该给出一个想要的最终状态的概念,但总结一下:

  • 用上面的内容创build文件/usr/sbin/policy-rc.d
  • 运行软件包安装
  • 删除文件

我怎样才能做到这一点最好/最简单的方法?

代理人是Debian Jessie,运行木偶版本3.8.1

我试图把alias metaparameter的文件声明成功。

不幸的是,这不是Puppetdevise的工作原理 – Puppet会强制执行一个已知的系统状态,而不是一个交互式运行的脚本。

一种做你想做的方法是使用exec资源添加/删除文件,并使用本地部署的“源”。

示例(不完整,可能无法正常工作):

 class opensips::package { file { '/path/to/tmp/file.ext': ensure => 'present', mode => '0755', source => 'puppet:///modules/opensips/myfile', } exec { 'deploy_opensips-enable-apt-policy': command => '/bin/cp /path/to/tmp/file.ext /path/to/real/file.ext', creates => '/path/to/real/file.ext', before => Package[$opensips::opensips_debs], require => File['opensips-enable-apt-policy'], } package { $opensips::opensips_debs: ensure => $opensips::package_ensure, notify => Exec['remove_opensips-enable-apt-policy'], } exec { 'remove_opensips-enable-apt-policy': command => '/bin/rm /path/to/real/file.ext', refreshonly => true, } }