Skip to content

Commit 7efa31b

Browse files
authored
Add kpt command for package edit (#3064)
1 parent d32bf9a commit 7efa31b

File tree

6 files changed

+231
-4
lines changed

6 files changed

+231
-4
lines changed

commands/rpkgcmd.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"github.com/GoogleContainerTools/kpt/internal/cmdrpkgapprove"
2323
"github.com/GoogleContainerTools/kpt/internal/cmdrpkgclone"
2424
"github.com/GoogleContainerTools/kpt/internal/cmdrpkgdel"
25+
"github.com/GoogleContainerTools/kpt/internal/cmdrpkgedit"
2526
"github.com/GoogleContainerTools/kpt/internal/cmdrpkgget"
2627
"github.com/GoogleContainerTools/kpt/internal/cmdrpkginit"
2728
"github.com/GoogleContainerTools/kpt/internal/cmdrpkgpropose"
@@ -75,6 +76,7 @@ func NewRpkgCommand(ctx context.Context, version string) *cobra.Command {
7576
cmdrpkgapprove.NewCommand(ctx, kubeflags),
7677
cmdrpkgreject.NewCommand(ctx, kubeflags),
7778
cmdrpkgdel.NewCommand(ctx, kubeflags),
79+
cmdrpkgedit.NewCommand(ctx, kubeflags),
7880
)
7981

8082
return repo
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
commands:
2+
- args:
3+
- alpha
4+
- repo
5+
- register
6+
- --namespace=rpkg-edit
7+
- --name=git
8+
- http://git-server.test-git-namespace.svc.cluster.local:8080
9+
- args:
10+
- alpha
11+
- rpkg
12+
- clone
13+
- --namespace=rpkg-edit
14+
- https://github.com/platkrm/test-blueprints.git
15+
- --directory=basens
16+
- --ref=basens/v1
17+
- --repository=git
18+
- --revision=v0
19+
- basens-edit
20+
stdout: git-f1fbc2b72ee70b2f34e64c2630031d0560e6cf48 created
21+
- args:
22+
- alpha
23+
- rpkg
24+
- edit
25+
- --namespace=rpkg-edit
26+
- --repository=git
27+
- git-f1fbc2b72ee70b2f34e64c2630031d0560e6cf48
28+
- basens-new-edit
29+
stdout: git-85f4237aefaf996af6ce27fe0993d1ccb9a8c9ef created
30+
- args:
31+
- alpha
32+
- rpkg
33+
- pull
34+
- --namespace=rpkg-edit
35+
- git-85f4237aefaf996af6ce27fe0993d1ccb9a8c9ef
36+
stdout: |
37+
apiVersion: config.kubernetes.io/v1
38+
items:
39+
- apiVersion: kpt.dev/v1
40+
info:
41+
description: sample description
42+
kind: Kptfile
43+
metadata:
44+
annotations:
45+
config.kubernetes.io/index: "0"
46+
config.kubernetes.io/path: Kptfile
47+
internal.config.kubernetes.io/index: "0"
48+
internal.config.kubernetes.io/path: Kptfile
49+
name: basens-new-edit
50+
upstream:
51+
git:
52+
directory: basens
53+
ref: basens/v1
54+
repo: https://github.com/platkrm/test-blueprints.git
55+
type: git
56+
upstreamLock:
57+
git:
58+
commit: 67f29546028f0a48c6bbb08614934d0e070cdd3a
59+
directory: basens
60+
ref: basens/v1
61+
repo: https://github.com/platkrm/test-blueprints.git
62+
type: git
63+
- apiVersion: v1
64+
kind: Namespace
65+
metadata:
66+
annotations:
67+
config.kubernetes.io/index: "0"
68+
config.kubernetes.io/path: namespace.yaml
69+
internal.config.kubernetes.io/index: "0"
70+
internal.config.kubernetes.io/path: namespace.yaml
71+
name: example
72+
kind: ResourceList
73+
yaml: true

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.17
44

55
require (
6-
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20220419065917-49bc6c977530
6+
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20220426215627-4db5feb3a360
77
github.com/cpuguy83/go-md2man/v2 v2.0.1
88
github.com/go-errors/errors v1.4.2
99
github.com/google/go-cmp v0.5.7

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBp
7272
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
7373
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
7474
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
75-
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20220419065917-49bc6c977530 h1:fTWATexPCxotu/KoGF4wVWS9LbAnA8SVazGOnFXgyz0=
76-
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20220419065917-49bc6c977530/go.mod h1:51Vk7QZ+XUzHCvQBi7t9tiWqTXvy6T13cv/inUXJJ0s=
75+
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20220426215627-4db5feb3a360 h1:ajgEZIm6i8Eh2OYe91OdMk3cQdbxdPvtF5kG2+DqIYA=
76+
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20220426215627-4db5feb3a360/go.mod h1:51Vk7QZ+XUzHCvQBi7t9tiWqTXvy6T13cv/inUXJJ0s=
7777
github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU=
7878
github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E=
7979
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=

internal/cmdrpkgedit/command.go

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
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 cmdrpkgedit
16+
17+
import (
18+
"context"
19+
"fmt"
20+
21+
"github.com/GoogleContainerTools/kpt/internal/errors"
22+
"github.com/GoogleContainerTools/kpt/internal/util/porch"
23+
porchapi "github.com/GoogleContainerTools/kpt/porch/api/porch/v1alpha1"
24+
"github.com/spf13/cobra"
25+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26+
"k8s.io/cli-runtime/pkg/genericclioptions"
27+
"sigs.k8s.io/controller-runtime/pkg/client"
28+
)
29+
30+
const (
31+
command = "cmdrpkgedit"
32+
longMsg = `
33+
kpt alpha rpkg edit SOURCE_PACKAGE NAME
34+
35+
Creates a new copy of a source package in the target repository.
36+
37+
Args:
38+
39+
SOURCE_PACKAGE:
40+
Source package. Must be a package resource name: <repository>-<hash>
41+
42+
NAME:
43+
Target package revision name
44+
Example: package-name
45+
46+
Flags:
47+
48+
--repository
49+
Repository to which package will be copied.
50+
51+
--revision
52+
Revision of the downstream package.
53+
`
54+
)
55+
56+
func NewCommand(ctx context.Context, rcg *genericclioptions.ConfigFlags) *cobra.Command {
57+
return newRunner(ctx, rcg).Command
58+
}
59+
60+
func newRunner(ctx context.Context, rcg *genericclioptions.ConfigFlags) *runner {
61+
r := &runner{
62+
ctx: ctx,
63+
cfg: rcg,
64+
}
65+
c := &cobra.Command{
66+
Use: "edit SOURCE_PACKAGE NAME",
67+
Short: "Creates a copy of a source package in the target repository.",
68+
Long: longMsg,
69+
Example: "kpt alpha rpkg edit upstream-package-name target-package-name --repository target-repository --revision v1",
70+
PreRunE: r.preRunE,
71+
RunE: r.runE,
72+
Hidden: porch.HidePorchCommands,
73+
}
74+
r.Command = c
75+
76+
c.Flags().StringVar(&r.repository, "repository", "", "Repository in which the copy will be created.")
77+
c.Flags().StringVar(&r.revision, "revision", "v1", "Revision of the copied package.")
78+
79+
return r
80+
}
81+
82+
type runner struct {
83+
ctx context.Context
84+
cfg *genericclioptions.ConfigFlags
85+
client client.Client
86+
Command *cobra.Command
87+
88+
edit porchapi.PackageEditTaskSpec
89+
90+
repository string // Target repository
91+
revision string // Target package revision
92+
target string // Target package name
93+
}
94+
95+
func (r *runner) preRunE(cmd *cobra.Command, args []string) error {
96+
const op errors.Op = command + ".preRunE"
97+
client, err := porch.CreateClient(r.cfg)
98+
if err != nil {
99+
return errors.E(op, err)
100+
}
101+
r.client = client
102+
103+
if len(args) < 2 {
104+
return errors.E(op, fmt.Errorf("SOURCE_PACKAGE and NAME are required positional arguments; %d provided", len(args)))
105+
}
106+
107+
if r.repository == "" {
108+
return errors.E(op, fmt.Errorf("--repository is required to specify target repository"))
109+
}
110+
111+
source := args[0]
112+
target := args[1]
113+
114+
r.edit.Source = &porchapi.PackageRevisionRef{
115+
Name: source,
116+
}
117+
118+
r.target = target
119+
120+
return nil
121+
}
122+
123+
func (r *runner) runE(cmd *cobra.Command, args []string) error {
124+
const op errors.Op = command + ".runE"
125+
126+
pr := &porchapi.PackageRevision{
127+
TypeMeta: metav1.TypeMeta{
128+
Kind: "PackageRevision",
129+
APIVersion: porchapi.SchemeGroupVersion.Identifier(),
130+
},
131+
ObjectMeta: metav1.ObjectMeta{
132+
Namespace: *r.cfg.Namespace,
133+
},
134+
Spec: porchapi.PackageRevisionSpec{
135+
PackageName: r.target,
136+
Revision: r.revision,
137+
RepositoryName: r.repository,
138+
Tasks: []porchapi.Task{
139+
{
140+
Type: porchapi.TaskTypeEdit,
141+
Edit: &r.edit,
142+
},
143+
},
144+
},
145+
}
146+
if err := r.client.Create(r.ctx, pr); err != nil {
147+
return errors.E(op, err)
148+
}
149+
150+
fmt.Fprintf(cmd.OutOrStdout(), "%s created", pr.Name)
151+
return nil
152+
}

porch/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ require (
1616
github.com/GoogleContainerTools/kpt-functions-catalog/functions/go/set-namespace v0.3.4
1717
github.com/GoogleContainerTools/kpt-functions-catalog/functions/go/starlark v0.4.2
1818
github.com/GoogleContainerTools/kpt-functions-sdk/go/fn v0.0.0-20220412175831-2afd3aec6b69
19-
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20220419065917-49bc6c977530
19+
github.com/GoogleContainerTools/kpt/porch/api v0.0.0-20220426215627-4db5feb3a360
2020
github.com/bluekeyes/go-gitdiff v0.6.1
2121
github.com/go-git/go-billy/v5 v5.3.1
2222
github.com/go-git/go-git/v5 v5.4.3-0.20220408232334-4f916225cb2f

0 commit comments

Comments
 (0)