
Я ищу здесь разъяснения. Кажется,управлятьдомоматрибутпользовательОпределенный тип работает только когда пользователь не существует. Посмотрите на этот DSL
user { 'artifactory':
ensure => 'present',
home => '/home/artifactory',
managehome => true,
}
file { '/home/artifactory/data':
ensure => link,
target => '/var/lib',
require => User['artifactory'],
}
При первом запуске все работает нормально, однако если я удалюартефактныйдомашний каталог пользователя, затем запустите его снова, puppet блеет.
Ошибка: Не удалось установить «ссылку» на гарантию: Нет такого файла или каталога
Моя первая мысль:Действительно? Взгляните надокументация
Управлять ли домашним каталогом при управлении пользователем. Это создаст домашний каталог, когда обеспечит => присутствует
Если я удалю пользователя и попробую снова, то все работает. Так задумано или это баг? Мне это кажется деликатным.
решение1
С точки зрения времени выполнения puppet проверяет статус пользователя в системе и сравнивает его с манифестом. Если пользователь не существует в системе, то puppet запускает соответствующую useradd
команду для его создания. Если пользователь не должен существовать, но существует, то он запускает соответствующую команду. userdel
Если какой-либо атрибут пользователя, такой как членство в группе, uid, имя и т. д., изменился, то он запускает соответствующую команду gpasswd
или usermod
.
К сожалению, документация по типу пользователя не самая ясная. Параметр managehome
не столько делает заявление об этом каталоге, сколько является опцией для команды useradd
, usermod
, или userdel
. Так что если вы зададите managehome => true
и измените местоположение домашнего каталога, то он будет создан, если вы удалите пользователя, то он будет удален, а если вы добавите пользователя, то он будет создан. Однако это не гарантирует, что каталог будет существовать всегда.
Если это необходимо, то я бы рекомендовал вам создать тип файла и установить соответствующий require. Что-то вроде этого:
user { 'artifactory':
ensure => 'present',
home => '/home/artifactory',
managehome => true,
}
file {
'/home/artifactory/data':
ensure => link,
target => '/var/lib',
require => [ User['artifactory'], File['artifactoryhomedir'] ];
'/home/artifactory':
ensure => directory,
alias => 'artifactoryhomedir',
require => User['artifactory'];
}
решение2
Этоизвестная проблема. Планируемое решение — сохранить текущее поведение, но переименоватьуправлятьдомомксоздатьдомчтобы было понятнее.