From 6295950159a011ea4c61a25a4f9ab9dbc784ea74 Mon Sep 17 00:00:00 2001 From: Gabriele Baldoni Date: Thu, 8 Oct 2020 11:24:57 +0200 Subject: [PATCH] Initial FOrcE implementation (#6) * update dependency versions Signed-off-by: gabrik * fix in go.mod Signed-off-by: gabrik * added missing GetNetwork to FIMAPI.Network Signed-off-by: gabrik * Added FDU.GetCompatibleNodes Signed-off-by: gabrik * updated dependency fog05-sdk Signed-off-by: gabrik * small change in Onboard Signed-off-by: gabrik * fix in GetCompatibleNodes Signed-off-by: gabrik * fixed marshaling of evals results Signed-off-by: gabrik * update dependency to fog05-sdk Signed-off-by: gabrik * updated fog05 sdk dependecy Signed-off-by: gabrik * updated fog05 sdk dependecy Signed-off-by: gabrik * updated dependency to fog05 go sdk 0.2.2 Signed-off-by: gabrik * readded zenoh indirect dependency Signed-off-by: gabrik --- fog05/fim.go | 92 +++++++++++++++++++++++----------------------------- go.mod | 2 +- go.sum | 25 ++++++++++++-- 3 files changed, 65 insertions(+), 54 deletions(-) diff --git a/fog05/fim.go b/fog05/fim.go index 6535797..3a64b55 100644 --- a/fog05/fim.go +++ b/fog05/fim.go @@ -173,6 +173,12 @@ func (n *NetworkAPI) AddNetwork(descriptor fog05sdk.VirtualNetwork) error { return n.connector.Global.Desired.AddNetwork(n.sysid, n.tenantid, descriptor.UUID, descriptor) } +// GetNetwork gets a virtual network from the system catalog +func (n *NetworkAPI) GetNetwork(netid string) (*fog05sdk.VirtualNetwork, error) { + return n.connector.Global.Actual.GetNetwork(n.sysid, n.tenantid, netid) + +} + // RemoveNetwork remove a virtual network from the system catalog func (n *NetworkAPI) RemoveNetwork(netid string) error { return n.connector.Global.Desired.RemoveNetwork(n.sysid, n.tenantid, netid) @@ -196,12 +202,8 @@ func (n *NetworkAPI) AddNetworkToNode(nodeid string, descriptor fog05sdk.Virtual } var net fog05sdk.VirtualNetwork - v, err := json.Marshal(*res.Result) - if err != nil { - return nil, err - } - err = json.Unmarshal([]byte(v), &net) + err = json.Unmarshal([]byte(*res.Result), &net) if err != nil { return nil, err } @@ -224,12 +226,8 @@ func (n *NetworkAPI) RemoveNetworkFromNode(nodeid string, netid string) (*fog05s } var net fog05sdk.VirtualNetwork - v, err := json.Marshal(*res.Result) - if err != nil { - return nil, err - } - err = json.Unmarshal([]byte(v), &net) + err = json.Unmarshal([]byte(*res.Result), &net) if err != nil { return nil, err } @@ -370,12 +368,8 @@ func (n *NetworkAPI) AddRouterPort(nodeid string, routerid string, portType stri } var r fog05sdk.RouterRecord - v, err := json.Marshal(*res.Result) - if err != nil { - return nil, err - } - err = json.Unmarshal([]byte(v), &r) + err = json.Unmarshal([]byte(*res.Result), &r) if err != nil { return nil, err } @@ -394,12 +388,8 @@ func (n *NetworkAPI) RemoveRouterPort(nodeid string, routerid string, vnetid str } var r fog05sdk.RouterRecord - v, err := json.Marshal(*res.Result) - if err != nil { - return nil, err - } - err = json.Unmarshal([]byte(v), &r) + err = json.Unmarshal([]byte(*res.Result), &r) if err != nil { return nil, err } @@ -418,12 +408,8 @@ func (n *NetworkAPI) CreateFloatingIP(nodeid string) (*fog05sdk.FloatingIPRecord } var fip fog05sdk.FloatingIPRecord - v, err := json.Marshal(*res.Result) - if err != nil { - return nil, err - } - err = json.Unmarshal([]byte(v), &fip) + err = json.Unmarshal([]byte(*res.Result), &fip) if err != nil { return nil, err } @@ -442,12 +428,8 @@ func (n *NetworkAPI) DeleteFloatingIP(nodeid string, ipid string) (*fog05sdk.Flo } var fip fog05sdk.FloatingIPRecord - v, err := json.Marshal(*res.Result) - if err != nil { - return nil, err - } - err = json.Unmarshal([]byte(v), &fip) + err = json.Unmarshal([]byte(*res.Result), &fip) if err != nil { return nil, err } @@ -487,12 +469,8 @@ func (n *NetworkAPI) RetainFloatingIP(nodeid string, ipid string, cpid string) ( } var fip fog05sdk.FloatingIPRecord - v, err := json.Marshal(*res.Result) - if err != nil { - return nil, err - } - err = json.Unmarshal([]byte(v), &fip) + err = json.Unmarshal([]byte(*res.Result), &fip) if err != nil { return nil, err } @@ -593,12 +571,7 @@ func (f *FDUAPI) Onboard(descriptor fog05sdk.FDU) (*fog05sdk.FDU, error) { return nil, &fog05sdk.FError{*res.ErrorMessage + " ErrNo: " + string(*res.Error), nil} } - v, err := json.Marshal(*res.Result) - if err != nil { - return nil, err - } - - err = json.Unmarshal([]byte(v), &fdu) + err = json.Unmarshal([]byte(*res.Result), &fdu) if err != nil { return nil, err } @@ -611,13 +584,35 @@ func (f *FDUAPI) Offload(fduid string) (string, error) { return fduid, err } +// GetCompatibleNodes gets a list off compatible nodes in the system for the given fdu, node compatibility verification is decentralized each node verifies and then replies +func (f *FDUAPI) GetCompatibleNodes(fduid string) ([]string, error) { + nodes := []string{} + fdu, err := f.connector.Global.Actual.GetCatalogFDUInfo(f.sysid, f.tenantid, fduid) + if err != nil { + return nodes, err + } + res, err := f.connector.Global.Actual.CallMultiNodeCheck(f.sysid, f.tenantid, *fdu) + if err != nil { + return nodes, err + } + for _, evr := range res { + var compatibility fog05sdk.CompatibleNodeResponse + + err = json.Unmarshal([]byte(*evr.Result), &compatibility) + if err != nil { + return nodes, err + } + if compatibility.IsCompatible { + nodes = append(nodes, compatibility.UUID) + } + } + return nodes, nil +} + // Define creates and FDU Instance for the specified FDU in the specified node and returns the FDURecord object associated func (f *FDUAPI) Define(nodeid string, fduid string) (*fog05sdk.FDURecord, error) { var fdu fog05sdk.FDURecord - _, err := f.connector.Global.Actual.GetCatalogFDUInfo(f.sysid, f.tenantid, fduid) - if err != nil { - return nil, err - } + res, err := f.connector.Global.Actual.DefineFDUInNode(f.sysid, f.tenantid, nodeid, fduid) if err != nil { return nil, err @@ -627,12 +622,7 @@ func (f *FDUAPI) Define(nodeid string, fduid string) (*fog05sdk.FDURecord, error return nil, &fog05sdk.FError{*res.ErrorMessage + " ErrNo: " + string(*res.Error), nil} } - v, err := json.Marshal(*res.Result) - if err != nil { - return nil, err - } - - err = json.Unmarshal([]byte(v), &fdu) + err = json.Unmarshal([]byte(*res.Result), &fdu) if err != nil { return nil, err } diff --git a/go.mod b/go.mod index 1d5e8e9..f4edb90 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,6 @@ go 1.13 require ( github.com/atolab/yaks-go v0.3.0 github.com/atolab/zenoh-go v0.3.1 // indirect - github.com/eclipse-fog05/sdk-go v0.2.0 + github.com/eclipse-fog05/sdk-go v0.2.2 github.com/google/uuid v1.1.2 ) diff --git a/go.sum b/go.sum index 1f4c674..1c4d4f8 100644 --- a/go.sum +++ b/go.sum @@ -6,6 +6,7 @@ github.com/atolab/zenoh-go v0.3.1 h1:Ab/2i+j05cGskkM6oswFLy6I5dhSDg+xxyZMLFN8jSw github.com/atolab/zenoh-go v0.3.1/go.mod h1:3Ek15mksXcvo9kZiuRnJT1T5v9eXUvLYB8RLa4nctKM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -15,14 +16,30 @@ github.com/eclipse-fog05/sdk-go v0.1.0 h1:RjzXR4rmdZzSWaU3WtlzTZkylmkjWGOuw1pVTA github.com/eclipse-fog05/sdk-go v0.1.0/go.mod h1:UPQANX/4L5xMOeniR2rkKZ5ARMRrN8P/F+ixl7xFrHQ= github.com/eclipse-fog05/sdk-go v0.1.1-0.20200506091819-bd74ddb7a662 h1:5lc5YRUc0X9iZTqjvidLeOz7DTDTT3altFENPYjH4Bg= github.com/eclipse-fog05/sdk-go v0.1.1-0.20200506091819-bd74ddb7a662/go.mod h1:UPQANX/4L5xMOeniR2rkKZ5ARMRrN8P/F+ixl7xFrHQ= -github.com/eclipse-fog05/sdk-go v0.2.0 h1:67ZwozAuOMc6Aa3nR8CyEQF8qzE5h5AuQkqkERWBzHw= -github.com/eclipse-fog05/sdk-go v0.2.0/go.mod h1:UPQANX/4L5xMOeniR2rkKZ5ARMRrN8P/F+ixl7xFrHQ= +github.com/eclipse-fog05/sdk-go v0.2.2 h1:euapEcAO2c/jd62zSxOailUzbu5Ilbk5ZBpWpBLtNjI= +github.com/eclipse-fog05/sdk-go v0.2.2/go.mod h1:ZKGOJ5VzMjQRL3NexJG6x/vz8i0YxyM07LB+jKHoLUI= github.com/gabrik/sdk-go v0.0.0-20200428160909-34148dcdd771 h1:rBZx6b+jUjDxLkObAwwdB3wa2gpl0PdflSFPGl74xpU= github.com/gabrik/sdk-go v0.0.0-20200428160909-34148dcdd771/go.mod h1:UPQANX/4L5xMOeniR2rkKZ5ARMRrN8P/F+ixl7xFrHQ= github.com/gabrik/sdk-go v0.0.0-20200429142714-30fc4cbf8d70 h1:DNw+bTn1uFi7Ho4u+1t9efYJVQ7bnfMrZa2X/bBpEvo= github.com/gabrik/sdk-go v0.0.0-20200429142714-30fc4cbf8d70/go.mod h1:UPQANX/4L5xMOeniR2rkKZ5ARMRrN8P/F+ixl7xFrHQ= github.com/gabrik/sdk-go v0.0.0-20200429160826-8967d42465f8 h1:qkoUW2DE5HQekp8c9UyLm0U4BkjTaXsX4KW9OLJiBlQ= github.com/gabrik/sdk-go v0.0.0-20200429160826-8967d42465f8/go.mod h1:UPQANX/4L5xMOeniR2rkKZ5ARMRrN8P/F+ixl7xFrHQ= +github.com/gabrik/sdk-go v0.0.0-20200901124809-98cbd2021c34 h1:dnXvjg+jhKAB6nyNuj1GSbDI31U1N54XLCpXnbt4mFo= +github.com/gabrik/sdk-go v0.0.0-20200901124809-98cbd2021c34/go.mod h1:UPQANX/4L5xMOeniR2rkKZ5ARMRrN8P/F+ixl7xFrHQ= +github.com/gabrik/sdk-go v0.0.0-20200904094556-0482d1f584cb h1:KQLnwl2gE21JOygT+rJTiYUIHNXeTUFJW/TvocUb6+E= +github.com/gabrik/sdk-go v0.0.0-20200904094556-0482d1f584cb/go.mod h1:ZKGOJ5VzMjQRL3NexJG6x/vz8i0YxyM07LB+jKHoLUI= +github.com/gabrik/sdk-go v0.0.0-20200907095751-b96077661869 h1:sAroa+TLZ/DdfjmRqJarODMeB3XtACWF/B/iLJAUSxM= +github.com/gabrik/sdk-go v0.0.0-20200907095751-b96077661869/go.mod h1:ZKGOJ5VzMjQRL3NexJG6x/vz8i0YxyM07LB+jKHoLUI= +github.com/gabrik/sdk-go v0.0.0-20200907124239-c92be99b23f6 h1:RDZmkP65js/Q67YexpA+2Wm8cjFp7yLMHicFBNjx5sQ= +github.com/gabrik/sdk-go v0.0.0-20200907124239-c92be99b23f6/go.mod h1:ZKGOJ5VzMjQRL3NexJG6x/vz8i0YxyM07LB+jKHoLUI= +github.com/gabrik/sdk-go v0.0.0-20200928071657-3f32dfac6025 h1:ws5ll5Y6fql6/sr7RkRGoGmXY6VHq2mUNzy1uDBg7hU= +github.com/gabrik/sdk-go v0.0.0-20200928071657-3f32dfac6025/go.mod h1:ZKGOJ5VzMjQRL3NexJG6x/vz8i0YxyM07LB+jKHoLUI= +github.com/gabrik/sdk-go v0.0.0-20200928073103-80403da827b2 h1:nHOLJRij6phycrJaW/HqFNLT6CEOOtOfScjmlZIgOSs= +github.com/gabrik/sdk-go v0.0.0-20200928073103-80403da827b2/go.mod h1:ZKGOJ5VzMjQRL3NexJG6x/vz8i0YxyM07LB+jKHoLUI= +github.com/gabrik/sdk-go v0.0.0-20200928123823-c2e8e6e99d4c h1:mND6zl9xrwra/o/aMXFJPoi+0qqcRAwa1DkMzh4cR2k= +github.com/gabrik/sdk-go v0.0.0-20200928123823-c2e8e6e99d4c/go.mod h1:ZKGOJ5VzMjQRL3NexJG6x/vz8i0YxyM07LB+jKHoLUI= +github.com/gabrik/sdk-go v0.0.0-20200929064358-2ddea14f3a2d h1:TkdMGLVNTAfq9zzuwZrSQf8dTvMvzruQaI3HYp5jHc0= +github.com/gabrik/sdk-go v0.0.0-20200929064358-2ddea14f3a2d/go.mod h1:ZKGOJ5VzMjQRL3NexJG6x/vz8i0YxyM07LB+jKHoLUI= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= @@ -30,6 +47,7 @@ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -40,9 +58,12 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=