Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AMF-1630: Add Flink Operation Group #3021

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions internal/iam/command_ipfilter.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ func newIpFilterCommand(cfg *config.Config, prerunner pcmd.PreRunner) *cobra.Com
return cmd
}

func printIpFilter(cmd *cobra.Command, ipFilter iamipfilteringv2.IamV2IpFilter, isSrEnabled bool) error {
func printIpFilter(cmd *cobra.Command, ipFilter iamipfilteringv2.IamV2IpFilter, isSrEnabled, isFlinkEnabled bool) error {
ipGroupIds := convertIpGroupsToIds(ipFilter.GetIpGroups())
slices.Sort(ipGroupIds)
table := output.NewTable(cmd)
Expand All @@ -55,7 +55,7 @@ func printIpFilter(cmd *cobra.Command, ipFilter iamipfilteringv2.IamV2IpFilter,
ResourceGroup: ipFilter.GetResourceGroup(),
IpGroups: ipGroupIds,
}
if isSrEnabled {
if isSrEnabled || isFlinkEnabled {
filterOut.ResourceScope = ipFilter.GetResourceScope()
if ipFilter.OperationGroups != nil {
sort.Strings(*ipFilter.OperationGroups)
Expand Down
21 changes: 15 additions & 6 deletions internal/iam/command_ipfilter_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ func (c *ipFilterCommand) newCreateCommand(cfg *config.Config) *cobra.Command {
RunE: c.create,
}
isSrEnabled := cfg.IsTest || (cfg.Context() != nil && featureflags.Manager.BoolVariation("auth.ip_filter.sr.cli.enabled", cfg.Context(), featureflags.GetCcloudLaunchDarklyClient(cfg.Context().PlatformName), true, false))
if isSrEnabled {
isFlinkEnabled := cfg.IsTest || (cfg.Context() != nil && featureflags.Manager.BoolVariation("auth.ip_filter.flink.cli.enabled", cfg.Context(), featureflags.GetCcloudLaunchDarklyClient(cfg.Context().PlatformName), true, false))
if isSrEnabled || isFlinkEnabled {
cmd.Example = examples.BuildExampleString(
examples.Example{
Text: `Create an IP filter named "demo-ip-filter" with operation group "management" and IP groups "ipg-12345" and "ipg-67890":`,
Expand All @@ -41,11 +42,18 @@ func (c *ipFilterCommand) newCreateCommand(cfg *config.Config) *cobra.Command {
},
)
}
pcmd.AddResourceGroupFlag(isSrEnabled, cmd)
pcmd.AddResourceGroupFlag(cmd, isSrEnabled, isFlinkEnabled)
cmd.Flags().StringSlice("ip-groups", []string{}, "A comma-separated list of IP group IDs.")
if isSrEnabled {
if isSrEnabled || isFlinkEnabled {
cmd.Flags().String("environment", "", "Id of the environment for which this filter applies. By default will apply to the organization only.")
cmd.Flags().StringSlice("operations", nil, fmt.Sprintf("A comma-separated list of operation groups: %s.", utils.ArrayToCommaDelimitedString([]string{"MANAGEMENT", "SCHEMA"}, "or")))
opGroups := []string{"MANAGEMENT"}
if isSrEnabled {
opGroups = append(opGroups, "SCHEMA")
}
if isFlinkEnabled {
opGroups = append(opGroups, "FLINK")
}
cmd.Flags().StringSlice("operations", nil, fmt.Sprintf("A comma-separated list of operation groups: %s.", utils.ArrayToCommaDelimitedString(opGroups, "or")))
cmd.Flags().Bool("no-public-networks", false, "Use in place of ip-groups to reference the no public networks IP Group.")
cmd.MarkFlagsMutuallyExclusive("ip-groups", "no-public-networks")
cmd.MarkFlagsMutuallyExclusive("resource-group", "operations")
Expand All @@ -71,7 +79,8 @@ func (c *ipFilterCommand) create(cmd *cobra.Command, args []string) error {
operationGroups := []string{}
ldClient := featureflags.GetCcloudLaunchDarklyClient(c.Context.PlatformName)
isSrEnabled := c.Config.IsTest || featureflags.Manager.BoolVariation("auth.ip_filter.sr.cli.enabled", c.Context, ldClient, true, false)
if isSrEnabled {
isFlinkEnabled := c.Config.IsTest || featureflags.Manager.BoolVariation("auth.ip_filter.flink.cli.enabled", c.Context, ldClient, true, false)
if isSrEnabled || isFlinkEnabled {
orgId := c.Context.GetCurrentOrganization()
environment, err := cmd.Flags().GetString("environment")
if err != nil {
Expand Down Expand Up @@ -136,5 +145,5 @@ func (c *ipFilterCommand) create(cmd *cobra.Command, args []string) error {
return err
}

return printIpFilter(cmd, filter, isSrEnabled)
return printIpFilter(cmd, filter, isSrEnabled, isFlinkEnabled)
}
3 changes: 2 additions & 1 deletion internal/iam/command_ipfilter_describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,6 @@ func (c *ipFilterCommand) describe(cmd *cobra.Command, args []string) error {
}
ldClient := featureflags.GetCcloudLaunchDarklyClient(c.Context.PlatformName)
isSrEnabled := c.Config.IsTest || featureflags.Manager.BoolVariation("auth.ip_filter.sr.cli.enabled", c.Context, ldClient, true, false)
return printIpFilter(cmd, filter, isSrEnabled)
isFlinkEnabled := c.Config.IsTest || featureflags.Manager.BoolVariation("auth.ip_filter.flink.cli.enabled", c.Context, ldClient, true, false)
return printIpFilter(cmd, filter, isSrEnabled, isFlinkEnabled)
}
9 changes: 6 additions & 3 deletions internal/iam/command_ipfilter_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ func (c *ipFilterCommand) newListCommand(cfg *config.Config) *cobra.Command {
Args: cobra.NoArgs,
RunE: c.list,
}
if cfg.IsTest || (cfg.Context() != nil && featureflags.Manager.BoolVariation("auth.ip_filter.sr.cli.enabled", cfg.Context(), featureflags.GetCcloudLaunchDarklyClient(cfg.Context().PlatformName), true, false)) {
isSrEnabled := cfg.IsTest || (cfg.Context() != nil && featureflags.Manager.BoolVariation("auth.ip_filter.sr.cli.enabled", cfg.Context(), featureflags.GetCcloudLaunchDarklyClient(cfg.Context().PlatformName), true, false))
isFlinkEnabled := cfg.IsTest || (cfg.Context() != nil && featureflags.Manager.BoolVariation("auth.ip_filter.flink.cli.enabled", cfg.Context(), featureflags.GetCcloudLaunchDarklyClient(cfg.Context().PlatformName), true, false))
if isSrEnabled || isFlinkEnabled {
cmd.Flags().String("environment", "", "Id of the environment for which this filter applies. By default will apply to the org only.")
cmd.Flags().Bool("include-parent-scopes", false, "Include organization scoped filters when listing filters in an environment.")
}
Expand All @@ -37,7 +39,8 @@ func (c *ipFilterCommand) list(cmd *cobra.Command, _ []string) error {
var ipFilters []iamipfilteringv2.IamV2IpFilter
ldClient := featureflags.GetCcloudLaunchDarklyClient(c.Context.PlatformName)
isSrEnabled := c.Config.IsTest || featureflags.Manager.BoolVariation("auth.ip_filter.sr.cli.enabled", c.Context, ldClient, true, false)
if isSrEnabled {
isFlinkEnabled := c.Config.IsTest || featureflags.Manager.BoolVariation("auth.ip_filter.flink.cli.enabled", c.Context, ldClient, true, false)
if isSrEnabled || isFlinkEnabled {
orgId := c.Context.GetCurrentOrganization()
environment, err := cmd.Flags().GetString("environment")
if err != nil {
Expand Down Expand Up @@ -74,7 +77,7 @@ func (c *ipFilterCommand) list(cmd *cobra.Command, _ []string) error {
ResourceGroup: filter.GetResourceGroup(),
IpGroups: convertIpGroupObjectsToIpGroupIds(filter),
}
if isSrEnabled {
if isSrEnabled || isFlinkEnabled {
filterOut.ResourceScope = filter.GetResourceScope()
if filter.OperationGroups != nil {
sort.Strings(*filter.OperationGroups)
Expand Down
21 changes: 15 additions & 6 deletions internal/iam/command_ipfilter_update.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,19 @@ func (c *ipFilterCommand) newUpdateCommand(cfg *config.Config) *cobra.Command {
RunE: c.update,
}
isSrEnabled := cfg.IsTest || (cfg.Context() != nil && featureflags.Manager.BoolVariation("auth.ip_filter.sr.cli.enabled", cfg.Context(), featureflags.GetCcloudLaunchDarklyClient(cfg.Context().PlatformName), true, false))
if isSrEnabled {
isFlinkEnabled := cfg.IsTest || (cfg.Context() != nil && featureflags.Manager.BoolVariation("auth.ip_filter.flink.cli.enabled", cfg.Context(), featureflags.GetCcloudLaunchDarklyClient(cfg.Context().PlatformName), true, false))
if isSrEnabled || isFlinkEnabled {
operationGroups := []string{}
if isSrEnabled {
operationGroups = append(operationGroups, "SCHEMA")
}
if isFlinkEnabled {
operationGroups = append(operationGroups, "FLINK")
}
cmd.Example = examples.BuildExampleString(
examples.Example{
Text: `Update the name and add an IP group and operation group to IP filter "ipf-abcde":`,
Code: `confluent iam ip-filter update ipf-abcde --name "New Filter Name" --add-ip-groups ipg-12345 --add-operation-groups SCHEMA`,
Code: fmt.Sprintf(`confluent iam ip-filter update ipf-abcde --name "New Filter Name" --add-ip-groups ipg-12345 --add-operation-groups %s`, strings.Join(operationGroups, ",")),
},
)
} else {
Expand All @@ -42,11 +50,11 @@ func (c *ipFilterCommand) newUpdateCommand(cfg *config.Config) *cobra.Command {
)
}
cmd.Flags().String("name", "", "Updated name of the IP filter.")
pcmd.AddResourceGroupFlag(isSrEnabled, cmd)
pcmd.AddResourceGroupFlag(cmd, isSrEnabled, isFlinkEnabled)

cmd.Flags().StringSlice("add-ip-groups", []string{}, "A comma-separated list of IP groups to add.")
cmd.Flags().StringSlice("remove-ip-groups", []string{}, "A comma-separated list of IP groups to remove.")
if isSrEnabled {
if isSrEnabled || isFlinkEnabled {
cmd.Flags().StringSlice("add-operation-groups", []string{}, "A comma-separated list of operation groups to add.")
cmd.Flags().StringSlice("remove-operation-groups", []string{}, "A comma-separated list of operation groups to remove.")
cmd.MarkFlagsOneRequired("name", "resource-group", "add-ip-groups", "remove-ip-groups", "add-operation-groups", "remove-operation-groups")
Expand Down Expand Up @@ -123,7 +131,8 @@ func (c *ipFilterCommand) update(cmd *cobra.Command, args []string) error {
updateIpFilter.IpGroups = &IpGroupIdObjects
ldClient := featureflags.GetCcloudLaunchDarklyClient(c.Context.PlatformName)
isSrEnabled := c.Config.IsTest || featureflags.Manager.BoolVariation("auth.ip_filter.sr.cli.enabled", c.Context, ldClient, true, false)
if isSrEnabled {
isFlinkEnabled := c.Config.IsTest || featureflags.Manager.BoolVariation("auth.ip_filter.flink.cli.enabled", c.Context, ldClient, true, false)
if isSrEnabled || isFlinkEnabled {
addOperationGroups, err := cmd.Flags().GetStringSlice("add-operation-groups")
if err != nil {
return err
Expand Down Expand Up @@ -165,5 +174,5 @@ func (c *ipFilterCommand) update(cmd *cobra.Command, args []string) error {
return err
}

return printIpFilter(cmd, filter, isSrEnabled)
return printIpFilter(cmd, filter, isSrEnabled, isFlinkEnabled)
}
4 changes: 2 additions & 2 deletions pkg/cmd/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -370,9 +370,9 @@ func AutocompleteIdentityPools(client *ccloudv2.Client, providerId string) []str
return suggestions
}

func AddResourceGroupFlag(isSrEnabled bool, cmd *cobra.Command) {
func AddResourceGroupFlag(cmd *cobra.Command, isSrEnabled, isFlinkEnabled bool) {
var arr []string = []string{"management"}
if isSrEnabled {
if isSrEnabled || isFlinkEnabled {
arr = append(arr, "multiple")
cmd.Flags().String("resource-group", "multiple", fmt.Sprintf("Name of resource group: %s.", utils.ArrayToCommaDelimitedString(arr, "or")))
} else {
Expand Down
2 changes: 1 addition & 1 deletion test/fixtures/output/iam/ip-filter/create-help.golden
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Flags:
--resource-group string Name of resource group: "management" or "multiple". (default "multiple")
--ip-groups strings A comma-separated list of IP group IDs.
--environment string Id of the environment for which this filter applies. By default will apply to the organization only.
--operations strings A comma-separated list of operation groups: "MANAGEMENT" or "SCHEMA".
--operations strings A comma-separated list of operation groups: "MANAGEMENT", "SCHEMA", or "FLINK".
--no-public-networks Use in place of ip-groups to reference the no public networks IP Group.
--context string CLI context name.
-o, --output string Specify the output format as "human", "json", or "yaml". (default "human")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
+------------------+-------------------------------------------+
| ID | ipf-34dq3 |
| Name | demo-ip-filter |
| Resource Group | multiple |
| IP Groups | ipg-12345, ipg-abcde |
| Operation Groups | FLINK, MANAGEMENT, SCHEMA |
| Resource Scope | crn://confluent.cloud/organization=org123 |
+------------------+-------------------------------------------+
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
+------------------+-------------------------------------------+
| ID | ipf-34dq3 |
| Name | demo-ip-filter |
| Resource Group | multiple |
| IP Groups | ipg-12345, ipg-abcde |
| Operation Groups | MANAGEMENT |
| Resource Scope | crn://confluent.cloud/organization=org123 |
+------------------+-------------------------------------------+
2 changes: 2 additions & 0 deletions test/iam_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,8 @@ func (s *CLITestSuite) TestIamIpFilter() {
{args: "iam ip-filter update ipf-34dq3 --add-ip-groups ipg-hjkil --remove-ip-groups ipg-fedbc", fixture: "iam/ip-filter/update-resource-remove-not-exist.golden"},
{args: "iam ip-filter update ipf-34dq5 --resource-group multiple --add-operation-groups SCHEMA", fixture: "iam/ip-filter/update-add-operation-group.golden"},
{args: "iam ip-filter update ipf-34dq4 --remove-operation-groups SCHEMA", fixture: "iam/ip-filter/update-remove-operation-group.golden"},
{args: "iam ip-filter update ipf-34dq4 --resource-group multiple --add-operation-groups FLINK", fixture: "iam/ip-filter/update-add-flink-operation-group.golden"},
{args: "iam ip-filter update ipf-34dq6 --remove-operation-groups SCHEMA,FLINK", fixture: "iam/ip-filter/update-remove-sr-and-flink-operation-group.golden"},
}

for _, test := range tests {
Expand Down
2 changes: 2 additions & 0 deletions test/test-server/iam_handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -636,6 +636,8 @@ func handleIamIpFilter(t *testing.T) http.HandlerFunc {
}
if filterId == "ipf-34dq4" {
ipFilter = buildIamIpFilter(ipFilterId, "demo-ip-filter", "multiple", []string{"ipg-12345", "ipg-abcde"}, "crn://confluent.cloud/organization=org123", []string{"MANAGEMENT", "SCHEMA"})
} else if filterId == "ipf-34dq6" {
ipFilter = buildIamIpFilter(ipFilterId, "demo-ip-filter", "multiple", []string{"ipg-12345", "ipg-abcde"}, "crn://confluent.cloud/organization=org123", []string{"MANAGEMENT", "SCHEMA", "FLINK"})
} else {
ipFilter = buildIamIpFilter(ipFilterId, "demo-ip-filter", "multiple", []string{"ipg-12345", "ipg-abcde"}, "crn://confluent.cloud/organization=org123", []string{"MANAGEMENT"})
}
Expand Down