diff --git a/upup/pkg/fi/nodeup/cloudinit/cloud_init_target.go b/upup/pkg/fi/nodeup/cloudinit/cloud_init_target.go index ed220be7a3..a6ab1e8631 100644 --- a/upup/pkg/fi/nodeup/cloudinit/cloud_init_target.go +++ b/upup/pkg/fi/nodeup/cloudinit/cloud_init_target.go @@ -126,18 +126,6 @@ func (t *CloudInitTarget) Chown(path string, user, group string) { t.AddCommand(Always, "chown", user+":"+group, path) } -func stringSlicesEquals(l, r []string) bool { - if len(l) != len(r) { - return false - } - for i, v := range l { - if r[i] != v { - return false - } - } - return true -} - func (t *CloudInitTarget) AddCommand(addBehaviour AddBehaviour, args ...string) { switch addBehaviour { case Always: @@ -145,7 +133,7 @@ func (t *CloudInitTarget) AddCommand(addBehaviour AddBehaviour, args ...string) case Once: for _, c := range t.Config.RunCommmands { - if stringSlicesEquals(args, c) { + if utils.StringSlicesEqual(args, c) { glog.V(2).Infof("skipping pre-existing command because AddBehaviour=Once: %q", args) return } diff --git a/upup/pkg/fi/utils/equals.go b/upup/pkg/fi/utils/equals.go new file mode 100644 index 0000000000..3cbcdb3897 --- /dev/null +++ b/upup/pkg/fi/utils/equals.go @@ -0,0 +1,30 @@ +package utils + +func StringSlicesEqual(l, r []string) bool { + if len(l) != len(r) { + return false + } + for i, v := range l { + if r[i] != v { + return false + } + } + return true +} + +func StringSlicesEqualIgnoreOrder(l, r []string) bool { + if len(l) != len(r) { + return false + } + + lMap := map[string]bool{} + for _, lv := range l { + lMap[lv] = true + } + for _, rv := range r { + if !lMap[rv] { + return false + } + } + return true +}