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

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

Я ищу здесь разъяснения. Кажется управлять домом атрибут пользователь определенный тип работает только тогда, когда пользователь не существует. Взгляните на этот DSL

user { 'artifactory':
        ensure     => 'present',
        home       => '/home/artifactory',
        managehome => true,
}

file { '/home/artifactory/data':
        ensure  => link,
        target  => '/var/lib',
        require => User['artifactory'],
}

При первом запуске он работает нормально, однако, если я удалю искусство домашний каталог пользователя, затем запустите его снова, puppet barfs.

Ошибка: не удалось установить ссылку при гарантии: нет такого файла или каталога

Моя первая мысль действительно? Взгляните на документация

Следует ли управлять домашним каталогом при управлении пользователем. Это создаст домашний каталог при условии, что => присутствует

Если я удалю пользователя и попробую снова, он заработает. Так это задумано или это ошибка? Мне это кажется деликатным.

С точки зрения времени выполнения марионетка проверяет статус пользователя в системе и сравнивает его с манифестом. Если пользователь не существует в системе, марионетка запускает соответствующий 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'];
}

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