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