Skip to content

Commit

Permalink
Track external resources
Browse files Browse the repository at this point in the history
Signed-off-by: Adrian Orive <adrian.orive.oneca@gmail.com>
  • Loading branch information
Adirio committed Feb 10, 2021
1 parent 8c55b84 commit a63f8c4
Show file tree
Hide file tree
Showing 11 changed files with 54 additions and 17 deletions.
4 changes: 3 additions & 1 deletion pkg/plugins/golang/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,9 @@ func (opts Options) NewResource(c newconfig.Config) resource.Resource {
// - In any other case, default to => project resource
// TODO: need to support '--resource-pkg-path' flag for specifying resourcePath
if !opts.DoAPI {
if !c.HasResource(opts.GVK()) {
loadedRes, err := c.GetResource(opts.GVK())
alreadyHasAPI := err == nil && loadedRes.HasAPI()
if !alreadyHasAPI {
if domain, found := coreGroups[opts.Group]; found {
res.Domain = domain
res.Path = path.Join("k8s.io", "api", opts.Group, opts.Version)
Expand Down
6 changes: 3 additions & 3 deletions pkg/plugins/golang/v2/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,9 +154,9 @@ func (p *createAPISubcommand) Validate() error {
}

// In case we want to scaffold a resource API we need to do some checks
if p.resource.HasAPI() {
// Check that resource doesn't exist or flag force was set
if !p.force && p.config.HasResource(p.resource.GVK) {
if p.options.DoAPI {
// Check that resource doesn't have the API scaffolded or flag force was set
if res, err := p.config.GetResource(p.resource.GVK); err == nil && res.HasAPI() && !p.force {
return errors.New("API resource already exists")
}

Expand Down
10 changes: 9 additions & 1 deletion pkg/plugins/golang/v2/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"strings"

newconfig "sigs.k8s.io/kubebuilder/v3/pkg/config"
cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2"
"sigs.k8s.io/kubebuilder/v3/pkg/model/resource"
)

Expand Down Expand Up @@ -178,7 +179,14 @@ func (opts Options) NewResource(c newconfig.Config) resource.Resource {
// - In any other case, default to => project resource
// TODO: need to support '--resource-pkg-path' flag for specifying resourcePath
if !opts.DoAPI {
if !c.HasResource(opts.GVK()) {
var alreadyHasAPI bool
if c.GetVersion().Compare(cfgv2.Version) == 0 {
alreadyHasAPI = c.HasResource(opts.GVK())
} else {
loadedRes, err := c.GetResource(opts.GVK())
alreadyHasAPI = err == nil && loadedRes.HasAPI()
}
if !alreadyHasAPI {
if domain, found := coreGroups[opts.Group]; found {
res.Domain = domain
res.Path = path.Join("k8s.io", "api", opts.Group, opts.Version)
Expand Down
8 changes: 6 additions & 2 deletions pkg/plugins/golang/v2/scaffolds/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"fmt"

"sigs.k8s.io/kubebuilder/v3/pkg/config"
cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2"
"sigs.k8s.io/kubebuilder/v3/pkg/model"
"sigs.k8s.io/kubebuilder/v3/pkg/model/resource"
"sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates"
Expand Down Expand Up @@ -89,11 +90,14 @@ func (s *apiScaffolder) scaffold() error {
doAPI := s.resource.HasAPI()
doController := s.resource.HasController()

if doAPI {

// config v2 should only be updated if the API is scaffolded
if doAPI || s.config.GetVersion().Compare(cfgv2.Version) == 1 {
if err := s.config.UpdateResource(s.resource); err != nil {
return fmt.Errorf("error updating resource: %w", err)
}
}

if doAPI {

if err := machinery.NewScaffold(s.plugins...).Execute(
s.newUniverse(),
Expand Down
13 changes: 11 additions & 2 deletions pkg/plugins/golang/v2/webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/spf13/pflag"

newconfig "sigs.k8s.io/kubebuilder/v3/pkg/config"
cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2"
"sigs.k8s.io/kubebuilder/v3/pkg/model/resource"
"sigs.k8s.io/kubebuilder/v3/pkg/plugin"
"sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds"
Expand Down Expand Up @@ -104,8 +105,16 @@ func (p *createWebhookSubcommand) Validate() error {
}

// check if resource exist to create webhook
if !p.config.HasResource(p.resource.GVK) {
return fmt.Errorf("%s create webhook requires a previously created API ", p.commandName)
if p.config.GetVersion().Compare(cfgv2.Version) == 0 {
if !p.config.HasResource(p.resource.GVK) {
return fmt.Errorf("%s create webhook requires a previously created API ", p.commandName)
}
} else {
if r, err := p.config.GetResource(p.resource.GVK); err != nil {
return fmt.Errorf("%s create webhook requires a previously created API ", p.commandName)
} else if r.Webhooks != nil && !r.Webhooks.IsEmpty() {
return fmt.Errorf("webhook resource already exists")
}
}

return nil
Expand Down
4 changes: 2 additions & 2 deletions pkg/plugins/golang/v3/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,8 +176,8 @@ func (p *createAPISubcommand) Validate() error {
}

// In case we want to scaffold a resource API we need to do some checks
if p.resource.HasAPI() {
// Check that resource doesn't exist or flag force was set
if p.options.DoAPI {
// Check that resource doesn't have the API scaffolded or flag force was set
if res, err := p.config.GetResource(p.resource.GVK); err == nil && res.HasAPI() && !p.force {
return errors.New("API resource already exists")
}
Expand Down
8 changes: 4 additions & 4 deletions pkg/plugins/golang/v3/scaffolds/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,11 +86,11 @@ func (s *apiScaffolder) scaffold() error {
doAPI := s.resource.HasAPI()
doController := s.resource.HasController()

if doAPI {
if err := s.config.UpdateResource(s.resource); err != nil {
return fmt.Errorf("error updating resource: %w", err)
}

if err := s.config.UpdateResource(s.resource); err != nil {
return fmt.Errorf("error updating resource: %w", err)
}
if doAPI {

if err := machinery.NewScaffold(s.plugins...).Execute(
s.newUniverse(),
Expand Down
3 changes: 1 addition & 2 deletions pkg/plugins/golang/v3/webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ limitations under the License.
package v3

import (
"errors"
"fmt"
"io/ioutil"
"path/filepath"
Expand Down Expand Up @@ -119,7 +118,7 @@ func (p *createWebhookSubcommand) Validate() error {
if r, err := p.config.GetResource(p.resource.GVK); err != nil {
return fmt.Errorf("%s create webhook requires a previously created API ", p.commandName)
} else if r.Webhooks != nil && !r.Webhooks.IsEmpty() && !p.force {
return errors.New("webhook resource already exists")
return fmt.Errorf("webhook resource already exists")
}

if !p.config.IsWebhookVersionCompatible(p.resource.Webhooks.WebhookVersion) {
Expand Down
5 changes: 5 additions & 0 deletions testdata/project-v3-config/PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,9 @@ resources:
webhooks:
defaulting: true
webhookVersion: v1
- controller: true
domain: testproject.org
group: crew
kind: Laker
version: v1
version: "3"
5 changes: 5 additions & 0 deletions testdata/project-v3-multigroup/PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,11 @@ resources:
kind: HealthCheckPolicy
path: sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/foo.policy/v1
version: v1
- controller: true
group: apps
kind: Deployment
path: k8s.io/api/apps/v1
version: v1
- api:
crdVersion: v1
namespaced: true
Expand Down
5 changes: 5 additions & 0 deletions testdata/project-v3/PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,9 @@ resources:
webhooks:
defaulting: true
webhookVersion: v1
- controller: true
domain: testproject.org
group: crew
kind: Laker
version: v1
version: "3"

0 comments on commit a63f8c4

Please sign in to comment.