:_mod-docs-content-type: PROCEDURE [id="converting-object-storage-nodes"] = Converting {object_storage} storage nodes [role="_abstract"] If you used external {object_storage} storage nodes, you can convert these nodes after the initial {object_storage_first_ref} adoption is complete. This step reconfigures the nodes in-place while keeping the {object_storage} available throughout the process. Before you begin, review the following key concepts: Pre-provisioned nodes:: Setting `preProvisioned: true` in the `OpenStackDataPlaneNodeSet` custom resource (CR) skips provisioning the node from scratch and does not reinstall the operating system. {object_storage} disk and mount preservation:: `edpm_swift_disks: []` must be set in both the `nodeTemplate` and in the individual node definition under `nodes` to ensure that no disks are formatted or mounted differently. Existing disk mounts are untouched. The `SwiftRawDisks` parameter from {OpenStackPreviousInstaller} is not migrated or converted. Disks on converted nodes must be managed manually. Rolling conversion:: The `swift-conversion` service uses `serial: 1` by default, which converts one node at a time to keep the {object_storage} available. .Prerequisites * The initial {object_storage} adoption is complete. For more information, see xref:adopting-the-object-storage-service_hsm-integration[Adopting the {object_storage}]. * Nodes cannot be members of more than one `OpenStackDataPlaneNodeSet` CR at the same time. If the nodes you want to convert were part of the node set that you created during the control plane adoption, delete that node set before proceeding: + ---- $ oc delete openstackdataplanenodeset ---- + where: ``:: Specifies the node set that you want to delete. .Procedure . Create a patch file to configure the {object_storage} data plane storage ports: + [NOTE] The {OpenStackPreviousInstaller} deployment used different default ports: 6002 for the account server, 6001 for the container server, 6000 for the object server. The converted nodes must continue to use these same ports to ensure connectivity between all {object_storage} storage nodes by using the unmodified rings. + ---- cat > swift-config-patch.yaml << EOF spec: swift: template: swiftStorage: defaultConfigOverwrite: 01-account-server.conf: | [DEFAULT] bind_port = 6002 01-container-server.conf: | [DEFAULT] bind_port = 6001 01-object-server.conf: | [DEFAULT] bind_port = 6000 EOF ---- + [NOTE] If you customized any {object_storage} service settings in the {OpenStackPreviousInstaller} deployment, include those settings as well. For example, if you changed the workers count or added additional configuration options for the account, container, or object services, add them to the corresponding section in the patch file. . Apply the patch to the `OpenStackControlPlane` CR: + ---- $ oc patch openstackcontrolplane openstack --type=merge --patch-file=swift-config-patch.yaml ---- . Create a `OpenStackDataPlaneService` CR to remove remaining {OpenStackPreviousInstaller} artifacts and deploy the {object_storage} services on the node: + ---- $ oc apply -f - <