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

Как мы можем гарантировать, что не реализованный пользователь не существует в этом марионеточном узле?

Мы объявляем всех наших пользователей виртуальными ресурсами. Например.:

@user { 'belmin':
    uid => 2001
    comment => 'Belmin Fernandez',
    groups => ['sysadmins'],
}

Иногда мы временно realize пользователь узла:

node web1 {
    realize User['belmin']
    (...)
}

Я исследую способы гарантировать, что пользователи, которые не реализованы в узле, не существуют на этом сервере. Первый способ, который приходит на ум, - это делать это, когда временное realize устранен:

node web1 {
    User <| title == 'belmin' |> {
       ensure => absent,
    }
}

Однако кто-нибудь может случайно пропустить это при удалении временного realize. Есть ли другие более элегантные предложения?

Puppet имеет средства для удаления всех пользователей, которые не управляются явно. Это включает в себя виртуальных пользователей, которые не осознаются.

resources {
    'user':
        purge => true
}

Это игнорирует системных пользователей с UID ниже 500 (или 1000 для Debian и некоторых BSD). Обычно он поступает правильно. Излишне говорить, что это следует использовать с большой осторожностью.

При написании вопроса подумал о том, чтобы сделать что-то подобное в классе:

class our_users {
    user { 'belmin':
        ensure  => absent,
        uid     => 2001
        comment => 'Belmin Fernandez',
        groups  => ['sysadmins'],
    }
}

А затем в узле:

node web1 {
    include our_users
    User <| title == 'belmin'|> {
        ensure => present,
    }
}

node web2 {
    include our_users
}

Затем любой узел, который не реализован пользователем, и ensure при перезаписи атрибута этот пользователь будет гарантирован как absent.

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