Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ container-codegen:
docker cp temp-codegen:/codegen/pkg/api/. ./pkg/api
docker rm temp-codegen

generate-fakes:
go install -mod=vendor ./vendor/github.com/maxbrunsfeld/counterfeiter/v6
go generate ./...

clean:
@rm -rf ./bin

111 changes: 111 additions & 0 deletions cmd/opm/index/add.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package index

import (
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"

"github.com/operator-framework/operator-registry/pkg/lib/indexer"
)

func newIndexAddCmd() *cobra.Command {
indexCmd := &cobra.Command{
Use: "add",
Short: "add an operator bundle to an index",
Long: `add an operator bundle to an index`,

PreRunE: func(cmd *cobra.Command, args []string) error {
if debug, _ := cmd.Flags().GetBool("debug"); debug {
logrus.SetLevel(logrus.DebugLevel)
}
return nil
},

RunE: runIndexAddCmdFunc,
}

indexCmd.Flags().Bool("debug", false, "enable debug logging")
indexCmd.Flags().Bool("generate", false, "if enabled, just creates the dockerfile and saves it to local disk")
indexCmd.Flags().StringP("out-dockerfile", "d", "", "if generating the dockerfile, this flag is used to (optionally) specify a dockerfile name")
indexCmd.Flags().StringP("from-index", "f", "", "previous index to add to")
indexCmd.Flags().StringSliceP("bundles", "b", nil, "comma separated list of bundles to add")
if err := indexCmd.MarkFlagRequired("bundles"); err != nil {
logrus.Panic("Failed to set required `bundles` flag for `index add`")
}
indexCmd.Flags().StringP("binary-image", "i", "", "container image for on-image `opm` command")
indexCmd.Flags().StringP("container-tool", "c", "podman", "tool to interact with container images (save, build, etc.). One of: [docker, podman]")
indexCmd.Flags().StringP("tag", "t", "", "custom tag for container image being built")
indexCmd.Flags().Bool("permissive", false, "allow registry load errors")

if err := indexCmd.Flags().MarkHidden("debug"); err != nil {
logrus.Panic(err.Error())
}

return indexCmd

}

func runIndexAddCmdFunc(cmd *cobra.Command, args []string) error {
generate, err := cmd.Flags().GetBool("generate")
if err != nil {
return err
}

outDockerfile, err := cmd.Flags().GetString("out-dockerfile")
if err != nil {
return err
}

fromIndex, err := cmd.Flags().GetString("from-index")
if err != nil {
return err
}

bundles, err := cmd.Flags().GetStringSlice("bundles")
if err != nil {
return err
}

binaryImage, err := cmd.Flags().GetString("binary-image")
if err != nil {
return err
}

containerTool, err := cmd.Flags().GetString("container-tool")
if err != nil {
return err
}

tag, err := cmd.Flags().GetString("tag")
if err != nil {
return err
}


permissive, err := cmd.Flags().GetBool("permissive")
if err != nil {
return err
}

logger := logrus.WithFields(logrus.Fields{"bundles": bundles})

logger.Info("building the index")

indexAdder := indexer.NewIndexAdder(containerTool, logger)

request := indexer.AddToIndexRequest{
Generate: generate,
FromIndex: fromIndex,
BinarySourceImage: binaryImage,
OutDockerfile: outDockerfile,
Tag: tag,
Bundles: bundles,
Permissive: permissive,
}

err = indexAdder.AddToIndex(request)
if err != nil {
return err
}

return nil
}
27 changes: 27 additions & 0 deletions cmd/opm/index/cmd.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package index

import (
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)

// NewOpmIndexCmd returns the opm index command
func NewOpmIndexCmd() *cobra.Command {
rootCmd := &cobra.Command{
Use: "index",
Short: "generate operator index container images",
Long: `generate operator index container images from preexisting operator bundles`,

PreRunE: func(cmd *cobra.Command, args []string) error {
if debug, _ := cmd.Flags().GetBool("debug"); debug {
logrus.SetLevel(logrus.DebugLevel)
}
return nil
},
}

rootCmd.AddCommand(newIndexAddCmd())
rootCmd.AddCommand(newIndexDeleteCmd())

return rootCmd
}
113 changes: 113 additions & 0 deletions cmd/opm/index/delete.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
package index

import (
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"

"github.com/operator-framework/operator-registry/pkg/lib/indexer"
)

func newIndexDeleteCmd() *cobra.Command {
indexCmd := &cobra.Command{
Use: "rm",
Short: "delete an entire operator from an index",
Long: `delete an entire operator from an index`,

PreRunE: func(cmd *cobra.Command, args []string) error {
if debug, _ := cmd.Flags().GetBool("debug"); debug {
logrus.SetLevel(logrus.DebugLevel)
}
return nil
},

RunE: runIndexDeleteCmdFunc,
}

indexCmd.Flags().Bool("debug", false, "enable debug logging")
indexCmd.Flags().Bool("generate", false, "if enabled, just creates the dockerfile and saves it to local disk")
indexCmd.Flags().StringP("out-dockerfile", "d", "", "if generating the dockerfile, this flag is used to (optionally) specify a dockerfile name")
indexCmd.Flags().StringP("from-index", "f", "", "previous index to delete from")
if err := indexCmd.MarkFlagRequired("from-index"); err != nil {
logrus.Panic("Failed to set required `from-index` flag for `index delete`")
}
indexCmd.Flags().StringSliceP("operators", "o", nil, "comma separated list of operators to delete")
if err := indexCmd.MarkFlagRequired("operators"); err != nil {
logrus.Panic("Failed to set required `operators` flag for `index delete`")
}
indexCmd.Flags().StringP("binary-image", "i", "", "container image for on-image `opm` command")
indexCmd.Flags().StringP("container-tool", "c", "podman", "tool to interact with container images (save, build, etc.). One of: [docker, podman]")
indexCmd.Flags().StringP("tag", "t", "", "custom tag for container image being built")
indexCmd.Flags().Bool("permissive", false, "allow registry load errors")

if err := indexCmd.Flags().MarkHidden("debug"); err != nil {
logrus.Panic(err.Error())
}

return indexCmd

}

func runIndexDeleteCmdFunc(cmd *cobra.Command, args []string) error {
generate, err := cmd.Flags().GetBool("generate")
if err != nil {
return err
}

outDockerfile, err := cmd.Flags().GetString("out-dockerfile")
if err != nil {
return err
}

fromIndex, err := cmd.Flags().GetString("from-index")
if err != nil {
return err
}

operators, err := cmd.Flags().GetStringSlice("operators")
if err != nil {
return err
}

binaryImage, err := cmd.Flags().GetString("binary-image")
if err != nil {
return err
}

containerTool, err := cmd.Flags().GetString("container-tool")
if err != nil {
return err
}

tag, err := cmd.Flags().GetString("tag")
if err != nil {
return err
}

permissive, err := cmd.Flags().GetBool("permissive")
if err != nil {
return err
}

logger := logrus.WithFields(logrus.Fields{"operators": operators})

logger.Info("building the index")

indexDeleter := indexer.NewIndexDeleter(containerTool, logger)

request := indexer.DeleteFromIndexRequest{
Generate: generate,
FromIndex: fromIndex,
BinarySourceImage: binaryImage,
OutDockerfile: outDockerfile,
Operators: operators,
Tag: tag,
Permissive: permissive,
}

err = indexDeleter.DeleteFromIndex(request)
if err != nil {
return err
}

return nil
}
2 changes: 2 additions & 0 deletions cmd/opm/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

"github.com/operator-framework/operator-registry/cmd/opm/alpha"
"github.com/operator-framework/operator-registry/cmd/opm/registry"
"github.com/operator-framework/operator-registry/cmd/opm/index"
)

func main() {
Expand All @@ -25,6 +26,7 @@ func main() {

rootCmd.AddCommand(registry.NewOpmRegistryCmd())
rootCmd.AddCommand(alpha.NewCmd())
rootCmd.AddCommand(index.NewOpmIndexCmd())

rootCmd.Flags().Bool("debug", false, "enable debug logging")
if err := rootCmd.Flags().MarkHidden("debug"); err != nil {
Expand Down
42 changes: 17 additions & 25 deletions cmd/opm/registry/add.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
package registry

import (
"context"
"database/sql"
"fmt"
"github.com/operator-framework/operator-registry/pkg/lib/registry"

"github.com/sirupsen/logrus"
"github.com/spf13/cobra"

"github.com/operator-framework/operator-registry/pkg/sqlite"
)

func newRegistryAddCmd() *cobra.Command {
Expand All @@ -31,6 +27,7 @@ func newRegistryAddCmd() *cobra.Command {
rootCmd.Flags().StringP("database", "d", "bundles.db", "relative path to database file")
rootCmd.Flags().StringSliceP("bundle-images", "b", []string{}, "comma separated list of links to bundle image")
rootCmd.Flags().Bool("permissive", false, "allow registry load errors")
rootCmd.Flags().StringP("container-tool", "c", "podman", "tool to interact with container images (save, build, etc.). One of: [docker, podman]")

return rootCmd
}
Expand All @@ -50,32 +47,27 @@ func addFunc(cmd *cobra.Command, args []string) error {
return err
}

var errs []error

db, err := sql.Open("sqlite3", fromFilename)
containerTool, err := cmd.Flags().GetString("container-tool")
if err != nil {
return err
}
defer db.Close()

dbLoader, err := sqlite.NewSQLLiteLoader(db)
if err != nil {
return err
}
if err := dbLoader.Migrate(context.TODO()); err != nil {
return err
request := registry.AddToRegistryRequest{
Bundles: bundleImages,
InputDatabase: fromFilename,
Permissive: permissive,
ContainerTool: containerTool,
}

for _, bundleImage := range bundleImages {
loader := sqlite.NewSQLLoaderForImage(dbLoader, bundleImage)
if err := loader.Populate(); err != nil {
err = fmt.Errorf("error loading bundle from image: %s", err)
if !permissive {
logrus.WithError(err).Fatal("permissive mode disabled")
errs = append(errs, err)
}
logrus.WithError(err).Warn("permissive mode enabled")
}
logger := logrus.WithFields(logrus.Fields{"bundles": bundleImages})

logger.Info("adding to the registry")

registryAdder := registry.NewRegistryAdder(logger)

err = registryAdder.AddToRegistry(request)
if err != nil {
return err
}
return nil
}
Loading