Split NewBinDataAsset into NewBinAsset and MustBinAsset

pull/4203/head
tstromberg 2019-05-06 11:37:54 -07:00
parent 614afc82f2
commit 14209a487c
4 changed files with 83 additions and 74 deletions

View File

@ -32,18 +32,18 @@ To add a new addon to minikube the following steps are required:
var Addons = map[string]*Addon{ var Addons = map[string]*Addon{
..., ...,
// add other addon asset // add other addon asset
"efk": NewAddon([]*BinDataAsset{ "efk": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/efk/efk-configmap.yaml", "deploy/addons/efk/efk-configmap.yaml",
constants.AddonsPath, constants.AddonsPath,
"efk-configmap.yaml", "efk-configmap.yaml",
"0640"), "0640"),
NewBinDataAsset( MustBinAsset(
"deploy/addons/efk/efk-rc.yaml", "deploy/addons/efk/efk-rc.yaml",
constants.AddonsPath, constants.AddonsPath,
"efk-rc.yaml", "efk-rc.yaml",
"0640"), "0640"),
NewBinDataAsset( MustBinAsset(
"deploy/addons/efk/efk-svc.yaml", "deploy/addons/efk/efk-svc.yaml",
constants.AddonsPath, constants.AddonsPath,
"efk-svc.yaml", "efk-svc.yaml",

View File

@ -171,7 +171,7 @@ func copyConfigFiles() error {
} }
func copyAssetToDest(targetName, dest string) error { func copyAssetToDest(targetName, dest string) error {
var asset *assets.BinDataAsset var asset *assets.BinAsset
for _, a := range assets.Addons["gvisor"].Assets { for _, a := range assets.Addons["gvisor"].Assets {
if a.GetTargetName() == targetName { if a.GetTargetName() == targetName {
asset = a asset = a

View File

@ -31,13 +31,13 @@ import (
// Addon is a named list of assets, that can be enabled // Addon is a named list of assets, that can be enabled
type Addon struct { type Addon struct {
Assets []*BinDataAsset Assets []*BinAsset
enabled bool enabled bool
addonName string addonName string
} }
// NewAddon creates a new Addon // NewAddon creates a new Addon
func NewAddon(assets []*BinDataAsset, enabled bool, addonName string) *Addon { func NewAddon(assets []*BinAsset, enabled bool, addonName string) *Addon {
a := &Addon{ a := &Addon{
Assets: assets, Assets: assets,
enabled: enabled, enabled: enabled,
@ -61,260 +61,260 @@ func (a *Addon) IsEnabled() (bool, error) {
// Addons is the list of addons // Addons is the list of addons
var Addons = map[string]*Addon{ var Addons = map[string]*Addon{
"addon-manager": NewAddon([]*BinDataAsset{ "addon-manager": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/addon-manager.yaml", "deploy/addons/addon-manager.yaml",
"/etc/kubernetes/manifests/", "/etc/kubernetes/manifests/",
"addon-manager.yaml", "addon-manager.yaml",
"0640", "0640",
true), true),
}, true, "addon-manager"), }, true, "addon-manager"),
"dashboard": NewAddon([]*BinDataAsset{ "dashboard": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/dashboard/dashboard-dp.yaml", "deploy/addons/dashboard/dashboard-dp.yaml",
constants.AddonsPath, constants.AddonsPath,
"dashboard-dp.yaml", "dashboard-dp.yaml",
"0640", "0640",
true), true),
NewBinDataAsset( MustBinAsset(
"deploy/addons/dashboard/dashboard-svc.yaml", "deploy/addons/dashboard/dashboard-svc.yaml",
constants.AddonsPath, constants.AddonsPath,
"dashboard-svc.yaml", "dashboard-svc.yaml",
"0640", "0640",
false), false),
}, false, "dashboard"), }, false, "dashboard"),
"default-storageclass": NewAddon([]*BinDataAsset{ "default-storageclass": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/storageclass/storageclass.yaml", "deploy/addons/storageclass/storageclass.yaml",
constants.AddonsPath, constants.AddonsPath,
"storageclass.yaml", "storageclass.yaml",
"0640", "0640",
false), false),
}, true, "default-storageclass"), }, true, "default-storageclass"),
"storage-provisioner": NewAddon([]*BinDataAsset{ "storage-provisioner": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/storage-provisioner/storage-provisioner.yaml", "deploy/addons/storage-provisioner/storage-provisioner.yaml",
constants.AddonsPath, constants.AddonsPath,
"storage-provisioner.yaml", "storage-provisioner.yaml",
"0640", "0640",
true), true),
}, true, "storage-provisioner"), }, true, "storage-provisioner"),
"storage-provisioner-gluster": NewAddon([]*BinDataAsset{ "storage-provisioner-gluster": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/storage-provisioner-gluster/storage-gluster-ns.yaml", "deploy/addons/storage-provisioner-gluster/storage-gluster-ns.yaml",
constants.AddonsPath, constants.AddonsPath,
"storage-gluster-ns.yaml", "storage-gluster-ns.yaml",
"0640", "0640",
false), false),
NewBinDataAsset( MustBinAsset(
"deploy/addons/storage-provisioner-gluster/glusterfs-daemonset.yaml", "deploy/addons/storage-provisioner-gluster/glusterfs-daemonset.yaml",
constants.AddonsPath, constants.AddonsPath,
"glusterfs-daemonset.yaml", "glusterfs-daemonset.yaml",
"0640", "0640",
false), false),
NewBinDataAsset( MustBinAsset(
"deploy/addons/storage-provisioner-gluster/heketi-deployment.yaml", "deploy/addons/storage-provisioner-gluster/heketi-deployment.yaml",
constants.AddonsPath, constants.AddonsPath,
"heketi-deployment.yaml", "heketi-deployment.yaml",
"0640", "0640",
false), false),
NewBinDataAsset( MustBinAsset(
"deploy/addons/storage-provisioner-gluster/storage-provisioner-glusterfile.yaml", "deploy/addons/storage-provisioner-gluster/storage-provisioner-glusterfile.yaml",
constants.AddonsPath, constants.AddonsPath,
"storage-privisioner-glusterfile.yaml", "storage-privisioner-glusterfile.yaml",
"0640", "0640",
false), false),
}, false, "storage-provisioner-gluster"), }, false, "storage-provisioner-gluster"),
"heapster": NewAddon([]*BinDataAsset{ "heapster": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/heapster/influx-grafana-rc.yaml", "deploy/addons/heapster/influx-grafana-rc.yaml",
constants.AddonsPath, constants.AddonsPath,
"influxGrafana-rc.yaml", "influxGrafana-rc.yaml",
"0640", "0640",
true), true),
NewBinDataAsset( MustBinAsset(
"deploy/addons/heapster/grafana-svc.yaml", "deploy/addons/heapster/grafana-svc.yaml",
constants.AddonsPath, constants.AddonsPath,
"grafana-svc.yaml", "grafana-svc.yaml",
"0640", "0640",
false), false),
NewBinDataAsset( MustBinAsset(
"deploy/addons/heapster/influxdb-svc.yaml", "deploy/addons/heapster/influxdb-svc.yaml",
constants.AddonsPath, constants.AddonsPath,
"influxdb-svc.yaml", "influxdb-svc.yaml",
"0640", "0640",
false), false),
NewBinDataAsset( MustBinAsset(
"deploy/addons/heapster/heapster-rc.yaml", "deploy/addons/heapster/heapster-rc.yaml",
constants.AddonsPath, constants.AddonsPath,
"heapster-rc.yaml", "heapster-rc.yaml",
"0640", "0640",
true), true),
NewBinDataAsset( MustBinAsset(
"deploy/addons/heapster/heapster-svc.yaml", "deploy/addons/heapster/heapster-svc.yaml",
constants.AddonsPath, constants.AddonsPath,
"heapster-svc.yaml", "heapster-svc.yaml",
"0640", "0640",
false), false),
}, false, "heapster"), }, false, "heapster"),
"efk": NewAddon([]*BinDataAsset{ "efk": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/efk/elasticsearch-rc.yaml", "deploy/addons/efk/elasticsearch-rc.yaml",
constants.AddonsPath, constants.AddonsPath,
"elasticsearch-rc.yaml", "elasticsearch-rc.yaml",
"0640", "0640",
true), true),
NewBinDataAsset( MustBinAsset(
"deploy/addons/efk/elasticsearch-svc.yaml", "deploy/addons/efk/elasticsearch-svc.yaml",
constants.AddonsPath, constants.AddonsPath,
"elasticsearch-svc.yaml", "elasticsearch-svc.yaml",
"0640", "0640",
false), false),
NewBinDataAsset( MustBinAsset(
"deploy/addons/efk/fluentd-es-rc.yaml", "deploy/addons/efk/fluentd-es-rc.yaml",
constants.AddonsPath, constants.AddonsPath,
"fluentd-es-rc.yaml", "fluentd-es-rc.yaml",
"0640", "0640",
true), true),
NewBinDataAsset( MustBinAsset(
"deploy/addons/efk/fluentd-es-configmap.yaml", "deploy/addons/efk/fluentd-es-configmap.yaml",
constants.AddonsPath, constants.AddonsPath,
"fluentd-es-configmap.yaml", "fluentd-es-configmap.yaml",
"0640", "0640",
false), false),
NewBinDataAsset( MustBinAsset(
"deploy/addons/efk/kibana-rc.yaml", "deploy/addons/efk/kibana-rc.yaml",
constants.AddonsPath, constants.AddonsPath,
"kibana-rc.yaml", "kibana-rc.yaml",
"0640", "0640",
false), false),
NewBinDataAsset( MustBinAsset(
"deploy/addons/efk/kibana-svc.yaml", "deploy/addons/efk/kibana-svc.yaml",
constants.AddonsPath, constants.AddonsPath,
"kibana-svc.yaml", "kibana-svc.yaml",
"0640", "0640",
false), false),
}, false, "efk"), }, false, "efk"),
"ingress": NewAddon([]*BinDataAsset{ "ingress": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/ingress/ingress-configmap.yaml", "deploy/addons/ingress/ingress-configmap.yaml",
constants.AddonsPath, constants.AddonsPath,
"ingress-configmap.yaml", "ingress-configmap.yaml",
"0640", "0640",
false), false),
NewBinDataAsset( MustBinAsset(
"deploy/addons/ingress/ingress-rbac.yaml", "deploy/addons/ingress/ingress-rbac.yaml",
constants.AddonsPath, constants.AddonsPath,
"ingress-rbac.yaml", "ingress-rbac.yaml",
"0640", "0640",
false), false),
NewBinDataAsset( MustBinAsset(
"deploy/addons/ingress/ingress-dp.yaml", "deploy/addons/ingress/ingress-dp.yaml",
constants.AddonsPath, constants.AddonsPath,
"ingress-dp.yaml", "ingress-dp.yaml",
"0640", "0640",
true), true),
NewBinDataAsset( MustBinAsset(
"deploy/addons/ingress/ingress-svc.yaml", "deploy/addons/ingress/ingress-svc.yaml",
constants.AddonsPath, constants.AddonsPath,
"ingress-svc.yaml", "ingress-svc.yaml",
"0640", "0640",
false), false),
}, false, "ingress"), }, false, "ingress"),
"metrics-server": NewAddon([]*BinDataAsset{ "metrics-server": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/metrics-server/metrics-apiservice.yaml", "deploy/addons/metrics-server/metrics-apiservice.yaml",
constants.AddonsPath, constants.AddonsPath,
"metrics-apiservice.yaml", "metrics-apiservice.yaml",
"0640", "0640",
false), false),
NewBinDataAsset( MustBinAsset(
"deploy/addons/metrics-server/metrics-server-deployment.yaml", "deploy/addons/metrics-server/metrics-server-deployment.yaml",
constants.AddonsPath, constants.AddonsPath,
"metrics-server-deployment.yaml", "metrics-server-deployment.yaml",
"0640", "0640",
true), true),
NewBinDataAsset( MustBinAsset(
"deploy/addons/metrics-server/metrics-server-service.yaml", "deploy/addons/metrics-server/metrics-server-service.yaml",
constants.AddonsPath, constants.AddonsPath,
"metrics-server-service.yaml", "metrics-server-service.yaml",
"0640", "0640",
false), false),
}, false, "metrics-server"), }, false, "metrics-server"),
"registry": NewAddon([]*BinDataAsset{ "registry": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/registry/registry-rc.yaml", "deploy/addons/registry/registry-rc.yaml",
constants.AddonsPath, constants.AddonsPath,
"registry-rc.yaml", "registry-rc.yaml",
"0640", "0640",
false), false),
NewBinDataAsset( MustBinAsset(
"deploy/addons/registry/registry-svc.yaml", "deploy/addons/registry/registry-svc.yaml",
constants.AddonsPath, constants.AddonsPath,
"registry-svc.yaml", "registry-svc.yaml",
"0640", "0640",
false), false),
}, false, "registry"), }, false, "registry"),
"registry-creds": NewAddon([]*BinDataAsset{ "registry-creds": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/registry-creds/registry-creds-rc.yaml", "deploy/addons/registry-creds/registry-creds-rc.yaml",
constants.AddonsPath, constants.AddonsPath,
"registry-creds-rc.yaml", "registry-creds-rc.yaml",
"0640", "0640",
false), false),
}, false, "registry-creds"), }, false, "registry-creds"),
"freshpod": NewAddon([]*BinDataAsset{ "freshpod": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/freshpod/freshpod-rc.yaml", "deploy/addons/freshpod/freshpod-rc.yaml",
constants.AddonsPath, constants.AddonsPath,
"freshpod-rc.yaml", "freshpod-rc.yaml",
"0640", "0640",
true), true),
}, false, "freshpod"), }, false, "freshpod"),
"nvidia-driver-installer": NewAddon([]*BinDataAsset{ "nvidia-driver-installer": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/gpu/nvidia-driver-installer.yaml", "deploy/addons/gpu/nvidia-driver-installer.yaml",
constants.AddonsPath, constants.AddonsPath,
"nvidia-driver-installer.yaml", "nvidia-driver-installer.yaml",
"0640", "0640",
true), true),
}, false, "nvidia-driver-installer"), }, false, "nvidia-driver-installer"),
"nvidia-gpu-device-plugin": NewAddon([]*BinDataAsset{ "nvidia-gpu-device-plugin": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/gpu/nvidia-gpu-device-plugin.yaml", "deploy/addons/gpu/nvidia-gpu-device-plugin.yaml",
constants.AddonsPath, constants.AddonsPath,
"nvidia-gpu-device-plugin.yaml", "nvidia-gpu-device-plugin.yaml",
"0640", "0640",
true), true),
}, false, "nvidia-gpu-device-plugin"), }, false, "nvidia-gpu-device-plugin"),
"logviewer": NewAddon([]*BinDataAsset{ "logviewer": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/logviewer/logviewer-dp-and-svc.yaml", "deploy/addons/logviewer/logviewer-dp-and-svc.yaml",
constants.AddonsPath, constants.AddonsPath,
"logviewer-dp-and-svc.yaml", "logviewer-dp-and-svc.yaml",
"0640", "0640",
false), false),
NewBinDataAsset( MustBinAsset(
"deploy/addons/logviewer/logviewer-rbac.yaml", "deploy/addons/logviewer/logviewer-rbac.yaml",
constants.AddonsPath, constants.AddonsPath,
"logviewer-rbac.yaml", "logviewer-rbac.yaml",
"0640", "0640",
false), false),
}, false, "logviewer"), }, false, "logviewer"),
"gvisor": NewAddon([]*BinDataAsset{ "gvisor": NewAddon([]*BinAsset{
NewBinDataAsset( MustBinAsset(
"deploy/addons/gvisor/gvisor-pod.yaml", "deploy/addons/gvisor/gvisor-pod.yaml",
constants.AddonsPath, constants.AddonsPath,
"gvisor-pod.yaml", "gvisor-pod.yaml",
"0640", "0640",
true), true),
NewBinDataAsset( MustBinAsset(
"deploy/addons/gvisor/gvisor-config.toml", "deploy/addons/gvisor/gvisor-config.toml",
constants.GvisorFilesPath, constants.GvisorFilesPath,
constants.GvisorConfigTomlTargetName, constants.GvisorConfigTomlTargetName,
"0640", "0640",
true), true),
NewBinDataAsset( MustBinAsset(
"deploy/addons/gvisor/gvisor-containerd-shim.toml", "deploy/addons/gvisor/gvisor-containerd-shim.toml",
constants.GvisorFilesPath, constants.GvisorFilesPath,
constants.GvisorContainerdShimTargetName, constants.GvisorContainerdShimTargetName,

View File

@ -149,25 +149,34 @@ func NewMemoryAsset(d []byte, targetDir, targetName, permissions string) *Memory
return m return m
} }
// BinDataAsset is a bindata (binary data) asset // BinAsset is a bindata (binary data) asset
type BinDataAsset struct { type BinAsset struct {
BaseAsset BaseAsset
template *template.Template template *template.Template
} }
// NewBinDataAsset creates a new BinDataAsset // MustBinAsset creates a new BinAsset, or panics if invalid
func NewBinDataAsset(assetName, targetDir, targetName, permissions string, isTemplate bool) *BinDataAsset { func MustBinAsset(name, targetDir, targetName, permissions string, isTemplate bool) *BinAsset {
m := &BinDataAsset{ asset, err := NewBinAsset(name, targetDir, targetName, permissions, isTemplate)
if err != nil {
panic(fmt.Sprintf("Failed to define asset %s: %v", name, err))
}
return asset
}
// NewBinAsset creates a new BinAsset
func NewBinAsset(name, targetDir, targetName, permissions string, isTemplate bool) (*BinAsset, error) {
m := &BinAsset{
BaseAsset: BaseAsset{ BaseAsset: BaseAsset{
AssetName: assetName, AssetName: name,
TargetDir: targetDir, TargetDir: targetDir,
TargetName: targetName, TargetName: targetName,
Permissions: permissions, Permissions: permissions,
}, },
template: nil, template: nil,
} }
m.loadData(isTemplate) err := m.loadData(isTemplate)
return m return m, err
} }
func defaultValue(defValue string, val interface{}) string { func defaultValue(defValue string, val interface{}) string {
@ -181,7 +190,7 @@ func defaultValue(defValue string, val interface{}) string {
return strVal return strVal
} }
func (m *BinDataAsset) loadData(isTemplate bool) error { func (m *BinAsset) loadData(isTemplate bool) error {
contents, err := Asset(m.AssetName) contents, err := Asset(m.AssetName)
if err != nil { if err != nil {
return err return err
@ -207,12 +216,12 @@ func (m *BinDataAsset) loadData(isTemplate bool) error {
} }
// IsTemplate returns if the asset is a template // IsTemplate returns if the asset is a template
func (m *BinDataAsset) IsTemplate() bool { func (m *BinAsset) IsTemplate() bool {
return m.template != nil return m.template != nil
} }
// Evaluate evaluates the template to a new asset // Evaluate evaluates the template to a new asset
func (m *BinDataAsset) Evaluate(data interface{}) (*MemoryAsset, error) { func (m *BinAsset) Evaluate(data interface{}) (*MemoryAsset, error) {
if !m.IsTemplate() { if !m.IsTemplate() {
return nil, errors.Errorf("the asset %s is not a template", m.AssetName) return nil, errors.Errorf("the asset %s is not a template", m.AssetName)
@ -227,12 +236,12 @@ func (m *BinDataAsset) Evaluate(data interface{}) (*MemoryAsset, error) {
} }
// GetLength returns length // GetLength returns length
func (m *BinDataAsset) GetLength() int { func (m *BinAsset) GetLength() int {
return m.Length return m.Length
} }
// Read reads the asset // Read reads the asset
func (m *BinDataAsset) Read(p []byte) (int, error) { func (m *BinAsset) Read(p []byte) (int, error) {
if m.Length == 0 { if m.Length == 0 {
return 0, fmt.Errorf("attempted read from a 0 length asset") return 0, fmt.Errorf("attempted read from a 0 length asset")
} }