Skip to content

Commit

Permalink
create CRDs while controller starts if they are not exist (#692)
Browse files Browse the repository at this point in the history
* chore: update vendor

* feat: create CRDs while controller starts

* fix: address code review comments
  • Loading branch information
zhujian7 authored and cd1989 committed Jan 2, 2019
1 parent e79a882 commit e00ad92
Show file tree
Hide file tree
Showing 212 changed files with 28,138 additions and 1 deletion.
16 changes: 16 additions & 0 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions Gopkg.toml
Expand Up @@ -66,6 +66,10 @@
version = "kubernetes-1.10.0"
name = "k8s.io/apimachinery"

[[constraint]]
version = "kubernetes-1.10.0"
name = "k8s.io/apiextensions-apiserver"

[[constraint]]
name = "k8s.io/client-go"
version = "v7.0.0"
Expand Down
4 changes: 4 additions & 0 deletions cmd/workflow/controller/main.go
Expand Up @@ -7,6 +7,7 @@ import (
log "github.com/sirupsen/logrus"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/caicloud/cyclone/pkg/apis/cyclone/v1alpha1"
"github.com/caicloud/cyclone/pkg/common"
"github.com/caicloud/cyclone/pkg/common/signals"
"github.com/caicloud/cyclone/pkg/workflow/controller"
Expand Down Expand Up @@ -40,6 +41,9 @@ func main() {
// Init logging system.
controller.InitLogger(&controller.Config.Logging)

// create CRD
v1alpha1.EnsureCRDCreated("", *kubeConfigPath)

// Watch configure changes in ConfigMap.
cmController := controllers.NewConfigMapController(client, *namespace, *configMap)
go cmController.Run(ctx.Done())
Expand Down
90 changes: 90 additions & 0 deletions pkg/apis/cyclone/v1alpha1/crd.go
@@ -0,0 +1,90 @@
package v1alpha1

import (
log "github.com/sirupsen/logrus"

"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
apiextensionsclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)

func newKubeExtClient(masterUrl, kubeConfigPath string) (apiextensionsclient.Interface, error) {
var config *rest.Config
var err error
if kubeConfigPath != "" {
config, err = clientcmd.BuildConfigFromFlags(masterUrl, kubeConfigPath)
if err != nil {
return nil, err
}
} else {
config, err = rest.InClusterConfig()
if err != nil {
return nil, err
}
}

return apiextensionsclient.NewForConfigOrDie(config), nil
}

// EnsureCRDCreated will create built-in CRDs if they are not exist.
func EnsureCRDCreated(masterUrl, kubeConfigPath string) {
log.Info("start to create crd")
client, err := newKubeExtClient(masterUrl, kubeConfigPath)
if err != nil {
log.WithField("error", err).Fatal("new kube ext client error")
}

createCRD("resource", "resources", "Resource", []string{"rsc"}, client)
createCRD("stage", "stages", "Stage", []string{"stg"}, client)
createCRD("workflow", "workflows", "Workflow", []string{"wf"}, client)
createCRD("workflowrun", "workflowruns", "WorkflowRun", []string{"wfr"}, client)
createCRD("stagetemplate", "stagetemplates", "StageTemplate", []string{"stpl"}, client)
createCRD("workflowparam", "workflowparams", "WorkflowParams", []string{"wfp"}, client)
createCRD("workflowtrigger", "workflowtriggers", "WorkflowTrigger", []string{"wft"}, client)
}

func createCRD(singular, plural, kind string, shortNames []string, client apiextensionsclient.Interface) {
crdName := plural + "." + GroupName
_, err := client.ApiextensionsV1beta1().CustomResourceDefinitions().Get(crdName, metav1.GetOptions{})
if err == nil {
log.WithField("name", crdName).Info("crd already exist")
return
}

if !errors.IsNotFound(err) {
log.WithField("name", crdName).WithField("error", err).Fatal("check existence of crd error")
return
}

// create crd
log.WithField("name", crdName).Info("create crd")
_, err = client.ApiextensionsV1beta1().CustomResourceDefinitions().Create(&v1beta1.CustomResourceDefinition{
TypeMeta: metav1.TypeMeta{
Kind: "CustomResourceDefinition",
APIVersion: "apiextensions.k8s.io/v1beta1",
},
ObjectMeta: metav1.ObjectMeta{
Name: crdName,
Namespace: "default",
},
Spec: v1beta1.CustomResourceDefinitionSpec{
Group: GroupName,
Version: Version,
Scope: v1beta1.NamespaceScoped,
Names: v1beta1.CustomResourceDefinitionNames{
Kind: kind,
Plural: plural,
Singular: singular,
ShortNames: shortNames,
},
},
})
if err != nil {
log.WithField("name", crdName).WithField("error", err).Fatal("create crd error")
return
}

}
3 changes: 2 additions & 1 deletion pkg/apis/cyclone/v1alpha1/register.go
Expand Up @@ -8,7 +8,8 @@ import (

// GroupName is the group name use in this package
const GroupName = "cyclone.io"
const APIVersion = "cyclone.io/v1alpha1"
const Version = "v1alpha1"
const APIVersion = GroupName + "/" + Version

// SchemeGroupVersion is group version used to register these objects
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"}
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

55 changes: 55 additions & 0 deletions vendor/k8s.io/apiextensions-apiserver/BUILD

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions vendor/k8s.io/apiextensions-apiserver/CONTRIBUTING.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit e00ad92

Please sign in to comment.