resources: Add NewNamedResource helper
This makes the common pattern of NewResource, SetName, easier. It also makes it less likely for you to forget to use SetName.
This commit is contained in:
@@ -57,15 +57,13 @@ func (obj *MyGAPI) Graph() (*pgraph.Graph, error) {
|
||||
return nil, fmt.Errorf("libmgmt: MyGAPI is not initialized")
|
||||
}
|
||||
|
||||
// TODO: this method of instantiation is deprecated, use: NewResource
|
||||
n1 := &resources.NoopRes{
|
||||
BaseRes: resources.BaseRes{
|
||||
Name: "noop1",
|
||||
Kind: "noop",
|
||||
MetaParams: resources.DefaultMetaParams,
|
||||
},
|
||||
n1, err := resources.NewNamedResource("noop", "noop1")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// NOTE: This is considered the legacy method to build graphs. Avoid
|
||||
// importing the legacy `yamlgraph` lib if possible for custom graphs.
|
||||
// we can still build a graph via the yaml method
|
||||
gc := &yamlgraph.GraphConfig{
|
||||
Graph: obj.Name,
|
||||
@@ -74,7 +72,7 @@ func (obj *MyGAPI) Graph() (*pgraph.Graph, error) {
|
||||
Exec: []*resources.ExecRes{},
|
||||
File: []*resources.FileRes{},
|
||||
Msg: []*resources.MsgRes{},
|
||||
Noop: []*resources.NoopRes{n1},
|
||||
Noop: []*resources.NoopRes{n1.(*resources.NoopRes)},
|
||||
Pkg: []*resources.PkgRes{},
|
||||
Svc: []*resources.SvcRes{},
|
||||
Timer: []*resources.TimerRes{},
|
||||
|
||||
@@ -65,11 +65,10 @@ func (obj *MyGAPI) Graph() (*pgraph.Graph, error) {
|
||||
}
|
||||
var vertex pgraph.Vertex
|
||||
for i := uint(0); i < obj.Count; i++ {
|
||||
n, err := resources.NewResource("noop")
|
||||
n, err := resources.NewNamedResource("noop", fmt.Sprintf("noop%d", i))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
n.SetName(fmt.Sprintf("noop%d", i))
|
||||
g.AddVertex(n)
|
||||
if i > 0 {
|
||||
g.AddEdge(vertex, n, &resources.Edge{Name: fmt.Sprintf("e%d", i)})
|
||||
|
||||
@@ -357,14 +357,12 @@ func loadResourcesHcl(list *ast.ObjectList) ([]*Resource, error) {
|
||||
}
|
||||
}
|
||||
|
||||
res, err := resources.NewResource(kind)
|
||||
res, err := resources.NewNamedResource(kind, name)
|
||||
if err != nil {
|
||||
log.Printf("hcl: unable to parse resource: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
res.SetName(name)
|
||||
|
||||
if err := hcl.DecodeObject(res, item.Val); err != nil {
|
||||
log.Printf("hcl: unable to decode body: %v", err)
|
||||
return nil, fmt.Errorf(
|
||||
|
||||
@@ -52,7 +52,8 @@ func RegisterResource(kind string, fn func() Res) {
|
||||
registeredResources[kind] = fn
|
||||
}
|
||||
|
||||
// NewResource returns an empty resource object from a registered kind.
|
||||
// NewResource returns an empty resource object from a registered kind. It
|
||||
// errors if the resource kind doesn't exist.
|
||||
func NewResource(kind string) (Res, error) {
|
||||
fn, ok := registeredResources[kind]
|
||||
if !ok {
|
||||
@@ -64,6 +65,21 @@ func NewResource(kind string) (Res, error) {
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// NewNamedResource returns an empty resource object from a registered kind. It
|
||||
// also sets the name. It is a wrapper around NewResource. It also errors if the
|
||||
// name is empty.
|
||||
func NewNamedResource(kind, name string) (Res, error) {
|
||||
if name == "" {
|
||||
return nil, fmt.Errorf("resource name is empty")
|
||||
}
|
||||
res, err := NewResource(kind)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res.SetName(name)
|
||||
return res, nil
|
||||
}
|
||||
|
||||
//go:generate stringer -type=ResState -output=resstate_stringer.go
|
||||
|
||||
// The ResState type represents the current activity state of each resource.
|
||||
|
||||
@@ -44,18 +44,12 @@ func TestSort0(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestSort1(t *testing.T) {
|
||||
r1, _ := NewResource("noop")
|
||||
r1.SetName("noop1")
|
||||
r2, _ := NewResource("noop")
|
||||
r2.SetName("noop2")
|
||||
r3, _ := NewResource("noop")
|
||||
r3.SetName("noop3")
|
||||
r4, _ := NewResource("noop")
|
||||
r4.SetName("noop4")
|
||||
r5, _ := NewResource("noop")
|
||||
r5.SetName("noop5")
|
||||
r6, _ := NewResource("noop")
|
||||
r6.SetName("noop6")
|
||||
r1, _ := NewNamedResource("noop", "noop1")
|
||||
r2, _ := NewNamedResource("noop", "noop2")
|
||||
r3, _ := NewNamedResource("noop", "noop3")
|
||||
r4, _ := NewNamedResource("noop", "noop4")
|
||||
r5, _ := NewNamedResource("noop", "noop5")
|
||||
r6, _ := NewNamedResource("noop", "noop6")
|
||||
|
||||
rs := []Res{r3, r2, r6, r1, r5, r4}
|
||||
s := Sort(rs)
|
||||
@@ -124,7 +118,11 @@ func TestMiscEncodeDecode2(t *testing.T) {
|
||||
var err error
|
||||
|
||||
// encode
|
||||
input, _ := NewResource("file")
|
||||
input, err := NewNamedResource("file", "file1")
|
||||
if err != nil {
|
||||
t.Errorf("Can't create: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
b64, err := ResToB64(input)
|
||||
if err != nil {
|
||||
|
||||
@@ -62,11 +62,10 @@ func (obj *MyGAPI) Graph() (*pgraph.Graph, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
n0, err := resources.NewResource("noop")
|
||||
n0, err := resources.NewNamedResource("noop", "noop1")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
n0.SetName("noop1")
|
||||
g.AddVertex(n0)
|
||||
|
||||
//g, err := config.NewGraphFromConfig(obj.data.Hostname, obj.data.World, obj.data.Noop)
|
||||
|
||||
@@ -69,28 +69,25 @@ func (obj *MyGAPI) Graph() (*pgraph.Graph, error) {
|
||||
}
|
||||
|
||||
if !obj.flipflop {
|
||||
n0, err := resources.NewResource("noop")
|
||||
n0, err := resources.NewNamedResource("noop", "noop0")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
n0.SetName("noop0")
|
||||
g.AddVertex(n0)
|
||||
|
||||
} else {
|
||||
// NOTE: these will get autogrouped
|
||||
n1, err := resources.NewResource("noop")
|
||||
n1, err := resources.NewNamedResource("noop", "noop1")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
n1.SetName("noop1")
|
||||
n1.Meta().AutoGroup = obj.autoGroup // enable or disable it
|
||||
g.AddVertex(n1)
|
||||
|
||||
n2, err := resources.NewResource("noop")
|
||||
n2, err := resources.NewNamedResource("noop", "noop2")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
n2.SetName("noop2")
|
||||
n2.Meta().AutoGroup = obj.autoGroup // enable or disable it
|
||||
g.AddVertex(n2)
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ rmdir "$tmpdir" # cleanup
|
||||
|
||||
if [[ -n "$failures" ]]; then
|
||||
echo 'FAIL'
|
||||
echo 'The following tests have failed:'
|
||||
echo "The following tests (in: ${linkto}) have failed:"
|
||||
echo -e "$failures"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user