From lvms
Set up prerequisites to test unreleased LVMS operator builds on OpenShift clusters
How this skill is triggered — by the user, by Claude, or both
Slash command
/lvms:setup-prereqThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
```bash
/lvms:setup-prereq [connected|disconnected]
Examples:
# Interactive (will prompt for deployment type)
/lvms:setup-prereq
# Connected cluster
/lvms:setup-prereq connected
# Disconnected cluster
/lvms:setup-prereq disconnected
Sets up prerequisites to test unreleased LVMS operator builds on OpenShift clusters. Supports two deployment scenarios:
Ask the user for:
~/.kube/config)quay.io/redhat-user-workloads/logical-volume-manag-tenant/lvm-operator-catalog@sha256:...)registry.example.com:5000)${XDG_RUNTIME_DIR}/containers/auth.json)To get the catalog image, insert the snapshot name in: <konflux_prod_url>/ns/logical-volume-manag-tenant/applications/lvm-operator-catalog-<OCP_VERSION>/snapshots/<SNAPSHOT_NAME>
ls -l <kubeconfig-path>oc available: which ococ whoami --kubeconfig=<kubeconfig-path>@sha256: or :tag)oc-mirror: which oc-mirroroc get secret pull-secret -n openshift-config -o jsonpath='{.data.\.dockerconfigjson}' --kubeconfig=<kubeconfig-path> | base64 -d
oc delete catalogsource qe-app-registry -n openshift-marketplace --kubeconfig=<kubeconfig-path> --ignore-not-found=true
oc get imagecontentsourcepolicy --kubeconfig=<kubeconfig-path>
# If any ICSP exists, warn user and delete:
oc delete imagecontentsourcepolicy --all --kubeconfig=<kubeconfig-path>
Write /tmp/lvms-catalogsource.yaml:
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
name: lvms-custom-catalog
namespace: openshift-marketplace
spec:
displayName: konflux
publisher: OpenShift QE
sourceType: grpc
updateStrategy:
registryPoll:
interval: 15m
image: <CATALOG_IMAGE>
Write /tmp/lvms-idms.yaml:
apiVersion: config.openshift.io/v1
kind: ImageDigestMirrorSet
metadata:
name: lvm-operator-imagedigestmirrors
spec:
imageDigestMirrors:
- mirrors:
- registry.stage.redhat.io/lvms4/lvms-operator-bundle
- quay.io/redhat-user-workloads/logical-volume-manag-tenant/lvm-operator-bundle
source: registry.redhat.io/lvms4/lvms-operator-bundle
- mirrors:
- registry.stage.redhat.io/lvms4/lvms-rhel9-operator
- quay.io/redhat-user-workloads/logical-volume-manag-tenant/lvm-operator
source: registry.redhat.io/lvms4/lvms-rhel9-operator
- mirrors:
- registry.stage.redhat.io/lvms4/lvms-must-gather-rhel9
- quay.io/redhat-user-workloads/logical-volume-manag-tenant/lvms-must-gather
source: registry.redhat.io/lvms4/lvms-must-gather-rhel9
- mirrors:
- quay.io/redhat-user-workloads/logical-volume-manag-tenant/lvm-operator-bundle
source: registry.stage.redhat.io/lvms4/lvms-operator-bundle
- mirrors:
- quay.io/redhat-user-workloads/logical-volume-manag-tenant/lvm-operator
source: registry.stage.redhat.io/lvms4/lvms-rhel9-operator
- mirrors:
- quay.io/redhat-user-workloads/logical-volume-manag-tenant/lvms-must-gather
source: registry.stage.redhat.io/lvms4/lvms-must-gather-rhel9
Warn: "Applying IDMS will trigger node reboots. This may take 20-30 minutes."
oc apply -f /tmp/lvms-idms.yaml --kubeconfig=<kubeconfig-path>
oc wait mcp/master mcp/worker --for=condition=Updating --timeout=5m --kubeconfig=<kubeconfig-path>
oc get mcp --kubeconfig=<kubeconfig-path>
oc wait mcp/master mcp/worker --for=condition=Updated --for=condition=Updating=False --timeout=30m --kubeconfig=<kubeconfig-path>
oc get mcp --kubeconfig=<kubeconfig-path>
oc apply -f /tmp/lvms-catalogsource.yaml --kubeconfig=<kubeconfig-path>
oc wait catalogsource/lvms-custom-catalog -n openshift-marketplace --for=jsonpath='{.status.connectionState.lastObservedState}'=READY --timeout=5m --kubeconfig=<kubeconfig-path>
oc get catalogsource lvms-custom-catalog -n openshift-marketplace --kubeconfig=<kubeconfig-path>
oc get packagemanifest lvms-operator --kubeconfig=<kubeconfig-path>
Inform: "Prerequisites are set up. You can now install the unreleased LVMS operator from OperatorHub or create a Subscription."
Note: oc-mirror may not work reliably on macOS. Use Fedora or RHEL for best results.
Write /tmp/lvms-catalog-config.yaml:
kind: ImageSetConfiguration
apiVersion: mirror.openshift.io/v2alpha1
mirror:
operators:
- catalog: <CATALOG_IMAGE>
packages:
- name: lvms-operator
channels:
- name: 'stable-<OCP_VERSION>'
mkdir -p /tmp/oc-mirror-workspace
oc-mirror -c /tmp/lvms-catalog-config.yaml --workspace file:///tmp/oc-mirror-workspace docker://<MIRROR_REGISTRY> --v2 --dest-tls-verify=false
Check for errors: ls -ltr /tmp/oc-mirror-workspace/working-dir/logs/mirroring_errors_*.txt
oc apply -f /tmp/oc-mirror-workspace/working-dir/cluster-resources/cs-*.yaml --kubeconfig=<kubeconfig-path>
oc wait catalogsource -n openshift-marketplace --all --for=jsonpath='{.status.connectionState.lastObservedState}'=READY --timeout=5m --kubeconfig=<kubeconfig-path>
If mirroring errors exist, extract failed images and create corrected references:
registry.redhat.io/lvms4/lvms-operator-bundle -> quay.io/redhat-user-workloads/logical-volume-manag-tenant/lvm-operator-bundleregistry.redhat.io/lvms4/lvms-rhel9-operator -> quay.io/redhat-user-workloads/logical-volume-manag-tenant/lvm-operatorregistry.redhat.io/lvms4/lvms-must-gather-rhel9 -> quay.io/redhat-user-workloads/logical-volume-manag-tenant/lvms-must-gatherWrite /tmp/lvms-additional-images-config.yaml:
kind: ImageSetConfiguration
apiVersion: mirror.openshift.io/v2alpha1
mirror:
additionalImages:
- name: quay.io/redhat-user-workloads/logical-volume-manag-tenant/lvm-operator-bundle@sha256:<SHA_FROM_LOG>
- name: quay.io/redhat-user-workloads/logical-volume-manag-tenant/lvm-operator@sha256:<SHA_FROM_LOG>
- name: quay.io/redhat-user-workloads/logical-volume-manag-tenant/lvms-must-gather@sha256:<SHA_FROM_LOG>
oc-mirror -c /tmp/lvms-additional-images-config.yaml --workspace file:///tmp/oc-mirror-workspace docker://<MIRROR_REGISTRY> --v2 --dest-tls-verify=false
Write /tmp/lvms-idms.yaml with mirrors pointing to <MIRROR_REGISTRY> (same structure as connected flow, with mirror registry as first mirror entry).
Same as connected flow Step 4.
oc get catalogsource -n openshift-marketplace --kubeconfig=<kubeconfig-path>
oc get packagemanifest lvms-operator --kubeconfig=<kubeconfig-path>
Inform: "Prerequisites are set up for disconnected cluster. You can now install the LVMS operator from OperatorHub or create a Subscription."
| Error | Action |
|---|---|
| Kubeconfig not found | Ask for correct path |
| Invalid catalog image format | Ask for correction |
oc not available | Install OpenShift CLI |
oc whoami fails | Verify kubeconfig and cluster accessibility |
| MCP doesn't start updating (5m) | Check oc get mcp -o yaml |
| MCP update times out | Provide manual check: oc get mcp and oc get nodes |
oc-mirror not available | Install from OpenShift mirror downloads |
| Registry credentials missing | Ask for path or create via podman login |
| oc-mirror auth errors | Verify credentials file and registry connectivity |
| oc-mirror mirroring fails | Check disk space and connectivity |
| CatalogSource fails to apply | Verify mirrored catalog image exists in mirror registry |
Creates bite-sized, testable implementation plans from specs or requirements, with file structure and task decomposition. Activates before coding multi-step tasks.
npx claudepluginhub openshift-eng/edge-tooling --plugin lvms