mirror of https://github.com/kubernetes/kops.git
Merge pull request #16294 from justinsb/wait_should_be_an_attribute
refactor: wait for load balancer readiness using a private field
This commit is contained in:
commit
1067b6279b
|
@ -193,6 +193,12 @@ func (b *APILoadBalancerBuilder) Build(c *fi.CloudupModelBuilderContext) error {
|
||||||
Type: fi.PtrTo("network"),
|
Type: fi.PtrTo("network"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Wait for all load balancer components to be created (including network interfaces needed for NoneDNS).
|
||||||
|
// Limiting this to clusters using NoneDNS because load balancer creation is quite slow.
|
||||||
|
if b.Cluster.UsesNoneDNS() {
|
||||||
|
nlb.SetWaitForLoadBalancerReady(true)
|
||||||
|
}
|
||||||
|
|
||||||
clb = &awstasks.ClassicLoadBalancer{
|
clb = &awstasks.ClassicLoadBalancer{
|
||||||
Name: fi.PtrTo("api." + b.ClusterName()),
|
Name: fi.PtrTo("api." + b.ClusterName()),
|
||||||
Lifecycle: b.Lifecycle,
|
Lifecycle: b.Lifecycle,
|
||||||
|
|
|
@ -17,6 +17,7 @@ limitations under the License.
|
||||||
package awstasks
|
package awstasks
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
@ -76,6 +77,13 @@ type NetworkLoadBalancer struct {
|
||||||
// WellKnownServices indicates which services are supported by this resource.
|
// WellKnownServices indicates which services are supported by this resource.
|
||||||
// This field is internal and is not rendered to the cloud.
|
// This field is internal and is not rendered to the cloud.
|
||||||
WellKnownServices []wellknownservices.WellKnownService
|
WellKnownServices []wellknownservices.WellKnownService
|
||||||
|
|
||||||
|
// waitForLoadBalancerReady controls whether we wait for the load balancer to be ready before completing the "Render" operation.
|
||||||
|
waitForLoadBalancerReady bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *NetworkLoadBalancer) SetWaitForLoadBalancerReady(v bool) {
|
||||||
|
e.waitForLoadBalancerReady = v
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ fi.CompareWithID = &NetworkLoadBalancer{}
|
var _ fi.CompareWithID = &NetworkLoadBalancer{}
|
||||||
|
@ -556,6 +564,8 @@ func (*NetworkLoadBalancer) CheckChanges(a, e, changes *NetworkLoadBalancer) err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *NetworkLoadBalancer) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *NetworkLoadBalancer) error {
|
func (_ *NetworkLoadBalancer) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *NetworkLoadBalancer) error {
|
||||||
|
ctx := context.TODO()
|
||||||
|
|
||||||
var loadBalancerName string
|
var loadBalancerName string
|
||||||
var loadBalancerArn string
|
var loadBalancerArn string
|
||||||
|
|
||||||
|
@ -610,22 +620,17 @@ func (_ *NetworkLoadBalancer) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Ne
|
||||||
e.HostedZoneId = lb.CanonicalHostedZoneId
|
e.HostedZoneId = lb.CanonicalHostedZoneId
|
||||||
e.VPC = &VPC{ID: lb.VpcId}
|
e.VPC = &VPC{ID: lb.VpcId}
|
||||||
loadBalancerArn = fi.ValueOf(lb.LoadBalancerArn)
|
loadBalancerArn = fi.ValueOf(lb.LoadBalancerArn)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for all load balancer components to be created (including network interfaces needed for NoneDNS).
|
if e.waitForLoadBalancerReady {
|
||||||
// Limiting this to clusters using NoneDNS because load balancer creation is quite slow.
|
klog.Infof("Waiting for load balancer %q to be created...", loadBalancerName)
|
||||||
for _, tg := range e.TargetGroups {
|
request := &elbv2.DescribeLoadBalancersInput{
|
||||||
if strings.HasPrefix(fi.ValueOf(tg.Name), "kops-controller") {
|
Names: []*string{&loadBalancerName},
|
||||||
klog.Infof("Waiting for load balancer %q to be created...", loadBalancerName)
|
}
|
||||||
request := &elbv2.DescribeLoadBalancersInput{
|
|
||||||
Names: []*string{&loadBalancerName},
|
err := t.Cloud.ELBV2().WaitUntilLoadBalancerAvailableWithContext(ctx, request)
|
||||||
}
|
if err != nil {
|
||||||
err := t.Cloud.ELBV2().WaitUntilLoadBalancerAvailable(request)
|
return fmt.Errorf("error waiting for NLB %q: %w", loadBalancerName, err)
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error waiting for NLB %q: %w", loadBalancerName, err)
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue