Skip to content

Commit

Permalink
Get rid of word bundle and use package everywhere (#834)
Browse files Browse the repository at this point in the history
  • Loading branch information
alenkacz committed Sep 18, 2019
1 parent ab84e1d commit 12a4e7d
Show file tree
Hide file tree
Showing 31 changed files with 206 additions and 213 deletions.
2 changes: 1 addition & 1 deletion keps/0009-operator-toolkit.md
Expand Up @@ -85,7 +85,7 @@ These combine to form an operator responsible for the deployment, upgrading, and

### Operator Organization

An operator bundle is a folder that contains all of the manifests needed to create or extend a KUDO operator. In the most basic form, an operator bundle is structured in the following format:
An operator package is a folder that contains all of the manifests needed to create or extend a KUDO operator. In the most basic form, an operator bundle is structured in the following format:

```bash
.
Expand Down
20 changes: 0 additions & 20 deletions pkg/bundle/operator.go

This file was deleted.

115 changes: 0 additions & 115 deletions pkg/kudoctl/bundle/finder/bundle_finder.go

This file was deleted.

16 changes: 8 additions & 8 deletions pkg/kudoctl/cmd/install/install.go
Expand Up @@ -5,11 +5,11 @@ import (
"strings"

"github.com/kudobuilder/kudo/pkg/apis/kudo/v1alpha1"
"github.com/kudobuilder/kudo/pkg/kudoctl/bundle"
"github.com/kudobuilder/kudo/pkg/kudoctl/bundle/finder"
"github.com/kudobuilder/kudo/pkg/kudoctl/clog"
"github.com/kudobuilder/kudo/pkg/kudoctl/env"
"github.com/kudobuilder/kudo/pkg/kudoctl/http"
"github.com/kudobuilder/kudo/pkg/kudoctl/packages"
"github.com/kudobuilder/kudo/pkg/kudoctl/packages/finder"
"github.com/kudobuilder/kudo/pkg/kudoctl/util/kudo"
"github.com/kudobuilder/kudo/pkg/kudoctl/util/repo"

Expand Down Expand Up @@ -61,13 +61,13 @@ func validate(args []string, options *Options) error {
// - an operator name in the remote repository
// in that order. Should there exist a local folder e.g. `cassandra` it will take precedence
// over the remote repository package with the same name.
func GetPackageCRDs(name string, version string, repository repo.Repository) (*bundle.PackageCRDs, error) {
func GetPackageCRDs(name string, version string, repository repo.Repository) (*packages.PackageCRDs, error) {

// Local files/folder have priority
if _, err := os.Stat(name); err == nil {
clog.V(2).Printf("local operator discovered: %v", name)
f := finder.NewLocal()
b, err := f.GetBundle(name, version)
b, err := f.GetPackage(name, version)
if err != nil {
return nil, err
}
Expand All @@ -78,15 +78,15 @@ func GetPackageCRDs(name string, version string, repository repo.Repository) (*b
if http.IsValidURL(name) {
clog.V(3).Printf("operator using http protocol for %v", name)
f := finder.NewURL()
b, err := f.GetBundle(name, version)
b, err := f.GetPackage(name, version)
if err != nil {
return nil, err
}
return b.GetCRDs()
}

clog.V(3).Printf("no http discovered, looking for repository")
b, err := repository.GetBundle(name, version)
b, err := repository.GetPackage(name, version)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -118,7 +118,7 @@ func installOperator(operatorArgument string, options *Options, fs afero.Fs, set
return installCrds(crds, kc, options, settings)
}

func installCrds(crds *bundle.PackageCRDs, kc *kudo.Client, options *Options, settings *env.Settings) error {
func installCrds(crds *packages.PackageCRDs, kc *kudo.Client, options *Options, settings *env.Settings) error {
// PRE-INSTALLATION SETUP
operatorName := crds.Operator.ObjectMeta.Name
clog.V(3).Printf("operator name: %v", operatorName)
Expand Down Expand Up @@ -183,7 +183,7 @@ func installCrds(crds *bundle.PackageCRDs, kc *kudo.Client, options *Options, se
return nil
}

func validateCrds(crds *bundle.PackageCRDs, skipInstance bool) error {
func validateCrds(crds *packages.PackageCRDs, skipInstance bool) error {
if skipInstance {
// right now we are just validating parameters on instance, if we're not creating instance right now, there is nothing to validate
clog.V(3).Printf("skipping instance...")
Expand Down
4 changes: 2 additions & 2 deletions pkg/kudoctl/cmd/install/install_test.go
Expand Up @@ -4,8 +4,8 @@ import (
"fmt"
"testing"

"github.com/kudobuilder/kudo/pkg/kudoctl/bundle"
"github.com/kudobuilder/kudo/pkg/kudoctl/env"
"github.com/kudobuilder/kudo/pkg/kudoctl/packages"
util "github.com/kudobuilder/kudo/pkg/util/kudo"

"github.com/kudobuilder/kudo/pkg/apis/kudo/v1alpha1"
Expand Down Expand Up @@ -41,7 +41,7 @@ func newTestClient() *kudo.Client {
}

func TestParameterValidation_InstallCrds(t *testing.T) {
crds := bundle.PackageCRDs{
crds := packages.PackageCRDs{
Operator: &v1alpha1.Operator{
TypeMeta: metav1.TypeMeta{
APIVersion: "kudo.dev/v1alpha1",
Expand Down
4 changes: 2 additions & 2 deletions pkg/kudoctl/cmd/package.go
Expand Up @@ -4,7 +4,7 @@ import (
"fmt"
"io"

"github.com/kudobuilder/kudo/pkg/kudoctl/bundle"
"github.com/kudobuilder/kudo/pkg/kudoctl/packages"
"github.com/spf13/afero"
"github.com/spf13/cobra"
)
Expand Down Expand Up @@ -64,7 +64,7 @@ func validate(args []string) error {

// run returns the errors associated with cmd env
func (pkg *packageCmd) run() error {
tarfile, err := bundle.ToTarBundle(pkg.fs, pkg.path, pkg.destination, pkg.overwrite)
tarfile, err := packages.CreateTarball(pkg.fs, pkg.path, pkg.destination, pkg.overwrite)
if err == nil {
fmt.Fprintf(pkg.out, "Package created: %v\n", tarfile)
}
Expand Down
8 changes: 4 additions & 4 deletions pkg/kudoctl/cmd/package_test.go
Expand Up @@ -21,14 +21,14 @@ var packageCmdArgs = []struct {
{"valid operator", []string{"/opt/zk"}, ""}, // 4
}

func TestTableNewBundleCmd(t *testing.T) {
func TestTableNewPackageCmd(t *testing.T) {
fs := afero.NewMemMapFs()
testdir, _ := filepath.Abs("")
fs.Mkdir(testdir, 0777)
files.CopyOperatorToFs(fs, "../bundle/testdata/zk", "/opt")
files.CopyOperatorToFs(fs, "../packages/testdata/zk", "/opt")
for _, test := range packageCmdArgs {
newCmdBundle := newPackageCmd(fs, os.Stdout)
err := newCmdBundle.RunE(newCmdBundle, test.arg)
newCmd := newPackageCmd(fs, os.Stdout)
err := newCmd.RunE(newCmd, test.arg)
if err != nil {
assert.Equal(t, test.errorMessage, err.Error(), test.name)
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/kudoctl/cmd/repo_index_test.go
Expand Up @@ -47,7 +47,7 @@ func TestRepoIndexCmd_IndexCreation(t *testing.T) {
fs := afero.NewMemMapFs()
testdir, _ := filepath.Abs("")
fs.Mkdir(testdir, 0777)
files.CopyOperatorToFs(fs, "../bundle/testdata/zk.tgz", "/opt")
files.CopyOperatorToFs(fs, "../packages/testdata/zk.tgz", "/opt")

time, _ := time.Parse(time.RFC3339, "2019-10-25T00:00:00Z")
out := &bytes.Buffer{}
Expand Down
115 changes: 115 additions & 0 deletions pkg/kudoctl/packages/finder/package_finder.go
@@ -0,0 +1,115 @@
package finder

import (
"fmt"
"io"

"github.com/kudobuilder/kudo/pkg/kudoctl/http"
"github.com/kudobuilder/kudo/pkg/kudoctl/packages"
"github.com/spf13/afero"
)

// Finder is a packages finder and is any implementation which can find/discover a packages.
// Even Repos are finders. Local and URL Finders current do nothing with the version information.
type Finder interface {
GetPackage(name string, version string) (packages.Package, error)
}

// LocalFinder will find local operator packages: folders or tgz
type LocalFinder struct {
fs afero.Fs
}

// URLFinder will find an operator packages from a url
type URLFinder struct {
client http.Client
}

// Manager is the source of finder of operator packages.
type Manager struct {
local *LocalFinder
uri *URLFinder
}

// New creates an operator package finder for non-repository packages
func New() *Manager {
lf := NewLocal()
uf := NewURL()
return &Manager{
local: lf,
uri: uf,
}
}

// GetPackage provides a one stop to acquire any non-repo packages. We should refactor repo to be in the finder package and have manager manage it.
func (f *Manager) GetPackage(name string, version string) (packages.Package, error) {

// if local folder return the package
if _, err := f.local.fs.Stat(name); err == nil {
b, err := f.local.GetPackage(name, version)
if err != nil {
return nil, err
}
return b, nil
}

// if url return that package
if http.IsValidURL(name) {
b, err := f.uri.GetPackage(name, version)
if err != nil {
return nil, err
}
return b, nil
}

return nil, fmt.Errorf("finder: unable to find packages for %v", name)
}

// GetPackage provides a package for the url provided
func (f *URLFinder) GetPackage(name string, version string) (packages.Package, error) {
// check to see if name is url
if !http.IsValidURL(name) {
return nil, fmt.Errorf("finder: url %v invalid", name)
}
reader, err := f.getPackageByURL(name)
if err != nil {
return nil, err
}
return packages.NewPackageFromReader(reader), nil
}

func (f *URLFinder) getPackageByURL(url string) (io.Reader, error) {
resp, err := f.client.Get(url)
if err != nil {
return nil, fmt.Errorf("finder: unable to get get reader from url %v", url)
}

return resp, nil
}

// GetPackage provides a package for the local folder or tarball provided
func (f *LocalFinder) GetPackage(name string, version string) (packages.Package, error) {
// make sure file exists
_, err := f.fs.Stat(name)
if err != nil {
return nil, err
}
// order of discovery
// 1. tarball
// 2. file based
return packages.ReadPackage(f.fs, name)
}

// NewLocal creates a finder for local operator package
func NewLocal() *LocalFinder {
return &LocalFinder{fs: afero.NewOsFs()}
}

// NewURL creates an instance of a URLFinder
func NewURL() *URLFinder {
client := http.NewClient()

return &URLFinder{
client: *client,
}
}

0 comments on commit 12a4e7d

Please sign in to comment.