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

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

我想添加一个带有 puppet 的文件,该文件只在 puppet 运行时存在。

该文件应该存在,以防止 apt 在我的 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}")
    }
  }
}

这应该能给出期望的最终状态的概念,但总结一下:

  • /usr/sbin/policy-rc.d创建包含上述内容的文件
  • 运行包安装
  • 删除文件

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

代理是 Debian Jessie,运行 puppet 版本 3.8.1

我已尝试将alias元参数放在文件声明成功上。

答案1

不幸的是,Puppet 的工作设计并非如此 - 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,
  }
}

相关内容