@@ -403,39 +403,71 @@ func parseProxy(o *ast.ObjectItem) (*api.ConsulProxy, error) {
403
403
}
404
404
405
405
func parseExpose (eo * ast.ObjectItem ) (* api.ConsulExposeConfig , error ) {
406
+ valid := []string {
407
+ "path" , // an array of path blocks
408
+ // todo(shoenig) checks boolean
409
+ }
410
+
411
+ if err := helper .CheckHCLKeys (eo .Val , valid ); err != nil {
412
+ return nil , multierror .Prefix (err , "expose ->" )
413
+ }
414
+
415
+ var expose api.ConsulExposeConfig
416
+
406
417
var listVal * ast.ObjectList
407
418
if eoType , ok := eo .Val .(* ast.ObjectType ); ok {
408
419
listVal = eoType .List
409
420
} else {
410
421
return nil , fmt .Errorf ("expose: should be an object" )
411
422
}
412
423
424
+ // Parse the expose block
425
+
426
+ po := listVal .Filter ("path" ) // array
427
+ if len (po .Items ) > 0 {
428
+ expose .Path = make ([]* api.ConsulExposePath , len (po .Items ))
429
+ for i := range po .Items {
430
+ p , err := parseExposePath (po .Items [i ])
431
+ if err != nil {
432
+ return nil , err
433
+ }
434
+ expose .Path [i ] = p
435
+ }
436
+ }
437
+
438
+ return & expose , nil
439
+ }
440
+
441
+ func parseExposePath (epo * ast.ObjectItem ) (* api.ConsulExposePath , error ) {
413
442
valid := []string {
414
- "paths" ,
443
+ "path" ,
444
+ "protocol" ,
445
+ "local_path_port" ,
446
+ "listener_port" ,
415
447
}
416
448
417
- if err := helper .CheckHCLKeys (listVal , valid ); err != nil {
418
- return nil , multierror .Prefix (err , "expose ->" )
449
+ if err := helper .CheckHCLKeys (epo . Val , valid ); err != nil {
450
+ return nil , multierror .Prefix (err , "path ->" )
419
451
}
420
452
453
+ var path api.ConsulExposePath
421
454
var m map [string ]interface {}
422
- if err := hcl .DecodeObject (& m , eo .Val ); err != nil {
455
+ if err := hcl .DecodeObject (& m , epo .Val ); err != nil {
423
456
return nil , err
424
457
}
425
458
426
- // Build the expose block
427
- var expose api.ConsulExposeConfig
428
459
dec , err := mapstructure .NewDecoder (& mapstructure.DecoderConfig {
429
- Result : & expose ,
460
+ Result : & path ,
430
461
})
431
462
if err != nil {
432
463
return nil , err
433
464
}
465
+
434
466
if err := dec .Decode (m ); err != nil {
435
467
return nil , err
436
468
}
437
469
438
- return & expose , nil
470
+ return & path , nil
439
471
}
440
472
441
473
func parseUpstream (uo * ast.ObjectItem ) (* api.ConsulUpstream , error ) {
0 commit comments