Skip to content

Commit 7357e1f

Browse files
committed
mgr/dashboard: update NVMeoF gRPC
To include latest changes to the listener add call. Fixes: https://tracker.ceph.com/issues/65268 Signed-off-by: Ernesto Puerta <[email protected]>
1 parent 4d3edeb commit 7357e1f

File tree

9 files changed

+4082
-3735
lines changed

9 files changed

+4082
-3735
lines changed

src/cephadm/cephadmlib/constants.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
DEFAULT_GRAFANA_IMAGE = 'quay.io/ceph/grafana:9.4.12'
1313
DEFAULT_HAPROXY_IMAGE = 'quay.io/ceph/haproxy:2.3'
1414
DEFAULT_KEEPALIVED_IMAGE = 'quay.io/ceph/keepalived:2.2.4'
15-
DEFAULT_NVMEOF_IMAGE = 'quay.io/ceph/nvmeof:1.0.0'
15+
DEFAULT_NVMEOF_IMAGE = 'quay.io/ceph/nvmeof:1.2.1'
1616
DEFAULT_SNMP_GATEWAY_IMAGE = 'docker.io/maxwo/snmp-notifier:v1.2.1'
1717
DEFAULT_ELASTICSEARCH_IMAGE = 'quay.io/omrizeneva/elasticsearch:6.8.23'
1818
DEFAULT_JAEGER_COLLECTOR_IMAGE = 'quay.io/jaegertracing/jaeger-collector:1.29'

src/pybind/mgr/cephadm/module.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ def os_exit_noop(status: int) -> None:
120120
DEFAULT_IMAGE = 'quay.io/ceph/ceph'
121121
DEFAULT_PROMETHEUS_IMAGE = 'quay.io/prometheus/prometheus:v2.43.0'
122122
DEFAULT_NODE_EXPORTER_IMAGE = 'quay.io/prometheus/node-exporter:v1.5.0'
123-
DEFAULT_NVMEOF_IMAGE = 'quay.io/ceph/nvmeof:1.0.0'
123+
DEFAULT_NVMEOF_IMAGE = 'quay.io/ceph/nvmeof:1.2.1'
124124
DEFAULT_LOKI_IMAGE = 'docker.io/grafana/loki:2.4.0'
125125
DEFAULT_PROMTAIL_IMAGE = 'docker.io/grafana/promtail:2.4.0'
126126
DEFAULT_ALERT_MANAGER_IMAGE = 'quay.io/prometheus/alertmanager:v0.25.0'

src/pybind/mgr/dashboard/controllers/nvmeof.py

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -96,49 +96,61 @@ def list(self, nqn: str):
9696
"Create a new NVMeoF listener",
9797
parameters={
9898
"nqn": Param(str, "NVMeoF subsystem NQN"),
99-
"gateway": Param(str, "NVMeoF gateway"),
99+
"host_name": Param(str, "NVMeoF hostname"),
100100
"traddr": Param(str, "NVMeoF transport address"),
101-
"trsvcid": Param(int, "NVMeoF transport service port"),
102-
"adrfam": Param(str, "NVMeoF address family"),
103-
"trtype": Param(str, "NVMeoF transport type"),
101+
"trsvcid": Param(int, "NVMeoF transport service port", True, 4420),
102+
"adrfam": Param(int, "NVMeoF address family (0 - IPv4, 1 - IPv6)", True, 0),
104103
},
105104
)
106105
@empty_response
107106
@handle_nvmeof_error
108107
def create(
109108
self,
110109
nqn: str,
111-
gateway: str,
110+
host_name: str,
112111
traddr: str,
113-
trsvcid: Optional[int] = 4420,
114-
adrfam: Optional[str] = "ipv4",
112+
trsvcid: int = 4420,
113+
adrfam: int = 0, # IPv4
115114
):
116115
return NVMeoFClient().stub.create_listener(
117116
NVMeoFClient.pb2.create_listener_req(
118117
nqn=nqn,
119-
gateway_name=gateway,
118+
host_name=host_name,
120119
traddr=traddr,
121-
trsvcid=trsvcid,
122-
adrfam=adrfam,
120+
trsvcid=int(trsvcid),
121+
adrfam=int(adrfam),
123122
)
124123
)
125124

126125
@EndpointDoc(
127126
"Delete an existing NVMeoF listener",
128127
parameters={
129128
"nqn": Param(str, "NVMeoF subsystem NQN"),
130-
"gateway": Param(str, "NVMeoF gateway"),
129+
"host_name": Param(str, "NVMeoF hostname"),
131130
"traddr": Param(str, "NVMeoF transport address"),
132-
"trsvid": Param(int, "NVMeoF transport service port"),
131+
"trsvcid": Param(int, "NVMeoF transport service port", True, 4420),
132+
"adrfam": Param(int, "NVMeoF address family (0 - IPv4, 1 - IPv6)", True, 0),
133133
},
134134
)
135135
@empty_response
136136
@handle_nvmeof_error
137-
def delete(self, nqn: str, gateway: str, traddr: Optional[str] = None,
138-
trsvcid: Optional[int] = 4420):
137+
def delete(
138+
self,
139+
nqn: str,
140+
host_name: str,
141+
traddr: str,
142+
trsvcid: int = 4420,
143+
adrfam: int = 0, # IPv4
144+
force: bool = False,
145+
):
139146
return NVMeoFClient().stub.delete_listener(
140147
NVMeoFClient.pb2.delete_listener_req(
141-
nqn=nqn, gateway_name=gateway, traddr=traddr, trsvcid=int(trsvcid)
148+
nqn=nqn,
149+
host_name=host_name,
150+
traddr=traddr,
151+
trsvcid=int(trsvcid),
152+
adrfam=int(adrfam),
153+
force=str_to_bool(force),
142154
)
143155
)
144156

src/pybind/mgr/dashboard/model/nvmeof.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,11 @@ class NamespaceIOStats(NamedTuple):
8181

8282

8383
class Listener(NamedTuple):
84-
gateway_name: str
84+
host_name: str
8585
trtype: str
8686
traddr: str
87-
adrfam: Optional[str] = "ipv4"
88-
trsvcid: Optional[int] = 4420
87+
adrfam: int = 0 # 0: IPv4, 1: IPv6
88+
trsvcid: int = 4420
8989

9090

9191
class Host(NamedTuple):

src/pybind/mgr/dashboard/openapi.yaml

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8388,11 +8388,11 @@ paths:
83888388
schema:
83898389
properties:
83908390
adrfam:
8391-
default: ipv4
8392-
description: NVMeoF address family
8393-
type: string
8394-
gateway:
8395-
description: NVMeoF gateway
8391+
default: 0
8392+
description: NVMeoF address family (0 - IPv4, 1 - IPv6)
8393+
type: integer
8394+
host_name:
8395+
description: NVMeoF hostname
83968396
type: string
83978397
traddr:
83988398
description: NVMeoF transport address
@@ -8402,7 +8402,7 @@ paths:
84028402
description: NVMeoF transport service port
84038403
type: integer
84048404
required:
8405-
- gateway
8405+
- host_name
84068406
- traddr
84078407
type: object
84088408
responses:
@@ -8430,7 +8430,7 @@ paths:
84308430
summary: Create a new NVMeoF listener
84318431
tags:
84328432
- NVMe-oF Subsystem Listener
8433-
/api/nvmeof/subsystem/{nqn}/listener/{gateway}:
8433+
/api/nvmeof/subsystem/{nqn}/listener/{host_name}/{traddr}:
84348434
delete:
84358435
parameters:
84368436
- description: NVMeoF subsystem NQN
@@ -8439,23 +8439,35 @@ paths:
84398439
required: true
84408440
schema:
84418441
type: string
8442-
- description: NVMeoF gateway
8442+
- description: NVMeoF hostname
84438443
in: path
8444-
name: gateway
8444+
name: host_name
84458445
required: true
84468446
schema:
84478447
type: string
8448-
- allowEmptyValue: true
8449-
description: NVMeoF transport address
8450-
in: query
8448+
- description: NVMeoF transport address
8449+
in: path
84518450
name: traddr
8451+
required: true
84528452
schema:
84538453
type: string
84548454
- default: 4420
8455+
description: NVMeoF transport service port
84558456
in: query
84568457
name: trsvcid
84578458
schema:
84588459
type: integer
8460+
- default: 0
8461+
description: NVMeoF address family (0 - IPv4, 1 - IPv6)
8462+
in: query
8463+
name: adrfam
8464+
schema:
8465+
type: integer
8466+
- default: false
8467+
in: query
8468+
name: force
8469+
schema:
8470+
type: boolean
84598471
responses:
84608472
'202':
84618473
content:

src/pybind/mgr/dashboard/services/proto/gateway.proto

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,15 @@ enum LogLevel {
2323
DEBUG = 4;
2424
}
2525

26+
enum GwLogLevel {
27+
notset = 0;
28+
debug = 10;
29+
info = 20;
30+
warning = 30;
31+
error = 40;
32+
critical = 50;
33+
}
34+
2635
service Gateway {
2736
// Creates a namespace from an RBD image
2837
rpc namespace_add(namespace_add_req) returns (nsid_status) {}
@@ -92,6 +101,12 @@ service Gateway {
92101

93102
// Get gateway info
94103
rpc get_gateway_info(get_gateway_info_req) returns(gateway_info) {}
104+
105+
// Get gateway log level
106+
rpc get_gateway_log_level(get_gateway_log_level_req) returns(gateway_log_level_info) {}
107+
108+
// Set gateway log level
109+
rpc set_gateway_log_level(set_gateway_log_level_req) returns(req_status) {}
95110
}
96111

97112
// Request messages
@@ -183,18 +198,19 @@ message list_connections_req {
183198

184199
message create_listener_req {
185200
string nqn = 1;
186-
string gateway_name = 2;
201+
string host_name = 2;
187202
string traddr = 3;
188203
optional AddressFamily adrfam = 5;
189204
optional uint32 trsvcid = 6;
190205
}
191206

192207
message delete_listener_req {
193208
string nqn = 1;
194-
string gateway_name = 2;
209+
string host_name = 2;
195210
string traddr = 3;
196211
optional AddressFamily adrfam = 5;
197212
optional uint32 trsvcid = 6;
213+
optional bool force = 7;
198214
}
199215

200216
message list_listeners_req {
@@ -224,6 +240,13 @@ message get_gateway_info_req {
224240
optional string cli_version = 1;
225241
}
226242

243+
message get_gateway_log_level_req {
244+
}
245+
246+
message set_gateway_log_level_req {
247+
GwLogLevel log_level = 1;
248+
}
249+
227250
// From https://nvmexpress.org/wp-content/uploads/NVM-Express-1_4-2019.06.10-Ratified.pdf page 138
228251
// Asymmetric Namespace Access state for all namespaces in this ANA
229252
// Group when accessed through this controller.
@@ -334,6 +357,7 @@ message gateway_info {
334357
string error_message = 9;
335358
optional string spdk_version = 10;
336359
uint32 load_balancing_group = 11;
360+
string hostname = 12;
337361
}
338362

339363
message cli_version {
@@ -349,7 +373,7 @@ message gw_version {
349373
}
350374

351375
message listener_info {
352-
string gateway_name = 1;
376+
string host_name = 1;
353377
string trtype = 2;
354378
AddressFamily adrfam = 3;
355379
string traddr = 4;
@@ -456,3 +480,9 @@ message spdk_nvmf_log_flags_and_level_info {
456480
LogLevel log_level = 4;
457481
LogLevel log_print_level = 5;
458482
}
483+
484+
message gateway_log_level_info {
485+
int32 status = 1;
486+
string error_message = 2;
487+
GwLogLevel log_level = 3;
488+
}

0 commit comments

Comments
 (0)