diff --git a/cmd/ansible-operator/main.go b/cmd/ansible-operator/main.go index 85325ee..99c5215 100644 --- a/cmd/ansible-operator/main.go +++ b/cmd/ansible-operator/main.go @@ -21,6 +21,7 @@ import ( _ "k8s.io/client-go/plugin/pkg/client/auth" "github.com/operator-framework/ansible-operator-plugins/internal/cmd/ansible-operator/run" + "github.com/operator-framework/ansible-operator-plugins/internal/cmd/ansible-operator/scaffold" "github.com/operator-framework/ansible-operator-plugins/internal/cmd/ansible-operator/version" ) @@ -36,6 +37,7 @@ operator project's image entrypoint root.AddCommand(run.NewCmd()) root.AddCommand(version.NewCmd()) + root.AddCommand(scaffold.NewCmd()) if err := root.Execute(); err != nil { log.Fatal(err) diff --git a/hack/generate/samples/ansible/generate.go b/hack/generate/samples/ansible/generate.go index c797f4d..01a56dc 100644 --- a/hack/generate/samples/ansible/generate.go +++ b/hack/generate/samples/ansible/generate.go @@ -21,13 +21,9 @@ import ( log "github.com/sirupsen/logrus" "k8s.io/apimachinery/pkg/runtime/schema" "sigs.k8s.io/kubebuilder/v4/pkg/cli" - cfgv3 "sigs.k8s.io/kubebuilder/v4/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v4/pkg/plugin" - kustomizev2 "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2" - "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang" "github.com/operator-framework/ansible-operator-plugins/hack/generate/samples/internal/pkg" - "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1" + "github.com/operator-framework/ansible-operator-plugins/internal/cmd/ansible-operator/scaffold" "github.com/operator-framework/ansible-operator-plugins/pkg/testutils/command" "github.com/operator-framework/ansible-operator-plugins/pkg/testutils/e2e" "github.com/operator-framework/ansible-operator-plugins/pkg/testutils/sample" @@ -43,24 +39,7 @@ var memcachedGVK = schema.GroupVersionKind{ } func getCli() *cli.CLI { - ansibleBundle, _ := plugin.NewBundleWithOptions( - plugin.WithName(golang.DefaultNameQualifier), - plugin.WithVersion(ansible.Plugin{}.Version()), - plugin.WithPlugins(kustomizev2.Plugin{}, ansible.Plugin{}), - ) - - c, err := cli.New( - cli.WithCommandName("cli"), - cli.WithVersion("v0.0.0"), - cli.WithPlugins( - ansibleBundle, - ), - cli.WithDefaultPlugins(cfgv3.Version, ansibleBundle), - cli.WithDefaultProjectVersion(cfgv3.Version), - cli.WithCompletion(), - ) - pkg.CheckError("getting cli implementation:", err) - return c + return scaffold.GetPluginsCLI() } func GenerateMemcachedSamples(rootPath string) []sample.Sample { diff --git a/internal/cmd/ansible-operator/scaffold/cmd.go b/internal/cmd/ansible-operator/scaffold/cmd.go new file mode 100644 index 0000000..c67a2c9 --- /dev/null +++ b/internal/cmd/ansible-operator/scaffold/cmd.go @@ -0,0 +1,69 @@ +// Copyright 2025 The Operator-SDK Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package scaffold + +import ( + "fmt" + "log" + "runtime" + + "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1" + "github.com/spf13/cobra" + + ver "github.com/operator-framework/ansible-operator-plugins/internal/version" + "sigs.k8s.io/kubebuilder/v4/pkg/cli" + cfgv3 "sigs.k8s.io/kubebuilder/v4/pkg/config/v3" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + kustomizev2 "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2" +) + +func NewCmd() *cobra.Command { + cli := GetPluginsCLI() + return cli.Command() +} + +func GetPluginsCLI() *cli.CLI { + ansibleBundle, _ := plugin.NewBundleWithOptions( + plugin.WithName(ansible.Plugin{}.Name()), + plugin.WithVersion(ansible.Plugin{}.Version()), + plugin.WithPlugins( + kustomizev2.Plugin{}, + ansible.Plugin{}, + ), + ) + + c, err := cli.New( + cli.WithCommandName("scaffold"), + cli.WithDescription("scaffolds ansible-operator"), + cli.WithVersion(makeVersionString()), + cli.WithPlugins( + ansibleBundle, + ), + cli.WithDefaultPlugins(cfgv3.Version, ansibleBundle), + cli.WithDefaultProjectVersion(cfgv3.Version), + cli.WithCompletion(), + ) + + if err != nil { + log.Fatal(err) + } + + return c +} + +func makeVersionString() string { + return fmt.Sprintf("scaffold version: %q, commit: %q, kubernetes version: %q, go version: %q, GOOS: %q, GOARCH: %q", + ver.GitVersion, ver.GitCommit, ver.KubernetesVersion, runtime.Version(), runtime.GOOS, runtime.GOARCH) +} diff --git a/pkg/plugins/ansible/v1/plugin.go b/pkg/plugins/ansible/v1/plugin.go index f712b2e..20ba9df 100644 --- a/pkg/plugins/ansible/v1/plugin.go +++ b/pkg/plugins/ansible/v1/plugin.go @@ -18,11 +18,9 @@ import ( "sigs.k8s.io/kubebuilder/v4/pkg/config" cfgv3 "sigs.k8s.io/kubebuilder/v4/pkg/config/v3" "sigs.k8s.io/kubebuilder/v4/pkg/plugin" - - "github.com/operator-framework/ansible-operator-plugins/pkg/plugins" ) -const pluginName = "base.ansible" + plugins.DefaultNameQualifier +const pluginName = "ansible.operatorframework.io" var ( pluginVersion = plugin.Version{Number: 1} diff --git a/testdata/memcached-molecule-operator/PROJECT b/testdata/memcached-molecule-operator/PROJECT index f1aba08..da1a95d 100644 --- a/testdata/memcached-molecule-operator/PROJECT +++ b/testdata/memcached-molecule-operator/PROJECT @@ -4,7 +4,7 @@ # More info: https://book.kubebuilder.io/reference/project-config.html domain: example.com layout: -- go.kubebuilder.io/v1 +- ansible.operatorframework.io/v1 multigroup: true projectName: memcached-molecule-operator resources: