Как сделать puppet копировать файл, только если источник существует?
Я пытаюсь предоставить бродячую виртуальную машину, чтобы позволить пользователям поставлять свой собственный bash_profile.местный, но я не хочу, чтобы этот файл отслеживаются в СКВ ВМ РЕПО. Я отслеживаемый файл.местный.dist файл, который они могут переименовать. Как я могу сказать puppet только создать файл, если исходный файл существует? В настоящее время он работает правильно, но регистрирует ошибку во время подготовки, и это то, чего я пытаюсь избежать.
это манифест:
class local
{
file { '.bash_profile.local':
source => 'puppet:///modules/local/bash_profile.local',
path => '/home/vagrant/.bash_profile.local',
replace => false,
mode => 0644,
owner => 'vagrant',
group => 'vagrant',
}
}
3 ответов
вы можете злоупотреблять файлом таким образом:
$a = file('/etc/puppet/modules/local/files/bash_profile.local','/dev/null')
if($a != '') {
file { '.bash_profile.local':
content => $a,
...
}
}
Это не совсем то, что вы просили, но вы можете указать несколько путей в источнике, поэтому вы можете иметь пустой файл по умолчанию, если пользователь не предоставил свой собственный.
class local
{
file { '.bash_profile.local':
source => [
'puppet:///modules/local/bash_profile.local',
'puppet:///modules/local/bash_profile.local.default'
],
path => '/home/vagrant/.bash_profile.local',
replace => false,
mode => 0644,
owner => 'vagrant',
group => 'vagrant',
}
}
вы можете попробовать что-то вроде этого:
file { 'bash_profile.local':
ensure => present,
source => ['puppet:///modules/local/bash_profile.local', '/dev/null'],
path => '/home/vagrant/.bash_profile.local',
before => Exec['clean-useless-file'],
}
exec { 'clean-useless-file':
command => 'rm .bash_profile.local',
onlyif => 'test -s .bash_profile.local',
cwd => '/home/vagrant',
path => '/bin:/usr/bin',
}
если администратор не сделает копию ".файл.локальные "доступные в" модулях / local / bash_profile.локальный", файловый ресурс будет использовать второй источник, а затем создаст пустой файл. Затем тест "onlyif" завершается неудачно, и exec удалит бесполезный пустой файл.
использовать таким образом этот код может быть немного громоздким, но это лучше, чем провал подготовки. Вы можете оценить, если сохранение пустого .файл.локальный файл может быть в порядке в вашем случае. Обычно я использую вариант этого, с wget вместо rm, чтобы получить новую копию файла из интернета, если он еще не был доступен в качестве источника.
Если вы используете puppetmaster, имейте в виду, что вы можете использовать его для подготовки собственного сервера, представляя две версии каталога, согласно.файл.местный присутствует или нет.