Марионетка удостоверяется, что файл является каталогом ИЛИ ссылкой. Или гарантируйте каталог только если отсутствующий?

2 сервера CentOS, к которым я хотел бы применить ту же декларацию. Декларация создает пользователя с пользовательским местоположением корневого каталога под /var/username

Проблема находится на одном из серверов /var/username должна быть символьная ссылка прочь на /data/username. Так просто выполнение ensure => 'directory', попытался бы перезаписать символьную ссылку.

И я не могу использовать ensure => 'present' потому что это создает файл по умолчанию, если он не существует. Таким образом для новых серверов, что эта декларация относится к пустому файлу, будет создан, когда мне на самом деле нужна она, чтобы быть каталогом.

  1. Есть ли способ сделать ensure каталог или ссылка? Так, чтобы, если это отсутствует, каталог был создан. И если это - ссылка, затем просто оставьте его в покое? По умолчанию Марионетка file тип создает файл при выполнении ensure => 'present'.

  2. Или способ сделать if absent ensure directory else leave it alone?

Что относительно exec, выполнение простого удара if /var/username not exist then mkdir вид вещи?
Противный, но это работало бы.

Идеальное решение состоит в том, чтобы, вероятно, избежать особых случаев от запуска. Наличие нескольких вариантов конфигурации в единственной декларации действительно кажется немного неправильным. Таким образом, в конечном счете я буду также:

  • нормализуйте VMs (мог бы переключиться от символьной ссылки до связывания, монтируются, например),
  • дайте им отдельные декларации, так как конфигурация между ними отличается

Но в целях этого вопроса я хотел бы знать, существуют ли какие-либо опции/синтаксис в Марионетке, о которой я в настоящее время не знаю.

4
задан 8 January 2015 в 14:26
1 ответ

Вы всегда можете использовать $hostname или $certname для обработки исключения:

file { "/var/username":
mode    => 440,
ensure  => $hostname ? {
  'oddballserver' => link,
  default  => directory,
  }, 
target => $hostname ? {
  'oddballserver' => '/data/username',
}

Это не протестировано, но, основываясь на логике, я использую различные вещи в наших манифестах. YMMV.

3
ответ дан 3 December 2019 в 03:42

Теги

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