From b8707a8fefd9ae38e26f0422cbba573dd44c36fa Mon Sep 17 00:00:00 2001 From: Allison Richardet Date: Wed, 11 Jan 2017 11:03:12 -0600 Subject: [PATCH 1/2] add status method-raise level to will change when there are diffs --- resource/docker/container/container.go | 4 +--- resource/docker/image/image.go | 5 ++--- resource/docker/network/network.go | 4 +--- resource/docker/volume/volume.go | 4 +--- resource/file/fetch/fetch.go | 4 ++-- resource/group/group.go | 9 ++------- resource/lvm/fs/fs.go | 4 +--- resource/lvm/vg/vg.go | 5 ++--- resource/status.go | 8 ++++++++ resource/user/user.go | 12 +++--------- 10 files changed, 23 insertions(+), 36 deletions(-) diff --git a/resource/docker/container/container.go b/resource/docker/container/container.go index 0e581a3d4..9e3198ba3 100644 --- a/resource/docker/container/container.go +++ b/resource/docker/container/container.go @@ -119,9 +119,7 @@ func (c *Container) Check(context.Context, resource.Renderer) (resource.TaskStat status.AddDifference("name", "", c.Name, "") } - if resource.AnyChanges(status.Differences) { - status.Level = resource.StatusWillChange - } + status.RaiseLevelForDiffs() return status, nil } diff --git a/resource/docker/image/image.go b/resource/docker/image/image.go index 949acc63a..e47740163 100644 --- a/resource/docker/image/image.go +++ b/resource/docker/image/image.go @@ -51,9 +51,8 @@ func (i *Image) Check(context.Context, resource.Renderer) (resource.TaskStatus, } status.AddDifference("image", original, repoTag, "") - if resource.AnyChanges(status.Differences) { - status.Level = resource.StatusWillChange - } + status.RaiseLevelForDiffs() + return status, nil } diff --git a/resource/docker/network/network.go b/resource/docker/network/network.go index 99c86a33d..a4be30be0 100644 --- a/resource/docker/network/network.go +++ b/resource/docker/network/network.go @@ -108,9 +108,7 @@ func (n *Network) Check(context.Context, resource.Renderer) (resource.TaskStatus } } - if resource.AnyChanges(status.Differences) { - status.RaiseLevel(resource.StatusWillChange) - } + status.RaiseLevelForDiffs() return status, nil } diff --git a/resource/docker/volume/volume.go b/resource/docker/volume/volume.go index 6737ed972..4bff8a7ac 100644 --- a/resource/docker/volume/volume.go +++ b/resource/docker/volume/volume.go @@ -83,9 +83,7 @@ func (v *Volume) Check(context.Context, resource.Renderer) (resource.TaskStatus, // https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/inspect-a-volume } - if resource.AnyChanges(status.Differences) { - status.RaiseLevel(resource.StatusWillChange) - } + status.RaiseLevelForDiffs() return status, nil } diff --git a/resource/file/fetch/fetch.go b/resource/file/fetch/fetch.go index 73304a31c..e84e892b9 100644 --- a/resource/file/fetch/fetch.go +++ b/resource/file/fetch/fetch.go @@ -184,7 +184,6 @@ func (f *Fetch) DiffFile(status *resource.Status, hsh hash.Hash) (*resource.Stat } else if f.Force { status.AddDifference("checksum", actual, f.Hash, "") status.AddMessage("checksum mismatch") - status.RaiseLevel(resource.StatusWillChange) } else { status.AddMessage("checksum mismatch, use the \"force\" option to replace") status.RaiseLevel(resource.StatusCantChange) @@ -194,12 +193,13 @@ func (f *Fetch) DiffFile(status *resource.Status, hsh hash.Hash) (*resource.Stat if f.Force { status.AddDifference("destination", "", f.Destination, "") status.AddMessage("file exists, will fetch due to \"force\"") - status.RaiseLevel(resource.StatusWillChange) } else { status.AddMessage("file exists") } } + status.RaiseLevelForDiffs() + return status, nil } diff --git a/resource/group/group.go b/resource/group/group.go index a9ac89742..1e1240f91 100644 --- a/resource/group/group.go +++ b/resource/group/group.go @@ -115,7 +115,6 @@ func (g *Group) Check(context.Context, resource.Renderer) (resource.TaskStatus, case g.NewName == "": switch { case nameNotFound: - status.RaiseLevel(resource.StatusWillChange) status.Output = append(status.Output, "add group") status.AddDifference("group", string(StateAbsent), fmt.Sprintf("group %s", g.Name), "") case groupByName != nil: @@ -130,7 +129,6 @@ func (g *Group) Check(context.Context, resource.Renderer) (resource.TaskStatus, status.Output = append(status.Output, fmt.Sprintf("group modify: group %s does not exist", g.Name)) return status, errors.New("cannot modify group") case newNameNotFound: - status.RaiseLevel(resource.StatusWillChange) status.Output = append(status.Output, "modify group name") status.AddDifference("group", fmt.Sprintf("group %s", g.Name), fmt.Sprintf("group %s", g.NewName), "") case groupByNewName != nil: @@ -147,7 +145,6 @@ func (g *Group) Check(context.Context, resource.Renderer) (resource.TaskStatus, case g.NewName == "": switch { case nameNotFound && gidNotFound: - status.RaiseLevel(resource.StatusWillChange) status.Output = append(status.Output, "add group with gid") status.AddDifference("group", string(StateAbsent), fmt.Sprintf("group %s with gid %s", g.Name, g.GID), "") case nameNotFound: @@ -155,7 +152,6 @@ func (g *Group) Check(context.Context, resource.Renderer) (resource.TaskStatus, status.Output = append(status.Output, fmt.Sprintf("group add: gid %s already exists", g.GID)) return status, errors.New("cannot add group") case gidNotFound: - status.RaiseLevel(resource.StatusWillChange) status.Output = append(status.Output, "modify group gid") status.AddDifference("group", fmt.Sprintf("group %s with gid %s", g.Name, groupByName.Gid), fmt.Sprintf("group %s with gid %s", g.Name, g.GID), "") case groupByName != nil && groupByGid != nil && groupByName.Name != groupByGid.Name || groupByName.Gid != groupByGid.Gid: @@ -172,7 +168,6 @@ func (g *Group) Check(context.Context, resource.Renderer) (resource.TaskStatus, switch { case newNameNotFound && gidNotFound: - status.RaiseLevel(resource.StatusWillChange) status.Output = append(status.Output, "modify group name and gid") status.AddDifference("group", fmt.Sprintf("group %s with gid %s", g.Name, groupByName.Gid), fmt.Sprintf("group %s with gid %s", g.NewName, g.GID), "") case gidNotFound: @@ -195,7 +190,6 @@ func (g *Group) Check(context.Context, resource.Renderer) (resource.TaskStatus, case nameNotFound: status.Output = append(status.Output, fmt.Sprintf("group delete: group %s does not exist", g.Name)) case groupByName != nil: - status.RaiseLevel(resource.StatusWillChange) status.Output = append(status.Output, "delete group") status.AddDifference("group", fmt.Sprintf("group %s", g.Name), string(StateAbsent), "") } @@ -219,7 +213,6 @@ func (g *Group) Check(context.Context, resource.Renderer) (resource.TaskStatus, status.Output = append(status.Output, fmt.Sprintf("group delete: group %s and gid %s belong to different groups", g.Name, g.GID)) return status, errors.New("cannot delete group") case groupByName != nil && groupByGid != nil && *groupByName == *groupByGid: - status.RaiseLevel(resource.StatusWillChange) status.Output = append(status.Output, "delete group with gid") status.AddDifference("group", fmt.Sprintf("group %s with gid %s", g.Name, g.GID), string(StateAbsent), "") } @@ -229,6 +222,8 @@ func (g *Group) Check(context.Context, resource.Renderer) (resource.TaskStatus, return status, fmt.Errorf("group: unrecognized state %s", g.State) } + status.RaiseLevelForDiffs() + return status, nil } diff --git a/resource/lvm/fs/fs.go b/resource/lvm/fs/fs.go index 739351f53..e14c2ab86 100644 --- a/resource/lvm/fs/fs.go +++ b/resource/lvm/fs/fs.go @@ -80,9 +80,7 @@ func (r *resourceFS) Check(context.Context, resource.Renderer) (resource.TaskSta return nil, err } - if resource.AnyChanges(status.Differences) { - status.Level = resource.StatusWillChange - } + status.RaiseLevelForDiffs() return status, nil } diff --git a/resource/lvm/vg/vg.go b/resource/lvm/vg/vg.go index 22c2c549b..14efd4374 100644 --- a/resource/lvm/vg/vg.go +++ b/resource/lvm/vg/vg.go @@ -91,9 +91,8 @@ func (r *resourceVG) Check(context.Context, resource.Renderer) (resource.TaskSta status.AddDifference(r.name, "", strings.Join(r.devicesToAdd, ", "), "") } - if resource.AnyChanges(status.Differences) { - status.Level = resource.StatusWillChange - } + status.RaiseLevelForDiffs() + return status, nil } diff --git a/resource/status.go b/resource/status.go index a81f8ba3e..eb506d413 100644 --- a/resource/status.go +++ b/resource/status.go @@ -280,6 +280,14 @@ func (t *Status) RaiseLevel(level StatusLevel) { } } +// RaiseLevelForDiffs raises the status level to StatusWillChange if there are +// differences in the Differences map +func (t *Status) RaiseLevelForDiffs() { + if AnyChanges(t.Differences) { + t.RaiseLevel(StatusWillChange) + } +} + // Diff represents a difference type Diff interface { Original() string diff --git a/resource/user/user.go b/resource/user/user.go index f62997c72..ada8c1637 100644 --- a/resource/user/user.go +++ b/resource/user/user.go @@ -329,9 +329,7 @@ func (u *User) DiffAdd(status *resource.Status) (*AddUserOptions, error) { status.AddDifference("expiry", "", options.Expiry, "") } - if resource.AnyChanges(status.Differences) { - status.RaiseLevel(resource.StatusWillChange) - } + status.RaiseLevelForDiffs() return options, nil } @@ -362,9 +360,7 @@ func (u *User) DiffDel(status *resource.Status, userByName *user.User, nameNotFo } } - if resource.AnyChanges(status.Differences) { - status.RaiseLevel(resource.StatusWillChange) - } + status.RaiseLevelForDiffs() return nil } @@ -459,9 +455,7 @@ func (u *User) DiffMod(status *resource.Status, currUser *user.User) (*ModUserOp } } - if resource.AnyChanges(status.Differences) { - status.RaiseLevel(resource.StatusWillChange) - } + status.RaiseLevelForDiffs() return options, nil } From 018a1b61a490a1c578cbcde03f1499dac65424ac Mon Sep 17 00:00:00 2001 From: Allison Richardet Date: Wed, 11 Jan 2017 13:13:15 -0600 Subject: [PATCH 2/2] add RaiseLevelForDiffs to resource authors guide --- docs/content/resource-authors-guide.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/content/resource-authors-guide.md b/docs/content/resource-authors-guide.md index 0a9d3b28b..b083ded32 100644 --- a/docs/content/resource-authors-guide.md +++ b/docs/content/resource-authors-guide.md @@ -78,6 +78,8 @@ smoothly. Of particular note are: which allows you to add a message that will be displayed to the user 1. [`AddDifference`](https://godoc.org/github.com/asteris-llc/converge/resource#Status.AddDifference) which inserts a difference that will be displayed to the user +1. [`RaiseLevelForDiffs`](https://godoc.org/github.com/asteris-llc/converge/resource#Status.RaiseLevelForDiffs) + which raises the level to `StatusWillChange` if there are any differences `Status` has three fields: `Differences`, `Output`, and `Level`. They all have accurate documentation on their fields, which we will not repeat here. However, @@ -86,7 +88,8 @@ These two fields are how you control execution of your Apply method. They follow these rules: 1. If the level is equal to - [`resource.StatusWillChange`](https://godoc.org/github.com/asteris-llc/converge/resource#StatusLevel) + [`resource.StatusWillChange`](https://godoc.org/github.com/asteris-llc/converge/resource#StatusLevel), + [`resource.StatusMayChange`](https://godoc.org/github.com/asteris-llc/converge/resource#StatusLevel), or [`resource.StatusCantChange`](https://godoc.org/github.com/asteris-llc/converge/resource#StatusLevel), the Status will always show up as having changes