diff --git a/etchosts/etchosts.go b/etchosts/etchosts.go index 9095b48..466143b 100644 --- a/etchosts/etchosts.go +++ b/etchosts/etchosts.go @@ -68,6 +68,10 @@ func Build(path, IP, hostname, domainname string, extraContent []Record) error { // Add adds an arbitrary number of Records to an already existing /etc/hosts file func Add(path string, recs []Record) error { + if len(recs) == 0 { + return nil + } + f, err := os.Open(path) if err != nil { return err @@ -91,6 +95,10 @@ func Add(path string, recs []Record) error { // Delete deletes an arbitrary number of Records already existing in /etc/hosts file func Delete(path string, recs []Record) error { + if len(recs) == 0 { + return nil + } + old, err := ioutil.ReadFile(path) if err != nil { return err diff --git a/etchosts/etchosts_test.go b/etchosts/etchosts_test.go index ce17d57..6e6e8ad 100644 --- a/etchosts/etchosts_test.go +++ b/etchosts/etchosts_test.go @@ -135,6 +135,23 @@ func TestUpdate(t *testing.T) { } } +func TestAddEmpty(t *testing.T) { + file, err := ioutil.TempFile("", "") + if err != nil { + t.Fatal(err) + } + defer os.Remove(file.Name()) + + err = Build(file.Name(), "", "", "", nil) + if err != nil { + t.Fatal(err) + } + + if err := Add(file.Name(), []Record{}); err != nil { + t.Fatal(err) + } +} + func TestAdd(t *testing.T) { file, err := ioutil.TempFile("", "") if err != nil { @@ -166,6 +183,23 @@ func TestAdd(t *testing.T) { } } +func TestDeleteEmpty(t *testing.T) { + file, err := ioutil.TempFile("", "") + if err != nil { + t.Fatal(err) + } + defer os.Remove(file.Name()) + + err = Build(file.Name(), "", "", "", nil) + if err != nil { + t.Fatal(err) + } + + if err := Delete(file.Name(), []Record{}); err != nil { + t.Fatal(err) + } +} + func TestDelete(t *testing.T) { file, err := ioutil.TempFile("", "") if err != nil { diff --git a/network.go b/network.go index de1bbb6..e52f3bf 100644 --- a/network.go +++ b/network.go @@ -416,6 +416,11 @@ func (n *network) updateSvcRecord(ep *endpoint, isAdd bool) { } n.Unlock() + // If there are no records to add or delete then simply return here + if len(recs) == 0 { + return + } + var epList []*endpoint n.WalkEndpoints(func(e Endpoint) bool { cEp := e.(*endpoint)