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  }