web-dev-qa-db-ja.com

「netadsjoin」はpuppetexecで失敗しますが、コマンドラインから直接正常に実行されます

Linux(CentOS 6)ホストをActiveDirectoryドメインに参加させる次のexecがあります。 bashターミナルからrootとして実行すると、正常に実行され、ホストはADドメインに正しく参加します。

ただし、パペットで実行する場合、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パラメーターとuserパラメーターを使用した場合と使用しない場合を試しました。

3
Banjer

Execのenvironmentパラメーター、具体的にはLOGNAMEを使用して、いくつかの環境変数を明示的に設定する必要がありました。

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,
    environment => [
        'USER=root',
        'LOGNAME=root',
        'HOME=/root',
    ],
}

これには2つの理由があります。

  1. net ads -k joinはLOGNAME環境変数なしで失敗します

  2. LOGNAME、USER、およびHOMEは、特にpuppetによって設定されません execの実行中。それは私がリンクしたチケットに詳述されているデザインの選択でした。

net adsで必要かどうかはわかりませんが、正気のためにUSERとHOMEも設定しました。

5
Banjer