ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Identity and Access Managementエンタープライズ・デプロイメント・ガイド
11gリリース2 (11.1.2.2.0)
B71694-10
  目次へ移動
目次

前
 
次
 

A プロセスの自動化

この付録では、単一のホストからすべてのスクリプトを起動するスクリプトの記述方法について説明します。

スクリプトを単一のホストからすべてのスクリプトを起動するように記述することで、1コマンドでのデプロイメント作成の効果が得られます。

次のサンプルスクリプトは、これを行うように変更できます。


免責事項:

これらのスクリプトは実行例であり、デプロイメント処理を自動化する方法を示す概念を証明するものとして現状のまま提供されます。スクリプトは、使用している環境固有のニーズに合わせてカスタマイズおよびテストする必要があります。


この付録の内容は、次のとおりです。

A.1 setenv.sh

このスクリプトは環境を設定します。

#!/bin/sh
#
# setenv.sh
#
# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 
#
#    NAME
#     setenv.sh - captures details of environment to be deployed
#
#    DESCRIPTION
#      <short description of component this file declares/defines>
#
#    NOTES
#      <other useful comments, qualifications, etc.>
#
#    MODIFIED   (MM/DD/YY)
#
CURRENT_HOST=`hostname`

export USERNAME=<unix user eg oracle>

export IDMTOP=SW_ROOT
export SHARED_CONFIG_DIR=$IDMTOP/config
export LOCAL_CONFIG_DIR=<LOCAL_ROOT>
export REPOSITORY=<REPOS_HOME>
export INSTALLERS=$REPOSITORY/installers
export RESPONSE_FILE=<FULLY QUALIFIED PATH TO DEPLOYMENT RESPONSE FILE>
export PROVISIONING=<IDMLCM_HOME>/provisioning
export SCRIPTS_DIR=<DIRECTORY CONTAINING THESE SCRIPTS>
export JAVA_HOME=$REPOSITORY/jdk6
export ANT_HOME=$REPOSITORY/provisioning/ant
export PRIMORDIAL_TO_DMZ_SHARE=$PROVISIONING/dmzShare

export RCU_HOME=$INSTALLERS/rcu
export RCU_LOG_LOCATION=$SCRIPTS_DIR/rcu/logs-$$
export RCU_LOG_NAME=rcu.log
export RCU_TIMESTAMP_LOG_DIR=false
export DB_SCHEMA_PREFIX=DEV

PHASES_TO_RUN='preverify install preconfigure configure configure-secondary postconfigure startup validate'

export ALL_HOSTS='<LDAPHOST1> <LDAPHOST2> <OAMHOST1> <OAMHOST2> <OIMHOST1> <OIMHOST2> <WEBHOST1> <WEBHOST2>'

export DB_CONNECT_STRING=<DB-SCAN>:<DB_LSNR_PORT>:<IDSTORE_SERVICE_NAME>
export DB_PASSWORD_SYS=<DB SYS PWD>
export DB_PASSWORD_SCHEMA=<RCU_SCHEMA_PASSWORD>

mkdir -p $PRIMORDIAL_TO_DMZ_SHARE

function timer()
{
    if [[ $# -eq 0 ]]; then
        echo $(date '+%s')
    else
        local  stime=$1
        etime=$(date '+%s')

        if [[ -z "$stime" ]]; then stime=$etime; fi
        dt=$((etime - stime))
        ds=$((dt % 60))
        dm=$(((dt / 60) % 60))
        dh=$((dt / 3600))
        printf '%d:%02d:%02d' $dh $dm $ds
    fi
}

 execCmd()
 {
   HOST=$1
   shift
   CMD_LINE=$*
   CMD="ssh $USERNAME@$HOST $CMD_LINE"

  echo "[idmprov] " `date` $CMD
  tmr=$(timer)
  $CMD

  printf '[idmprov] Elapsed time: %s\n' $(timer $tmr)
}

A.2 setlocalenv.sh

#!/bin/sh
#
# setlocalenv.sh
#
# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 
#
#    NAME
#     setenv.sh - captures details of environment to be deployed
#
#    DESCRIPTION
#      <short description of component this file declares/defines>
#
#    NOTES
#      <other useful comments, qualifications, etc.>
#
#    MODIFIED   (MM/DD/YY)

#
CURRENT_HOST=`hostname`

export USERNAME=<software owner>

export IDMTOP=<SW_ROOT>
export SHARED_CONFIG_DIR=$IDMTOP/config
export LOCAL_CONFIG_DIR=<LOCAL_ROOT>
export REPOSITORY=<REPOS_HOME>
export INSTALLERS=$REPOSITORY/installers
export RESPONSE_FILE=<FULLY QUALIFIED PATH TO DEPLOYMENT RESPONSE FILE>
export PROVISIONING=<IDMLCM_HOME>/provisioning
export SCRIPTS_DIR=<DIRECTORY CONTAINING THESE SCRIPTS>
export JAVA_HOME=$REPOSITORY/jdk6
export ANT_HOME=$REPOSITORY/provisioning/ant
export PRIMORDIAL_TO_DMZ_SHARE=$PROVISIONING/dmzShare

A.3 deploy.sh

これは、デプロイメント・スクリプトです。

#!/bin/sh
#
# deploy.sh
#
# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 
#
#    NAME
#      provision.sh - this script starts executing Deployment phases in all hosts
#
#    DESCRIPTION
#      <short description of component this file declares/defines>
#
#    NOTES
#      - copy all scripts named prov_*.sh to a directory in primordial host
#      - make sure this directory is accessible using the same path from all hosts being provisioned
#      - update prov_env.sh with environment specific details (directories, hostnames, db, etc)
#      - run this script from the primordial host
#      - script will create one log file for each phase in each host - named prov_run-<phase>-<host>.log
#      - script will stop when Deployment completes or on detecting 1st failure (absence of "BUILD SUCCESSFUL" in the log file)
#
#    MODIFIED   (MM/DD/YY)
#

. <DIRECTORY CONTAINING THESE SCRIPTS>/setenv.sh

if [ ! -e $SCRIPTS_DIR/logs ]then
     mkdir -p $SCRIPTS_DIR/logs
fi

rm -r $SCRIPTS_DIR/logs/* LCM_ROOT/provisioning* <LCM_ROOT>/internal LCM_ROOT/lcmconfig LCM_ROOT/keystores 2> /dev/null

starttmr=$(timer)

for PHASE in $PHASES_TO_RUN
do
  phasetmr=$(timer)
  for HOST in $ALL_HOSTS
  do
    echo "[idmprov] Running $PHASE on  $HOST"
    logFile=$SCRIPTS_DIR/logs/$PHASE-$HOST.log

    execCmd $HOST ". $SCRIPTS_DIR/setlocalenv.sh; cd $PROVISIONING/bin; ./runIAMDeployment.sh -responseFile $RESPONSE_FILE -target $PHASE" > $logFile

    fgrep -s "BUILD SUCCESSFUL" $logFile
    if [ "$?" = "1" ]
    then
        echo "ERROR: $PHASE failed in $HOST"
        exit 1
    fi

  done

  echo -e "[idmprov] Total $PHASE\c"
  printf ' time: %s\n' $(timer $phasetmr)
done

printf '[idmprov] Total Elapsed time: %s\n' $(timer $starttmr)

A.4 スクリプトの使用

スクリプトの使用方法は、次のとおりです。

  1. このスクリプトをトポロジ内の各ホスト上の使用可能な場所にコピーします。

  2. スクリプトを編集し、<SW_ROOT>のようなエントリを、ご使用の環境に適用可能なエントリと置き換えます。これを行いやすくするには、第7.1項「Identity and Access Managementのデプロイメントのための情報収集」を使用してください。

  3. 最初のホストからトポロジ内の他のホストのそれぞれに、ssh等価を設定します。詳細については、オペレーティングシステムのドキュメントを参照してください。

  4. 最初のホストからトポロジ内の各ホストに次のコマンドを発行して、ssh等価が機能していることを検証します。このコマンドでは、プロンプトなしで各リモート・マシンでの日付を示す必要があります。

    ssh hostname date
    
  5. 第8章「デプロイメント・プロファイルの作成」で生成されたデプロイメント・レスポンス・ファイルを、これらのスクリプトのあるディレクトリと同じディレクトリにコピーします。

  6. deploy.shスクリプトを実行します。

  7. デプロイメントの完了後、ssh等価を削除します。