diff --git a/.github/workflows/canary-integration-test.yml b/.github/workflows/canary-integration-test.yml index 5be534ae1..ceb585318 100644 --- a/.github/workflows/canary-integration-test.yml +++ b/.github/workflows/canary-integration-test.yml @@ -212,6 +212,11 @@ jobs: echo "script failed because wrong realm was passed" fi + - name: test enable v2 mon port + run: | + toolbox=$(kubectl get pod -l app=rook-ceph-tools -n rook-ceph -o jsonpath='{.items[*].metadata.name}') + kubectl -n rook-ceph exec $toolbox -- python3 /etc/ceph/create-external-cluster-resources.py --rbd-data-pool-name replicapool --v2-port-enable + - name: check-ownerreferences run: tests/scripts/github-action-helper.sh check_ownerreferences @@ -1291,7 +1296,6 @@ jobs: name: multi-cluster-mirroring - rgw-multisite-testing: runs-on: ubuntu-20.04 if: "!contains(github.event.pull_request.labels.*.name, 'skip-ci')" @@ -1321,7 +1325,6 @@ jobs: path: test - encryption-pvc-kms-ibm-kp: runs-on: ubuntu-20.04 steps: @@ -1354,7 +1357,6 @@ jobs: path: test - multus-cluster-network: runs-on: ubuntu-20.04 if: "!contains(github.event.pull_request.labels.*.name, 'skip-ci')" @@ -1434,7 +1436,6 @@ jobs: name: canary-multus - csi-hostnetwork-disabled: runs-on: ubuntu-20.04 if: "!contains(github.event.pull_request.labels.*.name, 'skip-ci')" diff --git a/Documentation/CRDs/Cluster/external-cluster.md b/Documentation/CRDs/Cluster/external-cluster.md index 2f73b2821..43c608dba 100644 --- a/Documentation/CRDs/Cluster/external-cluster.md +++ b/Documentation/CRDs/Cluster/external-cluster.md @@ -59,6 +59,7 @@ python3 create-external-cluster-resources.py --rbd-data-pool-name -- - `--rgw-zonegroup-name`: (optional) Provides the name of the rgw-zone-group - `--upgrade`: (optional) Upgrades the 'Ceph CSI keyrings (For example: client.csi-cephfs-provisioner) with new permissions needed for the new cluster version and older permission will still be applied. - `--restricted-auth-permission`: (optional) Restrict cephCSIKeyrings auth permissions to specific pools, and cluster. Mandatory flags that need to be set are `--rbd-data-pool-name`, and `--cluster-name`. `--cephfs-filesystem-name` flag can also be passed in case of CephFS user restriction, so it can restrict users to particular CephFS filesystem. +- `--v2-port-enable`: (optional) Enables the v2 mon port (3300) for mons. ### Multi-tenancy @@ -199,8 +200,8 @@ Create the object store resources: ### Connect to v2 mon port -If encryption or compression on the wire is needed, specify the v2 port. -Check if the v2 port is available in `ceph quorum_status`, then you can update the `export ROOK_EXTERNAL_CEPH_MON_DATA` to use the v2 port `3300`. +If encryption or compression on the wire is needed, specify the `--v2-port-enable` flag. +If the v2 address type is present in the `ceph quorum_status`, then the output of 'ceph mon data' i.e, `ROOK_EXTERNAL_CEPH_MON_DATA` will use the v2 port(`3300`). ## Exporting Rook to another cluster diff --git a/deploy/examples/create-external-cluster-resources-tests.py b/deploy/examples/create-external-cluster-resources-tests.py index 193ef0045..c073213f0 100644 --- a/deploy/examples/create-external-cluster-resources-tests.py +++ b/deploy/examples/create-external-cluster-resources-tests.py @@ -260,3 +260,16 @@ class TestRadosJSON(unittest.TestCase): if self.rjObj.out_map["MONITORING_ENDPOINT_PORT"] != "": self.fail("MONITORING_ENDPOINT_PORT should be empty") + + def test_v2_port_enable(self): + self.rjObj = ext.RadosJSON( + ["--rbd-data-pool-name=abc", "--v2-port-enable", "--format=json"] + ) + self.rjObj.cluster = ext.DummyRados.Rados() + # for testing, we are using 'DummyRados' object + mon_data = self.rjObj.get_ceph_external_mon_data() + mon_ip = mon_data.split("=")[1] + mon_port = mon_ip.split(":")[-1] + if mon_port != "3300": + self.fail(f"Expected Port: 3300, Returned Port: {mon_port}") + print(f"MonPort: {mon_port}") diff --git a/deploy/examples/create-external-cluster-resources.py b/deploy/examples/create-external-cluster-resources.py index 2b2add985..f4a5f0c56 100644 --- a/deploy/examples/create-external-cluster-resources.py +++ b/deploy/examples/create-external-cluster-resources.py @@ -339,6 +339,12 @@ class RadosJSON: + "Note: Restricting the csi-users per pool, and per cluster will require creating new csi-users and new secrets for that csi-users." + "So apply these secrets only to new `Consumer cluster` deployment while using the same `Source cluster`.", ) + common_group.add_argument( + "--v2-port-enable", + action="store_true", + default=False, + help="Enable v2 mon port(3300) for mons", + ) output_group = argP.add_argument_group("output") output_group.add_argument( @@ -701,8 +707,20 @@ class RadosJSON: raise ExecutionFailureException( "Only 'v2' address type is enabled, user should also enable 'v1' type as well" ) - ip_port = str(q_leader_details["public_addr"].split("/")[0]) - return f"{str(q_leader_name)}={ip_port}" + ip_addr = str(q_leader_details["public_addr"].split("/")[0]) + + if self._arg_parser.v2_port_enable: + if len(q_leader_addrvec) > 1: + if q_leader_addrvec[0]["type"] == "v2": + ip_addr = q_leader_addrvec[0]["addr"] + elif q_leader_addrvec[1]["type"] == "v2": + ip_addr = q_leader_addrvec[1]["addr"] + else: + sys.stderr.write( + "'v2' address type not present, and 'v2-port-enable' flag is provided" + ) + + return f"{str(q_leader_name)}={ip_addr}" def _convert_hostname_to_ip(self, host_name, port, ip_type): # if 'cluster' instance is a dummy type,