Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add conversion webhook config to dev CRD variant #1463

Open
wants to merge 38 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
7da5cdd
Add conversion webhook config to dev CRD variant
skhalash Sep 19, 2024
7f2a84b
Rename v1beta1 types
skhalash Sep 19, 2024
5c34b46
Implemented ConvertTo
skhalash Sep 19, 2024
bb557a9
Implemented ConvertFrom
skhalash Sep 19, 2024
b6c0794
Setup webhook
skhalash Sep 19, 2024
cd46333
Fix
skhalash Sep 19, 2024
d8f252a
Adapt rbac
skhalash Sep 20, 2024
ff473c3
Move validating webhook config to a separate file
skhalash Sep 20, 2024
93d8226
Fix conversion
skhalash Sep 20, 2024
f18d675
Add feature flag
skhalash Sep 22, 2024
23e3bc6
Fix
skhalash Sep 22, 2024
34abeb4
Fix
skhalash Sep 22, 2024
7e178bc
Add basic unit test
skhalash Sep 22, 2024
da6debe
Add more assertions
skhalash Sep 22, 2024
dc5585a
Add even more assertions
skhalash Sep 22, 2024
402c74c
Implement ConvertFrom
skhalash Sep 22, 2024
9887371
Add round-trip tests
skhalash Sep 22, 2024
e430a86
Use go-cmp
skhalash Sep 22, 2024
fc18509
Fix lint
skhalash Sep 22, 2024
db23599
Fix tests
skhalash Sep 23, 2024
b0e9595
Add more assertions
skhalash Sep 23, 2024
d05404a
Remove comment
skhalash Sep 23, 2024
1a4d385
Merge branch 'main' of github.com:kyma-project/telemetry-manager into…
skhalash Sep 23, 2024
ed9aeff
Merge branch 'main' of github.com:kyma-project/telemetry-manager into…
skhalash Sep 25, 2024
56724cb
Fix rbac
skhalash Sep 25, 2024
2d75a06
Path the whole conversion session
skhalash Sep 25, 2024
e277b9f
Improve unit tests
skhalash Sep 25, 2024
4a197da
Add e2e test
skhalash Sep 25, 2024
a8c9558
Adapt v1beta1 log pipeline
skhalash Sep 25, 2024
569a3d8
make manifests
skhalash Sep 25, 2024
249024c
Refactor creating validation webhook: fix dupl
skhalash Sep 26, 2024
2ea47b2
Minor renamings
skhalash Sep 26, 2024
3d38875
Fix rbac
skhalash Sep 26, 2024
c695873
Strategic merge patch
skhalash Sep 26, 2024
d965957
Adapt threshold
skhalash Sep 26, 2024
062e30b
Adapt threshold
skhalash Sep 26, 2024
ec7621a
Merge branch 'main' of github.com:kyma-project/telemetry-manager into…
skhalash Sep 26, 2024
b916b28
Use simple merge
skhalash Sep 26, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .testcoverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ override:
path: ^internal/resources/selfmonitor$
- threshold: 75
path: ^internal/resourcelock$
- threshold: 86
- threshold: 85
path: ^internal/webhookcert$
- threshold: 70
path: ^webhook/logpipeline
Expand Down
186 changes: 186 additions & 0 deletions apis/telemetry/v1alpha1/logpipeline_conversion.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
package v1alpha1

import (
"errors"

"sigs.k8s.io/controller-runtime/pkg/conversion"

telemetryv1beta1 "github.com/kyma-project/telemetry-manager/apis/telemetry/v1beta1"
)

var errSrcTypeUnsupported = errors.New("source type is not LogPipeline v1alpha1")
var errDstTypeUnsupported = errors.New("destination type is not LogPipeline v1beta1")

// ConvertTo converts this LogPipeline to the Hub version (v1beta1).
func (lp *LogPipeline) ConvertTo(dstRaw conversion.Hub) error {
src := lp
dst, ok := dstRaw.(*telemetryv1beta1.LogPipeline)
if !ok {
return errDstTypeUnsupported
}

dst.ObjectMeta = src.ObjectMeta

srcAppInput := src.Spec.Input.Application
dst.Spec.Input = telemetryv1beta1.LogPipelineInput{
Runtime: telemetryv1beta1.LogPipelineRuntimeInput{
Enabled: srcAppInput.Enabled,
Namespaces: telemetryv1beta1.LogPipelineInputNamespaces(srcAppInput.Namespaces),
Containers: telemetryv1beta1.LogPipelineInputContainers(srcAppInput.Containers),
KeepAnnotations: srcAppInput.KeepAnnotations,
DropLabels: srcAppInput.DropLabels,
KeepOriginalBody: srcAppInput.KeepOriginalBody,
},
}

for _, f := range src.Spec.Files {
dst.Spec.Files = append(dst.Spec.Files, telemetryv1beta1.LogPipelineFileMount(f))
}

for _, f := range src.Spec.Filters {
dst.Spec.Filters = append(dst.Spec.Filters, telemetryv1beta1.LogPipelineFilter(f))
}

if srcHTTPOutput := src.Spec.Output.HTTP; srcHTTPOutput != nil {
dst.Spec.Output.HTTP = &telemetryv1beta1.LogPipelineHTTPOutput{
Host: v1Alpha1ValueTypeToV1Beta1(srcHTTPOutput.Host),
User: v1Alpha1ValueTypeToV1Beta1(srcHTTPOutput.User),
Password: v1Alpha1ValueTypeToV1Beta1(srcHTTPOutput.Password),
URI: srcHTTPOutput.URI,
Port: srcHTTPOutput.Port,
Compress: srcHTTPOutput.Compress,
Format: srcHTTPOutput.Format,
TLSConfig: v1Alpha1TLSToV1Beta1(srcHTTPOutput.TLSConfig),
Dedot: srcHTTPOutput.Dedot,
}
}

if srcCustomOutput := src.Spec.Output.Custom; srcCustomOutput != "" {
dst.Spec.Output.Custom = srcCustomOutput
}

dst.Status = telemetryv1beta1.LogPipelineStatus(src.Status)

return nil
}

func v1Alpha1ValueTypeToV1Beta1(src ValueType) telemetryv1beta1.ValueType {
if src.ValueFrom != nil && src.ValueFrom.SecretKeyRef != nil {
return telemetryv1beta1.ValueType{
ValueFrom: &telemetryv1beta1.ValueFromSource{
SecretKeyRef: (*telemetryv1beta1.SecretKeyRef)(src.ValueFrom.SecretKeyRef),
},
}
}

return telemetryv1beta1.ValueType{
Value: src.Value,
}
}

func v1Alpha1TLSToV1Beta1(src TLSConfig) telemetryv1beta1.LogPipelineHTTPOutputTLS {
var dst telemetryv1beta1.LogPipelineHTTPOutputTLS

if src.CA != nil {
ca := v1Alpha1ValueTypeToV1Beta1(*src.CA)
dst.CA = &ca
}

if src.Cert != nil {
cert := v1Alpha1ValueTypeToV1Beta1(*src.Cert)
dst.Cert = &cert
}

if src.Key != nil {
key := v1Alpha1ValueTypeToV1Beta1(*src.Key)
dst.Key = &key
}

dst.Disabled = src.Disabled
dst.SkipCertificateValidation = src.SkipCertificateValidation

return dst
}

// ConvertFrom converts from the Hub version (v1beta1) to this version.
func (lp *LogPipeline) ConvertFrom(srcRaw conversion.Hub) error {
dst := lp
src, ok := srcRaw.(*telemetryv1beta1.LogPipeline)
if !ok {
return errSrcTypeUnsupported
}

dst.ObjectMeta = src.ObjectMeta

srcRuntimeInput := src.Spec.Input.Runtime
dst.Spec.Input.Application = ApplicationInput{
Enabled: srcRuntimeInput.Enabled,
Namespaces: InputNamespaces(srcRuntimeInput.Namespaces),
Containers: InputContainers(srcRuntimeInput.Containers),
KeepAnnotations: srcRuntimeInput.KeepAnnotations,
DropLabels: srcRuntimeInput.DropLabels,
KeepOriginalBody: srcRuntimeInput.KeepOriginalBody,
}

for _, f := range src.Spec.Files {
dst.Spec.Files = append(dst.Spec.Files, FileMount(f))
}

for _, f := range src.Spec.Filters {
dst.Spec.Filters = append(dst.Spec.Filters, Filter(f))
}

if srcHTTPOutput := src.Spec.Output.HTTP; srcHTTPOutput != nil {
dst.Spec.Output.HTTP = &HTTPOutput{
Host: v1Beta1ValueTypeToV1Alpha1(srcHTTPOutput.Host),
User: v1Beta1ValueTypeToV1Alpha1(srcHTTPOutput.User),
Password: v1Beta1ValueTypeToV1Alpha1(srcHTTPOutput.Password),
URI: srcHTTPOutput.URI,
Port: srcHTTPOutput.Port,
Compress: srcHTTPOutput.Compress,
Format: srcHTTPOutput.Format,
TLSConfig: v1Beta1TLSToV1Alpha1(srcHTTPOutput.TLSConfig),
Dedot: srcHTTPOutput.Dedot,
}
}

if srcCustomOutput := src.Spec.Output.Custom; srcCustomOutput != "" {
dst.Spec.Output.Custom = srcCustomOutput
}

dst.Status = LogPipelineStatus(src.Status)

return nil
}

func v1Beta1TLSToV1Alpha1(src telemetryv1beta1.LogPipelineHTTPOutputTLS) TLSConfig {
var dst TLSConfig
if src.CA != nil {
ca := v1Beta1ValueTypeToV1Alpha1(*src.CA)
dst.CA = &ca
}
if src.Cert != nil {
cert := v1Beta1ValueTypeToV1Alpha1(*src.Cert)
dst.Cert = &cert
}
if src.Key != nil {
key := v1Beta1ValueTypeToV1Alpha1(*src.Key)
dst.Key = &key
}
dst.Disabled = src.Disabled
dst.SkipCertificateValidation = src.SkipCertificateValidation
return dst
}

func v1Beta1ValueTypeToV1Alpha1(src telemetryv1beta1.ValueType) ValueType {
if src.ValueFrom != nil && src.ValueFrom.SecretKeyRef != nil {
return ValueType{
ValueFrom: &ValueFromSource{
SecretKeyRef: (*SecretKeyRef)(src.ValueFrom.SecretKeyRef),
},
}
}
return ValueType{
Value: src.Value,
}
}
Loading
Loading