Skip to content

Commit c071f78

Browse files
authored
Merge branch 'master' into cloudmap-1
2 parents 0164bcd + 7d7a273 commit c071f78

File tree

3 files changed

+64
-29
lines changed

3 files changed

+64
-29
lines changed

pkg/aws/appmesh.go

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,6 @@ const (
3737
ListRoutesTimeout = 10
3838
UpdateRouteTimeout = 10
3939
DeleteRouteTimeout = 10
40-
DefaultHealthyThreshold = 10
41-
DefaultIntervalMillis = 30000
42-
DefaultTimeoutMillis = 5000
43-
DefaultUnhealthyThreshold = 2
4440
)
4541

4642
type AppMeshAPI interface {
@@ -339,13 +335,13 @@ func (c *Cloud) CreateVirtualNode(ctx context.Context, vnode *appmeshv1beta1.Vir
339335
}
340336
if listener.HealthCheck != nil {
341337
appmeshHealthCheck := &appmesh.HealthCheckPolicy{
342-
HealthyThreshold: defaultInt64(listener.HealthCheck.HealthyThreshold, DefaultHealthyThreshold),
343-
IntervalMillis: defaultInt64(listener.HealthCheck.IntervalMillis, DefaultIntervalMillis),
338+
HealthyThreshold: listener.HealthCheck.HealthyThreshold,
339+
IntervalMillis: listener.HealthCheck.IntervalMillis,
344340
Path: listener.HealthCheck.Path,
345-
Port: defaultInt64(listener.HealthCheck.Port, listener.PortMapping.Port), //using listener's port
346-
Protocol: defaultString(listener.HealthCheck.Protocol, listener.PortMapping.Protocol), //using listener's protocol
347-
TimeoutMillis: defaultInt64(listener.HealthCheck.TimeoutMillis, DefaultTimeoutMillis),
348-
UnhealthyThreshold: defaultInt64(listener.HealthCheck.UnhealthyThreshold, DefaultUnhealthyThreshold),
341+
Port: listener.HealthCheck.Port,
342+
Protocol: listener.HealthCheck.Protocol,
343+
TimeoutMillis: listener.HealthCheck.TimeoutMillis,
344+
UnhealthyThreshold: listener.HealthCheck.UnhealthyThreshold,
349345
}
350346
appmeshListener.HealthCheck = appmeshHealthCheck
351347
}
@@ -432,13 +428,13 @@ func (c *Cloud) UpdateVirtualNode(ctx context.Context, vnode *appmeshv1beta1.Vir
432428
}
433429
if listener.HealthCheck != nil {
434430
appmeshHealthCheck := &appmesh.HealthCheckPolicy{
435-
HealthyThreshold: defaultInt64(listener.HealthCheck.HealthyThreshold, 10),
436-
IntervalMillis: defaultInt64(listener.HealthCheck.IntervalMillis, 30000),
431+
HealthyThreshold: listener.HealthCheck.HealthyThreshold,
432+
IntervalMillis: listener.HealthCheck.IntervalMillis,
437433
Path: listener.HealthCheck.Path,
438434
Port: listener.HealthCheck.Port,
439-
Protocol: defaultString(listener.HealthCheck.Protocol, appmeshv1beta1.PortProtocolHttp),
440-
TimeoutMillis: defaultInt64(listener.HealthCheck.TimeoutMillis, 5000),
441-
UnhealthyThreshold: defaultInt64(listener.HealthCheck.UnhealthyThreshold, 2),
435+
Protocol: listener.HealthCheck.Protocol,
436+
TimeoutMillis: listener.HealthCheck.TimeoutMillis,
437+
UnhealthyThreshold: listener.HealthCheck.UnhealthyThreshold,
442438
}
443439
appmeshListener.HealthCheck = appmeshHealthCheck
444440
}
@@ -1459,20 +1455,6 @@ func (c *Cloud) buildGrpcRouteMetadata(input appmeshv1beta1.GrpcRouteMetadata) *
14591455
return appmeshMetadata
14601456
}
14611457

1462-
func defaultInt64(v *int64, defaultVal int64) *int64 {
1463-
if v != nil {
1464-
return v
1465-
}
1466-
return aws.Int64(defaultVal)
1467-
}
1468-
1469-
func defaultString(v *string, defaultVal string) *string {
1470-
if v != nil {
1471-
return v
1472-
}
1473-
return aws.String(defaultVal)
1474-
}
1475-
14761458
func durationToMillis(d *appmesh.Duration) *int64 {
14771459
if d == nil {
14781460
return nil

pkg/controller/virtualnode.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ import (
2323
const (
2424
attributeKeyAppMeshMeshName = "appmesh.k8s.aws/mesh"
2525
attributeKeyAppMeshVirtualNodeName = "appmesh.k8s.aws/virtualNode"
26+
defaultHealthyThreshold = 10
27+
defaultIntervalMillis = 30000
28+
defaultTimeoutMillis = 5000
29+
defaultUnhealthyThreshold = 2
2630
)
2731

2832
func (c *Controller) handleVNode(key string) error {
@@ -488,4 +492,33 @@ func (c *Controller) mutateVirtualNodeForProcessing(vnode *appmeshv1beta1.Virtua
488492
vnode.Spec.ServiceDiscovery.CloudMap.Attributes[attributeKeyAppMeshMeshName] = vnode.Spec.MeshName
489493
vnode.Spec.ServiceDiscovery.CloudMap.Attributes[attributeKeyAppMeshVirtualNodeName] = vnode.Name
490494
}
495+
496+
if vnode.Spec.Listeners != nil {
497+
for _, listener := range vnode.Spec.Listeners {
498+
if listener.HealthCheck != nil {
499+
//if port-mapping is not set for health-check we default it to listener's port-mapping
500+
listener.HealthCheck.Port = defaultInt64(listener.HealthCheck.Port, listener.PortMapping.Port)
501+
listener.HealthCheck.Protocol = defaultString(listener.HealthCheck.Protocol, listener.PortMapping.Protocol)
502+
//below are some sane defaults for majority of applications
503+
listener.HealthCheck.HealthyThreshold = defaultInt64(listener.HealthCheck.HealthyThreshold, defaultHealthyThreshold)
504+
listener.HealthCheck.IntervalMillis = defaultInt64(listener.HealthCheck.IntervalMillis, defaultIntervalMillis)
505+
listener.HealthCheck.TimeoutMillis = defaultInt64(listener.HealthCheck.TimeoutMillis, defaultTimeoutMillis)
506+
listener.HealthCheck.UnhealthyThreshold = defaultInt64(listener.HealthCheck.UnhealthyThreshold, defaultUnhealthyThreshold)
507+
}
508+
}
509+
}
510+
}
511+
512+
func defaultInt64(v *int64, defaultVal int64) *int64 {
513+
if v != nil {
514+
return v
515+
}
516+
return awssdk.Int64(defaultVal)
517+
}
518+
519+
func defaultString(v *string, defaultVal string) *string {
520+
if v != nil {
521+
return v
522+
}
523+
return awssdk.String(defaultVal)
491524
}

pkg/controller/virtualnode_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,20 @@ func TestVNodeListenerHealthCheckNeedsUpdate(t *testing.T) {
739739
backend = "bar.local"
740740
fileAccessLogPath = awssdk.String("/dev/stdout")
741741

742+
defaultSpecHealthCheck = &appmeshv1beta1.HealthCheckPolicy{
743+
Path: awssdk.String("/"),
744+
}
745+
746+
defaultResultHealthCheck = &appmesh.HealthCheckPolicy{
747+
Path: awssdk.String("/"),
748+
Port: awssdk.Int64(port80),
749+
Protocol: awssdk.String(protocolHTTP),
750+
HealthyThreshold: awssdk.Int64(defaultHealthyThreshold),
751+
IntervalMillis: awssdk.Int64(defaultIntervalMillis),
752+
TimeoutMillis: awssdk.Int64(defaultTimeoutMillis),
753+
UnhealthyThreshold: awssdk.Int64(defaultUnhealthyThreshold),
754+
}
755+
742756
specHealthCheck = &appmeshv1beta1.HealthCheckPolicy{
743757
HealthyThreshold: awssdk.Int64(1),
744758
IntervalMillis: awssdk.Int64(1000),
@@ -807,6 +821,7 @@ func TestVNodeListenerHealthCheckNeedsUpdate(t *testing.T) {
807821
needsUpdate bool
808822
}{
809823
{"no health-check defined", nil, nil, false},
824+
{"health-check are in sync with default", defaultSpecHealthCheck, defaultResultHealthCheck, false},
810825
{"health-check are in sync", specHealthCheck, resultHealthCheck, false},
811826
{"Path: target health-check is different", specHealthCheck, differentPathHealthCheck, true},
812827
{"Protocol: target health-check is different", specHealthCheck, differentProtocolHealthCheck, true},
@@ -817,6 +832,11 @@ func TestVNodeListenerHealthCheckNeedsUpdate(t *testing.T) {
817832
t.Run(tt.name, func(t *testing.T) {
818833
spec := newAPIVirtualNode([]int64{port80}, []string{protocolHTTP}, []string{backend}, hostname, fileAccessLogPath)
819834
spec.Spec.Listeners[0].HealthCheck = tt.desired
835+
c := &Controller{}
836+
spec.Namespace = "test-ns"
837+
spec.Spec.MeshName = "test-mesh"
838+
c.mutateVirtualNodeForProcessing(spec)
839+
820840
result := newAWSVirtualNode([]int64{port80}, []string{protocolHTTP}, []string{backend}, hostname, fileAccessLogPath)
821841
result.Data.Spec.Listeners[0].HealthCheck = tt.target
822842
if res := vnodeNeedsUpdate(spec, result); res != tt.needsUpdate {

0 commit comments

Comments
 (0)