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