diff --git a/pkg/agent/supportbundlecollection/support_bundle_controller.go b/pkg/agent/supportbundlecollection/support_bundle_controller.go index 72b410f97e7..160c236afdf 100644 --- a/pkg/agent/supportbundlecollection/support_bundle_controller.go +++ b/pkg/agent/supportbundlecollection/support_bundle_controller.go @@ -256,6 +256,9 @@ func (c *SupportBundleController) generateSupportBundle(supportBundle *cpv1b2.Su if err = agentDumper.DumpFlows(basedir); err != nil { return err } + if err = agentDumper.DumpGroups(basedir); err != nil { + return err + } if err = agentDumper.DumpNetworkPolicyResources(basedir); err != nil { return err } diff --git a/pkg/agent/supportbundlecollection/support_bundle_controller_test.go b/pkg/agent/supportbundlecollection/support_bundle_controller_test.go index 51a92767050..72b24d317bd 100644 --- a/pkg/agent/supportbundlecollection/support_bundle_controller_test.go +++ b/pkg/agent/supportbundlecollection/support_bundle_controller_test.go @@ -155,6 +155,13 @@ func TestSupportBundleCollectionAdd(t *testing.T) { agentDumper: &mockAgentDumper{dumpGoroutinePprofErr: fmt.Errorf("failed to dump goroutine Pprof")}, uploader: &testUploader{}, }, + { + name: "SupportBundleCollection failed to dump groups", + supportBundleCollection: generateSupportbundleCollection("supportBundle13", "sftp://10.220.175.92:22/root/supportbundle"), + expectedCompleted: false, + agentDumper: &mockAgentDumper{dumpGroupsErr: fmt.Errorf("failed to dump groups")}, + uploader: &testUploader{}, + }, } for _, tt := range testcases { @@ -225,6 +232,7 @@ func generateSupportbundleCollection(name string, url string) *cpv1b2.SupportBun type mockAgentDumper struct { dumpLogErr error dumpFlowsErr error + dumpGroupsErr error dumpHostNetworkInfoErr error dumpAgentInfoErr error dumpNetworkPolicyResourcesErr error @@ -242,6 +250,10 @@ func (d *mockAgentDumper) DumpFlows(basedir string) error { return d.dumpFlowsErr } +func (d *mockAgentDumper) DumpGroups(basedir string) error { + return d.dumpGroupsErr +} + func (d *mockAgentDumper) DumpHostNetworkInfo(basedir string) error { return d.dumpHostNetworkInfoErr } diff --git a/pkg/apiserver/registry/system/supportbundle/rest.go b/pkg/apiserver/registry/system/supportbundle/rest.go index ad1610ed22f..cf8ab1025ab 100644 --- a/pkg/apiserver/registry/system/supportbundle/rest.go +++ b/pkg/apiserver/registry/system/supportbundle/rest.go @@ -266,6 +266,7 @@ func (r *supportBundleREST) collectAgent(ctx context.Context, since string) (*sy dumper.DumpLog, dumper.DumpHostNetworkInfo, dumper.DumpFlows, + dumper.DumpGroups, dumper.DumpNetworkPolicyResources, dumper.DumpAgentInfo, dumper.DumpHeapPprof, diff --git a/pkg/apiserver/registry/system/supportbundle/rest_test.go b/pkg/apiserver/registry/system/supportbundle/rest_test.go index bedbd218ef0..7a0be31cf39 100644 --- a/pkg/apiserver/registry/system/supportbundle/rest_test.go +++ b/pkg/apiserver/registry/system/supportbundle/rest_test.go @@ -213,6 +213,10 @@ func (f *fakeAgentDumper) DumpFlows(basedir string) error { return f.returnErr } +func (f *fakeAgentDumper) DumpGroups(basedir string) error { + return f.returnErr +} + func (f *fakeAgentDumper) DumpHostNetworkInfo(basedir string) error { return f.returnErr } diff --git a/pkg/support/dump.go b/pkg/support/dump.go index 30a7230261d..31068b5dccb 100644 --- a/pkg/support/dump.go +++ b/pkg/support/dump.go @@ -43,6 +43,8 @@ import ( type AgentDumper interface { // DumpFlows should create files that contains flows under the basedir. DumpFlows(basedir string) error + // DumpGroups should create files that contains groups under the basedir + DumpGroups(basedir string) error // DumpHostNetworkInfo should create files that contains host network // information under the basedir. Host network information should include // links, routes, addresses and etc. @@ -330,6 +332,14 @@ func (d *agentDumper) DumpFlows(basedir string) error { return writeFile(d.fs, filepath.Join(basedir, "flows"), "flows", []byte(strings.Join(flows, "\n"))) } +func (d *agentDumper) DumpGroups(basedir string) error { + groups, err := d.ovsCtlClient.DumpGroups() + if err != nil { + return fmt.Errorf("error when dumping groups: %w", err) + } + return writeFile(d.fs, filepath.Join(basedir, "groups"), "groups", []byte(strings.Join(groups, "\n"))) +} + func (d *agentDumper) DumpHeapPprof(basedir string) error { return DumpHeapPprof(d.fs, basedir) }