У меня есть следующие 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',
],
}
На это две причины:
LOGNAME, USER и HOME специально не настроены марионеткой во время выполнения exec. Это был выбор дизайна, который подробно описан в билете, на который я ссылался.
Я также установил USER и HOME для здравого смысла, хотя я не уверен, что они требуются net ads
.