github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/payload/api/helpers.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package api
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"gopkg.in/juju/charm.v6"
     9  	"gopkg.in/juju/names.v2"
    10  
    11  	"github.com/juju/juju/apiserver/params"
    12  	"github.com/juju/juju/payload"
    13  )
    14  
    15  // API2ID converts the given payload tag string into a payload ID.
    16  // Example: "payload-foobar" -> "foobar"
    17  func API2ID(tagStr string) (string, error) {
    18  	if tagStr == "" {
    19  		return tagStr, nil
    20  	}
    21  	tag, err := names.ParsePayloadTag(tagStr)
    22  	if err != nil {
    23  		return "", errors.Trace(err)
    24  	}
    25  	return tag.Id(), nil
    26  }
    27  
    28  // Payload2api converts a payload.FullPayloadInfo struct into
    29  // a Payload struct.
    30  func Payload2api(p payload.FullPayloadInfo) params.Payload {
    31  	labels := make([]string, len(p.Labels))
    32  	copy(labels, p.Labels)
    33  
    34  	var unitTag string
    35  	if p.Unit != "" {
    36  		unitTag = names.NewUnitTag(p.Unit).String()
    37  	}
    38  	var machineTag string
    39  	if p.Machine != "" {
    40  		machineTag = names.NewMachineTag(p.Machine).String()
    41  	}
    42  
    43  	return params.Payload{
    44  		Class:   p.Name,
    45  		Type:    p.Type,
    46  		ID:      p.ID,
    47  		Status:  p.Status,
    48  		Labels:  labels,
    49  		Unit:    unitTag,
    50  		Machine: machineTag,
    51  	}
    52  }
    53  
    54  // API2Payload converts an API Payload info struct into
    55  // a payload.FullPayloadInfo struct.
    56  func API2Payload(apiInfo params.Payload) (payload.FullPayloadInfo, error) {
    57  	labels := make([]string, len(apiInfo.Labels))
    58  	copy(labels, apiInfo.Labels)
    59  
    60  	var unit, machine string
    61  	var empty payload.FullPayloadInfo
    62  	if apiInfo.Unit != "" {
    63  		tag, err := names.ParseUnitTag(apiInfo.Unit)
    64  		if err != nil {
    65  			return empty, errors.Trace(err)
    66  		}
    67  		unit = tag.Id()
    68  	}
    69  	if apiInfo.Machine != "" {
    70  		tag, err := names.ParseMachineTag(apiInfo.Machine)
    71  		if err != nil {
    72  			return empty, errors.Trace(err)
    73  		}
    74  		machine = tag.Id()
    75  	}
    76  
    77  	return payload.FullPayloadInfo{
    78  		Payload: payload.Payload{
    79  			PayloadClass: charm.PayloadClass{
    80  				Name: apiInfo.Class,
    81  				Type: apiInfo.Type,
    82  			},
    83  			ID:     apiInfo.ID,
    84  			Status: apiInfo.Status,
    85  			Labels: labels,
    86  			Unit:   unit,
    87  		},
    88  		Machine: machine,
    89  	}, nil
    90  }