From 6fa80b54428f217d9ec09e6ab0d6b247407b9c66 Mon Sep 17 00:00:00 2001 From: John Gardiner Myers Date: Fri, 19 Jun 2020 22:47:20 -0700 Subject: [PATCH 1/2] Refactor lyft config file to Go code --- nodeup/pkg/model/networking/lyft.go | 88 ++++++++++++------- upup/models/bindata.go | 60 ------------- .../10-cni-ipvlan-vpc-k8s.conflist.template | 26 ------ upup/pkg/fi/cloudup/tagbuilder.go | 4 - upup/pkg/fi/nodeup/command.go | 2 - 5 files changed, 55 insertions(+), 125 deletions(-) delete mode 100644 upup/models/nodeup/resources/_lyft_vpc_cni/files/etc/cni/net.d/10-cni-ipvlan-vpc-k8s.conflist.template diff --git a/nodeup/pkg/model/networking/lyft.go b/nodeup/pkg/model/networking/lyft.go index db97fafcccb49..3f63ee3fb43c8 100644 --- a/nodeup/pkg/model/networking/lyft.go +++ b/nodeup/pkg/model/networking/lyft.go @@ -20,13 +20,13 @@ import ( "encoding/json" "fmt" "strings" - "text/template" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/ec2metadata" "github.com/aws/aws-sdk-go/aws/request" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/ec2" + "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" "k8s.io/klog" "k8s.io/kops/nodeup/pkg/model" @@ -59,45 +59,67 @@ func (b *LyftVPCBuilder) Build(c *fi.ModelBuilderContext) error { return err } - return nil -} + securityGroups, err := evaluateSecurityGroups(b.Cluster.Spec.NetworkID) + if err != nil { + return err + } -func LoadLyftTemplateFunctions(templateFunctions template.FuncMap, cluster *api.Cluster) { - templateFunctions["SubnetTags"] = func() (string, error) { - var tags map[string]string - if cluster.IsKubernetesGTE("1.18") { - tags = map[string]string{ - "KubernetesCluster": cluster.Name, - } - } else { - tags = map[string]string{ - "Type": "pod", - } - } - if len(cluster.Spec.Networking.LyftVPC.SubnetTags) > 0 { - tags = cluster.Spec.Networking.LyftVPC.SubnetTags - } + conflist := map[string]interface{}{ + "cniVersion": "0.3.1", + "name": "cni-ipvlan-vpc-k8s", + "plugins": []map[string]interface{}{ + { + "cniVersion": "0.3.1", + "type": "cni-ipvlan-vpc-k8s-ipam", + "interfaceIndex": 1, + "skipDeallocation": true, + "subnetTags": getSubnetTags(b.Cluster), + "secGroupIds": securityGroups, + }, + { + "cniVersion": "0.3.1", + "type": "cni-ipvlan-vpc-k8s-ipvlan", + "mode": "l2", + }, + { + "cniVersion": "0.3.1", + "type": "cni-ipvlan-vpc-k8s-unnumbered-ptp", + "hostInterface": "eth0", + "containerInterface": "veth0", + "ipMasq": true, + }, + }, + } - bytes, err := json.Marshal(tags) - if err != nil { - return "", err - } - return string(bytes), nil + bytes, err := json.Marshal(conflist) + if err != nil { + return err } - templateFunctions["NodeSecurityGroups"] = func() (string, error) { - // use the same security groups as the node - ids, err := evaluateSecurityGroups(cluster.Spec.NetworkID) - if err != nil { - return "", err + c.AddTask(&nodetasks.File{ + Contents: fi.NewBytesResource(bytes), + Path: "/etc/cni/net.d/10-cni-ipvlan-vpc-k8s.conflist", + Type: nodetasks.FileType_File, + }) + + return nil +} + +func getSubnetTags(cluster *api.Cluster) interface{} { + var tags map[string]string + if cluster.IsKubernetesGTE("1.18") { + tags = map[string]string{ + "KubernetesCluster": cluster.Name, } - bytes, err := json.Marshal(ids) - if err != nil { - return "", err + } else { + tags = map[string]string{ + "Type": "pod", } - return string(bytes), nil } - + if len(cluster.Spec.Networking.LyftVPC.SubnetTags) > 0 { + tags = cluster.Spec.Networking.LyftVPC.SubnetTags + } + return tags } func evaluateSecurityGroups(vpcId string) ([]string, error) { diff --git a/upup/models/bindata.go b/upup/models/bindata.go index 25659102864d7..c298feb6dab83 100644 --- a/upup/models/bindata.go +++ b/upup/models/bindata.go @@ -62,7 +62,6 @@ // upup/models/cloudup/resources/addons/storage-aws.addons.k8s.io/v1.15.0.yaml // upup/models/cloudup/resources/addons/storage-aws.addons.k8s.io/v1.7.0.yaml // upup/models/cloudup/resources/addons/storage-gce.addons.k8s.io/v1.7.0.yaml -// upup/models/nodeup/resources/_lyft_vpc_cni/files/etc/cni/net.d/10-cni-ipvlan-vpc-k8s.conflist.template package models import ( @@ -15758,49 +15757,6 @@ func cloudupResourcesAddonsStorageGceAddonsK8sIoV170Yaml() (*asset, error) { return a, nil } -var _nodeupResources_lyft_vpc_cniFilesEtcCniNetD10CniIpvlanVpcK8sConflistTemplate = []byte(`{ - "cniVersion": "0.3.1", - "name": "cni-ipvlan-vpc-k8s", - "plugins": [ - { - "cniVersion": "0.3.1", - "type": "cni-ipvlan-vpc-k8s-ipam", - "interfaceIndex": 1, - "skipDeallocation": true, - "subnetTags": {{ SubnetTags }}, - "secGroupIds": {{ NodeSecurityGroups }} - }, - { - "cniVersion": "0.3.1", - "type": "cni-ipvlan-vpc-k8s-ipvlan", - "mode": "l2" - }, - { - "cniVersion": "0.3.1", - "type": "cni-ipvlan-vpc-k8s-unnumbered-ptp", - "hostInterface": "eth0", - "containerInterface": "veth0", - "ipMasq": true - } - ] -} -`) - -func nodeupResources_lyft_vpc_cniFilesEtcCniNetD10CniIpvlanVpcK8sConflistTemplateBytes() ([]byte, error) { - return _nodeupResources_lyft_vpc_cniFilesEtcCniNetD10CniIpvlanVpcK8sConflistTemplate, nil -} - -func nodeupResources_lyft_vpc_cniFilesEtcCniNetD10CniIpvlanVpcK8sConflistTemplate() (*asset, error) { - bytes, err := nodeupResources_lyft_vpc_cniFilesEtcCniNetD10CniIpvlanVpcK8sConflistTemplateBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "nodeup/resources/_lyft_vpc_cni/files/etc/cni/net.d/10-cni-ipvlan-vpc-k8s.conflist.template", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - // Asset loads and returns the asset for the given name. // It returns an error if the asset could not be found or // could not be loaded. @@ -15915,7 +15871,6 @@ var _bindata = map[string]func() (*asset, error){ "cloudup/resources/addons/storage-aws.addons.k8s.io/v1.15.0.yaml": cloudupResourcesAddonsStorageAwsAddonsK8sIoV1150Yaml, "cloudup/resources/addons/storage-aws.addons.k8s.io/v1.7.0.yaml": cloudupResourcesAddonsStorageAwsAddonsK8sIoV170Yaml, "cloudup/resources/addons/storage-gce.addons.k8s.io/v1.7.0.yaml": cloudupResourcesAddonsStorageGceAddonsK8sIoV170Yaml, - "nodeup/resources/_lyft_vpc_cni/files/etc/cni/net.d/10-cni-ipvlan-vpc-k8s.conflist.template": nodeupResources_lyft_vpc_cniFilesEtcCniNetD10CniIpvlanVpcK8sConflistTemplate, } // AssetDir returns the file names below a certain @@ -16085,21 +16040,6 @@ var _bintree = &bintree{nil, map[string]*bintree{ }}, }}, }}, - "nodeup": {nil, map[string]*bintree{ - "resources": {nil, map[string]*bintree{ - "_lyft_vpc_cni": {nil, map[string]*bintree{ - "files": {nil, map[string]*bintree{ - "etc": {nil, map[string]*bintree{ - "cni": {nil, map[string]*bintree{ - "net.d": {nil, map[string]*bintree{ - "10-cni-ipvlan-vpc-k8s.conflist.template": {nodeupResources_lyft_vpc_cniFilesEtcCniNetD10CniIpvlanVpcK8sConflistTemplate, map[string]*bintree{}}, - }}, - }}, - }}, - }}, - }}, - }}, - }}, }} // RestoreAsset restores an asset under the given directory diff --git a/upup/models/nodeup/resources/_lyft_vpc_cni/files/etc/cni/net.d/10-cni-ipvlan-vpc-k8s.conflist.template b/upup/models/nodeup/resources/_lyft_vpc_cni/files/etc/cni/net.d/10-cni-ipvlan-vpc-k8s.conflist.template deleted file mode 100644 index 97f37e8ee6025..0000000000000 --- a/upup/models/nodeup/resources/_lyft_vpc_cni/files/etc/cni/net.d/10-cni-ipvlan-vpc-k8s.conflist.template +++ /dev/null @@ -1,26 +0,0 @@ -{ - "cniVersion": "0.3.1", - "name": "cni-ipvlan-vpc-k8s", - "plugins": [ - { - "cniVersion": "0.3.1", - "type": "cni-ipvlan-vpc-k8s-ipam", - "interfaceIndex": 1, - "skipDeallocation": true, - "subnetTags": {{ SubnetTags }}, - "secGroupIds": {{ NodeSecurityGroups }} - }, - { - "cniVersion": "0.3.1", - "type": "cni-ipvlan-vpc-k8s-ipvlan", - "mode": "l2" - }, - { - "cniVersion": "0.3.1", - "type": "cni-ipvlan-vpc-k8s-unnumbered-ptp", - "hostInterface": "eth0", - "containerInterface": "veth0", - "ipMasq": true - } - ] -} diff --git a/upup/pkg/fi/cloudup/tagbuilder.go b/upup/pkg/fi/cloudup/tagbuilder.go index 1dedb012d5492..d0895e3ba9d87 100644 --- a/upup/pkg/fi/cloudup/tagbuilder.go +++ b/upup/pkg/fi/cloudup/tagbuilder.go @@ -76,10 +76,6 @@ func buildNodeupTags(role api.InstanceGroupRole, cluster *api.Cluster, clusterTa return nil, fmt.Errorf("Networking is not set, and should not be nil here") } - if networking.LyftVPC != nil { - tags.Insert("_lyft_vpc_cni") - } - switch fi.StringValue(cluster.Spec.UpdatePolicy) { case "": // default tags.Insert("_automatic_upgrades") diff --git a/upup/pkg/fi/nodeup/command.go b/upup/pkg/fi/nodeup/command.go index 0a8b21b2607fa..20a49a611eee7 100644 --- a/upup/pkg/fi/nodeup/command.go +++ b/upup/pkg/fi/nodeup/command.go @@ -273,8 +273,6 @@ func (c *NodeUpCommand) Run(out io.Writer) error { loader.Builders = append(loader.Builders, &networking.KuberouterBuilder{NodeupModelContext: modelContext}) loader.Builders = append(loader.Builders, &networking.LyftVPCBuilder{NodeupModelContext: modelContext}) - networking.LoadLyftTemplateFunctions(loader.TemplateFunctions, c.cluster) - taskMap, err := loader.Build(c.ModelDir) if err != nil { return fmt.Errorf("error building loader: %v", err) From 87a981093bc93692bb315d59fab1f228f0cd49a7 Mon Sep 17 00:00:00 2001 From: John Gardiner Myers Date: Fri, 19 Jun 2020 23:09:08 -0700 Subject: [PATCH 2/2] Remove unused loading code from Loader --- cmd/nodeup/BUILD.bazel | 1 - cmd/nodeup/main.go | 2 - upup/pkg/fi/nodeup/BUILD.bazel | 1 - upup/pkg/fi/nodeup/command.go | 5 +- upup/pkg/fi/nodeup/loader.go | 188 ++--------------------- upup/pkg/fi/nodeup/nodetasks/BUILD.bazel | 1 - upup/pkg/fi/nodeup/nodetasks/asset.go | 22 --- upup/pkg/fi/nodeup/nodetasks/file.go | 27 +--- 8 files changed, 12 insertions(+), 235 deletions(-) delete mode 100644 upup/pkg/fi/nodeup/nodetasks/asset.go diff --git a/cmd/nodeup/BUILD.bazel b/cmd/nodeup/BUILD.bazel index b088ca768eaf3..23356b30869ea 100644 --- a/cmd/nodeup/BUILD.bazel +++ b/cmd/nodeup/BUILD.bazel @@ -8,7 +8,6 @@ go_library( deps = [ "//:go_default_library", "//nodeup/pkg/bootstrap:go_default_library", - "//upup/models:go_default_library", "//upup/pkg/fi/nodeup:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], diff --git a/cmd/nodeup/main.go b/cmd/nodeup/main.go index a3b2e6402eec7..e94796727e7f1 100644 --- a/cmd/nodeup/main.go +++ b/cmd/nodeup/main.go @@ -25,7 +25,6 @@ import ( "k8s.io/klog" "k8s.io/kops" "k8s.io/kops/nodeup/pkg/bootstrap" - "k8s.io/kops/upup/models" "k8s.io/kops/upup/pkg/fi/nodeup" ) @@ -117,7 +116,6 @@ func main() { Target: target, CacheDir: flagCacheDir, FSRoot: flagRootFS, - ModelDir: models.NewAssetPath("nodeup"), } err = cmd.Run(os.Stdout) if err == nil { diff --git a/upup/pkg/fi/nodeup/BUILD.bazel b/upup/pkg/fi/nodeup/BUILD.bazel index 60123935670f3..a1dfa3daa88ce 100644 --- a/upup/pkg/fi/nodeup/BUILD.bazel +++ b/upup/pkg/fi/nodeup/BUILD.bazel @@ -17,7 +17,6 @@ go_library( "//pkg/apis/nodeup:go_default_library", "//pkg/assets:go_default_library", "//upup/pkg/fi:go_default_library", - "//upup/pkg/fi/loader:go_default_library", "//upup/pkg/fi/nodeup/cloudinit:go_default_library", "//upup/pkg/fi/nodeup/local:go_default_library", "//upup/pkg/fi/nodeup/nodetasks:go_default_library", diff --git a/upup/pkg/fi/nodeup/command.go b/upup/pkg/fi/nodeup/command.go index 20a49a611eee7..3a820096dbab6 100644 --- a/upup/pkg/fi/nodeup/command.go +++ b/upup/pkg/fi/nodeup/command.go @@ -58,7 +58,6 @@ type NodeUpCommand struct { CacheDir string ConfigLocation string FSRoot string - ModelDir vfs.Path Target string cluster *api.Cluster config *nodeup.Config @@ -237,7 +236,7 @@ func (c *NodeUpCommand) Run(out io.Writer) error { return err } - loader := NewLoader(c.config, c.cluster, assetStore, nodeTags) + loader := &Loader{} loader.Builders = append(loader.Builders, &model.NTPBuilder{NodeupModelContext: modelContext}) loader.Builders = append(loader.Builders, &model.MiscUtilsBuilder{NodeupModelContext: modelContext}) loader.Builders = append(loader.Builders, &model.DirectoryBuilder{NodeupModelContext: modelContext}) @@ -273,7 +272,7 @@ func (c *NodeUpCommand) Run(out io.Writer) error { loader.Builders = append(loader.Builders, &networking.KuberouterBuilder{NodeupModelContext: modelContext}) loader.Builders = append(loader.Builders, &networking.LyftVPCBuilder{NodeupModelContext: modelContext}) - taskMap, err := loader.Build(c.ModelDir) + taskMap, err := loader.Build() if err != nil { return fmt.Errorf("error building loader: %v", err) } diff --git a/upup/pkg/fi/nodeup/loader.go b/upup/pkg/fi/nodeup/loader.go index 4e25644d8b1aa..4a89eefae1475 100644 --- a/upup/pkg/fi/nodeup/loader.go +++ b/upup/pkg/fi/nodeup/loader.go @@ -17,210 +17,40 @@ limitations under the License. package nodeup import ( - "bytes" - "encoding/json" - "fmt" - "strings" - "text/template" - - "k8s.io/apimachinery/pkg/util/sets" - api "k8s.io/kops/pkg/apis/kops" - "k8s.io/kops/pkg/apis/nodeup" + "k8s.io/klog" "k8s.io/kops/upup/pkg/fi" - "k8s.io/kops/upup/pkg/fi/loader" "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" - "k8s.io/kops/util/pkg/vfs" - - "k8s.io/klog" ) type Loader struct { Builders []fi.ModelBuilder - - config *nodeup.Config - cluster *api.Cluster - - assets *fi.AssetStore - tasks map[string]fi.Task - - tags sets.String - TemplateFunctions template.FuncMap -} - -func NewLoader(config *nodeup.Config, cluster *api.Cluster, assets *fi.AssetStore, tags sets.String) *Loader { - l := &Loader{} - l.assets = assets - l.tasks = make(map[string]fi.Task) - l.config = config - l.cluster = cluster - l.TemplateFunctions = make(template.FuncMap) - l.tags = tags - - return l -} - -func (l *Loader) executeTemplate(key string, d string) (string, error) { - t := template.New(key) - - funcMap := make(template.FuncMap) - for k, fn := range l.TemplateFunctions { - funcMap[k] = fn - } - t.Funcs(funcMap) - - context := l.cluster.Spec - - _, err := t.Parse(d) - if err != nil { - return "", fmt.Errorf("error parsing template %q: %v", key, err) - } - - t.Option("missingkey=zero") - - var buffer bytes.Buffer - err = t.ExecuteTemplate(&buffer, key, context) - if err != nil { - return "", fmt.Errorf("error executing template %q: %v", key, err) - } - - return buffer.String(), nil -} - -func ignoreHandler(i *loader.TreeWalkItem) error { - return nil } // Build is responsible for running the build tasks for nodeup -func (l *Loader) Build(baseDir vfs.Path) (map[string]fi.Task, error) { - // First pass: load options - tw := &loader.TreeWalker{ - DefaultHandler: ignoreHandler, - Contexts: map[string]loader.Handler{ - "files": ignoreHandler, - }, - Tags: l.tags, - } - - err := tw.Walk(baseDir) - if err != nil { - return nil, err - } - - // Second pass: load everything else - tw = &loader.TreeWalker{ - DefaultHandler: l.handleFile, - Contexts: map[string]loader.Handler{ - "files": l.handleFile, - }, - Tags: l.tags, - } - - err = tw.Walk(baseDir) - if err != nil { - return nil, err - } - +func (l *Loader) Build() (map[string]fi.Task, error) { + tasks := make(map[string]fi.Task) for _, builder := range l.Builders { context := &fi.ModelBuilderContext{ - Tasks: l.tasks, + Tasks: tasks, } err := builder.Build(context) if err != nil { return nil, err } - l.tasks = context.Tasks + tasks = context.Tasks } // If there is a package task, we need an update packages task - for _, t := range l.tasks { + for _, t := range tasks { if _, ok := t.(*nodetasks.Package); ok { klog.Infof("Package task found; adding UpdatePackages task") - l.tasks["UpdatePackages"] = nodetasks.NewUpdatePackages() + tasks["UpdatePackages"] = nodetasks.NewUpdatePackages() break } } - if l.tasks["UpdatePackages"] == nil { + if tasks["UpdatePackages"] == nil { klog.Infof("No package task found; won't update packages") } - return l.tasks, nil -} - -type TaskBuilder func(name string, contents string, meta string) (fi.Task, error) - -func (l *Loader) handleFile(i *loader.TreeWalkItem) error { - var task *nodetasks.File - defaultFileType := nodetasks.FileType_File - - if strings.HasSuffix(i.RelativePath, ".template") { - contents, err := i.ReadString() - if err != nil { - return err - } - - // TODO: Use template resource here to defer execution? - destPath := "/" + strings.TrimSuffix(i.RelativePath, ".template") - name := strings.TrimSuffix(i.Name, ".template") - expanded, err := l.executeTemplate(name, contents) - if err != nil { - return fmt.Errorf("error executing template %q: %v", i.RelativePath, err) - } - - task, err = nodetasks.NewFileTask(name, fi.NewStringResource(expanded), destPath, i.Meta) - if err != nil { - return fmt.Errorf("error building task %q: %v", i.RelativePath, err) - } - } else if strings.HasSuffix(i.RelativePath, ".asset") { - contents, err := i.ReadBytes() - if err != nil { - return err - } - - destPath := "/" + strings.TrimSuffix(i.RelativePath, ".asset") - name := strings.TrimSuffix(i.Name, ".asset") - - def := &nodetasks.AssetDefinition{} - err = json.Unmarshal(contents, def) - if err != nil { - return fmt.Errorf("error parsing json for asset %q: %v", name, err) - } - - asset, err := l.assets.Find(name, def.AssetPath) - if err != nil { - return fmt.Errorf("error trying to locate asset %q: %v", name, err) - } - if asset == nil { - return fmt.Errorf("unable to locate asset %q", name) - } - - task, err = nodetasks.NewFileTask(i.Name, asset, destPath, i.Meta) - if err != nil { - return fmt.Errorf("error building task %q: %v", i.RelativePath, err) - } - } else { - var err error - var contents fi.Resource - if vfs.IsDirectory(i.Path) { - defaultFileType = nodetasks.FileType_Directory - } else { - contents = fi.NewVFSResource(i.Path) - } - task, err = nodetasks.NewFileTask(i.Name, contents, "/"+i.RelativePath, i.Meta) - if err != nil { - return fmt.Errorf("error building task %q: %v", i.RelativePath, err) - } - } - - if task.Type == "" { - task.Type = defaultFileType - } - - klog.V(2).Infof("path %q -> task %v", i.Path, task) - - if task != nil { - key := "file/" + i.RelativePath - l.tasks[key] = task - } - - return nil + return tasks, nil } diff --git a/upup/pkg/fi/nodeup/nodetasks/BUILD.bazel b/upup/pkg/fi/nodeup/nodetasks/BUILD.bazel index 722ece69dd0d4..33f9f08259789 100644 --- a/upup/pkg/fi/nodeup/nodetasks/BUILD.bazel +++ b/upup/pkg/fi/nodeup/nodetasks/BUILD.bazel @@ -4,7 +4,6 @@ go_library( name = "go_default_library", srcs = [ "archive.go", - "asset.go", "bindmount.go", "chattr.go", "createsdir.go", diff --git a/upup/pkg/fi/nodeup/nodetasks/asset.go b/upup/pkg/fi/nodeup/nodetasks/asset.go deleted file mode 100644 index a959481a5b8e3..0000000000000 --- a/upup/pkg/fi/nodeup/nodetasks/asset.go +++ /dev/null @@ -1,22 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package nodetasks - -type AssetDefinition struct { - AssetPath string `json:"assetPath"` - Mode string `json:"mode"` -} diff --git a/upup/pkg/fi/nodeup/nodetasks/file.go b/upup/pkg/fi/nodeup/nodetasks/file.go index 4356d7640a3fc..200aa27bf0d92 100644 --- a/upup/pkg/fi/nodeup/nodetasks/file.go +++ b/upup/pkg/fi/nodeup/nodetasks/file.go @@ -25,12 +25,10 @@ import ( "strings" "syscall" + "k8s.io/klog" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/cloudinit" "k8s.io/kops/upup/pkg/fi/nodeup/local" - "k8s.io/kops/upup/pkg/fi/utils" - - "k8s.io/klog" ) const ( @@ -59,29 +57,6 @@ var _ fi.Task = &File{} var _ fi.HasDependencies = &File{} var _ fi.HasName = &File{} -func NewFileTask(name string, src fi.Resource, destPath string, meta string) (*File, error) { - f := &File{ - //Name: name, - Contents: src, - Path: destPath, - } - - if meta != "" { - err := utils.YamlUnmarshal([]byte(meta), f) - if err != nil { - return nil, fmt.Errorf("error parsing meta for file %q: %v", name, err) - } - } - - if f.Symlink != nil && f.Type == "" { - f.Type = FileType_Symlink - } - - return f, nil -} - -var _ fi.HasDependencies = &File{} - // GetDependencies implements HasDependencies::GetDependencies func (e *File) GetDependencies(tasks map[string]fi.Task) []fi.Task { var deps []fi.Task