Files
kubesphere/vendor/sigs.k8s.io/application/pkg/apis/app/v1beta1/application.go
jeff 4ac20ffc2b add service mesh controller
add service mesh metrics

remove unused circle yaml

fix travis misconfiguration

fix travis misconfiguration

fix travis misconfiguration
2019-03-17 17:28:52 +08:00

180 lines
5.2 KiB
Go

/*
Copyright 2018 The Kubernetes 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 v1beta1
import (
"github.com/kubernetes-sigs/application/pkg/component"
cr "github.com/kubernetes-sigs/application/pkg/customresource"
"github.com/kubernetes-sigs/application/pkg/finalizer"
"github.com/kubernetes-sigs/application/pkg/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"strings"
)
// Mutate - mutate expected
func (a *Application) Mutate(rsrc interface{}, labels map[string]string, status interface{}, expected, dependent, observed *resource.ObjectBag) (*resource.ObjectBag, error) {
exp := resource.ObjectBag{}
for _, o := range observed.Items() {
o.Lifecycle = resource.LifecycleManaged
exp.Add(o)
}
return &exp, nil
}
// Finalize - execute finalizers
func (a *Application) Finalize(rsrc, sts interface{}, observed *resource.ObjectBag) error {
finalizer.Remove(a, finalizer.Cleanup)
return nil
}
//DependentResources - returns dependent rsrc
func (a *Application) DependentResources(rsrc interface{}) *resource.ObjectBag {
return &resource.ObjectBag{}
}
// ExpectedResources returns the list of resource/name for those resources created by
// the operator for this spec and those resources referenced by this operator.
// Mark resources as owned, referred
func (a *Application) ExpectedResources(rsrc interface{}, rsrclabels map[string]string, dependent, aggregated *resource.ObjectBag) (*resource.ObjectBag, error) {
return &resource.ObjectBag{}, nil
}
// GKVersions returns the gvks for the given gk
func GKVersions(s *runtime.Scheme, mgk metav1.GroupKind) []schema.GroupVersionKind {
gvks := []schema.GroupVersionKind{}
gk := schema.GroupKind{Group: mgk.Group, Kind: mgk.Kind}
for gvk := range s.AllKnownTypes() {
if gk != gvk.GroupKind() {
continue
}
gvks = append(gvks, gvk)
}
return gvks
}
// Observables - return selectors
func (a *Application) Observables(scheme *runtime.Scheme, rsrc interface{}, rsrclabels map[string]string, expected *resource.ObjectBag) []resource.Observable {
var observables []resource.Observable
if a.Spec.Selector == nil || a.Spec.Selector.MatchLabels == nil {
return observables
}
for _, gk := range a.Spec.ComponentGroupKinds {
listGK := gk
if !strings.HasSuffix(listGK.Kind, "List") {
listGK.Kind = listGK.Kind + "List"
}
for _, gvk := range GKVersions(scheme, listGK) {
ol, err := scheme.New(gvk)
if err == nil {
observable := resource.Observable{
ObjList: ol.(metav1.ListInterface),
Labels: a.Spec.Selector.MatchLabels,
}
observables = append(observables, observable)
}
}
}
return observables
}
// Differs returns true if the resource needs to be updated
func (a *Application) Differs(expected metav1.Object, observed metav1.Object) bool {
return false
}
// UpdateComponentStatus use reconciled objects to update component status
func (a *Application) UpdateComponentStatus(rsrci, statusi interface{}, reconciled *resource.ObjectBag, err error) {
if a != nil {
stts := statusi.(*ApplicationStatus)
stts.UpdateStatus(reconciled.Objs(), err)
}
}
// ApplyDefaults default app crd
func (a *Application) ApplyDefaults() {
return
}
// UpdateRsrcStatus records status or error in status
func (a *Application) UpdateRsrcStatus(status interface{}, err error) bool {
appstatus := status.(*ApplicationStatus)
if status != nil {
a.Status = *appstatus
}
if err != nil {
a.Status.SetError("ErrorSeen", err.Error())
} else {
a.Status.ClearError()
}
return true
}
// Validate the Application
func (a *Application) Validate() error {
return nil
}
// Components returns components for this resource
func (a *Application) Components() []component.Component {
c := []component.Component{}
c = append(c, component.Component{
Handle: a,
Name: "app",
CR: a,
OwnerRef: a.OwnerRef(),
})
return c
}
// OwnerRef returns owner ref object with the component's resource as owner
func (a *Application) OwnerRef() *metav1.OwnerReference {
if !a.Spec.AddOwnerRef {
return nil
}
isController := false
gvk := schema.GroupVersionKind{
Group: SchemeGroupVersion.Group,
Version: SchemeGroupVersion.Version,
Kind: "Application",
}
ref := metav1.NewControllerRef(a, gvk)
ref.Controller = &isController
return ref
}
// NewRsrc - return a new resource object
func (a *Application) NewRsrc() cr.Handle {
return &Application{}
}
// NewStatus - return a resource status object
func (a *Application) NewStatus() interface{} {
s := a.Status.DeepCopy()
s.ComponentList = ComponentList{}
return s
}
// StatusDiffers returns True if there is a change in status
func (a *Application) StatusDiffers(new ApplicationStatus) bool {
return true
}