-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.go
60 lines (48 loc) · 2.01 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
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 main implements a Composition Function.
package main
import (
"github.com/alecthomas/kong"
"github.com/apple/pkl-go/pkl"
"github.com/crossplane/function-sdk-go"
fn "github.com/crossplane-contrib/function-pkl/internal/function"
)
// CLI of this Function.
type CLI struct {
Debug bool `short:"d" help:"Emit debug logs in addition to info logs."`
Network string `help:"Network on which to listen for gRPC connections." default:"tcp"`
Address string `help:"Address at which to listen for gRPC connections." default:":9443"`
TLSCertsDir string `help:"Directory containing server certs (tls.key, tls.crt) and the CA used to verify client certificates (ca.crt)" env:"TLS_SERVER_CERTS_DIR"`
Insecure bool `help:"Run without mTLS credentials. If you supply this flag --tls-server-certs-dir will be ignored."`
}
// Run this Function.
func (c *CLI) Run() error {
log, err := function.NewLogger(c.Debug)
if err != nil {
return err
}
evaluatorManager := pkl.NewEvaluatorManager()
defer func(evaluatorManager pkl.EvaluatorManager) {
if err := evaluatorManager.Close(); err != nil {
log.Info("error closing evaluatorManager", err)
}
}(evaluatorManager)
return function.Serve(&fn.Function{Log: log, EvaluatorManager: evaluatorManager},
function.Listen(c.Network, c.Address),
function.MTLSCertificates(c.TLSCertsDir),
function.Insecure(c.Insecure))
}
func main() {
ctx := kong.Parse(&CLI{}, kong.Description("A Crossplane Composition Function."))
ctx.FatalIfErrorf(ctx.Run())
}