2 сервера CentOS, к которым я хотел бы применить один и тот же манифест. Манифест создает пользователя с пользовательским расположением домашнего каталога в /var/username
Проблема на одном из серверов /var/username
имеет быть символической ссылкой на /data/username
. Так просто бегать ensure => 'directory',
попытается перезаписать символическую ссылку.
И я не могу использовать ensure => 'present'
потому что это создает файл по умолчанию, если он не существует. Таким образом, для новых серверов, которые этот манифест применяется к пустому файлу, будет создан, когда мне действительно нужно, чтобы он был каталогом.
Есть способ сделать ensure
каталог или ссылка на сайт? Так что, если он отсутствует, создается каталог. А если это ссылка, то просто оставить в покое? По умолчанию Puppet file
type создает файл при выполнении ensure => 'present'
.
Или способ сделать if absent ensure directory else leave it alone
?
Что о exec
, делая простой bash if /var/username not exist then mkdir
Такие вещи?
Противно, но это сработает.
Идеальным решением будет, вероятно, с самого начала избегать особых случаев. Наличие нескольких вариантов конфигурации в одном манифесте кажется немного неправильным. Так что в конце концов я либо:
Но для целей этого вопроса я хотел бы знать, есть ли в Puppet какие-либо параметры / синтаксис, о которых я в настоящее время не знаю.
Вы всегда можете использовать $hostname
или $certname
для обработки исключения:
file { "/var/username":
mode => 440,
ensure => $hostname ? {
'oddballserver' => link,
default => directory,
},
target => $hostname ? {
'oddballserver' => '/data/username',
}
Это непроверено, но на основе логики, которую я использую для множества вещей в наших манифестах. YMMV.