1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
9
"github.com/juju/juju/instance"
10
"github.com/juju/juju/status"
13
type formattedStatus struct {
14
Model modelStatus `json:"model"`
15
Machines map[string]machineStatus `json:"machines"`
16
Applications map[string]applicationStatus `json:"applications"`
19
type formattedMachineStatus struct {
20
Model string `json:"model"`
21
Machines map[string]machineStatus `json:"machines"`
24
type errorStatus struct {
25
StatusError string `json:"status-error" yaml:"status-error"`
28
type modelStatus struct {
29
Name string `json:"name" yaml:"name"`
30
Controller string `json:"controller" yaml:"controller"`
31
Cloud string `json:"cloud" yaml:"cloud"`
32
CloudRegion string `json:"region,omitempty" yaml:"region,omitempty"`
33
Version string `json:"version" yaml:"version"`
34
AvailableVersion string `json:"upgrade-available,omitempty" yaml:"upgrade-available,omitempty"`
35
Migration string `json:"migration,omitempty" yaml:"migration,omitempty"`
38
type machineStatus struct {
39
Err error `json:"-" yaml:",omitempty"`
40
JujuStatus statusInfoContents `json:"juju-status,omitempty" yaml:"juju-status,omitempty"`
41
DNSName string `json:"dns-name,omitempty" yaml:"dns-name,omitempty"`
42
InstanceId instance.Id `json:"instance-id,omitempty" yaml:"instance-id,omitempty"`
43
MachineStatus statusInfoContents `json:"machine-status,omitempty" yaml:"machine-status,omitempty"`
44
Series string `json:"series,omitempty" yaml:"series,omitempty"`
45
Id string `json:"-" yaml:"-"`
46
Containers map[string]machineStatus `json:"containers,omitempty" yaml:"containers,omitempty"`
47
Hardware string `json:"hardware,omitempty" yaml:"hardware,omitempty"`
48
HAStatus string `json:"controller-member-status,omitempty" yaml:"controller-member-status,omitempty"`
51
// A goyaml bug means we can't declare these types
52
// locally to the GetYAML methods.
53
type machineStatusNoMarshal machineStatus
55
func (s machineStatus) MarshalJSON() ([]byte, error) {
57
return json.Marshal(errorStatus{s.Err.Error()})
59
return json.Marshal(machineStatusNoMarshal(s))
62
func (s machineStatus) MarshalYAML() (interface{}, error) {
64
return errorStatus{s.Err.Error()}, nil
66
return machineStatusNoMarshal(s), nil
69
type applicationStatus struct {
70
Err error `json:"-" yaml:",omitempty"`
71
Charm string `json:"charm" yaml:"charm"`
72
Series string `json:"series"`
74
CharmOrigin string `json:"charm-origin" yaml:"charm-origin"`
75
CharmName string `json:"charm-name" yaml:"charm-name"`
76
CharmRev int `json:"charm-rev" yaml:"charm-rev"`
77
CanUpgradeTo string `json:"can-upgrade-to,omitempty" yaml:"can-upgrade-to,omitempty"`
78
Exposed bool `json:"exposed" yaml:"exposed"`
79
Life string `json:"life,omitempty" yaml:"life,omitempty"`
80
StatusInfo statusInfoContents `json:"application-status,omitempty" yaml:"application-status"`
81
Relations map[string][]string `json:"relations,omitempty" yaml:"relations,omitempty"`
82
SubordinateTo []string `json:"subordinate-to,omitempty" yaml:"subordinate-to,omitempty"`
83
Units map[string]unitStatus `json:"units,omitempty" yaml:"units,omitempty"`
84
Version string `json:"version,omitempty" yaml:"version,omitempty"`
87
type applicationStatusNoMarshal applicationStatus
89
func (s applicationStatus) MarshalJSON() ([]byte, error) {
91
return json.Marshal(errorStatus{s.Err.Error()})
93
return json.Marshal(applicationStatusNoMarshal(s))
96
func (s applicationStatus) MarshalYAML() (interface{}, error) {
98
return errorStatus{s.Err.Error()}, nil
100
return applicationStatusNoMarshal(s), nil
103
type meterStatus struct {
104
Color string `json:"color,omitempty" yaml:"color,omitempty"`
105
Message string `json:"message,omitempty" yaml:"message,omitempty"`
108
type unitStatus struct {
109
// New Juju Health Status fields.
110
WorkloadStatusInfo statusInfoContents `json:"workload-status,omitempty" yaml:"workload-status"`
111
JujuStatusInfo statusInfoContents `json:"juju-status,omitempty" yaml:"juju-status"`
112
MeterStatus *meterStatus `json:"meter-status,omitempty" yaml:"meter-status,omitempty"`
114
Charm string `json:"upgrading-from,omitempty" yaml:"upgrading-from,omitempty"`
115
Machine string `json:"machine,omitempty" yaml:"machine,omitempty"`
116
OpenedPorts []string `json:"open-ports,omitempty" yaml:"open-ports,omitempty"`
117
PublicAddress string `json:"public-address,omitempty" yaml:"public-address,omitempty"`
118
Subordinates map[string]unitStatus `json:"subordinates,omitempty" yaml:"subordinates,omitempty"`
121
type statusInfoContents struct {
122
Err error `json:"-" yaml:",omitempty"`
123
Current status.Status `json:"current,omitempty" yaml:"current,omitempty"`
124
Message string `json:"message,omitempty" yaml:"message,omitempty"`
125
Since string `json:"since,omitempty" yaml:"since,omitempty"`
126
Version string `json:"version,omitempty" yaml:"version,omitempty"`
127
Life string `json:"life,omitempty" yaml:"life,omitempty"`
130
type statusInfoContentsNoMarshal statusInfoContents
132
func (s statusInfoContents) MarshalJSON() ([]byte, error) {
134
return json.Marshal(errorStatus{s.Err.Error()})
136
return json.Marshal(statusInfoContentsNoMarshal(s))
139
func (s statusInfoContents) MarshalYAML() (interface{}, error) {
141
return errorStatus{s.Err.Error()}, nil
143
return statusInfoContentsNoMarshal(s), nil
146
type unitStatusNoMarshal unitStatus
148
func (s unitStatus) MarshalJSON() ([]byte, error) {
149
if s.WorkloadStatusInfo.Err != nil {
150
return json.Marshal(errorStatus{s.WorkloadStatusInfo.Err.Error()})
152
return json.Marshal(unitStatusNoMarshal(s))
155
func (s unitStatus) MarshalYAML() (interface{}, error) {
156
if s.WorkloadStatusInfo.Err != nil {
157
return errorStatus{s.WorkloadStatusInfo.Err.Error()}, nil
159
return unitStatusNoMarshal(s), nil