Я хочу добавить файл с марионеткой, который должен существовать только во время работы марионетки.
Файл должен быть там, чтобы apt не запускал какие-либо службы (которые не работают) во время моего запуска марионетки.
Это тот класс, который у меня пока что не работает, так как существует дублирующееся объявление того же файла:
# 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
метапараметр успешного объявления файла.
К сожалению, 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,
}
}