Я начинаю использовать марионетку для управления парочкой серверов и не знаю, как добиться следующего.
я получил users
модуль, который я использую для создания общих пользователей на всех серверах. я получил git
модуль, который я использую для установки git и настройки общесистемной конфигурации в /etc/gitconfig
. Что бы я хотел сделать:
.gitconfig
в домашние каталоги все существующие пользователи. И, очевидно, сделайте это для изменений в шаблоне..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"],
}
}