@@ -12,6 +12,8 @@ import (
12
12
"github.com/replicatedhq/ship/pkg/api"
13
13
"github.com/replicatedhq/ship/pkg/lifecycle/render/root"
14
14
"github.com/replicatedhq/ship/pkg/templates"
15
+ "github.com/replicatedhq/ship/pkg/util"
16
+
15
17
"github.com/spf13/viper"
16
18
)
17
19
@@ -65,29 +67,51 @@ func (r *LocalRenderer) Execute(
65
67
return errors .Wrap (err , "init builder" )
66
68
}
67
69
68
- built , err := builder . String ( asset . Contents )
70
+ builtAsset , err := templateInline ( builder , asset )
69
71
if err != nil {
70
72
return errors .Wrap (err , "building contents" )
71
73
}
72
74
75
+ err = util .IsLegalPath (builtAsset .Dest )
76
+ if err != nil {
77
+ return errors .Wrap (err , "write inline asset" )
78
+ }
79
+
73
80
basePath := filepath .Dir (asset .Dest )
74
- debug .Log ("event" , "mkdirall.attempt" , "dest" , asset .Dest , "basePath" , basePath )
81
+ debug .Log ("event" , "mkdirall.attempt" , "dest" , builtAsset .Dest , "basePath" , basePath )
75
82
if err := rootFs .MkdirAll (basePath , 0755 ); err != nil {
76
- debug .Log ("event" , "mkdirall.fail" , "err" , err , "dest" , asset .Dest , "basePath" , basePath )
77
- return errors .Wrapf (err , "write directory to %s" , asset .Dest )
83
+ debug .Log ("event" , "mkdirall.fail" , "err" , err , "dest" , builtAsset .Dest , "basePath" , basePath )
84
+ return errors .Wrapf (err , "write directory to %s" , builtAsset .Dest )
78
85
}
79
86
80
87
mode := os .FileMode (0644 )
81
- if asset .Mode != os .FileMode (0 ) {
88
+ if builtAsset .Mode != os .FileMode (0 ) {
82
89
debug .Log ("event" , "applying override permissions" )
83
- mode = asset .Mode
90
+ mode = builtAsset .Mode
84
91
}
85
92
86
- if err := rootFs .WriteFile (asset .Dest , []byte (built ), mode ); err != nil {
93
+ if err := rootFs .WriteFile (builtAsset .Dest , []byte (builtAsset . Contents ), mode ); err != nil {
87
94
debug .Log ("event" , "execute.fail" , "err" , err )
88
- return errors .Wrapf (err , "Write inline asset to %s" , asset .Dest )
95
+ return errors .Wrapf (err , "Write inline asset to %s" , builtAsset .Dest )
89
96
}
90
97
return nil
91
98
92
99
}
93
100
}
101
+
102
+ func templateInline (builder * templates.Builder , asset api.InlineAsset ) (api.InlineAsset , error ) {
103
+ builtAsset := asset
104
+ var err error
105
+
106
+ builtAsset .Contents , err = builder .String (asset .Contents )
107
+ if err != nil {
108
+ return builtAsset , errors .Wrap (err , "building contents" )
109
+ }
110
+
111
+ builtAsset .Dest , err = builder .String (asset .Dest )
112
+ if err != nil {
113
+ return builtAsset , errors .Wrap (err , "building dest" )
114
+ }
115
+
116
+ return builtAsset , nil
117
+ }
0 commit comments