我有以下exec
将 Linux (CentOS 6) 主机加入 Active Directory 域的内容。从 bash 终端以 root 身份运行时,它会成功运行,并且主机已正确加入 AD 域。
但是,当在 puppet 中运行时,net ads join
命令失败并显示:
加入域失败:为机器帐户设置密码失败(NT_STATUS_ACCESS_DENIED)
这是执行
exec { 'adjoin':
command => "kinit [email protected] -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
anduser
参数。
事实证明,我必须使用
environment
exec 中的参数显式设置一些环境变量,特别是LOGNAME
:有两个原因:
没有 LOGNAME env 变量的 net ads -k join 失败
LOGNAME、USER 和 HOME在 exec 运行期间由 puppet 专门取消设置。这是我链接到的票中详细说明的设计选择。
为了理智起见,我还设置了 USER 和 HOME,尽管我不确定
net ads
.