Documentation ¶
Index ¶
- Constants
- Variables
- func EscapeDNS1123(name string, allowColons bool) string
- func EscapeDNS1123Label(name string, length int) string
- func KubeOptionObserveCreateUpdate(obj *xkube.Object)
- func NewFatalResult(err error) *xfnproto.Result
- func NewNormalResult(message string) *xfnproto.Result
- func NewWarningResult(message string) *xfnproto.Result
- func RegisterService[T client.Object](name string, function Service[T])
- type ComposedResourceOption
- type KubeObjectOption
- type Manager
- type Service
- type ServiceRuntime
- func (s *ServiceRuntime) AddObservedConnectionDetails(name string) error
- func (s *ServiceRuntime) AddResult(result *xfnproto.Result)
- func (s *ServiceRuntime) DeleteDesiredCompososedResource(name string)
- func (s *ServiceRuntime) ForwardEvents() error
- func (s *ServiceRuntime) GetAllDesired() map[resource.Name]*resource.DesiredComposed
- func (s *ServiceRuntime) GetAllObserved() (map[resource.Name]resource.ObservedComposed, error)
- func (s *ServiceRuntime) GetBoolFromCompositionConfig(key string) bool
- func (s *ServiceRuntime) GetConnectionDetails() map[string][]byte
- func (s *ServiceRuntime) GetDesiredComposedResourceByName(obj xpresource.Managed, name string) error
- func (s *ServiceRuntime) GetDesiredComposite(obj client.Object) error
- func (s *ServiceRuntime) GetDesiredKubeObject(obj client.Object, name string) error
- func (s *ServiceRuntime) GetObservedComposedResource(obj xpresource.Managed, name string) error
- func (s *ServiceRuntime) GetObservedComposedResourceConnectionDetails(objectName string) (map[string][]byte, error)
- func (s *ServiceRuntime) GetObservedComposite(obj client.Object) error
- func (s *ServiceRuntime) GetObservedKubeObject(obj client.Object, name string) error
- func (s *ServiceRuntime) GetRequest() *fnv1beta1.RunFunctionRequest
- func (s *ServiceRuntime) GetResponse() (*fnv1beta1.RunFunctionResponse, error)
- func (s *ServiceRuntime) SetConnectionDetail(name string, value []byte)
- func (s *ServiceRuntime) SetDesiredComposedResource(obj xpresource.Managed, opts ...ComposedResourceOption) error
- func (s *ServiceRuntime) SetDesiredComposedResourceWithName(obj xpresource.Managed, name string, opts ...ComposedResourceOption) error
- func (s *ServiceRuntime) SetDesiredCompositeStatus(obj client.Object) error
- func (s *ServiceRuntime) SetDesiredKubeObject(obj client.Object, objectName string, opts ...KubeObjectOption) error
- func (s *ServiceRuntime) SetDesiredKubeObjectWithName(obj client.Object, objectName, resourceName string, opts ...KubeObjectOption) error
- func (s *ServiceRuntime) SetDesiredKubeObserveObject(obj client.Object, objectName string, refs ...xkube.Reference) error
- func (s *ServiceRuntime) SetResponse(resp *fnv1beta1.RunFunctionResponse)
- func (s *ServiceRuntime) UsageOfBy(of, by string) error
- func (s *ServiceRuntime) WaitForDesiredDependencies(mainResource string, dependencies ...string) bool
- func (s *ServiceRuntime) WaitForObservedDependencies(mainResource string, dependencies ...string) bool
- func (s *ServiceRuntime) WaitForObservedDependenciesWithConnectionDetails(mainResource string, objectCDMap map[string][]string) (bool, error)
- type Step
Constants ¶
const ( OwnerKindAnnotation = "appcat.vshn.io/ownerkind" OwnerVersionAnnotation = "appcat.vshn.io/ownerapiversion" OwnerGroupAnnotation = "appcat.vshn.io/ownergroup" ProtectedByAnnotation = "appcat.vshn.io/protectedby" ProtectsAnnotation = "appcat.vshn.io/protects" EventForwardAnnotation = "appcat.vshn.io/forward-events-to" )
Variables ¶
var ( // ErrNotFound is the errur returned, if the requested resource is not in the // the given function state (desired,observed). ErrNotFound = errors.New("not found") )
Functions ¶
func EscapeDNS1123 ¶ added in v4.78.1
EscapeDNS1123 will always return a string that conforms to K8s' DNS subdomain naming scheme contain no more than 253 characters contain only lowercase alphanumeric characters, '-' or '.' start with an alphanumeric character end with an alphanumeric character We also remove any '.' here, so that it can be used as a base function for escaping label names as well.
func EscapeDNS1123Label ¶ added in v4.78.1
EscapeDNS1123Label does the same as escapeDNS1123 but also limit to 63 chars
func KubeOptionObserveCreateUpdate ¶ added in v4.64.2
KubeOptionObserveCreateUpdate sets the object to only create and update. Provider-kubernetes will not delete it.
func NewFatalResult ¶ added in v4.43.0
NewFatalResult creates a new result with the `FATAL` severity. The pipeline will be considdered failed.
func NewNormalResult ¶ added in v4.43.0
NewNormalResult creates a new resul with the `NORMAL` severity.
func NewWarningResult ¶ added in v4.43.0
NewWarningResult will return a new warning. The pipelines will run through and are not considdered failed.
Types ¶
type ComposedResourceOption ¶ added in v4.73.0
type ComposedResourceOption func(obj xpresource.Managed)
ComposedResourceOption defines the type of functional parameters for Crossplane managed resources
func ComposedOptionProtectedBy ¶ added in v4.73.0
func ComposedOptionProtectedBy(resName string) ComposedResourceOption
ComposedOptionProtectedBy protects the given resource from deletion as long as resName exists. resName is the name of the resource in the desired map.
func ComposedOptionProtects ¶ added in v4.73.0
func ComposedOptionProtects(resName string) ComposedResourceOption
ComposedOptionProtects is the inverse of ProtectedBy. The object with this annotation protects the object with resName.
type KubeObjectOption ¶ added in v4.53.0
KubeObjectOption defines the type of functional parameters for kubeObjects
func KubeOptionAddConnectionDetails ¶ added in v4.53.0
func KubeOptionAddConnectionDetails(destNamespace string, cd ...xkube.ConnectionDetail) KubeObjectOption
KubeOptionAddConnectionDetails adds the given connection details to the kube object. DestNamespace speficies the namespace where the associated secret should be saved. The associated secret will have the UID of the parent object as the name.
func KubeOptionAddRefs ¶ added in v4.53.0
func KubeOptionAddRefs(refs ...xkube.Reference) KubeObjectOption
KubeOptionAddRefs adds the given references to the kube object.
func KubeOptionProtectedBy ¶ added in v4.73.0
func KubeOptionProtectedBy(resName string) KubeObjectOption
KubeOptionProtectedBy protects the given kube objects from deletion as long as resName exists. resName is the name of the resource in the desired map.
func KubeOptionProtects ¶ added in v4.73.0
func KubeOptionProtects(resName string) KubeObjectOption
KubeOptionProtects is the inverse of ProtectedBy. The object with this annotation protects the object with resName.
type Manager ¶ added in v4.43.0
type Manager struct { fnv1beta1.UnimplementedFunctionRunnerServiceServer // contains filtered or unexported fields }
Manager manages all services and their steps. It also provides a proxy mode to offload any service to another GRPC endpoint.
func NewManager ¶ added in v4.43.0
NewManager creates a new manager.
func (Manager) RunFunction ¶ added in v4.43.0
func (m Manager) RunFunction(ctx context.Context, req *fnv1beta1.RunFunctionRequest) (*fnv1beta1.RunFunctionResponse, error)
RunFunction implements the crossplane composition function `FunctionRunnerServiceServer` interface.
type Service ¶ added in v4.43.0
Service contains all steps necessary to provide the service (except the legacy P+T portion). We use reflect heavily with this, any changes in the ordering of the fields need to be adjusted in the `RunFunction` function.
type ServiceRuntime ¶ added in v4.43.0
type ServiceRuntime struct { Log logr.Logger Config corev1.ConfigMap // contains filtered or unexported fields }
ServiceRuntime holds the state for one given service. It keeps track of the changes that each step does. The actual response will be assembled at the end.
func NewServiceRuntime ¶ added in v4.43.0
func NewServiceRuntime(l logr.Logger, config corev1.ConfigMap, req *fnv1beta1.RunFunctionRequest) (*ServiceRuntime, error)
NewServiceRuntime returns a new runtime for a given service.
func (*ServiceRuntime) AddObservedConnectionDetails ¶ added in v4.43.0
func (s *ServiceRuntime) AddObservedConnectionDetails(name string) error
AddObservedConnectionDetails will add all of the observed connection details of the given resouce to the composite's connection details.
func (*ServiceRuntime) AddResult ¶ added in v4.43.0
func (s *ServiceRuntime) AddResult(result *xfnproto.Result)
AddResult will add any result the the list of results
func (*ServiceRuntime) DeleteDesiredCompososedResource ¶ added in v4.45.1
func (s *ServiceRuntime) DeleteDesiredCompososedResource(name string)
DeleteDesiredCompososedResource removes a composite resource from the desired objects. If the object is existing on the cluster, it will be deleted!
func (*ServiceRuntime) ForwardEvents ¶ added in v4.75.0
func (s *ServiceRuntime) ForwardEvents() error
func (*ServiceRuntime) GetAllDesired ¶ added in v4.43.0
func (s *ServiceRuntime) GetAllDesired() map[resource.Name]*resource.DesiredComposed
GetAllDesired returns a map of all observed resources. This is useful when a function needs to have overview about all objects belonging to a service.
func (*ServiceRuntime) GetAllObserved ¶ added in v4.43.0
func (s *ServiceRuntime) GetAllObserved() (map[resource.Name]resource.ObservedComposed, error)
GetAllObserved returns a map of all observed resources. This is useful when a function needs to have overview about all objects belonging to a service.
func (*ServiceRuntime) GetBoolFromCompositionConfig ¶ added in v4.43.0
func (s *ServiceRuntime) GetBoolFromCompositionConfig(key string) bool
GetBoolFromCompositionConfig is a small function to help us retrieve bool values from configMap
func (*ServiceRuntime) GetConnectionDetails ¶ added in v4.43.0
func (s *ServiceRuntime) GetConnectionDetails() map[string][]byte
GetConnectionDetails returns all current connection details for the current composite.
func (*ServiceRuntime) GetDesiredComposedResourceByName ¶ added in v4.43.0
func (s *ServiceRuntime) GetDesiredComposedResourceByName(obj xpresource.Managed, name string) error
GetDesiredComposedResourceByName will return a desired composed resource from the request. Use this, if you want anything from a previous function in the pipeline.
func (*ServiceRuntime) GetDesiredComposite ¶ added in v4.43.0
func (s *ServiceRuntime) GetDesiredComposite(obj client.Object) error
GetDesiredComposite will return the currently desired composite. The only differences from the observed composite will be either in metadata or the status. As Crossplane 1.14 composition function forbid any changes other than those fields.
func (*ServiceRuntime) GetDesiredKubeObject ¶ added in v4.43.0
func (s *ServiceRuntime) GetDesiredKubeObject(obj client.Object, name string) error
GetDesiredKubeObject returns the object as is on the cluster.
func (*ServiceRuntime) GetObservedComposedResource ¶ added in v4.43.0
func (s *ServiceRuntime) GetObservedComposedResource(obj xpresource.Managed, name string) error
GetObservedComposedResource returns and unmarshalls the observed object into the given managed resource.
func (*ServiceRuntime) GetObservedComposedResourceConnectionDetails ¶ added in v4.43.0
func (s *ServiceRuntime) GetObservedComposedResourceConnectionDetails(objectName string) (map[string][]byte, error)
GetObservedComposedResourceConnectionDetails returns the observed connection details of the given composed resource. Returns an empty map if not found.
func (*ServiceRuntime) GetObservedComposite ¶ added in v4.43.0
func (s *ServiceRuntime) GetObservedComposite(obj client.Object) error
GetObservedComposite returns the observed composite and unmarshals it into the given object.
func (*ServiceRuntime) GetObservedKubeObject ¶ added in v4.43.0
func (s *ServiceRuntime) GetObservedKubeObject(obj client.Object, name string) error
GetObservedKubeObject returns the object as is on the cluster.
func (*ServiceRuntime) GetRequest ¶ added in v4.43.0
func (s *ServiceRuntime) GetRequest() *fnv1beta1.RunFunctionRequest
GetRequest returns the pointer to the request.
func (*ServiceRuntime) GetResponse ¶ added in v4.43.0
func (s *ServiceRuntime) GetResponse() (*fnv1beta1.RunFunctionResponse, error)
GetResponse returns the response with all desired resources set. This is the raw GRPC response for crossplane. If at any time s.SetRespones() was called, then this function will return the set response.
func (*ServiceRuntime) SetConnectionDetail ¶ added in v4.43.0
func (s *ServiceRuntime) SetConnectionDetail(name string, value []byte)
SetConnectionDetail will add the given name/value pair to the map containing all desired connection details of the composite. Be careful to not override existing keys.
func (*ServiceRuntime) SetDesiredComposedResource ¶ added in v4.43.0
func (s *ServiceRuntime) SetDesiredComposedResource(obj xpresource.Managed, opts ...ComposedResourceOption) error
SetDesiredComposedResource adds the given object to the desired resources, it needs to be a proper crossplane Managed Resource.
func (*ServiceRuntime) SetDesiredComposedResourceWithName ¶ added in v4.43.0
func (s *ServiceRuntime) SetDesiredComposedResourceWithName(obj xpresource.Managed, name string, opts ...ComposedResourceOption) error
SetDesiredComposedResourceWithName adds the given object to the desired resources, it needs to be a proper crossplane Managed Resource. Additionally provide a name, if it's not derived from the object name. Usually needed for objects that where migrated from P+T compositions with a static name. Additionally it injects the claim-name, claim-namespace and the composite name as a label.
func (*ServiceRuntime) SetDesiredCompositeStatus ¶ added in v4.43.0
func (s *ServiceRuntime) SetDesiredCompositeStatus(obj client.Object) error
SetDesiredCompositeStatus takes the given composite and updates the status accordingly. All other fields will not be updated by crossplane.
func (*ServiceRuntime) SetDesiredKubeObject ¶ added in v4.43.0
func (s *ServiceRuntime) SetDesiredKubeObject(obj client.Object, objectName string, opts ...KubeObjectOption) error
SetDesiredKubeObject takes any `runtime.Object`, puts it into a provider-kubernetes Object and then adds it to the desired composed resources. It takes options to manipulate the resulting kubec object before applying.
func (*ServiceRuntime) SetDesiredKubeObjectWithName ¶ added in v4.43.0
func (s *ServiceRuntime) SetDesiredKubeObjectWithName(obj client.Object, objectName, resourceName string, opts ...KubeObjectOption) error
SetDesiredKubeObjectWithName takes any `runtime.Object`, puts it into a provider-kubernetes Object and then adds it to the desired composed resources with the specified resource name. This should be used if manipulating objects that are declared in the P+T composition.
func (*ServiceRuntime) SetDesiredKubeObserveObject ¶ added in v4.43.0
func (s *ServiceRuntime) SetDesiredKubeObserveObject(obj client.Object, objectName string, refs ...xkube.Reference) error
SetDesiredKubeObserveObject takes any `runtime.Object`, puts it into a provider-kubernetes Object and then adds it to the desired composed resources.
func (*ServiceRuntime) SetResponse ¶ added in v4.43.0
func (s *ServiceRuntime) SetResponse(resp *fnv1beta1.RunFunctionResponse)
SetResponse directly sets the response for the service. Please only use this if the service has one single step.
func (*ServiceRuntime) UsageOfBy ¶ added in v4.73.0
func (s *ServiceRuntime) UsageOfBy(of, by string) error
UsageOfBy helps with ordered deletions. Sometimes there are objects that are essential for porviders to work. For example provider-sql needs secrets to connect to instances. During the deletion it's not guaranteed that the secret gets deleted after the managed resource that the provider manages. This will essentially make it deadlock, as the managed resource will still contain a finalizer which blocks the deletion. See: https://docs.crossplane.io/latest/concepts/usages/#usage-for-deletion-ordering
Of is the name of the managed resource that should be protected, as set in the desired map By is the name of then managed resource which should block the deletion, as set in the desired map. As long as it exists the deletion of "Of" will be denied.
func (*ServiceRuntime) WaitForDesiredDependencies ¶ added in v4.94.1
func (s *ServiceRuntime) WaitForDesiredDependencies(mainResource string, dependencies ...string) bool
WaitForDesiredDependencies takes two arguments, the name of the main resource, which should be deployed after the dependencies. It also takes a list of names for objects to depend on. It does NOT deploy any objects, but check for their existence. If true is returned it is safe to continue with adding your main object to the desired resources. If the main resource already exists in the observed state it will always return true.
func (*ServiceRuntime) WaitForObservedDependencies ¶ added in v4.94.1
func (s *ServiceRuntime) WaitForObservedDependencies(mainResource string, dependencies ...string) bool
WaitForObservedDependencies takes two arguments, the name of the main resource, which should be deployed after the dependencies. It also takes a list of names for objects to depend on. It does NOT deploy any objects, but check for their existence. If true is returned it is safe to continue with adding your main object to the desired resources. If the main resource already exists in the observed state it will always return true.
func (*ServiceRuntime) WaitForObservedDependenciesWithConnectionDetails ¶ added in v4.94.1
func (s *ServiceRuntime) WaitForObservedDependenciesWithConnectionDetails(mainResource string, objectCDMap map[string][]string) (bool, error)
WaitForObservedDependenciesWithConnectionDetails does the same as WaitForDependencies but additionally also checks the given list of fields against the available connection details. objectCDMap should contain a map where the key is the name of the dependeny and the string slice the necessary connection detail fields.
type Step ¶ added in v4.43.0
type Step[T client.Object] struct { Name string Execute func(context.Context, T, *ServiceRuntime) *xfnproto.Result }
Step describes a single change within a service. It's essentially what was previously called a TransformFunc. We use reflect heavily with this, any changes in the ordering of the fields need to be adjusted in the `RunFunction` function.