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

Как добавить файл в домашние каталоги всех существующих и будущих пользователей

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

я получил users модуль, который я использую для создания общих пользователей на всех серверах. я получил git модуль, который я использую для установки git и настройки общесистемной конфигурации в /etc/gitconfig. Что бы я хотел сделать:

  1. На серверах, которые настроены для установки git (не все из них), перейдите и бросьте (шаблонный) .gitconfig в домашние каталоги все существующие пользователи. И, очевидно, сделайте это для изменений в шаблоне.
  2. Добавить .gitconfig для всех будущих пользователей. Но я не чувствую, что это принадлежит users модуль - я думаю, что он принадлежит git модуль. Похоже, я хочу знать, когда был добавлен какой-либо пользователь (а не только данный экземпляр пользователя), а затем иметь доступ к параметрам создания этого пользователя (например, домашний каталог, настоящее имя и имя пользователя).

По сути, часть 2 была бы легкой, если бы я просто развернул шаблонный .gitconfig всем пользователям, созданным users модуль. Но я действительно не хочу, чтобы у пользователей была .gitconfig файл, если git не установлен в системе. Я действительно пытаюсь сказать: «Для всех управляемых пользователей в этой системе, если установлен git, управляйте .gitconfig файл".

Спасибо!

Вам нужно будет использовать две процедуры, сначала для уже созданных учетных записей:

http://www.cyberciti.biz/tips/linux-unix-shell-batch-copy.html

и еще один для будущих пользователей:

http://linuxers.org/howto/how-set-default-content-new-users-home-directory-using-etcskel

Будет проще, если пользователями и узлами, которым нужен git, будет управлять puppet:

class git {
  packakge { "git":
    ensure => installed,
  }
}

class users {
  user { ... }
  file { "/home/${user}/.gitconfig":
    ensure => present,
    content => template("gitconfig"),
    require => Class["git"],
  }
}

Затем для каждого узла git включите класс git.

для всех управляемых пользователей в этой системе,

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

если установлен git,

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

# git.rb
Facter.add("git") do
        setcode do
                %x{/usr/bin/test -x /usr/bin/git && /bin/echo yes || /bin/echo no}.chomp
        end
end

С другой стороны, git модуль может экспортировать виртуальный ресурс, такой как .gitconfig файл, и пользовательский модуль мог это реализовать. Я не думаю, что можно реализовать тот же ресурс параметризованным (домашний каталог пользователя) способом.

управлять файлом .gitconfig

Хорошо, что ты умеешь делать.

Если вы хотите просто обеспечить базовый файл, используйте теги. Ресурс виртуального файла будет реализован только в том случае, если был включен класс git. Вы можете настроить это с помощью шаблона для добавления имени пользователя и адреса электронной почты. Это может вызвать проблемы, если пользователи захотят настроить свою конфигурацию git (марионетка перезапишет их изменения).

class git {
   @file { 'git_user_config':
     tag     => 'git_user_config',
     path    => '/tmp/.gitconfig',
     content => template("git/gitconfig.erb"),
     require => Package["git"],
  }
}

class user {
  # user defs here

  File <| tag == 'git_user_config' |> {
    path => "/home/${user}/.gitconfig",
  }
}

Вы также можете использовать puppet-stdlib (https://forge.puppetlabs.com/puppetlabs/stdlib) функция getparam.

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

class users {
  user {...}

  if ( (defined(Package['git']) && (getparam(Package['git'],'ensure') == 'present') ) {
    file {
      "/home/${user}/.gitconfig":
        ensure => present,
        content => template("git/gitconfig.erb"),
        require => Class["git"],
    }
  }