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 }