Puppet: как проверить в условии IF, установлен ли пакет Choco ИЛИ существует ли локальный пользователь? - PullRequest
0 голосов
/ 12 марта 2020

Windows Серверная среда. У нас есть серверы с ролью Puppet, которые устанавливают пакет c Choco. Было решено, что пакет не следует устанавливать на новые серверы. Простейшим способом было бы просто удалить выражение пакета из манифеста. Проблема в том, что пакет создает локального пользователя во время установки, и этому пользователю должны быть дополнительно предоставлены права в локальной ОС через Puppet.

Если пакет никогда не устанавливался, этого пользователя не существует в ОС и утверждение, назначающее права для этого, терпит неудачу. Однако если мы удалим это правильное назначение из роли, оно также будет удалено на всех серверах с уже установленным пакетом, и приложение не будет работать.

Есть ли способ проверить в манифесте, если это пакет в данный момент установлен? Что-то вроде «если ПАКЕТ is_present {сделать что-то}». Или проверить существование этого пользователя? «если USER существует {сделать что-то}», я знаю, что это может быть решено пользовательским фактом, но это сложное приложение с несколькими общими компонентами с другими приложениями. Я не могу определить ни типичные файлы, ни типичный сервис для него, и цена ошибки очень высока (200 серверов, критически важные, несколько тысяч пользователей ...). Единственное, что известно наверняка - это имя пакета Choco и имя пользователя.

1 Ответ

0 голосов
/ 13 марта 2020

Нашел решение.

На самом деле это специальный пользователь "NT Authority \ BrokerService". Такие пользователи всегда соответствуют сервису в ОС. Таким образом, мы можем проверить не присутствие пользователя, а наличие сервиса. Мы уже используем пользовательский факт, который создает список всех служб на сервере, поэтому на самом деле это просто:

if 'BrokerAgent' in $::sr_services {
    user_right_assignment { 'sesystemtimeprivilege for BrokerAgent':
        right => 'sesystemtimeprivilege',
        sid   => ['NT SERVICE\BrokerAgent'],
    }
}

Конечно, его можно дополнительно параметризировать с помощью переменных.

Вопрос Об обнаружении присутствия пакета Choco все еще остается открытым.

...