Fix Readme
Abstract
Apply this hotfix after completing the watsonx Orchestrate installation for Version 5.3.0, or after upgrading from a previous release to Version 5.3.0.
Content
export PROJECT_CPD_INST_OPERATORS=<enter your IBM Software Hub operator project>
export PROJECT_CPD_INST_OPERANDS=<enter your IBM Software Hub operand project>Install skopeo: https://github.com/containers/skopeo/blob/main/install.md
export LOCAL_REGISTRY="your_local_registry"
export LOCAL_USER="your_local_registry_username"
export LOCAL_PASS="your_local_registry_password"
export IBM_ENTITLEMENT_KEY="your_ibm_entitlement_key"
export AUTH_JSON_PATH="${HOME}/.airgap/auth.json"
mkdir -p "$(dirname "${AUTH_JSON_PATH}")"
skopeo login cp.icr.io --username cp --password "${IBM_ENTITLEMENT_KEY}" --authfile "${AUTH_JSON_PATH}"
skopeo login "${LOCAL_REGISTRY}" --username "${LOCAL_USER}" --password "${LOCAL_PASS}" --authfile "${AUTH_JSON_PATH}"Copy operator images
# ibm-watsonx-orchestrate-operator
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://icr.io/cpopen/ibm-watsonx-orchestrate-operator@sha256:d6eb41ae1699a0a984986f69a52a43ad7e21d650f476db57dd62d899571d6885 \
docker://$LOCAL_REGISTRY/cpopen/ibm-watsonx-orchestrate-operator@sha256:d6eb41ae1699a0a984986f69a52a43ad7e21d650f476db57dd62d899571d6885
# ibm-wxo-component-operator
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://icr.io/cpopen/ibm-wxo-component-operator@sha256:c21eb0e93b18a8241be1818e9b05b9d66251f8f66911b3621d298c7b8de76390 \
docker://$LOCAL_REGISTRY/cpopen/ibm-wxo-component-operator@sha256:c21eb0e93b18a8241be1818e9b05b9d66251f8f66911b3621d298c7b8de76390
# ibm-document-processing-operator
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://icr.io/cpopen/ibm-document-processing-operator@sha256:25a4041fc65e73d400cc0a25f5a0bbe6b567f97cb39d82070e6c63f31a68420f \
docker://$LOCAL_REGISTRY/cpopen/ibm-document-processing-operator@sha256:25a4041fc65e73d400cc0a25f5a0bbe6b567f97cb39d82070e6c63f31a68420f
# ibm-watsonx-orchestrate-ads-operator-controller
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://icr.io/cpopen/ibm-watsonx-orchestrate-ads-operator-controller@sha256:f3400dbd2a2a0ae4afe654962199c759222af959cb08aec1849548ba57414dc5 \
docker://$LOCAL_REGISTRY/cpopen/ibm-watsonx-orchestrate-ads-operator-controller@sha256:f3400dbd2a2a0ae4afe654962199c759222af959cb08aec1849548ba57414dc5
# ba-saas-uab-wf-operator
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://icr.io/cpopen/ba-saas-uab-wf-operator@sha256:22b9b477a7a0df6f5a580df1a9cd156e4da76a08bd4a9135cbf4443aced698c9 \
docker://$LOCAL_REGISTRY/cpopen/ba-saas-uab-wf-operator@sha256:22b9b477a7a0df6f5a580df1a9cd156e4da76a08bd4a9135cbf4443aced698c9Copy operand images
# ads-tools
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/ads-tools@sha256:3229afbbccb3d2b48cac7dbe3e777bb386ef5f0c7ba8f069d15df5310b24319c \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/ads-tools@sha256:3229afbbccb3d2b48cac7dbe3e777bb386ef5f0c7ba8f069d15df5310b24319c
# ai-gateway
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/ai-gateway@sha256:fb0650f38c3b362a87593bbc61b3f3d4a0033729dd4db41d1a257d94d9b5b06b \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/ai-gateway@sha256:fb0650f38c3b362a87593bbc61b3f3d4a0033729dd4db41d1a257d94d9b5b06b
# channel-integrations
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/channel-integrations@sha256:883f6deca3f10f874331263f5bb800047dfc4a5e84d953b1292c57b1f7372f38 \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/channel-integrations@sha256:883f6deca3f10f874331263f5bb800047dfc4a5e84d953b1292c57b1f7372f38
# de-seeder
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/de-seeder@sha256:501759e41a49436d0fb15d7d53ca92a5946a4bfe96b8b20ee3c191a721411772 \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/de-seeder@sha256:501759e41a49436d0fb15d7d53ca92a5946a4bfe96b8b20ee3c191a721411772
# de-server
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/de-server@sha256:1dbbbd0394d599369ce16b8e93f230787a5f2acd0ffd9cb2de2c1a8648fca971 \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/de-server@sha256:1dbbbd0394d599369ce16b8e93f230787a5f2acd0ffd9cb2de2c1a8648fca971
# platformuiproxy
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/platformuiproxy@sha256:dce9fa681c619873bc32d6f8bfae7d2783f4473ea6609aba3f2e1b93f3b24a35 \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/platformuiproxy@sha256:dce9fa681c619873bc32d6f8bfae7d2783f4473ea6609aba3f2e1b93f3b24a35
# socket-handler
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/socket-handler@sha256:e38838eb73267f845286e8e69b7d5b47c0b27149a3412b85f77468879a97cfbc \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/socket-handler@sha256:e38838eb73267f845286e8e69b7d5b47c0b27149a3412b85f77468879a97cfbc
# teamsserver
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/teamsserver@sha256:b710cfa97711571a2cdd9e1bef47029da3c4a4ac002c6de9d899328cb921fcb2 \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/teamsserver@sha256:b710cfa97711571a2cdd9e1bef47029da3c4a4ac002c6de9d899328cb921fcb2
# tools-runtime
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/tools-runtime@sha256:ff0c1dd66e4f76ffa499d19649e1955dd6c7cf506d0702212f26ec7d9859bfc4 \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/tools-runtime@sha256:ff0c1dd66e4f76ffa499d19649e1955dd6c7cf506d0702212f26ec7d9859bfc4
# tools-runtime-manager
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/tools-runtime-manager@sha256:84f96943be2606a4fa1a3161476e71afb13b693d0cac16a1c686b6e13000a2d4 \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/tools-runtime-manager@sha256:84f96943be2606a4fa1a3161476e71afb13b693d0cac16a1c686b6e13000a2d4
# tools-runtime-scheduler
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/tools-runtime-scheduler@sha256:a4ff1251e6b7270fc74db58e5d22bfe39f92a72f7c682314a271f5b49293b8b0 \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/tools-runtime-scheduler@sha256:a4ff1251e6b7270fc74db58e5d22bfe39f92a72f7c682314a271f5b49293b8b0
# wdu-models
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/wdu-models@sha256:67254c8cb1c267e5c305eb3cd6045872d6b5938695c019a2cb0921d5b680b3ee \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/wdu-models@sha256:67254c8cb1c267e5c305eb3cd6045872d6b5938695c019a2cb0921d5b680b3ee
# wdu-runtime
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/wdu-runtime@sha256:1dae971e9eabf5a7992a52bd4b02295952b932d0e6648553aacc1818b8e96208 \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/wdu-runtime@sha256:1dae971e9eabf5a7992a52bd4b02295952b932d0e6648553aacc1818b8e96208
# wxo-builder
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/wxo-builder@sha256:78861ffc9986f5bf1b9306cd8cfd6c0133d95051c242ee35d4172596fae7d7c9 \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/wxo-builder@sha256:78861ffc9986f5bf1b9306cd8cfd6c0133d95051c242ee35d4172596fae7d7c9
# wxo-chat
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/wxo-chat@sha256:5f8dfa5673c276e460e5b16409ebad5097a82bcc6a7bbfb6308f4f73afd07a55 \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/wxo-chat@sha256:5f8dfa5673c276e460e5b16409ebad5097a82bcc6a7bbfb6308f4f73afd07a55
# wxo-flow-runtime
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/wxo-flow-runtime@sha256:931bcd00928cb376986f27504be4b39b1b7b705e0b1ef30507d38f4ff5cf658d \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/wxo-flow-runtime@sha256:931bcd00928cb376986f27504be4b39b1b7b705e0b1ef30507d38f4ff5cf658d
# wxo-server-conversation_controller
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/wxo-server-conversation_controller@sha256:9f6bdc1dfc001a1a438de9918a5374281839ae94b046e215639706a1cad0e45a \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/wxo-server-conversation_controller@sha256:9f6bdc1dfc001a1a438de9918a5374281839ae94b046e215639706a1cad0e45a
# wxo-server-server
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/wxo-server-server@sha256:1b5842c4c4d2b54122ea40b564e61f2df44be15fb1ecc07346180613c67090e8 \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/wxo-server-server@sha256:1b5842c4c4d2b54122ea40b564e61f2df44be15fb1ecc07346180613c67090e8
# wxo-server-voice
skopeo copy --all --authfile "${AUTH_JSON_PATH}" --dest-tls-verify=false --src-tls-verify=false \
docker://cp.icr.io/cp/watsonx-orchestrate/wxo-server-voice@sha256:3800fc2ce241efe127a2a03755bc0870b484bf576160d9960df9487cd8430c24 \
docker://${LOCAL_REGISTRY}/cp/watsonx-orchestrate/wxo-server-voice@sha256:3800fc2ce241efe127a2a03755bc0870b484bf576160d9960df9487cd8430c24After copying, verify the images exist in $LOCAL_REGISTRY.
Create hotfix5300.sh with the contents below.
# -----------------------------------------------------------------------------
# watsonx Orchestrate 5.3.0 Hotfix
# - Verifies watsonx Orchestrate version from .status.versionStatus.status.
# - Images of Operators are replaced with the image from hotfix script.
# * HOTFIX_LABEL_VALUE for hotfix 0 is 5.3.0.0
# * If an existing label value matches x.x.x.x and is higher than HOTFIX_LABEL_VALUE,
# the script exits early after informing you
# - Deletes a fixed set of Jobs in the operands namespace and waits for all to reappear with
# new UIDs and succeed
# -----------------------------------------------------------------------------
# -----------------------------
# Patch operator deployment images
# -----------------------------
ts() { date +"%Y-%m-%d %H:%M:%S"; }
OPERATOR_IMAGES="icr.io/cpopen/ibm-watsonx-orchestrate-operator@sha256:d6eb41ae1699a0a984986f69a52a43ad7e21d650f476db57dd62d899571d6885
icr.io/cpopen/ibm-wxo-component-operator@sha256:c21eb0e93b18a8241be1818e9b05b9d66251f8f66911b3621d298c7b8de76390
icr.io/cpopen/ibm-document-processing-operator@sha256:25a4041fc65e73d400cc0a25f5a0bbe6b567f97cb39d82070e6c63f31a68420f
icr.io/cpopen/ibm-watsonx-orchestrate-ads-operator-controller@sha256:f3400dbd2a2a0ae4afe654962199c759222af959cb08aec1849548ba57414dc5
icr.io/cpopen/ba-saas-uab-wf-operator@sha256:22b9b477a7a0df6f5a580df1a9cd156e4da76a08bd4a9135cbf4443aced698c9"
if [ -z "${PROJECT_CPD_INST_OPERATORS:-}" ]; then
echo "[ERROR] PROJECT_CPD_INST_OPERATORS is not set. Exiting."
exit 1
fi
# Hotfix label configuration
HOTFIX_LABEL_KEY="${HOTFIX_LABEL_KEY:-hotfix}"
HOTFIX_LABEL_VALUE="${HOTFIX_LABEL_VALUE:-5.3.0.0}"
WO_CR_NAME=wo
is_semver4() {
v="$1"
printf '%s' "$v" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'
}
# Backup dir for deployments
BACKUP_DIR="/tmp/wxo_deployment_backups"
mkdir -p "$BACKUP_DIR"
if [ -n "${OPERATOR_IMAGES:-}" ]; then
echo "[$(ts)] Updating operator deployment images in ${PROJECT_CPD_INST_OPERATORS}"
patched_deps=""
# Use a here-document to avoid subshell so patched_deps is preserved
while IFS= read -r img; do
[ -z "$img" ] && continue
# Extract base image name (e.g., ibm-wxo-component-operator)
base="$(basename "$img" | cut -d'@' -f1)"
echo "[$(ts)] Processing image: $img (base=$base)"
dep=""
case "$base" in
ibm-watsonx-orchestrate-operator)
dep="wo-operator"
;;
ibm-wxo-component-operator)
dep="ibm-wxo-componentcontroller-manager"
;;
ibm-document-processing-operator)
dep="ibm-documentprocessing-operator"
;;
ibm-watsonx-orchestrate-digital-employee-operator)
dep="digitalemployee-operator-controller-manager"
;;
ba-saas-uab-wf-operator)
# Hardcoded deployment mapping for ba-saas-uab-wf-operator
dep="ba-saas-uab-wf-operator-controller-manager"
;;
ibm-watsonx-orchestrate-ads-operator-controller)
# Hardcoded deployment mapping for ibm-uab-ads-operator
dep="ibm-uab-ads-operator"
;;
*)
dep="$(oc -n "$PROJECT_CPD_INST_OPERATORS" get deploy --no-headers 2>/dev/null \
| grep "$base" | awk 'NR==1{print $1}')"
;;
esac
# Skip bundle/catalog images if they ever slip in
if echo "$base" | grep -Eq 'bundle|catalog'; then
echo "[$(ts)] Skipping $base (bundle/catalog image – not tied to deployment)"
continue
fi
if [ -z "$dep" ]; then
echo "[$(ts)] WARNING: no matching deployment found for $base — skipping"
continue
fi
# -----------------------------
# Backup deployment YAML
# -----------------------------
backup_file="${BACKUP_DIR}/${dep}-$(date +%Y%m%d%H%M%S).yaml"
if oc -n "$PROJECT_CPD_INST_OPERATORS" get deploy "$dep" -o yaml > "$backup_file" 2>/dev/null; then
echo "[$(ts)] Backed up deployment/$dep → $backup_file"
else
echo "[$(ts)] WARNING: failed to back up deployment/$dep"
fi
# Determine container name (assume first container is operator)
cname="$(oc -n "$PROJECT_CPD_INST_OPERATORS" get deploy "$dep" \
-o jsonpath='{.spec.template.spec.containers[0].name}' 2>/dev/null)"
if [ -z "$cname" ]; then
echo "[$(ts)] WARNING: cannot determine container name for $dep — skipping"
continue
fi
echo "[$(ts)] Patching deployment/$dep container '$cname' → $img"
if oc -n "$PROJECT_CPD_INST_OPERATORS" set image "deployment/$dep" "$cname=$img" >/dev/null 2>&1; then
echo "[$(ts)] ✓ Image updated for $dep"
patched_deps="$patched_deps $dep"
else
echo "[$(ts)] ✗ ERROR: failed to patch $dep"
fi
done <<EOF
$OPERATOR_IMAGES
EOF
# -----------------------------
# Label WO CR with configurable label and value
# -----------------------------
if [ -n "$WO_CR_NAME" ]; then
current_label="$(oc -n "$PROJECT_CPD_INST_OPERANDS" get wo "$WO_CR_NAME" -o jsonpath="{.metadata.labels.${HOTFIX_LABEL_KEY}}" 2>/dev/null || true)"
if [ "$current_label" = "$HOTFIX_LABEL_VALUE" ]; then
echo "[$(ts)] WO CR ${WO_CR_NAME} already labeled ${HOTFIX_LABEL_KEY}=${HOTFIX_LABEL_VALUE}"
else
echo "[$(ts)] Setting label ${HOTFIX_LABEL_KEY}=${HOTFIX_LABEL_VALUE} on WO CR ${WO_CR_NAME} in ns ${PROJECT_CPD_INST_OPERANDS}"
oc -n "$PROJECT_CPD_INST_OPERANDS" label wo "$WO_CR_NAME" "${HOTFIX_LABEL_KEY}=${HOTFIX_LABEL_VALUE}" --overwrite >/dev/null 2>&1 || true
new_label="$(oc -n "$PROJECT_CPD_INST_OPERANDS" get wo "$WO_CR_NAME" -o jsonpath="{.metadata.labels.${HOTFIX_LABEL_KEY}}" 2>/dev/null || true)"
if [ "$new_label" = "$HOTFIX_LABEL_VALUE" ]; then
echo "[$(ts)] Label set: ${HOTFIX_LABEL_KEY}=${HOTFIX_LABEL_VALUE}"
else
echo "[$(ts)] WARNING: could not confirm ${HOTFIX_LABEL_KEY}=${HOTFIX_LABEL_VALUE} label was set"
fi
fi
else
echo "[$(ts)] No WO CR found in ns ${PROJECT_CPD_INST_OPERANDS}, skipping label."
fi
# -----------------------------
# Verify patched deployments are healthy (1/1 or 2/2)
# -----------------------------
if [ -n "${patched_deps// /}" ]; then
echo "[$(ts)] Verifying rollout status for patched deployments..."
for dep in $patched_deps; do
echo "[$(ts)] Checking deployment/$dep..."
# Wait for rollout to complete
if oc -n "$PROJECT_CPD_INST_OPERATORS" rollout status deploy/"$dep" --timeout=300s; then
# Check Ready/Desired replica ratio
ratio="$(oc -n "$PROJECT_CPD_INST_OPERATORS" get deploy "$dep" \
-o jsonpath='{.status.readyReplicas}/{.status.replicas}' 2>/dev/null || echo '0/0')"
echo "[$(ts)] Ready/Desired: $ratio"
if [ "$ratio" = "1/1" ] || [ "$ratio" = "2/2" ]; then
echo "[$(ts)] ✓ Deployment $dep is healthy (pods up and running)."
else
echo "[$(ts)] ⚠ WARNING: Deployment $dep is not at 1/1 or 2/2; current $ratio"
fi
else
echo "[$(ts)] ✗ ERROR: rollout status for deployment/$dep did not complete successfully."
fi
done
else
echo "[$(ts)] No deployments were patched; skipping health verification."
fi
else
echo "[$(ts)] No OPERATOR_IMAGES specified — skipping operator image patch."
fi
# -----------------------------
# Final message
# -----------------------------
echo "------------------------------------------------------------------"
echo "[$(ts)] 5.3.0 Hotfix steps completed."
echo "Backups saved under ${BACKUP_DIR}"
echo "Monitor the watsonx Orchestrate CR status by running:"
echo " oc get wo -n ${PROJECT_CPD_INST_OPERANDS} -o yaml | grep -E 'watsonxOrchestrateStatus|${HOTFIX_LABEL_KEY}'"
echo "Ensure the watsonx Orchestrate CR status is 'Completed' and label ${HOTFIX_LABEL_KEY}=${HOTFIX_LABEL_VALUE} is present."
echo "------------------------------------------------------------------"
Make the script executable:
chmod 775 hotfix5300.shRun the script:
nohup sh hotfix5300.sh &Watch progress:
tail -f nohup.outVerify CR status and label:
oc get wo -n "${PROJECT_CPD_INST_OPERANDS}" -o yaml | grep hotfix
hotfix: 5.3.0.0
[{"Type":"MASTER","Line of Business":{"code":"LOB76","label":"Data Platform"},"Business Unit":{"code":"BU048","label":"IBM Software"},"Product":{"code":"SSVAUS","label":"IBM watsonx Orchestrate Cartridge for IBM Cloud Pak for Data"},"ARM Category":[{"code":"a8mKe0000008OVAIA2","label":"Operate-\u003EInstall"}],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":""}]
Was this topic helpful?
Document Information
Modified date:
14 January 2026
UID
ibm17254563