@@ -114,19 +114,29 @@ func (s *Server) DeleteNvmeController(ctx context.Context, in *pb.DeleteNvmeCont
114114}
115115
116116// UpdateNvmeController updates an Nvme controller
117- func (s * Server ) UpdateNvmeController (_ context.Context , in * pb.UpdateNvmeControllerRequest ) (* pb.NvmeController , error ) {
117+ func (s * Server ) UpdateNvmeController (ctx context.Context , in * pb.UpdateNvmeControllerRequest ) (* pb.NvmeController , error ) {
118118 // check input correctness
119119 if err := s .validateUpdateNvmeControllerRequest (in ); err != nil {
120120 return nil , err
121121 }
122122 // fetch object from the database
123123 ctrlr , ok := s .Nvme .Controllers [in .NvmeController .Name ]
124124 if ! ok {
125- if in .AllowMissing {
126- log .Printf ("TODO: in case of AllowMissing, create a new resource, don;t return error" )
125+ if ! in .AllowMissing {
126+ err := status .Errorf (codes .NotFound , "unable to find key %s" , in .NvmeController .Name )
127+ return nil , err
128+ }
129+
130+ // If AllowMissing is true and controller doesn't exist, create it using CreateNvmeController
131+ createRequest := & pb.CreateNvmeControllerRequest {
132+ NvmeController : in .NvmeController ,
133+ Parent : utils .GetSubsystemIDFromNvmeName (in .NvmeController .Name ),
134+ }
135+ var err error
136+ ctrlr , err = s .CreateNvmeController (ctx , createRequest )
137+ if err != nil {
138+ return nil , err
127139 }
128- err := status .Errorf (codes .NotFound , "unable to find key %s" , in .NvmeController .Name )
129- return nil , err
130140 }
131141 resourceID := path .Base (ctrlr .Name )
132142 // update_mask = 2
0 commit comments