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

"Присоединение к сети" не работает в puppet exec, но работает нормально из командной строки

У меня есть следующие exec который присоединяет хост Linux (CentOS 6) к домену Active Directory. При запуске от имени пользователя root с терминала bash он работает успешно, и хост правильно присоединен к домену AD.

Однако при запуске в марионетке net ads join команда не работает с:

Не удалось присоединиться к домену: не удалось установить пароль для учетной записи компьютера (NT_STATUS_ACCESS_DENIED)

Вот исполнитель

exec { 'adjoin':
    command  => "kinit adjoin@AD.EXAMPLE.COM -k -t /etc/krb5.keytab && net ads join createcomputer='Machines/Servers/Linux Servers' osName='${operatingsystem}' osVer=${operatingsystemrelease} -k",
    unless   => "net ads testjoin -k | grep -q 'Join is OK'",
    provider => shell,
    user     => root,
    path     => '/usr/sbin:/usr/bin:/sbin:/bin',
    require  => [
        File['/etc/krb5.conf'],
        File['/etc/krb5.keytab'],
    ],
    logoutput => true,
}

Я пробовал с и без provider и user параметры.

Оказывается, мне пришлось явно установить несколько переменных среды, используя environment параметр в exec, в частности LOGNAME:

exec { 'adjoin':
    command  => "kinit adjoin@AD.EXAMPLE.COM -k -t /etc/krb5.keytab && net ads join createcomputer='Machines/Servers/Linux Servers' osName='${operatingsystem}' osVer=${operatingsystemrelease} -k",
    unless   => "net ads testjoin -k | grep -q 'Join is OK'",
    provider => shell,
    user     => root,
    path     => '/usr/sbin:/usr/bin:/sbin:/bin',
    require  => [
        File['/etc/krb5.conf'],
        File['/etc/krb5.keytab'],
    ],
    logoutput => true,
    environment => [
        'USER=root',
        'LOGNAME=root',
        'HOME=/root',
    ],
}

На это две причины:

  1. net ads -k join не работает без переменной env LOGNAME

  2. LOGNAME, USER и HOME специально не настроены марионеткой во время выполнения exec. Это был выбор дизайна, который подробно описан в билете, на который я ссылался.

Я также установил USER и HOME для здравого смысла, хотя я не уверен, что они требуются net ads.