Skip to content

Commit

Permalink
Merge pull request #128 from CongMinYin/listener-require-ip
Browse files Browse the repository at this point in the history
control/cli: add ip requirement for listener

Reviewed-by: Jonas Pfefferle <jpf@zurich.ibm.com>
Reviewed-by: Mykola Golub <mykola.golub@clyso.com>
Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
  • Loading branch information
idryomov authored Aug 8, 2023
2 parents 942034e + 585c66c commit 1fd85ec
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 42 deletions.
1 change: 1 addition & 0 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ NVMEOF_DESCRIPTION="Service to provide block storage on top of Ceph for platform
NVMEOF_URL="https://github.com/ceph/ceph-nvmeof"
NVMEOF_TAGS="ceph,nvme-of,nvme-of gateway,rbd,block storage"
NVMEOF_WANTS="ceph,rbd"
NVMEOF_HOSTNAME="nvmeof"
NVMEOF_IP_ADDRESS="192.168.13.3"
NVMEOF_IO_PORT=4420
NVMEOF_GW_PORT=5500
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ DOCKER_BUILDKIT=1 docker-compose run --rm ceph-nvmeof-cli --server-address ceph-
Creating nvmeof_ceph-nvmeof-cli_run ... done
INFO:__main__:Added namespace 1 to nqn.2016-06.io.spdk:cnode1: True
DOCKER_BUILDKIT=1 docker-compose run --rm ceph-nvmeof-cli --server-address ceph-nvmeof --server-port 5500 create_listener --subnqn nqn.2016-06.io.spdk:cnode1 -s 4420
DOCKER_BUILDKIT=1 docker-compose run --rm ceph-nvmeof-cli --server-address ceph-nvmeof --server-port 5500 create_listener --subnqn nqn.2016-06.io.spdk:cnode1 -g gateway_name -a gateway_addr -s 4420
Creating nvmeof_ceph-nvmeof-cli_run ... done
INFO:__main__:Created nqn.2016-06.io.spdk:cnode1 listener: True
Expand Down Expand Up @@ -153,7 +153,7 @@ The same configuration can also be manually run:
1. Create a listener so that NVMe initiators can connect to:
```bash
nvmeof-cli create_listener ---subnqn nqn.2016-06.io.spdk:cnode1 -s 4420
nvmeof-cli create_listener ---subnqn nqn.2016-06.io.spdk:cnode1 -g gateway_name -a gateway_addr -s 4420
```
1. Define which hosts can connect:
Expand Down
8 changes: 4 additions & 4 deletions control/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -267,10 +267,10 @@ def remove_host(self, args):

@cli.cmd([
argument("-n", "--subnqn", help="Subsystem NQN", required=True),
argument("-g", "--gateway-name", help="Gateway name", default=""),
argument("-g", "--gateway-name", help="Gateway name", required=True),
argument("-t", "--trtype", help="Transport type", default="TCP"),
argument("-f", "--adrfam", help="Address family", default="ipv4"),
argument("-a", "--traddr", help="NVMe host IP", default=""),
argument("-a", "--traddr", help="NVMe host IP", required=True),
argument("-s", "--trsvcid", help="Port number", required=True),
])
def create_listener(self, args):
Expand All @@ -288,10 +288,10 @@ def create_listener(self, args):

@cli.cmd([
argument("-n", "--subnqn", help="Subsystem NQN", required=True),
argument("-g", "--gateway-name", help="Gateway name", default=""),
argument("-g", "--gateway-name", help="Gateway name", required=True),
argument("-t", "--trtype", help="Transport type", default="TCP"),
argument("-f", "--adrfam", help="Address family", default="ipv4"),
argument("-a", "--traddr", help="NVMe host IP", default=""),
argument("-a", "--traddr", help="NVMe host IP", required=True),
argument("-s", "--trsvcid", help="Port number", required=True),
])
def delete_listener(self, args):
Expand Down
34 changes: 4 additions & 30 deletions control/grpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -333,25 +333,12 @@ def create_listener(self, request, context=None):
f" {request.trtype} listener for {request.nqn} at"
f" {request.traddr}:{request.trsvcid}.")
try:
if (request.gateway_name and not request.traddr) or \
(not request.gateway_name and request.traddr):
raise Exception(
"both gateway_name and traddr or neither must be specified")

if not request.gateway_name or \
request.gateway_name == self.gateway_name:
if not request.traddr:
traddr = self.config.get("gateway", "addr")
if not traddr:
raise Exception("gateway.addr option is not set")
else:
traddr = request.traddr

if request.gateway_name == self.gateway_name:
ret = rpc_nvmf.nvmf_subsystem_add_listener(
self.spdk_rpc_client,
nqn=request.nqn,
trtype=request.trtype,
traddr=traddr,
traddr=request.traddr,
trsvcid=request.trsvcid,
adrfam=request.adrfam,
)
Expand Down Expand Up @@ -387,25 +374,12 @@ def delete_listener(self, request, context=None):
f" {request.trtype} listener for {request.nqn} at"
f" {request.traddr}:{request.trsvcid}.")
try:
if (request.gateway_name and not request.traddr) or \
(not request.gateway_name and request.traddr):
raise Exception(
"both gateway_name and traddr or neither must be specified")

if not request.gateway_name or \
request.gateway_name == self.gateway_name:
if not request.traddr:
traddr = self.config.get("gateway", "addr")
if not traddr:
raise Exception("gateway.addr option is not set")
else:
traddr = request.traddr

if request.gateway_name == self.gateway_name:
ret = rpc_nvmf.nvmf_subsystem_remove_listener(
self.spdk_rpc_client,
nqn=request.nqn,
trtype=request.trtype,
traddr=traddr,
traddr=request.traddr,
trsvcid=request.trsvcid,
adrfam=request.adrfam,
)
Expand Down
2 changes: 1 addition & 1 deletion mk/demo.mk
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ demo: rbd ## Expose RBD_IMAGE_NAME as NVMe-oF target
$(NVMEOF_CLI) create_bdev --pool $(RBD_POOL) --image $(RBD_IMAGE_NAME) --bdev $(BDEV_NAME)
$(NVMEOF_CLI) create_subsystem --subnqn $(NQN) --serial $(SERIAL)
$(NVMEOF_CLI) add_namespace --subnqn $(NQN) --bdev $(BDEV_NAME)
$(NVMEOF_CLI) create_listener --subnqn $(NQN) --trsvcid $(NVMEOF_IO_PORT)
$(NVMEOF_CLI) create_listener --subnqn $(NQN) --gateway-name $(NVMEOF_HOSTNAME) --traddr $(NVMEOF_IP_ADDRESS) --trsvcid $(NVMEOF_IO_PORT)
$(NVMEOF_CLI) add_host --subnqn $(NQN) --host "*"

.PHONY: demo rbd
8 changes: 3 additions & 5 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
trtype = "TCP"
gateway_name = socket.gethostname()
addr = "127.0.0.1"
listener_list = [["-g", gateway_name, "-a", addr, "-s", "5001"], ["-s", "5002"]]
listener = ["-g", gateway_name, "-a", addr, "-s", "5001"]
config = "ceph-nvmeof.conf"


Expand Down Expand Up @@ -40,8 +40,7 @@ def test_add_host(self, caplog, host):
cli(["-c", config, "add_host", "-n", subsystem, "-t", host])
assert "Failed to add" not in caplog.text

@pytest.mark.parametrize("listener", listener_list)
def test_create_listener(self, caplog, listener):
def test_create_listener(self, caplog):
cli(["-c", config, "create_listener", "-n", subsystem] + listener)
assert "Failed to create" not in caplog.text

Expand All @@ -52,8 +51,7 @@ def test_remove_host(self, caplog, host):
cli(["-c", config, "remove_host", "-n", subsystem, "-t", host])
assert "Failed to remove" not in caplog.text

@pytest.mark.parametrize("listener", listener_list)
def test_delete_listener(self, caplog, listener):
def test_delete_listener(self, caplog):
cli(["-c", config, "delete_listener", "-n", subsystem] + listener)
assert "Failed to delete" not in caplog.text

Expand Down

0 comments on commit 1fd85ec

Please sign in to comment.