Skip to content
Snippets Groups Projects
Commit 37f1b2c6 authored by Malte Bauch's avatar Malte Bauch
Browse files

commenting and moved ConvertStringToTypedValue into util

parent 630906db
No related branches found
No related tags found
1 merge request!225Draft: Resolve "A SetRequest to change a specific path of an OND only works for paths with string values"
Pipeline #90727 passed
This commit is part of merge request !225. Comments created here will be created in the context of that merge request.
......@@ -3,41 +3,34 @@ package nucleus
import (
"context"
"encoding/json"
"fmt"
"io"
"os"
"plugin"
"strconv"
"time"
"code.fbi.h-da.de/danet/gosdn/interfaces/change"
"code.fbi.h-da.de/danet/gosdn/interfaces/device"
"code.fbi.h-da.de/danet/gosdn/interfaces/networkdomain"
"code.fbi.h-da.de/danet/gosdn/interfaces/southbound"
"code.fbi.h-da.de/danet/gosdn/metrics"
"code.fbi.h-da.de/danet/gosdn/nucleus/errors"
"code.fbi.h-da.de/danet/gosdn/nucleus/types"
"code.fbi.h-da.de/danet/gosdn/nucleus/util"
"code.fbi.h-da.de/danet/gosdn/store"
"code.fbi.h-da.de/danet/yang-models/generated/openconfig"
cpb "code.fbi.h-da.de/danet/api/go/gosdn/csbi"
ppb "code.fbi.h-da.de/danet/api/go/gosdn/pnd"
spb "code.fbi.h-da.de/danet/api/go/gosdn/southbound"
tpb "code.fbi.h-da.de/danet/api/go/gosdn/transport"
"google.golang.org/protobuf/proto"
"code.fbi.h-da.de/danet/gosdn/interfaces/change"
"code.fbi.h-da.de/danet/gosdn/interfaces/device"
"code.fbi.h-da.de/danet/gosdn/interfaces/networkdomain"
"code.fbi.h-da.de/danet/gosdn/interfaces/southbound"
si "code.fbi.h-da.de/danet/gosdn/interfaces/store"
"code.fbi.h-da.de/danet/gosdn/nucleus/errors"
"code.fbi.h-da.de/danet/gosdn/store"
gpb "github.com/openconfig/gnmi/proto/gnmi"
gnmiv "github.com/openconfig/gnmi/value"
"github.com/openconfig/goyang/pkg/yang"
"github.com/google/uuid"
"github.com/openconfig/ygot/ygot"
"github.com/openconfig/ygot/ytypes"
"github.com/prometheus/client_golang/prometheus"
log "github.com/sirupsen/logrus"
"google.golang.org/protobuf/proto"
)
// NewPND creates a Principle Network Domain
......@@ -364,7 +357,10 @@ func (pnd *pndImplementation) ChangeOND(duid uuid.UUID, operation ppb.ApiOperati
return uuid.Nil, err
}
} else if entry.IsLeaf() {
typedValue, _ := convertStringToTypedValue(value[0], entry.Type)
typedValue, err := util.ConvertStringToTypedValue(value[0], entry.Type)
if err != nil {
return uuid.Nil, err
}
if err := ytypes.SetNode(d.SBI().Schema().RootSchema(), cpy, p, typedValue); err != nil {
return uuid.Nil, err
}
......@@ -389,90 +385,6 @@ func (pnd *pndImplementation) ChangeOND(duid uuid.UUID, operation ppb.ApiOperati
return ch.cuid, nil
}
func convertStringToTypedValue(s string, t *yang.YangType) (*gpb.TypedValue, error) {
// TODO: add more types
switch t.Kind {
case yang.Yint8:
parsedInt, err := strconv.ParseInt(s, 10, 8)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(int8(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Yint16:
parsedInt, err := strconv.ParseInt(s, 10, 16)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(int16(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Yint32:
parsedInt, err := strconv.ParseInt(s, 10, 32)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(int32(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Yuint8:
parsedInt, err := strconv.ParseUint(s, 10, 8)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(uint8(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Yuint16:
parsedInt, err := strconv.ParseUint(s, 10, 16)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(uint16(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Yuint32:
parsedInt, err := strconv.ParseUint(s, 10, 32)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(uint32(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Ybool:
parsedBool, err := strconv.ParseBool(s)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(parsedBool)
if err != nil {
return nil, err
}
return tv, nil
case yang.Ystring:
tv, err := gnmiv.FromScalar(s)
if err != nil {
return nil, err
}
return tv, nil
default:
return nil, fmt.Errorf("unsupported type to convert to TypedValue")
}
}
// nolint will be implemented in the near future
func handleRollbackError(id uuid.UUID, err error) {
log.Error(err)
......
package util
import (
"fmt"
gpb "github.com/openconfig/gnmi/proto/gnmi"
gnmiv "github.com/openconfig/gnmi/value"
"github.com/openconfig/goyang/pkg/yang"
"strconv"
)
// ConvertStringToTypedValue takes a value as string and a YangType. The
// returned value is the converted TypedValue of the given string based on the
// given YangType.
func ConvertStringToTypedValue(s string, t *yang.YangType) (*gpb.TypedValue, error) {
// TODO: add more types
switch t.Kind {
case yang.Yint8:
parsedInt, err := strconv.ParseInt(s, 10, 8)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(int8(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Yint16:
parsedInt, err := strconv.ParseInt(s, 10, 16)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(int16(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Yint32:
parsedInt, err := strconv.ParseInt(s, 10, 32)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(int32(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Yuint8:
parsedInt, err := strconv.ParseUint(s, 10, 8)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(uint8(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Yuint16:
parsedInt, err := strconv.ParseUint(s, 10, 16)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(uint16(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Yuint32:
parsedInt, err := strconv.ParseUint(s, 10, 32)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(uint32(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Ybool:
parsedBool, err := strconv.ParseBool(s)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(parsedBool)
if err != nil {
return nil, err
}
return tv, nil
case yang.Ystring:
tv, err := gnmiv.FromScalar(s)
if err != nil {
return nil, err
}
return tv, nil
default:
return nil, fmt.Errorf("unsupported type to convert to TypedValue")
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment