---
# System prepended metadata

title: ODF latest deploy

---

# Deploy latest ODF dev build

Look for latest version here: https://quay.io/repository/rhceph-dev/ocs-registry?tab=tags&tag=latest

## Mirror the odf container images to the lab registry

On your local machine, create a `imageset-config.yaml` file in a temporary directory (the local mirror can take up to 14G):

```yaml
kind: ImageSetConfiguration
apiVersion: mirror.openshift.io/v1alpha2
storageConfig:
  local:
    path: ./metadata
mirror:
  operators:
  - catalog: quay.io/rhceph-dev/ocs-registry:4.16.0-130 # update that tag
    packages:
    - name: mcg-operator
      channels:
      - name: stable-4.16
    - name: ocs-client-operator
      channels:
      - name: stable-4.16
    - name: ocs-operator
      channels:
      - name: stable-4.16
    - name: odf-csi-addons-operator
      channels:
      - name: stable-4.16
    - name: odf-operator
      channels:
      - name: stable-4.16
    - name: odf-prometheus-operator
      channels:
      - name: stable-4.16
    - name: recipe
      channels:
      - name: stable-4.16
    - name: rook-ceph-operator
      channels:
      - name: stable-4.16
```

Install `oc-mirror` from https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/stable/oc-mirror.tar.gz and extract the binary in your $PATH (like `~/bin`).

Then run the following commands:

```
# This command will fail, that's expected as the images are not public. The output is then used to generate the pull command from the internal registry.
oc mirror -c imageset-config.yaml file://registry --dry-run

# Generate sync commands (from brew to local)
grep "unable to" .oc-mirror.log | sed 's|^.*\(registry.redhat.io\)/\(.*\) manifest \(sha256:\w*\):.*$|skopeo copy --all --preserve-digests docker://\1/\2@\3 docker://localhost:5000/\2 --dest-tls-verify=false|' | sed 's|registry.redhat.io/openshift4/|registry-proxy.engineering.redhat.com/rh-osbs/openshift-|' | sed 's|registry.redhat.io/odf4/|registry-proxy.engineering.redhat.com/rh-osbs/odf4-|' | sed 's|registry.redhat.io/rhceph/rhceph-7-rhel9|registry-proxy.engineering.redhat.com/rh-osbs/rhceph|' > pullimages.sh

# Generate sync commands (from local registry)
grep "unable to" .oc-mirror.log | sed 's|^.*\(registry.redhat.io\)/\(.*\) manifest \(sha256:\w*\):.*$|skopeo copy --all --preserve-digests docker://localhost:5000/\2 docker://registry.ocp4.example.com:8443/\2 --src-tls-verify=false --dest-tls-verify=false|' > pushimages.sh

# Start a local registry
podman run --rm -d -p 5000:5000 -v ./v2:/var/lib/registry/docker/registry/v2/:Z registry:2

# Run the sync script (requires VPN access)
sh pullimages.sh

# Copy the v2 registry to utility
rsync -aP v2/ utility:~/v2 --delete-before

# On utility, start a registry with the v2 content
podman run --rm -d -p 5000:5000 -v ./v2:/var/lib/registry/docker/registry/v2/:Z registry:2

# Login to the lab registry (developer user)
podman login registry.ocp4.example.com:8443 --tls-verify=false
 
# push images
sh pushimages.sh

# ??

# profit
```

Once the images are pushed in your lab registry, create a catalog source with the following content:

```yaml
---
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
  name: redhat-operators-odf
  namespace: openshift-marketplace
  labels:
      ocs-operator-internal: "true"
spec:
  displayName: Openshift Container Storage
  icon:
    base64data: ""
    mediatype: ""
  image: quay.io/rhceph-dev/ocs-registry:4.16.0-130 # update that tag
  publisher: Red Hat
  sourceType: grpc
  priority: 100
  # If the registry image still have the same tag (latest-stable-4.6, or for stage testing)
  # we need to have this updateStrategy, otherwise we will not see new pushed content.
  updateStrategy:
    registryPoll:
      interval: 15m
```

Make sure a valid pull-secret is configured on your cluster to access the quay repo.

