Skip to content

Commit 0a83504

Browse files
committed
feat(frontend): if hostnqn set, do not allow any host
Signed-off-by: Boris Glimcher <Boris.Glimcher@emc.com>
1 parent 91d4151 commit 0a83504

File tree

4 files changed

+49
-5
lines changed

4 files changed

+49
-5
lines changed

go.mod

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ require (
1010
github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0
1111
github.com/onsi/ginkgo/v2 v2.12.1
1212
github.com/opiproject/gospdk v0.0.0-20230924031820-4b65d0851cb9
13-
github.com/opiproject/opi-api v0.0.0-20231002080217-fc749d07fdda
13+
github.com/opiproject/opi-api v0.0.0-20231004104309-217649f4535f
1414
github.com/philippgille/gokv v0.6.0
1515
github.com/philippgille/gokv/gomap v0.6.0
1616
github.com/vektra/mockery/v2 v2.34.2
@@ -196,9 +196,9 @@ require (
196196
golang.org/x/sys v0.12.0 // indirect
197197
golang.org/x/term v0.12.0 // indirect
198198
golang.org/x/text v0.13.0 // indirect
199-
google.golang.org/genproto v0.0.0-20230807174057-1744710a1577 // indirect
200-
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect
201-
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
199+
google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 // indirect
200+
google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 // indirect
201+
google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 // indirect
202202
gopkg.in/ini.v1 v1.67.0 // indirect
203203
gopkg.in/yaml.v2 v2.4.0 // indirect
204204
gopkg.in/yaml.v3 v3.0.1 // indirect

go.sum

+8
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,8 @@ github.com/opiproject/opi-api v0.0.0-20230926113732-f307f1aa0bd1 h1:BG8LBieb6Fom
424424
github.com/opiproject/opi-api v0.0.0-20230926113732-f307f1aa0bd1/go.mod h1:92pv4ulvvPMuxCJ9ND3aYbmBfEMLx0VCjpkiR7ZTqPY=
425425
github.com/opiproject/opi-api v0.0.0-20231002080217-fc749d07fdda h1:w/HTrqmBrXabdcc71ACkRQqavKDFvfPp0MqiGWKTGjw=
426426
github.com/opiproject/opi-api v0.0.0-20231002080217-fc749d07fdda/go.mod h1:92pv4ulvvPMuxCJ9ND3aYbmBfEMLx0VCjpkiR7ZTqPY=
427+
github.com/opiproject/opi-api v0.0.0-20231004104309-217649f4535f h1:TXLfuUmFwB7Zk8YKIzEfT/LQ2i5d+BW/BzjQgaBBOWM=
428+
github.com/opiproject/opi-api v0.0.0-20231004104309-217649f4535f/go.mod h1:92pv4ulvvPMuxCJ9ND3aYbmBfEMLx0VCjpkiR7ZTqPY=
427429
github.com/otiai10/copy v1.2.0 h1:HvG945u96iNadPoG2/Ja2+AUJeW5YuFQMixq9yirC+k=
428430
github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw=
429431
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
@@ -969,10 +971,16 @@ google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6D
969971
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
970972
google.golang.org/genproto v0.0.0-20230807174057-1744710a1577 h1:Tyk/35yqszRCvaragTn5NnkY6IiKk/XvHzEWepo71N0=
971973
google.golang.org/genproto v0.0.0-20230807174057-1744710a1577/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4=
974+
google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 h1:SeZZZx0cP0fqUyA+oRzP9k7cSwJlvDFiROO72uwD6i0=
975+
google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk=
972976
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q=
973977
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk=
978+
google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 h1:W18sezcAYs+3tDZX4F80yctqa12jcP1PUS2gQu1zTPU=
979+
google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0=
974980
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
975981
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
982+
google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 h1:6GQBEOdGkX6MMTLT9V+TjtIRZCw9VPD5Z+yHY9wMgS0=
983+
google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97/go.mod h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY=
976984
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
977985
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
978986
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=

pkg/frontend/nvme_subsystem.go

+19-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func (s *Server) CreateNvmeSubsystem(_ context.Context, in *pb.CreateNvmeSubsyst
6262
Nqn: in.NvmeSubsystem.Spec.Nqn,
6363
SerialNumber: in.NvmeSubsystem.Spec.SerialNumber,
6464
ModelNumber: in.NvmeSubsystem.Spec.ModelNumber,
65-
AllowAnyHost: true,
65+
AllowAnyHost: (in.NvmeSubsystem.Spec.Hostnqn == ""),
6666
MaxNamespaces: int(in.NvmeSubsystem.Spec.MaxNamespaces),
6767
}
6868
var result spdk.NvmfCreateSubsystemResult
@@ -75,6 +75,24 @@ func (s *Server) CreateNvmeSubsystem(_ context.Context, in *pb.CreateNvmeSubsyst
7575
msg := fmt.Sprintf("Could not create NQN: %s", in.NvmeSubsystem.Spec.Nqn)
7676
return nil, status.Errorf(codes.InvalidArgument, msg)
7777
}
78+
// if Hostnqn is not empty, add it to subsystem
79+
if in.NvmeSubsystem.Spec.Hostnqn != "" {
80+
params := spdk.NvmfSubsystemAddHostParams{
81+
Nqn: in.NvmeSubsystem.Spec.Nqn,
82+
Host: in.NvmeSubsystem.Spec.Hostnqn,
83+
}
84+
var result spdk.NvmfSubsystemAddHostResult
85+
err = s.rpc.Call("nvmf_subsystem_add_host", &params, &result)
86+
if err != nil {
87+
return nil, err
88+
}
89+
log.Printf("Received from SPDK: %v", result)
90+
if !result {
91+
msg := fmt.Sprintf("Could not add Hostnqn %s to NQN: %s", in.NvmeSubsystem.Spec.Hostnqn, in.NvmeSubsystem.Spec.Nqn)
92+
return nil, status.Errorf(codes.InvalidArgument, msg)
93+
}
94+
}
95+
// get SPDK version
7896
var ver spdk.GetVersionResult
7997
err = s.rpc.Call("spdk_get_version", nil, &ver)
8098
if err != nil {

pkg/frontend/nvme_subsystem_test.go

+18
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ func TestFrontEnd_CreateNvmeSubsystem(t *testing.T) {
3838
SerialNumber: "OpiSerialNumber",
3939
ModelNumber: "OpiModelNumber",
4040
}
41+
specHostNqn := utils.ProtoClone(spec)
42+
specHostNqn.Hostnqn = "nqn.2014-08.org.nvmexpress:uuid:feb98abe-d51f-40c8-b348-2753f3571d3c"
4143
t.Cleanup(utils.CheckTestProtoObjectsNotChanged(spec)(t, t.Name()))
4244
t.Cleanup(checkGlobalTestProtoObjectsNotChanged(t, t.Name()))
4345

@@ -132,6 +134,22 @@ func TestFrontEnd_CreateNvmeSubsystem(t *testing.T) {
132134
"",
133135
false,
134136
},
137+
"valid request with valid SPDK response with HostNQN": {
138+
testSubsystemID,
139+
&pb.NvmeSubsystem{
140+
Spec: specHostNqn,
141+
},
142+
&pb.NvmeSubsystem{
143+
Spec: specHostNqn,
144+
Status: &pb.NvmeSubsystemStatus{
145+
FirmwareRevision: "SPDK v20.10",
146+
},
147+
},
148+
[]string{`{"id":%d,"error":{"code":0,"message":""},"result":true}`, `{"id":%d,"error":{"code":0,"message":""},"result":true}`, `{"jsonrpc":"2.0","id":%d,"result":{"version":"SPDK v20.10","fields":{"major":20,"minor":10,"patch":0,"suffix":""}}}`}, // `{"jsonrpc": "2.0", "id": 1, "result": True}`,
149+
codes.OK,
150+
"",
151+
false,
152+
},
135153
"already exists": {
136154
testSubsystemID,
137155
&pb.NvmeSubsystem{

0 commit comments

Comments
 (0)