vCenter 7.0 Update 2でのメールサーバ設定とsendmail.cf

これの続き。 

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アドレス指定する場合に[]でくくる必要がなくなった。