Skip to content

Commit 6b7f4a6

Browse files
authored
new command 'kpt alpha rpkg delete' (#3745)
1 parent e710f1b commit 6b7f4a6

File tree

7 files changed

+187
-5
lines changed

7 files changed

+187
-5
lines changed
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
// Copyright 2022 Google LLC
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package proposedelete
16+
17+
import (
18+
"context"
19+
"fmt"
20+
"strings"
21+
22+
"github.com/GoogleContainerTools/kpt/internal/errors"
23+
"github.com/GoogleContainerTools/kpt/internal/util/porch"
24+
"github.com/GoogleContainerTools/kpt/porch/api/porch/v1alpha1"
25+
"github.com/spf13/cobra"
26+
"k8s.io/cli-runtime/pkg/genericclioptions"
27+
"sigs.k8s.io/controller-runtime/pkg/client"
28+
)
29+
30+
const (
31+
command = "cmdrpkgpropose-delete"
32+
)
33+
34+
func newRunner(ctx context.Context, rcg *genericclioptions.ConfigFlags) *runner {
35+
r := &runner{
36+
ctx: ctx,
37+
cfg: rcg,
38+
}
39+
c := &cobra.Command{
40+
Use: "propose-delete PACKAGE",
41+
Aliases: []string{"propose-del"},
42+
SuggestFor: []string{},
43+
PreRunE: r.preRunE,
44+
RunE: r.runE,
45+
Hidden: porch.HidePorchCommands,
46+
}
47+
r.Command = c
48+
49+
// Create flags
50+
51+
return r
52+
}
53+
54+
func NewCommand(ctx context.Context, rcg *genericclioptions.ConfigFlags) *cobra.Command {
55+
return newRunner(ctx, rcg).Command
56+
}
57+
58+
type runner struct {
59+
ctx context.Context
60+
cfg *genericclioptions.ConfigFlags
61+
client client.Client
62+
Command *cobra.Command
63+
}
64+
65+
func (r *runner) preRunE(cmd *cobra.Command, args []string) error {
66+
const op errors.Op = command + ".preRunE"
67+
68+
client, err := porch.CreateClientWithFlags(r.cfg)
69+
if err != nil {
70+
return errors.E(op, err)
71+
}
72+
r.client = client
73+
return nil
74+
}
75+
76+
func (r *runner) runE(_ *cobra.Command, args []string) error {
77+
const op errors.Op = command + ".runE"
78+
var messages []string
79+
namespace := *r.cfg.Namespace
80+
81+
for _, name := range args {
82+
pr := &v1alpha1.PackageRevision{}
83+
if err := r.client.Get(r.ctx, client.ObjectKey{
84+
Namespace: namespace,
85+
Name: name,
86+
}, pr); err != nil {
87+
return errors.E(op, err)
88+
}
89+
90+
switch pr.Spec.Lifecycle {
91+
case v1alpha1.PackageRevisionLifecyclePublished:
92+
// ok
93+
case v1alpha1.PackageRevisionLifecycleDeletionProposed:
94+
fmt.Fprintf(r.Command.OutOrStderr(), "%s is already proposed for deletion\n", name)
95+
continue
96+
default:
97+
msg := fmt.Sprintf("can only propose published packages for deletion; package %s is not published", name)
98+
messages = append(messages, msg)
99+
fmt.Fprintln(r.Command.ErrOrStderr(), msg)
100+
continue
101+
}
102+
103+
pr.Spec.Lifecycle = v1alpha1.PackageRevisionLifecycleDeletionProposed
104+
if err := r.client.Update(r.ctx, pr); err != nil {
105+
messages = append(messages, err.Error())
106+
fmt.Fprintf(r.Command.ErrOrStderr(), "%s failed (%s)\n", name, err)
107+
} else {
108+
fmt.Fprintf(r.Command.OutOrStderr(), "%s proposed for deletion\n", name)
109+
}
110+
}
111+
112+
if len(messages) > 0 {
113+
return errors.E(op, fmt.Errorf("errors:\n %s", strings.Join(messages, "\n ")))
114+
}
115+
116+
return nil
117+
}

commands/alpha/rpkg/rpkgcmd.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/GoogleContainerTools/kpt/commands/alpha/rpkg/get"
2727
initialization "github.com/GoogleContainerTools/kpt/commands/alpha/rpkg/init"
2828
"github.com/GoogleContainerTools/kpt/commands/alpha/rpkg/propose"
29+
"github.com/GoogleContainerTools/kpt/commands/alpha/rpkg/proposedelete"
2930
"github.com/GoogleContainerTools/kpt/commands/alpha/rpkg/pull"
3031
"github.com/GoogleContainerTools/kpt/commands/alpha/rpkg/push"
3132
"github.com/GoogleContainerTools/kpt/commands/alpha/rpkg/reject"
@@ -80,6 +81,7 @@ func NewCommand(ctx context.Context, version string) *cobra.Command {
8081
del.NewCommand(ctx, kubeflags),
8182
copy.NewCommand(ctx, kubeflags),
8283
update.NewCommand(ctx, kubeflags),
84+
proposedelete.NewCommand(ctx, kubeflags),
8385
)
8486

8587
return repo

commands/alpha/rpkg/update/discover.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ func (r *runner) getRepositories() (*configapi.RepositoryList, error) {
163163
func (r *runner) getUpstreamRevisions(repo configapi.Repository, upstreamPackageName string) []porchapi.PackageRevision {
164164
var result []porchapi.PackageRevision
165165
for _, pkgRev := range r.prs {
166-
if pkgRev.Spec.Lifecycle != porchapi.PackageRevisionLifecyclePublished {
166+
if !porchapi.LifecycleIsPublished(pkgRev.Spec.Lifecycle) {
167167
// only consider published packages
168168
continue
169169
}

e2e/testdata/porch/rpkg-lifecycle/config.yaml

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,17 @@ commands:
2323
- git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034
2424
stderr: |
2525
git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034 proposed
26+
- args:
27+
- alpha
28+
- rpkg
29+
- propose-delete
30+
- git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034
31+
- --namespace=rpkg-lifecycle
32+
exitCode: 1
33+
stderr: |
34+
can only propose published packages for deletion; package git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034 is not published
35+
Error: errors:
36+
can only propose published packages for deletion; package git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034 is not published
2637
- args:
2738
- alpha
2839
- rpkg
@@ -50,6 +61,17 @@ commands:
5061
stdout: |
5162
NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY
5263
git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034 lifecycle-package lifecycle false Draft git
64+
- args:
65+
- alpha
66+
- rpkg
67+
- propose-delete
68+
- git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034
69+
- --namespace=rpkg-lifecycle
70+
exitCode: 1
71+
stderr: |
72+
can only propose published packages for deletion; package git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034 is not published
73+
Error: errors:
74+
can only propose published packages for deletion; package git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034 is not published
5375
- args:
5476
- alpha
5577
- rpkg
@@ -95,3 +117,44 @@ commands:
95117
git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034 failed (admission webhook "packagerevdeletion.google.com" denied the request: failed to delete package revision "git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034": published PackageRevisions must be proposed for deletion by setting spec.lifecycle to 'DeletionProposed' prior to deletion)
96118
Error: errors:
97119
admission webhook "packagerevdeletion.google.com" denied the request: failed to delete package revision "git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034": published PackageRevisions must be proposed for deletion by setting spec.lifecycle to 'DeletionProposed' prior to deletion
120+
- args:
121+
- alpha
122+
- rpkg
123+
- propose-delete
124+
- git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034
125+
- --namespace=rpkg-lifecycle
126+
stderr: |
127+
git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034 proposed for deletion
128+
- args:
129+
- alpha
130+
- rpkg
131+
- propose-delete
132+
- git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034
133+
- --namespace=rpkg-lifecycle
134+
stderr: |
135+
git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034 is already proposed for deletion
136+
- args:
137+
- alpha
138+
- rpkg
139+
- get
140+
- git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034
141+
- --namespace=rpkg-lifecycle
142+
stdout: |
143+
NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY
144+
git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034 lifecycle-package lifecycle v1 true DeletionProposed git
145+
- args:
146+
- alpha
147+
- rpkg
148+
- delete
149+
- git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034
150+
- --namespace=rpkg-lifecycle
151+
stderr: |
152+
git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034 deleted
153+
- args:
154+
- alpha
155+
- rpkg
156+
- get
157+
- git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034
158+
- --namespace=rpkg-lifecycle
159+
stderr: "Error: the server could not find the requested resource (get packagerevisions.porch.kpt.dev git-017a8366a5e0d9b35ae6dc489d4d3f68046d6034) \n"
160+
exitCode: 1

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/GoogleContainerTools/kpt
33
go 1.18
44

55
require (
6-
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20221028161857-aa271f292cc0
6+
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20230121152246-dc44dbd18a33
77
github.com/bytecodealliance/wasmtime-go v0.39.0
88
github.com/cpuguy83/go-md2man/v2 v2.0.2
99
github.com/go-errors/errors v1.4.2

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
8787
github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
8888
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
8989
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs=
90-
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20221028161857-aa271f292cc0 h1:Nay/s1StXHUKyIxerpXb8o0hZUkRjrbteLO6ardI26Y=
91-
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20221028161857-aa271f292cc0/go.mod h1:ASrhnLAL4ahTuiUJyepqcpVRXIoRMJyDs8/eSxwhgZM=
90+
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20230121152246-dc44dbd18a33 h1:9M1bvq7hU/JTY4VVcqhCQT0eAa5HznrFaLAm2ldfe70=
91+
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20230121152246-dc44dbd18a33/go.mod h1:ASrhnLAL4ahTuiUJyepqcpVRXIoRMJyDs8/eSxwhgZM=
9292
github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
9393
github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
9494
github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=

porch/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ require (
1717
github.com/GoogleContainerTools/kpt-functions-catalog/functions/go/set-namespace v0.4.1
1818
github.com/GoogleContainerTools/kpt-functions-catalog/functions/go/starlark v0.4.3
1919
github.com/GoogleContainerTools/kpt-functions-sdk/go/fn v0.0.0-20220506190241-f85503febd54
20-
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20221028161857-aa271f292cc0
20+
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20230121152246-dc44dbd18a33
2121
github.com/bluekeyes/go-gitdiff v0.6.1
2222
github.com/go-git/go-billy/v5 v5.3.1
2323
github.com/go-git/go-git/v5 v5.4.3-0.20220408232334-4f916225cb2f

0 commit comments

Comments
 (0)