Use iptables.InsertUnique() instead of iptables.Insert()
				
					
				
			This commit is contained in:
		| @@ -46,7 +46,7 @@ type fakeClient struct { | ||||
|  | ||||
| var _ Client = &fakeClient{} | ||||
|  | ||||
| func (f *fakeClient) Insert(table, chain string, pos int, spec ...string) error { | ||||
| func (f *fakeClient) InsertUnique(table, chain string, pos int, spec ...string) error { | ||||
| 	atomic.AddUint64(&f.calls, 1) | ||||
| 	exists, err := f.Exists(table, chain, spec...) | ||||
| 	if err != nil { | ||||
|   | ||||
| @@ -84,7 +84,7 @@ func GetProtocol(ip net.IP) Protocol { | ||||
| // Client represents any type that can administer iptables rules. | ||||
| type Client interface { | ||||
| 	AppendUnique(table string, chain string, rule ...string) error | ||||
| 	Insert(table string, chain string, pos int, rule ...string) error | ||||
| 	InsertUnique(table, chain string, pos int, rule ...string) error | ||||
| 	Delete(table string, chain string, rule ...string) error | ||||
| 	Exists(table string, chain string, rule ...string) (bool, error) | ||||
| 	List(table string, chain string) ([]string, error) | ||||
| @@ -129,16 +129,7 @@ func NewIPv6Rule(table, chain string, spec ...string) Rule { | ||||
| } | ||||
|  | ||||
| func (r *rule) Prepend(client Client) error { | ||||
| 	// TODO There's already a PR to implement InsertUnique() in go-iptables. Once that hopefully gets merged this should be replaced. | ||||
| 	// https://github.com/coreos/go-iptables/pull/92 | ||||
| 	exists, err := client.Exists(r.table, r.chain, r.spec...) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if exists { | ||||
| 		return nil | ||||
| 	} | ||||
| 	if err := client.Insert(r.table, r.chain, 1, r.spec...); err != nil { | ||||
| 	if err := client.InsertUnique(r.table, r.chain, 1, r.spec...); err != nil { | ||||
| 		return fmt.Errorf("failed to add iptables rule: %v", err) | ||||
| 	} | ||||
| 	return nil | ||||
|   | ||||
| @@ -51,13 +51,13 @@ func (m *metricsClientWrapper) AppendUnique(table string, chain string, rule ... | ||||
| 	return m.client.AppendUnique(table, chain, rule...) | ||||
| } | ||||
|  | ||||
| func (m *metricsClientWrapper) Insert(table string, chain string, pos int, rule ...string) error { | ||||
| func (m *metricsClientWrapper) InsertUnique(table, chain string, pos int, rule ...string) error { | ||||
| 	m.operationCounter.With(prometheus.Labels{ | ||||
| 		"operation": "Insert", | ||||
| 		"operation": "InsertUnique", | ||||
| 		"table":     table, | ||||
| 		"chain":     chain, | ||||
| 	}).Inc() | ||||
| 	return m.client.Insert(table, chain, pos, rule...) | ||||
| 	return m.client.InsertUnique(table, chain, pos, rule...) | ||||
| } | ||||
|  | ||||
| func (m *metricsClientWrapper) Delete(table string, chain string, rule ...string) error { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user