Ich arbeite an meinem ersten Bash- Skript, das 4 VMs in einer Cloudstack-Umgebung bereitstellt. Am Ende des Skripts möchte ich eine Echo- Nachricht einfügen, die angibt, wie viele VMs bereitgestellt wurden. Gibt es eine Möglichkeit, dies ganz zum Schluss kommen zu lassen? Bei jeder Ausführung des Befehls gibt cloudstack einen Fehler oder eine Erfolgsmeldung aus. Gibt es eine Möglichkeit, die Meldung "error" oder "jobid" für das allerletzte Echo meines Skripts in eine IF-Anweisung aufzunehmen ?
Wenn die VM bereitgestellt ist, gibt Cloudstack Folgendes zurück:
deployvirtualmachineresponse:
id: 4fe88c45-fc7c-4ac2-9554-c815e1ada3f6
jobid: 01f52a39-8e57-4968-af34-c4ee53f29e25
Wenn die VM aufgrund eines Fehlers ausfällt, dh derselbe VM-Name Cloudstack gibt Folgendes zurück:
deployvirtualmachineresponse:
uuidList: []
errorcode: 431
errortext: ! 'The vm with hostName HOSTNAME01 already exists in the network
domain: cs1null; network=Ntwk[251|Guest|5]'
Wenn die VM aufgrund eines API-Timeouts ausfällt, gibt der Cloud-Stack Folgendes zurück:
Timeout connecting to https://cloud.datapipe.com/api/compute/v1
Mein Drehbuch
#!/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. Die Meldungen wurden nicht angezeigt, da $ JOBID und $ ERROR nicht gesetzt sind. Aufgrund der Aufgabenbeschreibung wird jedoch keine Variable benötigt, bis diese gesetzt sind.
2. Die Schleife wird nur einmal ausgeführt. Sie kann CloudStack nicht viermal bereitstellen.
3. Der letzte if- Block sollte in den vorherigen Block eingeklappt werden.
4. $ HOSTNAME wird auf die Zeichenfolge "HOSTNAME" gesetzt (keine Variable). Das Setzen auf "$ HOSTNAME" würde funktionieren, ist aber überflüssig.
Vorgeschlagene Überarbeitung (aber keine Änderungen am CloudStack-Teil, der später Hilfe benötigt ...):
quelle