diff --git a/examples/lib/libmgmt1.go b/examples/lib/libmgmt1.go index e3452bc7..acb5fec0 100644 --- a/examples/lib/libmgmt1.go +++ b/examples/lib/libmgmt1.go @@ -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{}, diff --git a/examples/lib/libmgmt2.go b/examples/lib/libmgmt2.go index c8dfde0a..26f73b32 100644 --- a/examples/lib/libmgmt2.go +++ b/examples/lib/libmgmt2.go @@ -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)}) diff --git a/hcl/parse.go b/hcl/parse.go index 8f7b2b46..2f0e5844 100644 --- a/hcl/parse.go +++ b/hcl/parse.go @@ -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( diff --git a/resources/resources.go b/resources/resources.go index 338f4136..5256d487 100644 --- a/resources/resources.go +++ b/resources/resources.go @@ -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. diff --git a/resources/util_test.go b/resources/util_test.go index c10b30f8..71809808 100644 --- a/resources/util_test.go +++ b/resources/util_test.go @@ -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 { diff --git a/test/shell/libmgmt-change1.go b/test/shell/libmgmt-change1.go index 8668bc08..cf1a9372 100644 --- a/test/shell/libmgmt-change1.go +++ b/test/shell/libmgmt-change1.go @@ -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) diff --git a/test/shell/libmgmt-change2.go b/test/shell/libmgmt-change2.go index 00964552..cdfa3b08 100644 --- a/test/shell/libmgmt-change2.go +++ b/test/shell/libmgmt-change2.go @@ -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) } diff --git a/test/test-examples.sh b/test/test-examples.sh index da2fb1b8..299d9cda 100755 --- a/test/test-examples.sh +++ b/test/test-examples.sh @@ -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