Добавьте файл с марионеткой и удалите его после выполнения

Я хочу добавить файл с марионеткой, которая должна только существовать, в то время как марионетка работает.

Файл должен быть там для предотвращения склонный от запуска любых сервисов (который перестал работать) во время моей выполненной марионетки.

Это - класс, который я имею до сих пор, который не работает, так как существует двойное объявление того же файла:

# 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 и выполняет марионеточную версию 3.8.1

Я попытался поместить alias метапараметр на успехе объявления файла.

1
задан 18 September 2015 в 14:30
1 ответ

К сожалению, "Кукла" работает не так - "Кукла" будет навязывать известное состояние системы, вместо того, чтобы быть интерактивно запущенным сценарием.

Один из способов сделать то, что вы хотите, это использовать ресурсы 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,
  }
}
1
ответ дан 4 December 2019 в 00:00

Теги

Похожие вопросы