@@ -314,7 +314,7 @@ func (c *RegistrarClient) updateNode(opts []UpdateNodeOpts) (err error) {
314314 }
315315
316316 if err := handler (node ); err != nil {
317- return err
317+ return errors . Wrap ( err , "failed here" )
318318 }
319319 }
320320
@@ -489,6 +489,7 @@ func (c *RegistrarClient) listNodes(opts []ListNodeOpts) (nodes []Node, err erro
489489 return
490490 }
491491
492+ // try old interface format
492493 var rawNodes []interface {}
493494 err = json .Unmarshal (bodyBytes , & rawNodes )
494495 if err != nil {
@@ -503,7 +504,7 @@ func (c *RegistrarClient) listNodes(opts []ListNodeOpts) (nodes []Node, err erro
503504
504505 node , err := parseResponseBodyToNewInterfaceFormat (nodeBytes )
505506 if err != nil {
506- return nodes , err
507+ return nodes , errors . Wrap ( err , "failed to get nodes with old interface format" )
507508 }
508509
509510 nodes = append (nodes , node )
@@ -680,6 +681,22 @@ type oldInterfaceFormat struct {
680681 IPs string `json:"ips"`
681682}
682683
684+ type oldFormatNodeType struct {
685+ Interfaces []oldInterfaceFormat `json:"interfaces"`
686+
687+ NodeID uint64 `json:"node_id"`
688+ FarmID uint64 `json:"farm_id"`
689+ TwinID uint64 `json:"twin_id"`
690+ Location Location `json:"location"`
691+ Resources Resources `json:"resources"`
692+ SecureBoot bool `json:"secure_boot"`
693+ Virtualized bool `json:"virtualized"`
694+ SerialNumber string `json:"serial_number"`
695+ LastSeen * time.Time `json:"last_seen"`
696+ Online bool `json:"online"`
697+ Approved bool
698+ }
699+
683700func createRequestBodyWithOldInterfaceFormat (node Node ) (body bytes.Buffer , err error ) {
684701 var oldInterfaces []oldInterfaceFormat
685702 interfaces := node .Interfaces
@@ -692,19 +709,35 @@ func createRequestBodyWithOldInterfaceFormat(node Node) (body bytes.Buffer, err
692709 oldInterfaces = append (oldInterfaces , old )
693710 }
694711
695- nodeBytes , err := json .Marshal (node )
696- if err != nil {
697- return
698- }
699-
700- var nodeMap map [string ]any
701- err = json .Unmarshal (nodeBytes , & nodeMap )
702- if err != nil {
703- return
704- }
705- nodeMap ["interfaces" ] = oldInterfaces
706-
707- err = json .NewEncoder (& body ).Encode (node )
712+ oldFormatNode := oldFormatNodeType {
713+ Interfaces : oldInterfaces ,
714+
715+ NodeID : node .NodeID ,
716+ FarmID : node .FarmID ,
717+ TwinID : node .TwinID ,
718+ Location : node .Location ,
719+ Resources : node .Resources ,
720+ SecureBoot : node .SecureBoot ,
721+ Virtualized : node .Virtualized ,
722+ SerialNumber : node .SerialNumber ,
723+ LastSeen : node .LastSeen ,
724+ Online : node .Online ,
725+ Approved : node .Approved ,
726+ }
727+ //
728+ // nodeBytes, err := json.Marshal(node)
729+ // if err != nil {
730+ // return
731+ // }
732+ //
733+ // var nodeMap map[string]any
734+ // err = json.Unmarshal(nodeBytes, &nodeMap)
735+ // if err != nil {
736+ // return
737+ // }
738+ // nodeMap["interfaces"] = oldInterfaces
739+
740+ err = json .NewEncoder (& body ).Encode (oldFormatNode )
708741 if err != nil {
709742 return
710743 }
@@ -713,10 +746,7 @@ func createRequestBodyWithOldInterfaceFormat(node Node) (body bytes.Buffer, err
713746}
714747
715748func parseResponseBodyToNewInterfaceFormat (nodeBytes []byte ) (Node , error ) {
716- oldFormatNode := struct {
717- Interfaces []oldInterfaceFormat `json:"interfaces"`
718- }{}
719-
749+ var oldFormatNode oldFormatNodeType
720750 err := json .Unmarshal (nodeBytes , & oldFormatNode )
721751 if err != nil {
722752 return Node {}, err
@@ -731,26 +761,51 @@ func parseResponseBodyToNewInterfaceFormat(nodeBytes []byte) (Node, error) {
731761 IPs : ips ,
732762 })
733763 }
734-
735- var nodeMap map [string ]any
736- err = json .Unmarshal (nodeBytes , & nodeMap )
737- if err != nil {
738- return Node {}, err
739- }
740- nodeMap ["interfaces" ] = newFormat
741-
742- encodedNode , err := json .Marshal (nodeMap )
743- if err != nil {
744- return Node {}, err
745- }
746-
747- var node Node
748- err = json .Unmarshal (encodedNode , & node )
749- if err != nil {
750- return Node {}, err
751- }
752-
753- return node , nil
764+ return Node {
765+ Interfaces : newFormat ,
766+
767+ NodeID : oldFormatNode .NodeID ,
768+ FarmID : oldFormatNode .FarmID ,
769+ TwinID : oldFormatNode .TwinID ,
770+ Location : oldFormatNode .Location ,
771+ Resources : oldFormatNode .Resources ,
772+ SecureBoot : oldFormatNode .SecureBoot ,
773+ Virtualized : oldFormatNode .Virtualized ,
774+ SerialNumber : oldFormatNode .SerialNumber ,
775+ LastSeen : oldFormatNode .LastSeen ,
776+ Online : oldFormatNode .Online ,
777+ Approved : oldFormatNode .Approved ,
778+ }, nil
779+
780+ // data, err := json.Marshal(newFormat)
781+ // if err != nil {
782+ // return Node{}, err
783+ // }
784+ //
785+ // var genericInterface any
786+ // if err := json.Unmarshal(data, &genericInterface); err != nil {
787+ // return Node{}, err
788+ // }
789+ //
790+ // var nodeMap map[string]any
791+ // err = json.Unmarshal(nodeBytes, &nodeMap)
792+ // if err != nil {
793+ // return Node{}, err
794+ // }
795+ // nodeMap["interfaces"] = genericInterface
796+ //
797+ // encodedNode, err := json.Marshal(nodeMap)
798+ // if err != nil {
799+ // return Node{}, err
800+ // }
801+ //
802+ // var node Node
803+ // err = json.Unmarshal(encodedNode, &node)
804+ // if err != nil {
805+ // return Node{}, errors.Wrapf(err, "failed to Unmarshal here %+v", nodeMap)
806+ // }
807+ //
808+ // return node, nil
754809}
755810
756811// nodeBytes, err := json.Marshal(nodeMap)
0 commit comments