https://blogs.oracle.com/ATeamExalogic/entry/exalogic_2_0_1_tea6
これまでのところ、このシリーズでは、我々はEMOC(Enterprise Manager Ops Center)のBUI(Browser-based User Interface)でのアセットの作成を取り上げてきました。しかし、Exalogic2.0.1のインストールソフトウェアでは、EMOC内で利用可能な一般的な機能のほとんどに代わるものとして、IaaSのCLIを提供しています。IaaSのCLIインタフェースはCloudUserロールを持つBUIログインユーザーに対して利用可能な機能にアクセスを提供しています。
しかしそうは言っても、このような機能がCLIから全て利用できるわけではないので、IaaS CLIはAssetsを特定のアカウント(Tenure)内で作成するために必要な機能を全て提供しています。これらのアクションは一般的でかつ繰り返すことができるので、私は、シンプルな入力ファイルを取り、アセットを作成するという簡単なスクリプトに機能をラップすることにしました。
スクリプトに従えば、私たちにアカウント内に様々なアセットを作成するための手順が表示されるので、手順を説明する以下のスクリプト内の様々な機能を使って処理します。
スクリプト内の様々な手順から、進行中のアクションを完了させるアクション間で停止するように設計されていることに気付くでしょう。このようにしている理由は、一連のアクションの中でEMOCの動作を困難にする可能性があり、我々は行動のvServerやボリュームの作成が完了する前にボリュームを接続しようとしている状況に陥る可能性があるからです。
processAssets()
この関数は、単にどんなアセットを作成する必要があるかを識別するための入力ファイルを読み取ります。入力ファイルの例を以下に記載します。これは、入力ファイルを使って1回の実行で複数のアカウント内に資産を作成できることがわかります。エントリの順序は次のように実行される関数を定義します。入力コマンド | IaaSアクション | 引数 |
---|---|---|
Production:Connect |
|
|
Production:Create|vServer |
|
|
Production:Create|Volume |
|
|
Production:Attach|Volume |
|
|
Production:Disconnect |
| なし |
connectToAccount()
connectToAccount()関数から、アセット作成の前にまず適切なアカウントに接続する必要があることがわかります。これを実現するためには、アカウントに関連付けられているIDが必要になります。akm-describe-accounts CLIコマンドを実行することで入手できます。このコマンドは全てのアカウントとIDをリストとして返します。アカウントIDがわかると、akm-create-access-keyコマンドを使ってアクセスキーを生成し、iaas-create-key-pairコマンドを使ってキーペアを生成します。この時点で、我々は今、我々は特定の名前のアカウントにアクセスするために必要なすべての情報を持っています。
createVServer()
この関数は入力ファイルから情報を抽出し、iaas-run-vserverというCLIコマンドを使ってcServerを作成します。この関数の中身を読むと、vServerタイプ、テンプレート、ネットワークに対応する様々な入力名をとり、それらを適切なIDに変換することがわかるでしょう。このIaaS CLIはコンポーネント名で直接指示できないため、全てのIDを見つけ出す必要があります。createVolume()
単にボリューム名とサイズを入力パラメータとし、iaas-create-volumeコマンドを実行してボリュームを作成する関数です。attachVolume()
いま作成したところのボリューム名を引数とし、 iaas-attach-volumes-to-vserverを使ってボリュームをvServerに割り当てる前にボリュームが適切なIDを識別します。disconnectFromAccount()
アカウントへの接続が終了すると、単にキーペアをiaas-delete-key-pairで削除し、アクセスキーをakm-delete-access-keyで削除すればよいのですが、もしSSHが必要でその後セキュアでないアクセスを許可するためにSSHDの情報を変更しない場合、キーを保持することが有用な場合があります。デフォルトでは、vServerをコマンドラインから作成する場合は、SSHアクセスのためにキーが必要です。CreateAssets.sh
export OCCLI=/opt/sun/occli/bin export IAAS_HOME=/opt/oracle/iaas/cli export JAVA_HOME=/usr/java/latest export IAAS_BASE_URL=https://127.0.0.1 export IAAS_ACCESS_KEY_FILE=iaas_access.key export KEY_FILE=iaas_access.pub #CloudUser used to create vServers & Volumes export IAAS_USER=exaprod export IAAS_PASSWORD_FILE=root.pwd export KEY_NAME=cli.recreate export INPUT_FILE=CreateAssets.in export ACCOUNTS_FILE=accounts.out export VOLUMES_FILE=volumes.out export DISTGRPS_FILE=distgrp.out export VNETS_FILE=vnets.out export VSERVER_TYPES_FILE=vstype.out export VSERVER_FILE=vserver.out export VSERVER_TEMPLATES=template.out export KEY_PAIRS=keypairs.out PROCESSING_ACCOUNT="" function cleanTempFiles() { rm -f $ACCOUNTS_FILE $VOLUMES_FILE $DISTGRPS_FILE $VNETS_FILE $VSERVER_TYPES_FILE $VSERVER_FILE $VSERVER_TEMPLATES $KEY_PAIRS $IAAS_PASSWORD_FILE $KEY_FILE $IAAS_ACCESS_KEY_FILE } function connectToAccount() { if [[ "$ACCOUNT" != "$PROCESSING_ACCOUNT" ]] then if [[ "" != "$PROCESSING_ACCOUNT" ]] then $IAAS_HOME/bin/iaas-delete-key-pair --key-name $KEY_NAME --access-key-file $IAAS_ACCESS_KEY_FILE $IAAS_HOME/bin/akm-delete-access-key $AK fi PROCESSING_ACCOUNT=$ACCOUNT IAAS_USER=$ACCOUNT_USER echo "$ACCOUNT_PASSWORD" > $IAAS_PASSWORD_FILE $IAAS_HOME/bin/akm-describe-accounts --sep "|" > $ACCOUNTS_FILE while read line do ACCOUNT_ID=${line%%|*} line=${line#*|} ACCOUNT_NAME=${line%%|*} # echo "Id = $ACCOUNT_ID" # echo "Name = $ACCOUNT_NAME" if [[ "$ACCOUNT_NAME" == "$ACCOUNT" ]] then echo "Found Production Account $line" AK=`$IAAS_HOME/bin/akm-create-access-key --account $ACCOUNT_ID --access-key-file $IAAS_ACCESS_KEY_FILE` KEYPAIR=`$IAAS_HOME/bin/iaas-create-key-pair --key-name $KEY_NAME --key-file $KEY_FILE` echo "Connected to $ACCOUNT_NAME" break fi done < $ACCOUNTS_FILE fi } function disconnectFromAccount() { $IAAS_HOME/bin/iaas-delete-key-pair --key-name $KEY_NAME --access-key-file $IAAS_ACCESS_KEY_FILE $IAAS_HOME/bin/akm-delete-access-key $AK PROCESSING_ACCOUNT="" } function getNetworks() { $IAAS_HOME/bin/iaas-describe-vnets --sep "|" > $VNETS_FILE } function getVSTypes() { $IAAS_HOME/bin/iaas-describe-vserver-types --sep "|" > $VSERVER_TYPES_FILE } function getTemplates() { $IAAS_HOME/bin/iaas-describe-server-templates --sep "|" > $VSERVER_TEMPLATES } function getVolumes() { $IAAS_HOME/bin/iaas-describe-volumes --sep "|" > $VOLUMES_FILE } function getVServers() { $IAAS_HOME/bin/iaas-describe-vservers --sep "|" > $VSERVER_FILE } function getNetworkId() { while read line do NETWORK_ID=${line%%|*} line=${line#*|} NAME=${line%%|*} if [[ "$NAME" == "$NETWORK_NAME" ]] then break fi done < $VNETS_FILE } function getVSTypeId() { while read line do VSTYPE_ID=${line%%|*} line=${line#*|} NAME=${line%%|*} if [[ "$VSTYPE_NAME" == "$NAME" ]] then break fi done < $VSERVER_TYPES_FILE } function getTemplateId() { while read line do TEMPLATE_ID=${line%%|*} line=${line#*|} NAME=${line%%|*} if [[ "$TEMPLATE_NAME" == "$NAME" ]] then break fi done < $VSERVER_TEMPLATES } function getVolumeId() { while read line do export VOLUME_ID=${line%%|*} line=${line#*|} NAME=${line%%|*} if [[ "$NAME" == "$VOLUME_NAME" ]] then break; fi done < $VOLUMES_FILE } function getVServerId() { while read line do VSERVER_ID=${line%%|*} line=${line#*|} NAME=${line%%|*} if [[ "$VSERVER_NAME" == "$NAME" ]] then break; fi done < $VSERVER_FILE } function getVServerState() { getVServers while read line do VSERVER_ID=${line%%|*} line=${line#*|} NAME=${line%%|*} line=${line#*|} line=${line#*|} VSERVER_STATE=${line%%|*} if [[ "$VSERVER_NAME" == "$NAME" ]] then break; fi done < $VSERVER_FILE } function pauseUntilVServerRunning() { # Wait until the Server is running before creating the next getVServerState while [[ "$VSERVER_STATE" != "RUNNING" ]] do getVServerState echo "$NAME $VSERVER_STATE" if [[ "$VSERVER_STATE" != "RUNNING" ]] then echo "Sleeping......." sleep 60 fi if [[ "$VSERVER_STATE" == "FAILED" ]] then echo "Will Delete $NAME in 5 Minutes....." sleep 300 deleteVServer echo "Deleted $NAME waiting 5 Minutes....." sleep 300 break fi done # Lets pause for a minute or two echo "Just Chilling......" sleep 60 echo "Ahhhhh we're getting there......." sleep 60 echo "I'm almost at one with the universe......." sleep 60 echo "Bong Reality Check !" } function deleteVServer() { $IAAS_HOME/bin/iaas-terminate-vservers --force --vserver-ids $VSERVER_ID } function createVServer() { VSERVER_NAME=${ASSET_DETAILS%%|*} ASSET_DETAILS=${ASSET_DETAILS#*|} VSTYPE_NAME=${ASSET_DETAILS%%|*} ASSET_DETAILS=${ASSET_DETAILS#*|} TEMPLATE_NAME=${ASSET_DETAILS%%|*} ASSET_DETAILS=${ASSET_DETAILS#*|} NETWORK_NAMES=${ASSET_DETAILS%%|*} ASSET_DETAILS=${ASSET_DETAILS#*|} IP_ADDRESSES=${ASSET_DETAILS%%|*} # Get Ids associated with names getVSTypeId getTemplateId # Convert Network Names to Ids NETWORK_IDS="" while true do NETWORK_NAME=${NETWORK_NAMES%%,*} NETWORK_NAMES=${NETWORK_NAMES#*,} getNetworkId if [[ "$NETWORK_IDS" != "" ]] then NETWORK_IDS="$NETWORK_IDS,$NETWORK_ID" else NETWORK_IDS=$NETWORK_ID fi if [[ "$NETWORK_NAME" == "$NETWORK_NAMES" ]] then break fi done # Create vServer echo "About to execute : $IAAS_HOME/bin/iaas-run-vserver --name $VSERVER_NAME --key-name $KEY_NAME --vserver-type $VSTYPE_ID --server-template-id $TEMPLATE_ID --vnets $NETWORK_IDS --ip-addresses $IP_ADDRESSES" $IAAS_HOME/bin/iaas-run-vserver --name $VSERVER_NAME --key-name $KEY_NAME --vserver-type $VSTYPE_ID --server-template-id $TEMPLATE_ID --vnets $NETWORK_IDS --ip-addresses $IP_ADDRESSES pauseUntilVServerRunning } function createVolume() { VOLUME_NAME=${ASSET_DETAILS%%|*} ASSET_DETAILS=${ASSET_DETAILS#*|} VOLUME_SIZE=${ASSET_DETAILS%%|*} # Create Volume echo "About to execute : $IAAS_HOME/bin/iaas-create-volume --name $VOLUME_NAME --size $VOLUME_SIZE" $IAAS_HOME/bin/iaas-create-volume --name $VOLUME_NAME --size $VOLUME_SIZE # Lets pause echo "Just Waiting 30 Seconds......" sleep 30 } function attachVolume() { VSERVER_NAME=${ASSET_DETAILS%%|*} ASSET_DETAILS=${ASSET_DETAILS#*|} VOLUME_NAMES=${ASSET_DETAILS%%|*} # Get vServer Id getVServerId # Convert Volume Names to Ids VOLUME_IDS="" while true do VOLUME_NAME=${VOLUME_NAMES%%,*} VOLUME_NAMES=${VOLUME_NAMES#*,} getVolumeId if [[ "$VOLUME_IDS" != "" ]] then VOLUME_IDS="$VOLUME_IDS,$VOLUME_ID" else VOLUME_IDS=$VOLUME_ID fi if [[ "$VOLUME_NAME" == "$VOLUME_NAMES" ]] then break fi done # Attach Volumes echo "About to execute : $IAAS_HOME/bin/iaas-attach-volumes-to-vserver --vserver-id $VSERVER_ID --volume-ids $VOLUME_IDS" $IAAS_HOME/bin/iaas-attach-volumes-to-vserver --vserver-id $VSERVER_ID --volume-ids $VOLUME_IDS # Lets pause echo "Just Waiting 30 Seconds......" sleep 30 } function processAssets() { while read line do ACCOUNT=${line%%:*} line=${line#*:} ACTION=${line%%|*} line=${line#*|} if [[ "$ACTION" == "Connect" ]] then ACCOUNT_USER=${line%%|*} line=${line#*|} ACCOUNT_PASSWORD=${line%%|*} connectToAccount ## Account Info getNetworks getVSTypes getTemplates continue fi if [[ "$ACTION" == "Create" ]] then ASSET=${line%%|*} line=${line#*|} ASSET_DETAILS=$line if [[ "$ASSET" == "vServer" ]] then createVServer continue fi if [[ "$ASSET" == "Volume" ]] then createVolume continue fi fi if [[ "$ACTION" == "Attach" ]] then ASSET=${line%%|*} line=${line#*|} ASSET_DETAILS=$line if [[ "$ASSET" == "Volume" ]] then getVolumes getVServers attachVolume continue fi fi if [[ "$ACTION" == "Connect" ]] then disconnectFromAccount continue fi done < $INPUT_FILE } # Should Parameterise this while [ $# -gt 0 ] do case "$1" in -a) INPUT_FILE="$2"; shift;; *) echo ""; echo >&2 \ "usage: $0 [-a <asset definition="definition" file="file">] (Default is CreateAssets.in)" echo""; exit 1;; *) break;; esac shift done processAssets echo "**************************************" echo "***** Finished Creating Assets *****" echo "**************************************"
CreateAssetsProd.in
Production:Connect|exaprod|welcome1 Production:Create|vServer|VS006|VSTProduction|BaseOEL56ServerTemplate|EoIB-otd-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.223.13,192.168.0.13,10.117.81.67,172.17.0.14 Production:Create|vServer|VS007|VSTProduction|BaseOEL56ServerTemplate|EoIB-otd-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.223.14,192.168.0.14,10.117.81.68,172.17.0.15 Production:Create|vServer|VS008|VSTProduction|BaseOEL56ServerTemplate|EoIB-wls-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.225.61,192.168.0.61,10.117.81.61,172.17.0.16 Production:Create|vServer|VS009|VSTProduction|BaseOEL56ServerTemplate|EoIB-wls-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.225.62,192.168.0.62,10.117.81.62,172.17.0.17 Production:Create|vServer|VS000|VSTProduction|BaseOEL56ServerTemplate|EoIB-wls-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.225.63,192.168.0.63,10.117.81.63,172.17.0.18 Production:Create|vServer|VS001|VSTProduction|BaseOEL56ServerTemplate|EoIB-wls-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.225.64,192.168.0.64,10.117.81.64,172.17.0.19 Production:Create|vServer|VS002|VSTProduction|BaseOEL56ServerTemplate|EoIB-wls-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.225.65,192.168.0.65,10.117.81.65,172.17.0.20 Production:Create|vServer|VS003|VSTProduction|BaseOEL56ServerTemplate|EoIB-wls-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.225.66,192.168.0.66,10.117.81.66,172.17.0.21 Production:Create|Volume|VS006|50 Production:Create|Volume|VS007|50 Production:Create|Volume|VS008|50 Production:Create|Volume|VS009|50 Production:Create|Volume|VS000|50 Production:Create|Volume|VS001|50 Production:Create|Volume|VS002|50 Production:Create|Volume|VS003|50 Production:Attach|Volume|VS006|VS006 Production:Attach|Volume|VS007|VS007 Production:Attach|Volume|VS008|VS008 Production:Attach|Volume|VS009|VS009 Production:Attach|Volume|VS000|VS000 Production:Attach|Volume|VS001|VS001 Production:Attach|Volume|VS002|VS002 Production:Attach|Volume|VS003|VS003 Production:Disconnect Development:Connect|exadev|welcome1 Development:Create|vServer|VS014|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.24,10.117.81.71,172.17.0.24 Development:Create|vServer|VS015|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.25,10.117.81.72,172.17.0.25 Development:Create|vServer|VS016|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.26,10.117.81.73,172.17.0.26 Development:Create|vServer|VS017|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.27,10.117.81.74,172.17.0.27 Development:Create|vServer|VS018|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.28,10.117.81.75,172.17.0.28 Development:Create|vServer|VS019|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.29,10.117.81.76,172.17.0.29 Development:Create|vServer|VS020|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.30,10.117.81.77,172.17.0.30 Development:Create|vServer|VS021|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.31,10.117.81.78,172.17.0.31 Development:Create|vServer|VS022|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.32,10.117.81.79,172.17.0.32 Development:Create|vServer|VS023|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.33,10.117.81.80,172.17.0.33 Development:Create|vServer|VS024|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.34,10.117.81.81,172.17.0.34 Development:Create|vServer|VS025|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.35,10.117.81.82,172.17.0.35 Development:Create|vServer|VS026|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.36,10.117.81.83,172.17.0.36 Development:Create|vServer|VS027|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.37,10.117.81.84,172.17.0.37 Development:Create|Volume|VS014|50 Development:Create|Volume|VS015|50 Development:Create|Volume|VS016|50 Development:Create|Volume|VS017|50 Development:Create|Volume|VS018|50 Development:Create|Volume|VS019|50 Development:Create|Volume|VS020|50 Development:Create|Volume|VS021|50 Development:Create|Volume|VS022|50 Development:Create|Volume|VS023|50 Development:Create|Volume|VS024|50 Development:Create|Volume|VS025|50 Development:Create|Volume|VS026|50 Development:Create|Volume|VS027|50 Development:Attach|Volume|VS014|VS014 Development:Attach|Volume|VS015|VS015 Development:Attach|Volume|VS016|VS016 Development:Attach|Volume|VS017|VS017 Development:Attach|Volume|VS018|VS018 Development:Attach|Volume|VS019|VS019 Development:Attach|Volume|VS020|VS020 Development:Attach|Volume|VS021|VS021 Development:Attach|Volume|VS022|VS022 Development:Attach|Volume|VS023|VS023 Development:Attach|Volume|VS024|VS024 Development:Attach|Volume|VS025|VS025 Development:Attach|Volume|VS026|VS026 Development:Attach|Volume|VS027|VS027 Development:Disconnect
このエントリの原文は以下のリンクに掲載されていたものです。
Exalogic 2.0.1 Tea Break Snippets - Scripting Asset Creation (The Old Toxophilist)
http://theoldtoxophilist.blogspot.co.uk/2012/09/exalogic-201-tea-break-snippets.html
0 件のコメント:
コメントを投稿