Назад | Перейти на главную страницу

Puppet - как скопировать файл в несколько папок пользователя?

Я использовал информацию об этом:

Puppet - Есть ли способ скопировать предопределенные пользовательские файлы конфигурации для программного обеспечения на клиентах с мастера марионетки (хоста)?

Но мне нужно что-то более продуманное, потому что у меня есть несколько рабочих столов, и каждый из них используется двумя или тремя пользователями, поэтому я хочу создать класс для копирования ярлыка на его рабочие столы.

Компьютеры присоединены к домену, поэтому любой пользователь может войти в систему с любого рабочего стола, а его профиль создается на каждом рабочем столе.

Я пробовал с этим:

class applink {

  file { "/home/installer/Escritorio/Workdesktop.desktop":
       owner => installer,
       group => root,
       mode => 770,
       source => "puppet://$server/files/Workdesktop.desktop"            
 }

Это только для одного пользователя, называемого «установщиком», как это сделать для нескольких пользователей?

Могу ли я использовать $USER для этого? Есть предположения?

Спасибо!

На самом деле есть два способа сделать это: определение или виртуальный ресурс. Я знаю больше об определениях, так что это подход, который я опишу. О виртуальных ресурсах читайте здесь, но будьте готовы запутаться, прежде чем получите понимание.

Чтобы сделать это в определении, создайте манифест в своем структура модуля содержать его; в вашем примере это будет в _modulepath_/applink/manifests/desktoplinks.pp

define applink::desktoplinks {
  file { "/home/$title/Escritorio/Workdesktop.desktop":
    owner => $title,
    group => root,
    source => "puppet://$server/files/Workdesktop.desktop",
  }
  # you could have others here if you wanted
}

Затем, чтобы использовать его, вы должны вызвать его с именем каждого пользователя, возможно, все сразу в массиве:

applink::desktoplinks { [ "user1", "user2", "user3" ]: }

Хитрость в том, что имя пользователя является «заголовком» определенного ресурса, поэтому оно доступно внутри определения как $title. Узнать больше о определенные типы здесь.

HTH

Я только что узнал другой способ сделать это. Это скорее синтаксическая причуда, чем что-либо еще, но вот что:

file { ["/home/installer/Escritorio/Workdesktop.desktop",
        "/home/user/Escritorio/Workdesktop.desktop"]:
  owner => installer,
  group => root,
  mode => 770,
  source => "puppet://$server/files/Workdesktop.desktop"            
}

Ключ указывает title как массив вместо строки; Puppet проанализирует это так, как если бы вы написали следующее:

file { "/home/installer/Escritorio/Workdesktop.desktop":
  owner => installer,
  group => root,
  mode => 770,
  source => "puppet://$server/files/Workdesktop.desktop"            
}
file { "/home/user/Escritorio/Workdesktop.desktop":
  owner => installer,
  group => root,
  mode => 770,
  source => "puppet://$server/files/Workdesktop.desktop"            
}

т.е. вы получаете оба File["/home/installer/Escritorio/Workdesktop.desktop"] и File["/home/user/Escritorio/Workdesktop.desktop"] привязан к вашей конфигурации.

Я подозреваю, что это сработает для многих типов ресурсов, но я не тестировал ничего, кроме file.