Add remove all to policy (#3792)
This commit is contained in:
parent
a5fea292a3
commit
232d798189
|
@ -19,6 +19,10 @@ CHANGELOG
|
|||
optional inputs than manually converting to pointer types.
|
||||
[#3806](https://github.com/pulumi/pulumi/pull/3806)
|
||||
|
||||
- Add ability to specify all versions when removing a Policy Pack.
|
||||
|
||||
- Breaking change to Policy command: Change enable command to use `pulumi policy enable <org-name>/<policy-pack-name> latest` instead of a `--latest` flag.
|
||||
|
||||
## 1.9.0 (2020-01-22)
|
||||
- Publish python types for PEP 561
|
||||
[#3704](https://github.com/pulumi/pulumi/pull/3704)
|
||||
|
|
|
@ -23,19 +23,21 @@ import (
|
|||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
const latestKeyword = "latest"
|
||||
|
||||
type policyEnableArgs struct {
|
||||
policyGroup string
|
||||
latest bool
|
||||
}
|
||||
|
||||
func newPolicyEnableCmd() *cobra.Command {
|
||||
args := policyEnableArgs{}
|
||||
|
||||
var cmd = &cobra.Command{
|
||||
Use: "enable <org-name>/<policy-pack-name> [version]",
|
||||
Args: cmdutil.RangeArgs(1, 2),
|
||||
Use: "enable <org-name>/<policy-pack-name> <latest|version>",
|
||||
Args: cmdutil.ExactArgs(2),
|
||||
Short: "Enable a Policy Pack for a Pulumi organization",
|
||||
Long: "Enable a Policy Pack for a Pulumi organization. Version or latest flag must be specified.",
|
||||
Long: "Enable a Policy Pack for a Pulumi organization. " +
|
||||
"Can specify latest to enable the latest version of the Policy Pack or a specific version number.",
|
||||
Run: cmdutil.RunFunc(func(cmd *cobra.Command, cliArgs []string) error {
|
||||
// Obtain current PolicyPack, tied to the Pulumi service backend.
|
||||
policyPack, err := requirePolicyPack(cliArgs[0])
|
||||
|
@ -43,17 +45,9 @@ func newPolicyEnableCmd() *cobra.Command {
|
|||
return err
|
||||
}
|
||||
|
||||
// Make sure that a version or latest is specified. Having both or neither
|
||||
// specified would make this an ambiguous request.
|
||||
if len(cliArgs) < 2 && !args.latest {
|
||||
return errors.New("must specify a version or the --latest flag")
|
||||
} else if len(cliArgs) == 2 && args.latest {
|
||||
return errors.New("cannot specify both a version and the --latest flag")
|
||||
}
|
||||
|
||||
// Parse version if it's specified.
|
||||
var version *int
|
||||
if len(cliArgs) > 1 {
|
||||
if cliArgs[1] != latestKeyword {
|
||||
v, err := strconv.Atoi(cliArgs[1])
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "Could not parse version (should be an integer)")
|
||||
|
@ -71,8 +65,5 @@ func newPolicyEnableCmd() *cobra.Command {
|
|||
&args.policyGroup, "policy-group", "",
|
||||
"The Policy Group for which the Policy Pack will be enabled; if not specified, the default Policy Group is used")
|
||||
|
||||
cmd.PersistentFlags().BoolVarP(
|
||||
&args.latest, "latest", "l", false, "Enable the latest version of the Policy Pack")
|
||||
|
||||
return cmd
|
||||
}
|
||||
|
|
|
@ -23,9 +23,12 @@ import (
|
|||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
const allKeyword = "all"
|
||||
|
||||
func newPolicyRmCmd() *cobra.Command {
|
||||
|
||||
var cmd = &cobra.Command{
|
||||
Use: "rm <org-name>/<policy-pack-name> <version>",
|
||||
Use: "rm <org-name>/<policy-pack-name> <all|version>",
|
||||
Args: cmdutil.ExactArgs(2),
|
||||
Short: "Removes a Policy Pack from a Pulumi organization",
|
||||
Long: "Removes a Policy Pack from a Pulumi organization. " +
|
||||
|
@ -37,14 +40,18 @@ func newPolicyRmCmd() *cobra.Command {
|
|||
return err
|
||||
}
|
||||
|
||||
version, err := strconv.Atoi(cliArgs[1])
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "Could not parse version (should be an integer)")
|
||||
var version *int
|
||||
if cliArgs[1] != allKeyword {
|
||||
v, err := strconv.Atoi(cliArgs[1])
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "Could not parse version (should be an integer)")
|
||||
}
|
||||
version = &v
|
||||
}
|
||||
|
||||
// Attempt to remove the Policy Pack.
|
||||
return policyPack.Remove(commandContext(), backend.PolicyPackOperation{
|
||||
Version: &version, Scopes: cancellationScopes})
|
||||
Version: version, Scopes: cancellationScopes})
|
||||
}),
|
||||
}
|
||||
|
||||
|
|
|
@ -122,8 +122,14 @@ func updatePolicyGroupPath(orgName, policyGroup string) string {
|
|||
"/api/orgs/%s/policygroups/%s", orgName, policyGroup)
|
||||
}
|
||||
|
||||
// deletePolicyPackPath returns the path for an API call to the Pulumi service to delete
|
||||
// all versions of a Policy Pack from a Pulumi organization.
|
||||
func deletePolicyPackPath(orgName, policyPackName string) string {
|
||||
return fmt.Sprintf("/api/orgs/%s/policypacks/%s", orgName, policyPackName)
|
||||
}
|
||||
|
||||
// deletePolicyPackVersionPath returns the path for an API call to the Pulumi service to delete
|
||||
// a Policy Pack from a Pulumi organization.
|
||||
// a version of a Policy Pack from a Pulumi organization.
|
||||
func deletePolicyPackVersionPath(orgName, policyPackName string, version int) string {
|
||||
return fmt.Sprintf(
|
||||
"/api/orgs/%s/policypacks/%s/versions/%d", orgName, policyPackName, version)
|
||||
|
@ -625,8 +631,19 @@ func (pc *Client) DisablePolicyPack(ctx context.Context, orgName string, policyG
|
|||
return nil
|
||||
}
|
||||
|
||||
// RemovePolicyPack removes a `PolicyPack` from the Pulumi organization.
|
||||
func (pc *Client) RemovePolicyPack(ctx context.Context, orgName string,
|
||||
// RemovePolicyPack removes all versions of a `PolicyPack` from the Pulumi organization.
|
||||
func (pc *Client) RemovePolicyPack(ctx context.Context, orgName string, policyPackName string) error {
|
||||
path := deletePolicyPackPath(orgName, policyPackName)
|
||||
err := pc.restCall(ctx, http.MethodDelete, path, nil, nil, nil)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "Request to remove policy pack failed")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// RemovePolicyPackByVersion removes a specific version of a `PolicyPack` from
|
||||
// the Pulumi organization.
|
||||
func (pc *Client) RemovePolicyPackByVersion(ctx context.Context, orgName string,
|
||||
policyPackName string, version int) error {
|
||||
|
||||
path := deletePolicyPackVersionPath(orgName, policyPackName, version)
|
||||
|
|
|
@ -184,9 +184,9 @@ func (pack *cloudPolicyPack) Disable(ctx context.Context, policyGroup string, op
|
|||
|
||||
func (pack *cloudPolicyPack) Remove(ctx context.Context, op backend.PolicyPackOperation) error {
|
||||
if op.Version == nil {
|
||||
return errors.New("remove requires the version be specified")
|
||||
return pack.cl.RemovePolicyPack(ctx, pack.ref.orgName, string(pack.ref.name))
|
||||
}
|
||||
return pack.cl.RemovePolicyPack(ctx, pack.ref.orgName, string(pack.ref.name), *op.Version)
|
||||
return pack.cl.RemovePolicyPackByVersion(ctx, pack.ref.orgName, string(pack.ref.name), *op.Version)
|
||||
}
|
||||
|
||||
const npmPackageDir = "package"
|
||||
|
|
|
@ -35,6 +35,9 @@ func TestPolicy(t *testing.T) {
|
|||
e.ImportDirectory("test_policy_pack")
|
||||
e.RunCommand("yarn", "install")
|
||||
os.Setenv("TEST_POLICY_PACK", policyPackName)
|
||||
|
||||
// Publish the Policy Pack twice.
|
||||
e.RunCommand("pulumi", "policy", "publish", orgName)
|
||||
e.RunCommand("pulumi", "policy", "publish", orgName)
|
||||
|
||||
// Check the policy ls commands.
|
||||
|
@ -51,10 +54,11 @@ func TestPolicy(t *testing.T) {
|
|||
e.RunCommand("pulumi", "policy", "disable", fmt.Sprintf("%s/%s", orgName, policyPackName), "--version=1")
|
||||
|
||||
// Enable and Disable without specifying the version number.
|
||||
e.RunCommand("pulumi", "policy", "enable", fmt.Sprintf("%s/%s", orgName, policyPackName), "--latest=true")
|
||||
e.RunCommand("pulumi", "policy", "enable", fmt.Sprintf("%s/%s", orgName, policyPackName), "latest")
|
||||
e.RunCommand("pulumi", "policy", "disable", fmt.Sprintf("%s/%s", orgName, policyPackName))
|
||||
|
||||
e.RunCommand("pulumi", "policy", "rm", fmt.Sprintf("%s/%s", orgName, policyPackName), "1")
|
||||
e.RunCommand("pulumi", "policy", "rm", fmt.Sprintf("%s/%s", orgName, policyPackName), "all")
|
||||
}
|
||||
|
||||
type policyPacksJSON struct {
|
||||
|
|
Loading…
Reference in a new issue