Puppet: managehome для типа пользователя работает только тогда, когда пользователь не существует

Puppet: managehome для типа пользователя работает только тогда, когда пользователь не существует

Я ищу здесь разъяснения. Кажется,управлятьдомоматрибутпользовательОпределенный тип работает только когда пользователь не существует. Посмотрите на этот 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

Этоизвестная проблема. Планируемое решение — сохранить текущее поведение, но переименоватьуправлятьдомомксоздатьдомчтобы было понятнее.

Связанный контент