172 lines
5.0 KiB
Bash
172 lines
5.0 KiB
Bash
![]() |
#!/bin/bash
|
||
|
|
||
|
set -e -x
|
||
|
|
||
|
if [ ! -x /usr/bin/jq ]; then
|
||
|
echo "This script relies on 'jq' to process JSON output."
|
||
|
echo "Please install it before continuing."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
OS_AUTH_TOKEN=$(openstack token issue | grep ' id ' | awk '{print $4}')
|
||
|
IRONIC_URL="http://127.0.0.1:6385"
|
||
|
|
||
|
export OS_AUTH_TOKEN IRONIC_URL
|
||
|
|
||
|
function GET {
|
||
|
# GET $RESOURCE
|
||
|
curl -s -H "X-Auth-Token: $OS_AUTH_TOKEN" \
|
||
|
-H 'X-OpenStack-Ironic-API-Version: 1.22' \
|
||
|
${IRONIC_URL}/$1 | jq -S '.'
|
||
|
}
|
||
|
|
||
|
function POST {
|
||
|
# POST $RESOURCE $FILENAME
|
||
|
curl -s -H "X-Auth-Token: $OS_AUTH_TOKEN" \
|
||
|
-H 'X-OpenStack-Ironic-API-Version: 1.22' \
|
||
|
-H "Content-Type: application/json" \
|
||
|
-X POST --data @$2 \
|
||
|
${IRONIC_URL}/$1 | jq -S '.'
|
||
|
}
|
||
|
|
||
|
function PATCH {
|
||
|
# POST $RESOURCE $FILENAME
|
||
|
curl -s -H "X-Auth-Token: $OS_AUTH_TOKEN" \
|
||
|
-H 'X-OpenStack-Ironic-API-Version: 1.22' \
|
||
|
-H "Content-Type: application/json" \
|
||
|
-X PATCH --data @$2 \
|
||
|
${IRONIC_URL}/$1 | jq -S '.'
|
||
|
}
|
||
|
|
||
|
function PUT {
|
||
|
# PUT $RESOURCE $FILENAME
|
||
|
curl -s -H "X-Auth-Token: $OS_AUTH_TOKEN" \
|
||
|
-H 'X-OpenStack-Ironic-API-Version: 1.22' \
|
||
|
-H "Content-Type: application/json" \
|
||
|
-X PUT --data @$2 \
|
||
|
${IRONIC_URL}/$1
|
||
|
}
|
||
|
|
||
|
pushd source/samples
|
||
|
|
||
|
###########
|
||
|
# ROOT APIs
|
||
|
GET '' > api-root-response.json
|
||
|
|
||
|
GET 'v1' > api-v1-root-response.json
|
||
|
|
||
|
|
||
|
###########
|
||
|
# DRIVER APIs
|
||
|
GET v1/drivers > drivers-list-response.json
|
||
|
GET v1/drivers/agent_ipmitool > driver-get-response.json
|
||
|
GET v1/drivers/agent_ipmitool/properties > driver-property-response.json
|
||
|
GET v1/drivers/agent_ipmitool/raid/logical_disk_properties > driver-logical-disk-properties-response.json
|
||
|
|
||
|
GET v1/drivers/agent_ipmitool/vendor_passthru/methods > driver-passthru-methods-response.json
|
||
|
|
||
|
|
||
|
|
||
|
#########
|
||
|
# CHASSIS
|
||
|
|
||
|
POST v1/chassis chassis-create-request.json > chassis-show-response.json
|
||
|
CID=$(cat chassis-show-response.json | grep '"uuid"' | sed 's/.*"\([0-9a-f\-]*\)",*/\1/')
|
||
|
if [ "$CID" == "" ]; then
|
||
|
exit 1
|
||
|
else
|
||
|
echo "Chassis created. UUID: $CID"
|
||
|
fi
|
||
|
|
||
|
GET v1/chassis > chassis-list-response.json
|
||
|
|
||
|
GET v1/chassis/detail > chassis-list-details-response.json
|
||
|
|
||
|
PATCH v1/chassis/$CID chassis-update-request.json > chassis-update-response.json
|
||
|
|
||
|
# skip GET /v1/chassis/$UUID because the response is same as POST
|
||
|
|
||
|
|
||
|
#######
|
||
|
# NODES
|
||
|
|
||
|
# Create a node with a real driver, but missing ipmi_address,
|
||
|
# then do basic commands with it
|
||
|
POST v1/nodes node-create-request.json > node-create-response.json
|
||
|
NID=$(cat node-create-response.json | grep '"uuid"' | sed 's/.*"\([0-9a-f\-]*\)",*/\1/')
|
||
|
if [ "$NID" == "" ]; then
|
||
|
exit 1
|
||
|
else
|
||
|
echo "Node created. UUID: $NID"
|
||
|
fi
|
||
|
|
||
|
# get the list of passthru methods from agent* driver
|
||
|
GET v1/nodes/$NID/vendor_passthru/methods > node-vendor-passthru-response.json
|
||
|
|
||
|
# Change to the fake driver and then move the node into the AVAILABLE
|
||
|
# state without saving any output.
|
||
|
# NOTE that these three JSON files are not included in the docs
|
||
|
PATCH v1/nodes/$NID node-update-driver.json
|
||
|
PUT v1/nodes/$NID/states/provision node-set-manage-state.json
|
||
|
PUT v1/nodes/$NID/states/provision node-set-available-state.json
|
||
|
|
||
|
GET v1/nodes/$NID/validate > node-validate-response.json
|
||
|
|
||
|
PUT v1/nodes/$NID/states/power node-set-power-off.json
|
||
|
GET v1/nodes/$NID/states > node-get-state-response.json
|
||
|
|
||
|
GET v1/nodes > nodes-list-response.json
|
||
|
GET v1/nodes/detail > nodes-list-details-response.json
|
||
|
GET v1/nodes/$NID > node-show-response.json
|
||
|
|
||
|
# Put the Node in maintenance mode, then continue doing everything else
|
||
|
PUT v1/nodes/$NID/maintenance node-maintenance-request.json
|
||
|
|
||
|
###########
|
||
|
# PORTS
|
||
|
|
||
|
# Before we can create a port, we must
|
||
|
# write NODE ID into the create request document body
|
||
|
sed -i "s/.*node_uuid.*/ \"node_uuid\": \"$NID\",/" port-create-request.json
|
||
|
|
||
|
POST v1/ports port-create-request.json > port-create-response.json
|
||
|
PID=$(cat port-create-response.json | grep '"uuid"' | sed 's/.*"\([0-9a-f\-]*\)",*/\1/')
|
||
|
if [ "$PID" == "" ]; then
|
||
|
exit 1
|
||
|
else
|
||
|
echo "Port created. UUID: $PID"
|
||
|
fi
|
||
|
|
||
|
GET v1/ports > port-list-respone.json
|
||
|
GET v1/ports/detail > port-list-detail-response.json
|
||
|
PATCH v1/ports/$PID port-update-request.json > port-update-response.json
|
||
|
|
||
|
# skip GET $PID because same result as POST
|
||
|
# skip DELETE
|
||
|
|
||
|
################
|
||
|
# NODE PORT APIs
|
||
|
|
||
|
GET v1/nodes/$NID/ports > node-port-list-response.json
|
||
|
GET v1/nodes/$NID/ports/detail > node-port-detail-response.json
|
||
|
|
||
|
|
||
|
############
|
||
|
# LOOKUP API
|
||
|
|
||
|
GET v1/lookup?node_uuid=$NID > lookup-node-response.json
|
||
|
|
||
|
|
||
|
#####################
|
||
|
# NODES MANAGEMENT API
|
||
|
# These need to be done while the node is in maintenance mode,
|
||
|
# and the node's driver is "fake", to avoid potential races
|
||
|
# with internal processes that lock the Node
|
||
|
|
||
|
# this corrects an intentional ommission in some of the samples
|
||
|
PATCH v1/nodes/$NID node-update-driver-info-request.json > node-update-driver-info-response.json
|
||
|
|
||
|
GET v1/nodes/$NID/management/boot_device/supported > node-get-supported-boot-devices-response.json
|
||
|
PUT v1/nodes/$NID/management/boot_device node-set-boot-device.json
|
||
|
GET v1/nodes/$NID/management/boot_device > node-get-boot-device-response.json
|