これの続き。
vCenterをアップデートしたら、アラートメール送信に失敗するようになった - しろぺん
上記記事で、vCenter 6.7 Update 3gからvCenter 6.7 Update 3jにアップデートしたとき、vCenterが生成するsendmail.cf (の元となるm4マクロ)について調べた。
この時点では、
- vCenterでメールサーバを設定すると、変数 ${SMTP_RELAY_SERVER} にセットされる
- メールサーバ設定を保存すると、/usr/lib/vmware-vpx/config_sendmail.sh が実行される
- 上記スクリプトは、変数${SMTP_RELAY_SERVER} が空でない場合は以下を出力する
define(\`RELAY_MAILER_ARGS', \`TCP \$h $SMTP_RELAY_PORT')dnl define(\`ESMTP_MAILER_ARGS', \`TCP \$h $SMTP_RELAY_PORT')dnl
となっていた。
処理部分は以下。
generate_sendmail_mc() {
echo "######################################################################"
echo "# /etc/mail/sendmail.cf"
echo "#"
echo "# Generated by $0 on $(date +'%Y/%m/%d %H:%M:%S')"
echo "# generator script VERSION=$VERSION"
echo "######################################################################"
echo "divert(-1)"
echo "include(\`/etc/mail/m4/cf.m4')"
echo "divert(0)dnl"
echo "VERSIONID(\`@(#)Setup for Generic Linux')dnl"
echo "OSTYPE(\`linux')dnl"
echo "define(\`confPRIVACY_FLAGS', \`noexpn,novrfy')dnl"
if test -n "$SMTP_RELAY_SERVER" ; then
echo "define(\`SMART_HOST', \`$SMTP_RELAY_SERVER')dnl"
echo "undefine(\`confHOST_STATUS_DIRECTORY')dnl"
fi
if test -n "$SMTP_RELAY_PORT" ; then
echo "define(\`RELAY_MAILER_ARGS', \`TCP \$h $SMTP_RELAY_PORT')dnl"
echo "define(\`ESMTP_MAILER_ARGS', \`TCP \$h $SMTP_RELAY_PORT')dnl"
fi
# certs for STARTTLS
(以下略)
このため、メールサーバをIPアドレスで指定する場合は、[]でくくって指定(192.168.0.1なら、[192.168.0.1])する必要があった。
今回、別システムで vCenter 7.0 Update 2 にアップデートしたところ、ここの処理が変更されていた。
generate_sendmail_mc() {
echo "######################################################################"
echo "# /etc/mail/sendmail.cf"
echo "#"
echo "# Generated by $0 on $(date +'%Y/%m/%d %H:%M:%S')"
echo "# generator script VERSION=$VERSION"
echo "######################################################################"
echo "divert(-1)"
echo "include(\`/etc/mail/m4/cf.m4')"
echo "divert(0)dnl"
echo "VERSIONID(\`@(#)Setup for Generic Linux')dnl"
echo "OSTYPE(\`linux')dnl"
echo "define(\`confPRIVACY_FLAGS', \`noexpn,novrfy')dnl"
if test -n "$SMTP_RELAY_SERVER" ; then
if [[ "$SMTP_RELAY_SERVER" == *[[:alpha:]]* ]] || \
([[ "$SMTP_RELAY_SERVER" == *[[:digit:]]* ]] && [[ "$SMTP_RELAY_SERVER" == *[[:alpha:]]* ]])
then
echo "define(\`SMART_HOST', \`$SMTP_RELAY_SERVER')dnl"
else
echo "define(\`SMART_HOST', \`[$SMTP_RELAY_SERVER]')dnl"
fi
echo "undefine(\`confHOST_STATUS_DIRECTORY')dnl"
fi
if test -n "$SMTP_RELAY_PORT" ; then
echo "define(\`RELAY_MAILER_ARGS', \`TCP \$h $SMTP_RELAY_PORT')dnl"
echo "define(\`ESMTP_MAILER_ARGS', \`TCP \$h $SMTP_RELAY_PORT')dnl"
fi
# certs for STARTTLS
(以下略)
指定されたメールサーバを[ ]でくくる必要があるかどうかを判別するようになっている。
このため、メールアドレスをIPアドレス指定する場合に[]でくくる必要がなくなった。