-
Notifications
You must be signed in to change notification settings - Fork 0
/
adapter.go
117 lines (99 loc) · 3.24 KB
/
adapter.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package httppollersource
import (
"sort"
"strconv"
"strings"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
"knative.dev/eventing/pkg/reconciler/source"
"knative.dev/pkg/apis"
commonv1alpha1 "github.com/zeiss/typhoon/pkg/apis/common/v1alpha1"
"github.com/zeiss/typhoon/pkg/apis/sources/v1alpha1"
common "github.com/zeiss/typhoon/pkg/reconciler"
"github.com/zeiss/typhoon/pkg/reconciler/resource"
)
const (
envHTTPPollerEventType = "HTTPPOLLER_EVENT_TYPE"
envHTTPPollerEventSource = "HTTPPOLLER_EVENT_SOURCE"
envHTTPPollerEndpoint = "HTTPPOLLER_ENDPOINT"
envHTTPPollerMethod = "HTTPPOLLER_METHOD"
envHTTPPollerSkipVerify = "HTTPPOLLER_SKIP_VERIFY"
envHTTPPollerCACertificate = "HTTPPOLLER_CA_CERTIFICATE"
envHTTPPollerBasicAuthUsername = "HTTPPOLLER_BASICAUTH_USERNAME"
envHTTPPollerBasicAuthPassword = "HTTPPOLLER_BASICAUTH_PASSWORD"
envHTTPPollerHeaders = "HTTPPOLLER_HEADERS"
envHTTPPollerInterval = "HTTPPOLLER_INTERVAL"
)
// adapterConfig contains properties used to configure the source's adapter.
// These are automatically populated by envconfig.
type adapterConfig struct {
// Container image
Image string `default:"ghcr.io/zeiss/typhoon/httppollersource-adapter"`
// Configuration accessor for logging/metrics/tracing
configs source.ConfigAccessor
}
// BuildAdapter implements common.AdapterBuilder.
func (r *Reconciler) BuildAdapter(src commonv1alpha1.Reconcilable, sinkURI *apis.URL) (*appsv1.Deployment, error) {
typedSrc := src.(*v1alpha1.HTTPPollerSource)
return common.NewAdapterDeployment(src, sinkURI,
resource.Image(r.adapterCfg.Image),
resource.EnvVars(MakeAppEnv(typedSrc)...),
resource.EnvVars(r.adapterCfg.configs.ToEnvVars()...),
), nil
}
// MakeAppEnv extracts environment variables from the object.
// Exported to be used in external tools for local test environments.
func MakeAppEnv(src *v1alpha1.HTTPPollerSource) []corev1.EnvVar {
skipVerify := false
if src.Spec.SkipVerify != nil {
skipVerify = *src.Spec.SkipVerify
}
envs := []corev1.EnvVar{{
Name: envHTTPPollerEventType,
Value: src.Spec.EventType,
}, {
Name: envHTTPPollerEventSource,
Value: src.AsEventSource(),
}, {
Name: envHTTPPollerEndpoint,
Value: src.Spec.Endpoint.String(),
}, {
Name: envHTTPPollerMethod,
Value: src.Spec.Method,
}, {
Name: envHTTPPollerSkipVerify,
Value: strconv.FormatBool(skipVerify),
}, {
Name: envHTTPPollerInterval,
Value: src.Spec.Interval.String(),
}}
if src.Spec.Headers != nil {
headers := make([]string, 0, len(src.Spec.Headers))
for k, v := range src.Spec.Headers {
headers = append(headers, k+":"+v)
}
sort.Strings(headers)
envs = append(envs, corev1.EnvVar{
Name: envHTTPPollerHeaders,
Value: strings.Join(headers, ","),
})
}
if user := src.Spec.BasicAuthUsername; user != nil {
envs = append(envs, corev1.EnvVar{
Name: envHTTPPollerBasicAuthUsername,
Value: *user,
})
}
if passw := src.Spec.BasicAuthPassword; passw != nil {
envs = common.MaybeAppendValueFromEnvVar(envs,
envHTTPPollerBasicAuthPassword, *passw,
)
}
if src.Spec.CACertificate != nil {
envs = append(envs, corev1.EnvVar{
Name: envHTTPPollerCACertificate,
Value: *src.Spec.CACertificate,
})
}
return envs
}