github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/apiserver/application/get.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package application 5 6 import ( 7 "gopkg.in/juju/charm.v6-unstable" 8 9 "github.com/juju/juju/apiserver/params" 10 "github.com/juju/juju/constraints" 11 ) 12 13 // Get returns the configuration for a service. 14 func (api *API) Get(args params.ApplicationGet) (params.ApplicationGetResults, error) { 15 if err := api.checkCanRead(); err != nil { 16 return params.ApplicationGetResults{}, err 17 } 18 app, err := api.backend.Application(args.ApplicationName) 19 if err != nil { 20 return params.ApplicationGetResults{}, err 21 } 22 settings, err := app.ConfigSettings() 23 if err != nil { 24 return params.ApplicationGetResults{}, err 25 } 26 charm, _, err := app.Charm() 27 if err != nil { 28 return params.ApplicationGetResults{}, err 29 } 30 configInfo := describe(settings, charm.Config()) 31 var constraints constraints.Value 32 if app.IsPrincipal() { 33 constraints, err = app.Constraints() 34 if err != nil { 35 return params.ApplicationGetResults{}, err 36 } 37 } 38 return params.ApplicationGetResults{ 39 Application: args.ApplicationName, 40 Charm: charm.Meta().Name, 41 Config: configInfo, 42 Constraints: constraints, 43 Series: app.Series(), 44 }, nil 45 } 46 47 func describe(settings charm.Settings, config *charm.Config) map[string]interface{} { 48 results := make(map[string]interface{}) 49 for name, option := range config.Options { 50 info := map[string]interface{}{ 51 "description": option.Description, 52 "type": option.Type, 53 } 54 if value := settings[name]; value != nil { 55 info["value"] = value 56 } else { 57 if option.Default != nil { 58 info["value"] = option.Default 59 } 60 info["default"] = true 61 } 62 results[name] = info 63 } 64 return results 65 }