Skip to content

Commit dde29f0

Browse files
authored
Merge pull request #2026 from M00nF1sh/main_helm_timeout
add helm timeout & use eks-charts helm chart
2 parents a8074f1 + 9602c45 commit dde29f0

File tree

3 files changed

+68
-21
lines changed

3 files changed

+68
-21
lines changed
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package controller
22

3+
import "time"
4+
35
const (
4-
EKSHelmChartsRepo = "https://kishorj.github.io/eks-charts"
5-
AWSLoadBalancerControllerHelmChart = "aws-load-balancer-controller"
6-
AWSLoadBalancerControllerHelmRelease = "aws-load-balancer-controller"
6+
EKSHelmChartsRepo = "https://aws.github.io/eks-charts"
7+
AWSLoadBalancerControllerHelmChart = "aws-load-balancer-controller"
8+
AWSLoadBalancerControllerHelmRelease = "aws-load-balancer-controller"
9+
AWSLoadBalancerControllerInstallationTimeout = 2 * time.Minute
710
)

test/framework/controller/installation_manager.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ func NewDefaultInstallationManager(helmReleaseManager helm.ReleaseManager, clust
2222
region: region,
2323
vpcID: vpcID,
2424

25-
logger: logger,
25+
namespace: "kube-system",
26+
controllerSAName: "aws-load-balancer-controller",
27+
logger: logger,
2628
}
2729
}
2830

@@ -35,12 +37,16 @@ type defaultInstallationManager struct {
3537
region string
3638
vpcID string
3739

38-
logger logr.Logger
40+
namespace string
41+
controllerSAName string
42+
logger logr.Logger
3943
}
4044

4145
func (m *defaultInstallationManager) ResetController() error {
4246
vals := m.computeDefaultHelmVals()
43-
_, err := m.helmReleaseManager.InstallOrUpgradeRelease(EKSHelmChartsRepo, AWSLoadBalancerControllerHelmChart, "kube-system", AWSLoadBalancerControllerHelmRelease, vals)
47+
_, err := m.helmReleaseManager.InstallOrUpgradeRelease(EKSHelmChartsRepo, AWSLoadBalancerControllerHelmChart,
48+
m.namespace, AWSLoadBalancerControllerHelmRelease, vals,
49+
helm.WithTimeout(AWSLoadBalancerControllerInstallationTimeout))
4450
return err
4551
}
4652

@@ -57,7 +63,9 @@ func (m *defaultInstallationManager) UpgradeController(controllerImage string) e
5763
vals["podLabels"] = map[string]string{
5864
"revision": string(uuid.NewUUID()),
5965
}
60-
_, err = m.helmReleaseManager.InstallOrUpgradeRelease(EKSHelmChartsRepo, AWSLoadBalancerControllerHelmChart, "kube-system", AWSLoadBalancerControllerHelmRelease, vals)
66+
_, err = m.helmReleaseManager.InstallOrUpgradeRelease(EKSHelmChartsRepo, AWSLoadBalancerControllerHelmChart,
67+
m.namespace, AWSLoadBalancerControllerHelmRelease, vals,
68+
helm.WithTimeout(AWSLoadBalancerControllerInstallationTimeout))
6169
return err
6270
}
6371

@@ -68,7 +76,7 @@ func (m *defaultInstallationManager) computeDefaultHelmVals() map[string]interfa
6876
vals["vpcId"] = m.vpcID
6977
vals["serviceAccount"] = map[string]interface{}{
7078
"create": false,
71-
"name": "aws-load-balancer-controller",
79+
"name": m.controllerSAName,
7280
}
7381
return vals
7482
}

test/framework/helm/release_manager.go

Lines changed: 49 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,45 @@ import (
99
"helm.sh/helm/v3/pkg/release"
1010
"helm.sh/helm/v3/pkg/storage/driver"
1111
"k8s.io/cli-runtime/pkg/genericclioptions"
12+
"time"
1213
)
1314

15+
// ActionOptions contains general helm action options
16+
type ActionOptions struct {
17+
// The duration to wait for helm operations. when zero, wait is disabled.
18+
Timeout time.Duration
19+
}
20+
21+
// ApplyOptions applies all ActionOption
22+
func (opts *ActionOptions) ApplyOptions(options []ActionOption) {
23+
for _, option := range options {
24+
option(opts)
25+
}
26+
}
27+
28+
// ActionOption configures ActionOptions.
29+
type ActionOption func(opts *ActionOptions)
30+
31+
// WithTimeout configures timeout for helm action
32+
func WithTimeout(timeout time.Duration) ActionOption {
33+
return func(opts *ActionOptions) {
34+
opts.Timeout = timeout
35+
}
36+
}
37+
1438
// ReleaseManager is responsible for manage helm releases
1539
type ReleaseManager interface {
16-
// install or upgrade helm release
40+
// InstallOrUpgradeRelease install or upgrade helm release
1741
InstallOrUpgradeRelease(chartRepo string, chartName string,
18-
namespace string, releaseName string, vals map[string]interface{}) (*release.Release, error)
42+
namespace string, releaseName string, vals map[string]interface{}, opts ...ActionOption) (*release.Release, error)
1943

20-
// install helm release
44+
// InstallRelease install helm release
2145
InstallRelease(chartRepo string, chartName string,
22-
namespace string, releaseName string, vals map[string]interface{}) (*release.Release, error)
46+
namespace string, releaseName string, vals map[string]interface{}, opts ...ActionOption) (*release.Release, error)
2347

24-
// upgrade helm release
48+
// UpgradeRelease upgrade helm release
2549
UpgradeRelease(chartRepo string, chartName string,
26-
namespace string, releaseName string, vals map[string]interface{}) (*release.Release, error)
50+
namespace string, releaseName string, vals map[string]interface{}, opts ...ActionOption) (*release.Release, error)
2751
}
2852

2953
// NewDefaultReleaseManager constructs new defaultReleaseManager.
@@ -43,28 +67,34 @@ type defaultReleaseManager struct {
4367
}
4468

4569
func (m *defaultReleaseManager) InstallOrUpgradeRelease(chartRepo string, chartName string,
46-
namespace string, releaseName string, vals map[string]interface{}) (*release.Release, error) {
70+
namespace string, releaseName string, vals map[string]interface{}, opts ...ActionOption) (*release.Release, error) {
4771
actionCFG := m.obtainActionConfig(namespace)
4872
historyAction := action.NewHistory(actionCFG)
4973
historyAction.Max = 1
5074
if _, err := historyAction.Run(releaseName); err == driver.ErrReleaseNotFound {
51-
return m.InstallRelease(chartRepo, chartName, namespace, releaseName, vals)
75+
return m.InstallRelease(chartRepo, chartName, namespace, releaseName, vals, opts...)
5276
} else {
53-
return m.UpgradeRelease(chartRepo, chartName, namespace, releaseName, vals)
77+
return m.UpgradeRelease(chartRepo, chartName, namespace, releaseName, vals, opts...)
5478
}
5579
}
5680

5781
func (m *defaultReleaseManager) InstallRelease(chartRepo string, chartName string,
58-
namespace string, releaseName string, vals map[string]interface{}) (*release.Release, error) {
82+
namespace string, releaseName string, vals map[string]interface{}, opts ...ActionOption) (*release.Release, error) {
5983

6084
actionCFG := m.obtainActionConfig(namespace)
6185
installAction := action.NewInstall(actionCFG)
6286
installAction.ChartPathOptions.RepoURL = chartRepo
6387
installAction.Namespace = namespace
6488
installAction.SkipCRDs = false
65-
installAction.Wait = true
6689
installAction.ReleaseName = releaseName
6790

91+
actionOpts := ActionOptions{}
92+
actionOpts.ApplyOptions(opts)
93+
if actionOpts.Timeout != 0 {
94+
installAction.Wait = true
95+
installAction.Timeout = actionOpts.Timeout
96+
}
97+
6898
cp, err := installAction.ChartPathOptions.LocateChart(chartName, cli.New())
6999
if err != nil {
70100
return nil, err
@@ -78,14 +108,20 @@ func (m *defaultReleaseManager) InstallRelease(chartRepo string, chartName strin
78108
}
79109

80110
func (m *defaultReleaseManager) UpgradeRelease(chartRepo string, chartName string,
81-
namespace string, releaseName string, vals map[string]interface{}) (*release.Release, error) {
111+
namespace string, releaseName string, vals map[string]interface{}, opts ...ActionOption) (*release.Release, error) {
82112

83113
actionCFG := m.obtainActionConfig(namespace)
84114
upgradeAction := action.NewUpgrade(actionCFG)
85115
upgradeAction.ChartPathOptions.RepoURL = chartRepo
86116
upgradeAction.Namespace = namespace
87117
upgradeAction.ResetValues = true
88-
upgradeAction.Wait = true
118+
119+
actionOpts := ActionOptions{}
120+
actionOpts.ApplyOptions(opts)
121+
if actionOpts.Timeout != 0 {
122+
upgradeAction.Wait = true
123+
upgradeAction.Timeout = actionOpts.Timeout
124+
}
89125

90126
cp, err := upgradeAction.ChartPathOptions.LocateChart(chartName, cli.New())
91127
if err != nil {

0 commit comments

Comments
 (0)