/
add-on-jupyter-hub.go
105 lines (91 loc) · 3.07 KB
/
add-on-jupyter-hub.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
package eksconfig
import (
"encoding/hex"
"errors"
"fmt"
"github.com/aws/aws-k8s-tester/ec2config"
"github.com/aws/aws-k8s-tester/pkg/randutil"
"github.com/aws/aws-k8s-tester/pkg/timeutil"
"github.com/aws/aws-sdk-go/service/eks"
)
// AddOnJupyterHub defines parameters for EKS cluster
// add-on Jupyter Hub.
// ref. https://zero-to-jupyterhub.readthedocs.io/en/latest/index.html
type AddOnJupyterHub struct {
// Enable is 'true' to create this add-on.
Enable bool `json:"enable"`
// Created is true when the resource has been created.
// Used for delete operations.
Created bool `json:"created" read-only:"true"`
TimeFrameCreate timeutil.TimeFrame `json:"time-frame-create" read-only:"true"`
TimeFrameDelete timeutil.TimeFrame `json:"time-frame-delete" read-only:"true"`
// Namespace is the namespace to create objects in.
Namespace string `json:"namespace"`
// ProxySecretToken is 32-byte hexadecimal encoded secret token string.
// e.g. "openssl rand -hex 32"
ProxySecretToken string `json:"proxy-secret-token"`
// NLBARN is the ARN of the NLB created from the service.
NLBARN string `json:"nlb-arn" read-only:"true"`
// NLBName is the name of the NLB created from the service.
NLBName string `json:"nlb-name" read-only:"true"`
// URL is the host name for Jupyter Hub service.
URL string `json:"url" read-only:"true"`
}
// EnvironmentVariablePrefixAddOnJupyterHub is the environment variable prefix used for "eksconfig".
const EnvironmentVariablePrefixAddOnJupyterHub = AWS_K8S_TESTER_EKS_PREFIX + "ADD_ON_JUPYTER_HUB_"
// IsEnabledAddOnJupyterHub returns true if "AddOnJupyterHub" is enabled.
// Otherwise, nil the field for "omitempty".
func (cfg *Config) IsEnabledAddOnJupyterHub() bool {
if cfg.AddOnJupyterHub == nil {
return false
}
if cfg.AddOnJupyterHub.Enable {
return true
}
cfg.AddOnJupyterHub = nil
return false
}
func getDefaultAddOnJupyterHub() *AddOnJupyterHub {
return &AddOnJupyterHub{
Enable: false,
}
}
func (cfg *Config) validateAddOnJupyterHub() error {
if !cfg.IsEnabledAddOnJupyterHub() {
return nil
}
if !cfg.IsEnabledAddOnNodeGroups() && !cfg.IsEnabledAddOnManagedNodeGroups() {
return errors.New("AddOnJupyterHub.Enable true but no node group is enabled")
}
gpuFound := false
if cfg.IsEnabledAddOnNodeGroups() {
for _, cur := range cfg.AddOnNodeGroups.ASGs {
if cur.AMIType == ec2config.AMITypeAL2X8664GPU {
gpuFound = true
break
}
}
}
if !gpuFound && cfg.IsEnabledAddOnManagedNodeGroups() {
for _, cur := range cfg.AddOnManagedNodeGroups.MNGs {
if cur.AMIType == eks.AMITypesAl2X8664Gpu {
gpuFound = true
break
}
}
}
if !gpuFound {
return errors.New("AddOnJupyterHub requires GPU AMI")
}
if cfg.AddOnJupyterHub.Namespace == "" {
cfg.AddOnJupyterHub.Namespace = cfg.Name + "-jupyter-hub"
}
if cfg.AddOnJupyterHub.ProxySecretToken == "" {
cfg.AddOnJupyterHub.ProxySecretToken = randutil.Hex(32)
}
_, err := hex.DecodeString(cfg.AddOnJupyterHub.ProxySecretToken)
if err != nil {
return fmt.Errorf("cannot hex decode AddOnJupyterHub.ProxySecretToken %q", err)
}
return nil
}