Skip to content

Commit a77e3ab

Browse files
This code is working with Beta Version of Kubebuilder. (operator-framework#10)
* modified files according to beta version * modified as role and playbook s part of Ansible
1 parent 35f6b97 commit a77e3ab

File tree

11 files changed

+152
-128
lines changed

11 files changed

+152
-128
lines changed

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.15
55
require github.com/spf13/pflag v1.0.5
66

77
require (
8-
github.com/onsi/ginkgo v1.15.0
9-
github.com/onsi/gomega v1.10.5
10-
sigs.k8s.io/kubebuilder/v3 v3.0.0-alpha.0.0.20210316110635-104672d382aa
8+
github.com/onsi/ginkgo v1.15.2
9+
github.com/onsi/gomega v1.11.0
10+
sigs.k8s.io/kubebuilder/v3 v3.0.0-beta.1
1111
)

go.sum

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,8 @@ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+
321321
github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E=
322322
github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
323323
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
324+
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
325+
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
324326
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
325327
github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
326328
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
@@ -329,13 +331,17 @@ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+
329331
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
330332
github.com/onsi/ginkgo v1.15.0 h1:1V1NfVQR87RtWAgp1lv9JZJ5Jap+XFGKPi00andXGi4=
331333
github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg=
334+
github.com/onsi/ginkgo v1.15.2 h1:l77YT15o814C2qVL47NOyjV/6RbaP7kKdrvZnxQ3Org=
335+
github.com/onsi/ginkgo v1.15.2/go.mod h1:Dd6YFfwBW84ETqqtL0CPyPXillHgY6XhQH3uuCCTr/o=
332336
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
333337
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
334338
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
335339
github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA=
336340
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
337341
github.com/onsi/gomega v1.10.5 h1:7n6FEkpFmfCoo2t+YYqXH0evK+a9ICQz0xcAy9dYcaQ=
338342
github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48=
343+
github.com/onsi/gomega v1.11.0 h1:+CqWgvj0OZycCaqclBD1pxKHAU+tOkHmQIWvDHq2aug=
344+
github.com/onsi/gomega v1.11.0/go.mod h1:azGKhqFUon9Vuj0YmTfLSmx0FUwqXYSTl5re8lQLTUg=
339345
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
340346
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
341347
github.com/paulmach/orb v0.1.3/go.mod h1:VFlX/8C+IQ1p6FTRRKzKoOPJnvEtA5G0Veuqwbu//Vk=
@@ -661,6 +667,8 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
661667
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
662668
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
663669
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
670+
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
671+
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
664672
gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
665673
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
666674
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
@@ -696,6 +704,7 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT
696704
sigs.k8s.io/controller-tools v0.3.0/go.mod h1:enhtKGfxZD1GFEoMgP8Fdbu+uKQ/cq1/WGJhdVChfvI=
697705
sigs.k8s.io/kubebuilder/v3 v3.0.0-alpha.0.0.20210316110635-104672d382aa h1:gCcgLy5G7RMRYmRQUsG440sl9t2g6ffuJeeXPHYOarM=
698706
sigs.k8s.io/kubebuilder/v3 v3.0.0-alpha.0.0.20210316110635-104672d382aa/go.mod h1:eVtLdWzmvL1ixDYLlVrvQe8wjpikJVoSOg5PghTk2Lw=
707+
sigs.k8s.io/kubebuilder/v3 v3.0.0-beta.1/go.mod h1:eVtLdWzmvL1ixDYLlVrvQe8wjpikJVoSOg5PghTk2Lw=
699708
sigs.k8s.io/kustomize/kyaml v0.10.10/go.mod h1:K9yg1k/HB/6xNOf5VH3LhTo1DK9/5ykSZO5uIv+Y/1k=
700709
sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
701710
sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=

pkg/internal/kubebuilder/cmdutil/cmdutil.go

Lines changed: 0 additions & 68 deletions
This file was deleted.

pkg/java/v1/api.go

Lines changed: 59 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,34 +17,46 @@
1717
package v1
1818

1919
import (
20+
21+
"errors"
2022
"fmt"
2123

2224
"github.com/spf13/pflag"
2325
"sigs.k8s.io/kubebuilder/v3/pkg/config"
2426
"sigs.k8s.io/kubebuilder/v3/pkg/machinery"
27+
"sigs.k8s.io/kubebuilder/v3/pkg/model/resource"
2528
"sigs.k8s.io/kubebuilder/v3/pkg/plugin"
29+
pluginutil "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util"
2630

27-
"github.com/java-operator-sdk/kubebuilder-plugin/pkg/internal/kubebuilder/cmdutil"
2831
"github.com/java-operator-sdk/kubebuilder-plugin/pkg/java/v1/scaffolds"
2932
)
3033

34+
type createAPIOptions struct {
35+
CRDVersion string
36+
}
37+
3138
type createAPISubcommand struct {
32-
config config.Config
39+
config config.Config
40+
resource *resource.Resource
41+
options createAPIOptions
3342
}
3443

35-
var (
36-
_ plugin.CreateAPISubcommand = &createAPISubcommand{}
37-
)
3844

39-
func (p createAPISubcommand) UpdateContext(ctx *plugin.Context) {
40-
ctx.Description = `Scaffold a Kubernetes API by creating a Resource definition and / or a Controller.
45+
func (opts createAPIOptions) UpdateResource(res *resource.Resource) {
46+
res.API = &resource.API{
47+
CRDVersion: opts.CRDVersion,
48+
Namespaced: true,
49+
}
4150

42-
create resource will prompt the user for if it should scaffold the Resource and / or Controller. To only
43-
scaffold a Controller for an existing Resource, select "n" for Resource. To only define
44-
the schema for a Resource without writing a Controller, select "n" for Controller.
45-
`
51+
// Ensure that Path is empty and Controller false as this is not a Go project
52+
res.Path = ""
53+
res.Controller = false
4654
}
4755

56+
var (
57+
_ plugin.CreateAPISubcommand = &createAPISubcommand{}
58+
)
59+
4860
func (p *createAPISubcommand) BindFlags(fs *pflag.FlagSet) {
4961
}
5062

@@ -61,10 +73,43 @@ func (p *createAPISubcommand) Validate() error {
6173
return nil
6274
}
6375

64-
func (p *createAPISubcommand) GetScaffolder() (cmdutil.Scaffolder, error) {
65-
return scaffolds.NewCreateAPIScaffolder(), nil
76+
func (p *createAPISubcommand) PostScaffold() error {
77+
return nil
6678
}
6779

68-
func (p *createAPISubcommand) PostScaffold() error {
80+
func (p *createAPISubcommand) Scaffold(fs machinery.Filesystem) error {
81+
scaffolder := scaffolds.NewCreateAPIScaffolder(p.config, *p.resource)
82+
scaffolder.InjectFS(fs)
83+
if err := scaffolder.Scaffold(); err != nil {
84+
return err
85+
}
86+
87+
return nil
88+
}
89+
90+
func (p *createAPISubcommand) InjectResource(res *resource.Resource) error {
91+
p.resource = res
92+
93+
p.options.UpdateResource(p.resource)
94+
95+
if err := p.resource.Validate(); err != nil {
96+
return err
97+
}
98+
99+
// Check that resource doesn't have the API scaffolded
100+
if res, err := p.config.GetResource(p.resource.GVK); err == nil && res.HasAPI() {
101+
return errors.New("the API resource already exists")
102+
}
103+
104+
// Check that the provided group can be added to the project
105+
if !p.config.IsMultiGroup() && p.config.ResourcesLength() != 0 && !p.config.HasGroup(p.resource.Group) {
106+
return fmt.Errorf("multiple groups are not allowed by default, to enable multi-group set 'multigroup: true' in your PROJECT file")
107+
}
108+
109+
// Selected CRD version must match existing CRD versions.
110+
if pluginutil.HasDifferentCRDVersion(p.config, p.resource.API.CRDVersion) {
111+
return fmt.Errorf("only one CRD version can be used for all resources, cannot add %q", p.resource.API.CRDVersion)
112+
}
113+
69114
return nil
70115
}

pkg/java/v1/init.go

Lines changed: 47 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@ package v1
1818

1919
import (
2020
"fmt"
21-
22-
"github.com/java-operator-sdk/kubebuilder-plugin/pkg/internal/kubebuilder/cmdutil"
2321
"github.com/java-operator-sdk/kubebuilder-plugin/pkg/java/v1/scaffolds"
2422
"github.com/spf13/pflag"
23+
"k8s.io/apimachinery/pkg/util/validation"
24+
"os"
25+
"path/filepath"
26+
"strings"
2527

2628
"sigs.k8s.io/kubebuilder/v3/pkg/config"
2729
"sigs.k8s.io/kubebuilder/v3/pkg/machinery"
@@ -30,56 +32,76 @@ import (
3032

3133
// This file represents the CLI for this plugin.
3234

35+
const (
36+
groupFlag = "group"
37+
versionFlag = "version"
38+
kindFlag = "kind"
39+
)
40+
3341
type initSubcommand struct {
42+
apiSubcommand createAPISubcommand
43+
3444
config config.Config
3545

3646
// For help text.
3747
commandName string
3848

3949
// Flags
50+
group string
4051
domain string
52+
version string
53+
kind string
4154
projectName string
4255
}
4356

4457
var (
4558
_ plugin.InitSubcommand = &initSubcommand{}
46-
_ cmdutil.RunOptions = &initSubcommand{}
4759
)
4860

49-
func (p *initSubcommand) UpdateContext(ctx *plugin.Context) {
50-
ctx.Description = `Initialize a new project based on the java-operator-sdk project.
61+
func (p *initSubcommand) UpdateMetadata(cliMeta plugin.CLIMetadata, subcmdMeta *plugin.SubcommandMetadata) {
62+
subcmdMeta.Description = `Initialize a new project based on the java-operator-sdk project.
5163
5264
Writes the following files:
5365
- a basic, Quarkus-based operator set-up
5466
- a pom.xml file to build the project with Maven
5567
`
56-
p.commandName = ctx.CommandName
68+
p.commandName = cliMeta.CommandName
5769
}
5870

5971
func (p *initSubcommand) BindFlags(fs *pflag.FlagSet) {
72+
//// TODO: include flags required for this plugin
73+
74+
fs.SortFlags = false
6075
fs.StringVar(&p.domain, "domain", "my.domain", "domain for groups")
61-
fs.StringVar(&p.projectName, "project-name", "", "name of this project")
62-
// TODO: include flags required for this plugin
63-
}
76+
fs.StringVar(&p.projectName, "project-name", "", "name of this project, the default being directory name")
6477

65-
func (p *initSubcommand) InjectConfig(c config.Config) {
66-
p.config = c
78+
fs.StringVar(&p.group, groupFlag, "", "resource Group")
79+
fs.StringVar(&p.version, versionFlag, "", "resource Version")
80+
fs.StringVar(&p.kind, kindFlag, "", "resource Kind")
81+
p.apiSubcommand.BindFlags(fs)
6782
}
6883

69-
func (p *initSubcommand) Run(fs machinery.Filesystem) error {
70-
fmt.Println("init called")
84+
func (p *initSubcommand) InjectConfig(c config.Config) error {
85+
p.config = c
7186

72-
// TODO: any configuration that needs to be updated happens here
73-
if err := p.config.SetProjectName(p.projectName); err != nil {
74-
return err
75-
}
7687

7788
if err := p.config.SetDomain(p.domain); err != nil {
7889
return err
7990
}
8091

81-
// TODO: this will run the scaffolders
82-
if err := cmdutil.Run(p, fs); err != nil {
92+
// Assign a default project name
93+
if p.projectName == "" {
94+
dir, err := os.Getwd()
95+
if err != nil {
96+
return fmt.Errorf("error getting current directory: %v", err)
97+
}
98+
p.projectName = strings.ToLower(filepath.Base(dir))
99+
}
100+
// Check if the project name is a valid k8s namespace (DNS 1123 label).
101+
if err := validation.IsDNS1123Label(p.projectName); err != nil {
102+
return fmt.Errorf("project name (%s) is invalid: %v", p.projectName, err)
103+
}
104+
if err := p.config.SetProjectName(p.projectName); err != nil {
83105
return err
84106
}
85107

@@ -91,11 +113,13 @@ func (p *initSubcommand) Validate() error {
91113
return nil
92114
}
93115

94-
func (p *initSubcommand) GetScaffolder() (cmdutil.Scaffolder, error) {
95-
return scaffolds.NewInitScaffolder(p.config), nil
96-
}
97-
98116
func (p *initSubcommand) PostScaffold() error {
99117
// TODO: add anything you want to do AFTER the scaffolding has happened.
100118
return nil
101119
}
120+
121+
func (p *initSubcommand) Scaffold(fs machinery.Filesystem) error {
122+
scaffolder := scaffolds.NewInitScaffolder(p.config)
123+
scaffolder.InjectFS(fs)
124+
return scaffolder.Scaffold()
125+
}

pkg/java/v1/scaffolds/api.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,28 @@ package scaffolds
22

33
import (
44
"fmt"
5+
"sigs.k8s.io/kubebuilder/v3/pkg/config"
6+
"sigs.k8s.io/kubebuilder/v3/pkg/model/resource"
7+
"sigs.k8s.io/kubebuilder/v3/pkg/plugins"
58

69
"sigs.k8s.io/kubebuilder/v3/pkg/machinery"
710

8-
"github.com/java-operator-sdk/kubebuilder-plugin/pkg/internal/kubebuilder/cmdutil"
911
)
1012

1113
type apiScaffolder struct {
1214
fs machinery.Filesystem
15+
16+
config config.Config
17+
resource resource.Resource
18+
1319
}
1420

15-
func NewCreateAPIScaffolder() cmdutil.Scaffolder {
16-
return &apiScaffolder{}
21+
// NewCreateAPIScaffolder returns a new plugins.Scaffolder for project initialization operations
22+
func NewCreateAPIScaffolder(cfg config.Config, res resource.Resource) plugins.Scaffolder {
23+
return &apiScaffolder{
24+
config: cfg,
25+
resource: res,
26+
}
1727
}
1828

1929
func (s *apiScaffolder) InjectFS(fs machinery.Filesystem) {

0 commit comments

Comments
 (0)