Skip to content

Commit

Permalink
feat: add listener/cluster/route configdump support
Browse files Browse the repository at this point in the history
Signed-off-by: bitliu <bitliu@tencent.com>
  • Loading branch information
Xunzhuo committed Feb 28, 2023
1 parent 7a373cc commit ea07d35
Show file tree
Hide file tree
Showing 14 changed files with 424 additions and 2,654 deletions.
27 changes: 24 additions & 3 deletions internal/cmd/egctl/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ import (
"net/http"

"github.com/spf13/cobra"
"google.golang.org/protobuf/encoding/protojson"
"k8s.io/apimachinery/pkg/types"
cmdutil "k8s.io/kubectl/pkg/cmd/util"
"sigs.k8s.io/yaml"

"github.com/envoyproxy/gateway/internal/cmd/options"
kube "github.com/envoyproxy/gateway/internal/kubernetes"
adminv3 "github.com/envoyproxy/go-control-plane/envoy/admin/v3"
)

var (
Expand Down Expand Up @@ -111,7 +113,12 @@ func runAllConfig(c *cobra.Command, args []string) error {
}
defer fw.Stop()

out, err := extractConfigDump(fw, output)
configDump, err := extractConfigDump(fw)
if err != nil {
return err
}

out, err := marshalConfigDump(configDump, output)
if err != nil {
return err
}
Expand Down Expand Up @@ -142,8 +149,8 @@ func portForwarder(nn types.NamespacedName) (kube.PortForwarder, error) {
return fw, nil
}

func extractConfigDump(fw kube.PortForwarder, output string) ([]byte, error) {
out, err := configDumpRequest(fw.Address())
func marshalConfigDump(configDump *adminv3.ConfigDump, output string) ([]byte, error) {
out, err := protojson.Marshal(configDump)
if err != nil {
return nil, err
}
Expand All @@ -158,6 +165,20 @@ func extractConfigDump(fw kube.PortForwarder, output string) ([]byte, error) {
return out, nil
}

func extractConfigDump(fw kube.PortForwarder) (*adminv3.ConfigDump, error) {
out, err := configDumpRequest(fw.Address())
if err != nil {
return nil, err
}

configDump := &adminv3.ConfigDump{}
if err := protojson.Unmarshal(out, configDump); err != nil {
return nil, err
}

return configDump, nil
}

func configDumpRequest(address string) ([]byte, error) {
req, err := http.NewRequest("GET", fmt.Sprintf("http://%s/config_dump", address), nil)
if err != nil {
Expand Down
48 changes: 36 additions & 12 deletions internal/cmd/egctl/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,37 +71,61 @@ func (fw *fakePortForwarder) Address() string {
}

func TestExtractConfigDump(t *testing.T) {
fw, err := newFakePortForwarder(readConfig("in.json"))
input, err := readInputConfig("in.all.json")
assert.NoError(t, err)
fw, err := newFakePortForwarder(input)
assert.NoError(t, err)
err = fw.Start()
assert.NoError(t, err)

cases := []struct {
output string
expected string
output string
expected string
resourceType string
}{
{
output: "json",
expected: "out.json",
output: "json",
resourceType: string(AllEnvoyConfigType),
expected: "out.all.json",
},
{
output: "yaml",
expected: "out.yaml",
output: "yaml",
resourceType: string(AllEnvoyConfigType),
expected: "out.all.yaml",
},
}

for _, tc := range cases {
t.Run(tc.output, func(t *testing.T) {
got, err := extractConfigDump(fw, tc.output)
configDump, err := extractConfigDump(fw)
assert.NoError(t, err)
got, err := marshalConfigDump(configDump, tc.output)
assert.NoError(t, err)
out, err := readOutputConfig(tc.expected)
assert.NoError(t, err)
assert.Equal(t, string(readConfig(tc.expected)), string(got))
if tc.output == "yaml" {
assert.YAMLEq(t, string(out), string(got))
} else {
assert.JSONEq(t, string(out), string(got))
}
})
}

fw.Stop()
}

func readConfig(filename string) []byte {
b, _ := os.ReadFile(path.Join("testdata", "config", filename))
return b
func readInputConfig(filename string) ([]byte, error) {
b, err := os.ReadFile(path.Join("testdata", "config", "in", filename))
if err != nil {
return nil, err
}
return b, nil
}

func readOutputConfig(filename string) ([]byte, error) {
b, err := os.ReadFile(path.Join("testdata", "config", "out", filename))
if err != nil {
return nil, err
}
return b, nil
}
File renamed without changes.
Loading

0 comments on commit ea07d35

Please sign in to comment.