Bashスクリプト:完了ステータスメッセージが表示されない


0

私は最初に取り組んでいます バッシュ 4つのVMをクラウドスタック環境にデプロイするスクリプト。含めたいのですが エコー スクリプトの最後に、デプロイされた仮想マシンの数を示すメッセージが表示されます。最後にこれを実現する方法はありますか?コマンドが実行されるたびに、cloudstackはエラーまたは成功のメッセージを表示します。最後の「エラー」または「ジョブID」メッセージをIFステートメントに組み込む方法はありますか エコー 私のスクリプトの?

VMがデプロイされている場合、cloudstackは以下を返します。

deployvirtualmachineresponse:
id: 4fe88c45-fc7c-4ac2-9554-c815e1ada3f6
jobid: 01f52a39-8e57-4968-af34-c4ee53f29e25

VMがエラーのために失敗した場合、つまり、同じVM名のcloudstackは以下を返します。

 deployvirtualmachineresponse:
 uuidList: []
 errorcode: 431
 errortext: ! 'The vm with hostName HOSTNAME01 already exists in the network
 domain: cs1null; network=Ntwk[251|Guest|5]'

APIのタイムアウトが原因でVMが失敗した場合、クラウドスタックは以下を返します。

 Timeout connecting to https://cloud.datapipe.com/api/compute/v1

私の台本

#!/bin/bash
HOSTNAME=HOSTNAME
vm_deployed=0
vm_failed=0

for i in {1..1}; do
    if cloudstack virtualmachine deploy \
                  --serviceofferingid 48 \
                  --templateid XXX \
                  --zoneid 7 \
                  --keypair XXX \
                  --securitygroupids XXX \
                  --name $(printf "%s%02d" $HOSTNAME $i);
    then
        (( ++vm_deployed ))
     else
        (( ++vm_failed ))
     fi
done

if [ "$JOBID" ] || [ "$ERROR" ]; then
    if (( vm_failed > 0 )); then
        echo "deployed $vm_deployed, failed $vm_failed VMs"
    else
        echo "deployed all $vm_deployed VMs"
    fi
fi

if (( vm_failed > 0 )); then
    exit 1
fi

回答:


1

Cloudstackスクリプトが適切なステータス(成功の場合は0、失敗の場合は1以上)で終了すると仮定すると、これは機能します。

vm_deployed=0
vm_failed=0

for i in {1..4}; do
    if cloudstack vm deploy ...; then
        (( ++vm_deployed ))
    else
        (( ++vm_failed ))
    fi
done

# I am not sure if I got your description right.
if [ "$JOBID" ] || [ "$ERROR" ]; then
    if (( vm_failed > 0 )); then
        echo "deployed $vm_deployed, failed $vm_failed VMs"
    else
        echo "deployed all $vm_deployed VMs"
    fi
fi

if (( vm_failed > 0 )); then
    exit 1
fi

(注意: (( )) はバシズムです、それであなたがバッシュを持っている限り、それはうまくいくでしょう。 #! ライン。)


こんにちはGrawity、私はあなたの微調整を含めるために上記の私のスクリプトを更新し、もう少し情報を追加しました。 VMはまだデプロイされていますが、最後にECHOを取得していません
RomeNYRR

0

1.メッセージが表示されなかった $ JOBID そして $ ERROR 設定されていないが、タスクの説明に基づいて、どちらの変数も必要ない まで それらは設定されています。

2.ループは1回だけ実行され、CloudStackを4回デプロイすることはできません。

最後に もし ブロックは前のものに折り畳まれるべきです。

4。 $ HOSTNAME (変数ではなく)文字列 "HOSTNAME"に設定されます。これを "$ HOSTNAME"に設定しても機能しますが、冗長です。

修正案(ただし、CloudStack部分は変更されていません。後で修正する必要があります)。

#!/bin/bash
vm_deployed=0
vm_failed=0

for i in {1..4}; do
    if cloudstack virtualmachine deploy \
                  --serviceofferingid 48 \
                  --templateid XXX \
                  --zoneid 7 \
                  --keypair XXX \
                  --securitygroupids XXX \
                  --name $(printf "%s%02d" $HOSTNAME $i);
    then
        (( ++vm_deployed ))
     else
        (( ++vm_failed ))
     fi
done

if (( vm_failed > 0 )); then
    echo "deployed $vm_deployed, failed $vm_failed VMs"
    exit 1
else
    echo "deployed all $vm_deployed VMs"
fi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.