Documentation
¶
Overview ¶
Package function is an SDK for building Composition Functions.
Example ¶
package main
import (
"fmt"
"google.golang.org/protobuf/encoding/protojson"
"github.com/crossplane/function-sdk-go/proto/v1beta1"
"github.com/crossplane/function-sdk-go/request"
"github.com/crossplane/function-sdk-go/resource"
"github.com/crossplane/function-sdk-go/resource/composed"
"github.com/crossplane/function-sdk-go/response"
)
var req = &v1beta1.RunFunctionRequest{
Observed: &v1beta1.State{
Composite: &v1beta1.Resource{
Resource: resource.MustStructJSON(`{"spec":{"widgets":9001}}`),
},
},
}
func main() {
// Create a response to the request passed to your RunFunction method.
rsp := response.To(req, response.DefaultTTL)
// Get the observed composite resource (XR) from the request.
oxr, _ := request.GetObservedCompositeResource(req)
// Read the desired number of widgets from our observed XR.
widgets, _ := oxr.Resource.GetInteger("spec.widgets")
// Get any existing desired composed resources from the request.
// Desired composed resources would exist if a previous Function in the
// pipeline added them.
desired, _ := request.GetDesiredComposedResources(req)
// Create a desired composed resource using unstructured data.
desired["new"] = &resource.DesiredComposed{Resource: composed.New()}
desired["new"].Resource.SetAPIVersion("example.org/v1")
desired["new"].Resource.SetKind("CoolResource")
// Set the desired composed resource's widgets to the value extracted from
// the observed XR.
desired["new"].Resource.SetInteger("spec.widgets", widgets)
// Create a desired composed resource using structured data.
// db, _ := composed.From(&v1beta1.Instance{})
// desired["database"] = &resource.DesiredComposed{Resource: db}
// Add a label to our new desired resource, and any other.
for _, r := range desired {
r.Resource.SetLabels(map[string]string{"coolness": "high"})
}
// Set our updated desired composed resource in the response we'll return.
_ = response.SetDesiredComposedResources(rsp, desired)
j, _ := protojson.Marshal(rsp)
fmt.Println(string(j))
}
Output: {"meta":{"ttl":"60s"},"desired":{"resources":{"new":{"resource":{"apiVersion":"example.org/v1","kind":"CoolResource","metadata":{"labels":{"coolness":"high"}},"spec":{"widgets":9001}}}}}}
Index ¶
Examples ¶
Constants ¶
const ( DefaultNetwork = "tcp" DefaultAddress = ":9443" )
Default ServeOptions.
Variables ¶
This section is empty.
Functions ¶
func Serve ¶
func Serve(fn v1beta1.FunctionRunnerServiceServer, o ...ServeOption) error
Serve the supplied Function by creating a gRPC server and listening for RunFunctionRequests. Blocks until the server returns an error.
Types ¶
type ServeOption ¶
type ServeOption func(o *ServeOptions) error
A ServeOption configures how a Function is served.
func Insecure ¶
func Insecure(insecure bool) ServeOption
Insecure specifies whether this Function should be served insecurely - i.e. without mTLS authentication. This is only useful for testing and development. Crossplane will always send requests using mTLS.
func Listen ¶
func Listen(network, address string) ServeOption
Listen configures the network and address on which the Function will listen for RunFunctionRequests.
func MTLSCertificates ¶
func MTLSCertificates(dir string) ServeOption
MTLSCertificates specifies a directory from which to load mTLS certificates. The directory must contain the server certificate (tls.key and tls.crt), as well as a CA certificate (ca.crt) that will be used to authenticate clients.
type ServeOptions ¶
type ServeOptions struct {
Network string
Address string
Credentials credentials.TransportCredentials
}
ServeOptions configure how a Function is served.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package context contains utilities for working with Function context.
|
Package context contains utilities for working with Function context. |
|
Package errors is a github.com/pkg/errors compatible API for native errors.
|
Package errors is a github.com/pkg/errors compatible API for native errors. |
|
Package logging provides function's recommended logging interface.
|
Package logging provides function's recommended logging interface. |
|
proto
|
|
|
Package request contains utilities for working with RunFunctionRequests.
|
Package request contains utilities for working with RunFunctionRequests. |
|
Package resource contains utilities to convert protobuf representations of Crossplane resources to unstructured Go types, often with convenient getters and setters.
|
Package resource contains utilities to convert protobuf representations of Crossplane resources to unstructured Go types, often with convenient getters and setters. |
|
composed
Package composed contains an unstructured composed resource.
|
Package composed contains an unstructured composed resource. |
|
composite
Package composite contains an unstructured composite resource (XR).
|
Package composite contains an unstructured composite resource (XR). |
|
Package response contains utilities for working with RunFunctionResponses.
|
Package response contains utilities for working with RunFunctionResponses. |