@@ -16,6 +16,7 @@ import (
1616 "github.com/docker/app/internal/types"
1717 conversion "github.com/docker/cli/cli/command/stack/kubernetes"
1818 "github.com/docker/cli/cli/compose/loader"
19+ "github.com/docker/cli/kubernetes/compose/v1beta1"
1920 "github.com/docker/cli/kubernetes/compose/v1beta2"
2021 "github.com/pkg/errors"
2122 yaml "gopkg.in/yaml.v2"
@@ -207,21 +208,41 @@ func makeChart(appname, targetDir string) error {
207208 return ioutil .WriteFile (filepath .Join (targetDir , "Chart.yaml" ), hmetadata , 0644 )
208209}
209210
210- func helmRender (appname string , targetDir string , composeFiles []string , settingsFile []string , env map [string ]string ) error {
211+ func helmRender (appname string , targetDir string , composeFiles []string , settingsFile []string , env map [string ]string , beta1 bool ) error {
211212 rendered , err := Render (appname , composeFiles , settingsFile , env )
212213 if err != nil {
213214 return err
214215 }
215- stackSpec := conversion .FromComposeConfig (rendered )
216- stack := v1beta2.Stack {
217- TypeMeta : metav1.TypeMeta {
218- Kind : "stacks.compose.docker.com" ,
219- APIVersion : "v1beta2" ,
220- },
221- ObjectMeta : metav1.ObjectMeta {
222- Name : internal .AppNameFromDir (appname ),
223- },
224- Spec : stackSpec ,
216+ var stack interface {}
217+ if ! beta1 {
218+ stackSpec := conversion .FromComposeConfig (rendered )
219+ stack = v1beta2.Stack {
220+ TypeMeta : metav1.TypeMeta {
221+ Kind : "stacks.compose.docker.com" ,
222+ APIVersion : "v1beta2" ,
223+ },
224+ ObjectMeta : metav1.ObjectMeta {
225+ Name : internal .AppNameFromDir (appname ),
226+ },
227+ Spec : stackSpec ,
228+ }
229+ } else {
230+ composeFile , err := yaml .Marshal (rendered )
231+ if err != nil {
232+ return err
233+ }
234+ stack = v1beta1.Stack {
235+ TypeMeta : metav1.TypeMeta {
236+ Kind : "stacks.compose.docker.com" ,
237+ APIVersion : "v1beta1" ,
238+ },
239+ ObjectMeta : metav1.ObjectMeta {
240+ Name : internal .AppNameFromDir (appname ),
241+ },
242+ Spec : v1beta1.StackSpec {
243+ ComposeFile : string (composeFile ),
244+ },
245+ }
225246 }
226247 stackData , err := yaml .Marshal (stack )
227248 if err != nil {
@@ -231,7 +252,7 @@ func helmRender(appname string, targetDir string, composeFiles []string, setting
231252}
232253
233254//makeStack converts data into a helm template for a stack
234- func makeStack (appname string , targetDir string , data []byte ) error {
255+ func makeStack (appname string , targetDir string , data []byte , beta1 bool ) error {
235256 parsed , err := loader .ParseYAML (data )
236257 if err != nil {
237258 return errors .Wrap (err , "failed to parse template compose" )
@@ -241,17 +262,38 @@ func makeStack(appname string, targetDir string, data []byte) error {
241262 return errors .Wrap (err , "failed to load template compose" )
242263 }
243264 os .Mkdir (filepath .Join (targetDir , "templates" ), 0755 )
244- stackSpec := templateconversion .FromComposeConfig (rendered )
245- stack := templatev1beta2.Stack {
246- TypeMeta : metav1.TypeMeta {
247- Kind : "stacks.compose.docker.com" ,
248- APIVersion : "v1beta2" ,
249- },
250- ObjectMeta : metav1.ObjectMeta {
251- Name : internal .AppNameFromDir (appname ),
252- Namespace : "default" , // FIXME
253- },
254- Spec : stackSpec ,
265+ var stack interface {}
266+ if ! beta1 {
267+ stackSpec := templateconversion .FromComposeConfig (rendered )
268+ stack = templatev1beta2.Stack {
269+ TypeMeta : metav1.TypeMeta {
270+ Kind : "stacks.compose.docker.com" ,
271+ APIVersion : "v1beta2" ,
272+ },
273+ ObjectMeta : metav1.ObjectMeta {
274+ Name : internal .AppNameFromDir (appname ),
275+ Namespace : "default" , // FIXME
276+ },
277+ Spec : stackSpec ,
278+ }
279+ } else {
280+ composeFile , err := yaml .Marshal (rendered )
281+ if err != nil {
282+ return err
283+ }
284+ stack = v1beta1.Stack {
285+ TypeMeta : metav1.TypeMeta {
286+ Kind : "stacks.compose.docker.com" ,
287+ APIVersion : "v1beta1" ,
288+ },
289+ ObjectMeta : metav1.ObjectMeta {
290+ Name : internal .AppNameFromDir (appname ),
291+ Namespace : "default" , // FIXME
292+ },
293+ Spec : v1beta1.StackSpec {
294+ ComposeFile : string (composeFile ),
295+ },
296+ }
255297 }
256298 stackData , err := yaml .Marshal (stack )
257299 if err != nil {
@@ -274,7 +316,7 @@ func makeStack(appname string, targetDir string, data []byte) error {
274316}
275317
276318// Helm renders an app as an Helm Chart
277- func Helm (appname string , composeFiles []string , settingsFile []string , env map [string ]string , render bool ) error {
319+ func Helm (appname string , composeFiles []string , settingsFile []string , env map [string ]string , render , beta1 bool ) error {
278320 targetDir := internal .AppNameFromDir (appname ) + ".chart"
279321 if err := os .Mkdir (targetDir , 0755 ); err != nil && ! os .IsExist (err ) {
280322 return errors .Wrap (err , "failed to create Chart directory" )
@@ -284,7 +326,7 @@ func Helm(appname string, composeFiles []string, settingsFile []string, env map[
284326 return err
285327 }
286328 if render {
287- return helmRender (appname , targetDir , composeFiles , settingsFile , env )
329+ return helmRender (appname , targetDir , composeFiles , settingsFile , env , beta1 )
288330 }
289331 data , err := ioutil .ReadFile (filepath .Join (appname , internal .ComposeFileName ))
290332 if err != nil {
@@ -294,7 +336,7 @@ func Helm(appname string, composeFiles []string, settingsFile []string, env map[
294336 if err != nil {
295337 return errors .Wrap (err , "failed to parse docker-compose.yml, maybe because it is a template" )
296338 }
297- err = makeStack (appname , targetDir , data )
339+ err = makeStack (appname , targetDir , data , beta1 )
298340 if err != nil {
299341 return err
300342 }
0 commit comments