-
Notifications
You must be signed in to change notification settings - Fork 17
ocm command and some ctf cmd extension #59
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
// SPDX-FileCopyrightText: 2020 SAP SE or an SAP affiliate company and Gardener contributors. | ||
// | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package main | ||
|
||
import ( | ||
"context" | ||
"fmt" | ||
"os" | ||
|
||
"github.com/gardener/component-cli/cmd/ocm/app" | ||
) | ||
|
||
func main() { | ||
ctx := context.Background() | ||
defer ctx.Done() | ||
cmd := app.NewComponentsCliCommand(ctx) | ||
|
||
if err := cmd.Execute(); err != nil { | ||
fmt.Print(err) | ||
os.Exit(1) | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
// SPDX-FileCopyrightText: 2020 SAP SE or an SAP affiliate company and Gardener contributors. | ||
// | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package get | ||
|
||
import ( | ||
"context" | ||
"errors" | ||
"fmt" | ||
"os" | ||
|
||
cdvalidation "github.com/gardener/component-spec/bindings-go/apis/v2/validation" | ||
"github.com/go-logr/logr" | ||
"github.com/mandelsoft/vfs/pkg/osfs" | ||
"github.com/mandelsoft/vfs/pkg/vfs" | ||
"github.com/spf13/cobra" | ||
"github.com/spf13/pflag" | ||
|
||
"github.com/gardener/component-cli/pkg/componentarchive" | ||
"github.com/gardener/component-cli/pkg/logger" | ||
) | ||
|
||
// Options defines the options that are used to add resources to a component descriptor | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Docstring seems misleading to me |
||
type Options struct { | ||
componentarchive.BuilderOptions | ||
Property string | ||
} | ||
|
||
// NewGetCommand creates a command to add additional resources to a component descriptor. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Docstring seems misleading to me |
||
func NewGetCommand(ctx context.Context) *cobra.Command { | ||
opts := &Options{} | ||
cmd := &cobra.Command{ | ||
Use: "get COMPONENT_ARCHIVE_PATH [options...]", | ||
Args: cobra.MinimumNArgs(1), | ||
Short: "set some component descriptor properties", | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Doc seems misleading to me |
||
Long: ` | ||
the set command sets some component descriptor properies like the component name and/or version. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Doc seems misleading to me |
||
|
||
The component archive can be specified by the first argument, the flag "--archive" or as env var "COMPONENT_ARCHIVE_PATH". | ||
The component archive is expected to be a filesystem archive. | ||
`, | ||
Run: func(cmd *cobra.Command, args []string) { | ||
if err := opts.Complete(args); err != nil { | ||
fmt.Println(err.Error()) | ||
os.Exit(1) | ||
} | ||
|
||
if err := opts.Run(ctx, logger.Log, osfs.New()); err != nil { | ||
fmt.Println(err.Error()) | ||
os.Exit(1) | ||
} | ||
}, | ||
} | ||
|
||
opts.AddFlags(cmd.Flags()) | ||
|
||
return cmd | ||
} | ||
|
||
func (o *Options) Run(ctx context.Context, log logr.Logger, fs vfs.FileSystem) error { | ||
result, err := o.Get(ctx, log, fs) | ||
if err != nil { | ||
return err | ||
} | ||
fmt.Println(result) | ||
return nil | ||
} | ||
|
||
func (o *Options) Get(ctx context.Context, log logr.Logger, fs vfs.FileSystem) (string, error) { | ||
o.Modify = true | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why do you set the Modify flag to true if the command is only a "get"? |
||
archive, err := o.BuilderOptions.Build(fs) | ||
if err != nil { | ||
return "", err | ||
} | ||
|
||
if err := cdvalidation.Validate(archive.ComponentDescriptor); err != nil { | ||
return "", fmt.Errorf("invalid component descriptor: %w", err) | ||
} | ||
|
||
switch o.Property { | ||
case "name": | ||
return archive.ComponentDescriptor.Name, nil | ||
case "version": | ||
return archive.ComponentDescriptor.Version, nil | ||
} | ||
|
||
return "", nil | ||
} | ||
|
||
func (o *Options) Complete(args []string) error { | ||
|
||
if len(args) == 0 { | ||
return errors.New("at least a component archive path argument has to be defined") | ||
} | ||
o.BuilderOptions.ComponentArchivePath = args[0] | ||
o.BuilderOptions.Default() | ||
|
||
return o.validate() | ||
} | ||
|
||
func (o *Options) validate() error { | ||
if len(o.Property) == 0 { | ||
return errors.New("a property must be specified") | ||
} | ||
return o.BuilderOptions.Validate() | ||
} | ||
|
||
func (o *Options) AddFlags(fs *pflag.FlagSet) { | ||
fs.StringVar(&o.Property, "property", "", "name of the property (name or version)") | ||
|
||
o.BuilderOptions.AddFlags(fs) | ||
} |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,60 @@ | ||||||
// SPDX-FileCopyrightText: 2020 SAP SE or an SAP affiliate company and Gardener contributors. | ||||||
// | ||||||
// SPDX-License-Identifier: Apache-2.0 | ||||||
|
||||||
package get_test | ||||||
|
||||||
import ( | ||||||
"context" | ||||||
"testing" | ||||||
|
||||||
"github.com/go-logr/logr" | ||||||
"github.com/mandelsoft/vfs/pkg/layerfs" | ||||||
"github.com/mandelsoft/vfs/pkg/memoryfs" | ||||||
"github.com/mandelsoft/vfs/pkg/osfs" | ||||||
"github.com/mandelsoft/vfs/pkg/projectionfs" | ||||||
"github.com/mandelsoft/vfs/pkg/vfs" | ||||||
. "github.com/onsi/ginkgo" | ||||||
. "github.com/onsi/gomega" | ||||||
|
||||||
"github.com/gardener/component-cli/pkg/commands/componentarchive/get" | ||||||
"github.com/gardener/component-cli/pkg/componentarchive" | ||||||
) | ||||||
|
||||||
func TestConfig(t *testing.T) { | ||||||
RegisterFailHandler(Fail) | ||||||
RunSpecs(t, "Resources Test Suite") | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
} | ||||||
|
||||||
var _ = Describe("Set", func() { | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
var testdataFs vfs.FileSystem | ||||||
|
||||||
BeforeEach(func() { | ||||||
fs, err := projectionfs.New(osfs.New(), "./testdata") | ||||||
Expect(err).ToNot(HaveOccurred()) | ||||||
testdataFs = layerfs.New(memoryfs.New(), fs) | ||||||
}) | ||||||
|
||||||
It("should get name", func() { | ||||||
opts := &get.Options{ | ||||||
BuilderOptions: componentarchive.BuilderOptions{ | ||||||
ComponentArchivePath: "./00-component", | ||||||
}, | ||||||
Property: "name", | ||||||
} | ||||||
|
||||||
Expect(opts.Get(context.TODO(), logr.Discard(), testdataFs)).To(Equal("example.com/component")) | ||||||
}) | ||||||
|
||||||
It("should get version", func() { | ||||||
opts := &get.Options{ | ||||||
BuilderOptions: componentarchive.BuilderOptions{ | ||||||
ComponentArchivePath: "./00-component", | ||||||
}, | ||||||
Property: "version", | ||||||
} | ||||||
|
||||||
Expect(opts.Get(context.TODO(), logr.Discard(), testdataFs)).To(Equal("v0.0.0")) | ||||||
}) | ||||||
}) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
component: | ||
componentReferences: [] | ||
name: example.com/component | ||
provider: internal | ||
repositoryContexts: | ||
- baseUrl: eu.gcr.io/gardener-project/components/dev | ||
type: ociRegistry | ||
resources: | ||
- name: 'ubuntu' | ||
version: 'v0.0.1' | ||
type: 'ociImage' | ||
relation: 'external' | ||
access: | ||
type: 'ociRegistry' | ||
imageReference: 'ubuntu:18.0' | ||
sources: [] | ||
version: v0.0.0 | ||
meta: | ||
schemaVersion: v2 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we also rename the function from NewComponentsCliCommand() to NewOCMCliCommand() ?