Skip to content

Commit

Permalink
updated with feedback and everything working
Browse files Browse the repository at this point in the history
Signed-off-by: Dhruv-J <dhruvj@vmware.com>
  • Loading branch information
Dhruv-J committed Jan 15, 2025
1 parent 0e6dbaf commit cdeca7e
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 44 deletions.
11 changes: 3 additions & 8 deletions pkg/agent/apiserver/handlers/fqdncache/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ package fqdncache

import (
"encoding/json"
"fmt"
"net/http"
"net/url"

Expand All @@ -28,10 +27,7 @@ import (

func HandleFunc(aq agentquerier.AgentQuerier) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
fqdnFilter, err := newFilterFromURLQuery(r.URL.Query())
if err != nil {
klog.ErrorS(err, "Failed to create filter from query")
}
fqdnFilter := newFilterFromURLQuery(r.URL.Query())
dnsEntryCache := aq.GetFqdnCache(fqdnFilter)
if err := json.NewEncoder(w).Encode(dnsEntryCache); err != nil {
http.Error(w, "Failed to encode response: "+err.Error(), http.StatusInternalServerError)
Expand All @@ -40,7 +36,6 @@ func HandleFunc(aq agentquerier.AgentQuerier) http.HandlerFunc {
}
}

func newFilterFromURLQuery(query url.Values) (querier.FQDNCacheFilter, error) {
fmt.Printf("query: %v\n", query)
return querier.FQDNCacheFilter{}, nil
func newFilterFromURLQuery(query url.Values) querier.FQDNCacheFilter {
return querier.FQDNCacheFilter{DomainName: query.Get("domain")}
}
18 changes: 17 additions & 1 deletion pkg/agent/controller/networkpolicy/networkpolicy_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ import (
"fmt"
"net"
"reflect"
"regexp"
"strings"
"sync"
"time"

Expand Down Expand Up @@ -540,9 +542,23 @@ func NewNetworkPolicyController(antreaClientGetter client.AntreaClientProvider,

func (c *Controller) GetFqdnCache(fqdnFilter querier.FQDNCacheFilter) []types.DnsCacheEntry {
cacheEntryList := []types.DnsCacheEntry{}
var pattern *regexp.Regexp
var err error
if fqdnFilter != (querier.FQDNCacheFilter{}) {
// have to convert human readable regex, i.e. *.example.com into regex that can be used
regexPattern := "^" + strings.ReplaceAll(regexp.QuoteMeta(fqdnFilter.DomainName), `\*`, ".*") + "$"
pattern, err = regexp.Compile(regexPattern)
if err != nil {
// this pattern will match no strings if there is an error with the regex formatting or usage with the user specified --domain flag
pattern = regexp.MustCompile(`a\A`)
}
} else {
// this pattern will match all strings if the filter is unset
pattern = regexp.MustCompile(`.*`)
}
for fqdn, dnsMeta := range c.fqdnController.dnsEntryCache {
for _, ipWithExpiration := range dnsMeta.responseIPs {
if fqdnFilter == (querier.FQDNCacheFilter{}) || fqdnFilter.DomainName == fqdn {
if fqdnFilter == (querier.FQDNCacheFilter{}) || pattern.MatchString(fqdn) {
entry := types.DnsCacheEntry{FqdnName: fqdn, IpAddress: ipWithExpiration.ip, ExpirationTime: ipWithExpiration.expirationTime}
cacheEntryList = append(cacheEntryList, entry)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -960,4 +960,6 @@ func TestGetFqdnCache(t *testing.T) {
}
returnedList := controller.GetFqdnCache(querier.FQDNCacheFilter{})
assert.ElementsMatch(t, expectedEntryList, returnedList)
returnedList = controller.GetFqdnCache(querier.FQDNCacheFilter{DomainName: "*.io"})
assert.ElementsMatch(t, []agenttypes.DnsCacheEntry{expectedEntryList[3]}, returnedList)
}
10 changes: 0 additions & 10 deletions pkg/antctl/transform/fqdncache/response.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,16 +35,6 @@ func Transform(reader io.Reader, single bool, opts map[string]string) (interface
if err != nil {
return nil, err
}
domain, exists := opts["domain"]
if exists {
var filteredResp []Response
for _, r := range resp {
if r.FqdnName == domain {
filteredResp = append(filteredResp, r)
}
}
resp = filteredResp
}
if len(resp) == 0 {
return "", nil
}
Expand Down
26 changes: 1 addition & 25 deletions pkg/antctl/transform/fqdncache/response_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,34 +63,10 @@ func TestTrasnform(t *testing.T) {
expectedError string
}{
{
name: "all",
name: "transform all entries",
fqdnList: fqdnList,
expectedResponse: []Response{{&fqdn1}, {&fqdn2}, {&fqdn3}, {&fqdn4}, {&fqdn5}},
},
{
name: "only google.com domain name",
opts: map[string]string{
"domain": "google.com",
},
fqdnList: fqdnList,
expectedResponse: []Response{{&fqdn1}, {&fqdn2}, {&fqdn3}},
},
{
name: "only antrea.io domain name",
opts: map[string]string{
"domain": "antrea.io",
},
fqdnList: fqdnList,
expectedResponse: []Response{{&fqdn5}},
},
{
name: "domain name that doesn't exist",
opts: map[string]string{
"domain": "bing.com",
},
fqdnList: fqdnList,
expectedResponse: []Response{},
},
}

for _, tt := range tests {
Expand Down

0 comments on commit cdeca7e

Please sign in to comment.