From 0b0e557d1e1fbb7b0131f0cd46aca7fd7f80b8cc Mon Sep 17 00:00:00 2001 From: externalreality Date: Sat, 16 Dec 2017 00:00:10 +0100 Subject: [PATCH] Add Uniter API upward compatibility for NetworkInfo endpoint. --- apiserver/facades/agent/uniter/uniter.go | 17 +++++++++++++++++ apiserver/params/network.go | 13 ++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/apiserver/facades/agent/uniter/uniter.go b/apiserver/facades/agent/uniter/uniter.go index e05d897c5fc2..40276832ce90 100644 --- a/apiserver/facades/agent/uniter/uniter.go +++ b/apiserver/facades/agent/uniter/uniter.go @@ -2189,3 +2189,20 @@ func (u *UniterAPIV4) NetworkInfo(_, _ struct{}) {} // WatchUnitRelations isn't on the V4 API. func (u *UniterAPIV4) WatchUnitRelations(_, _ struct{}) {} + +func networkInfoResultsToV6(v7Results params.NetworkInfoResults) params.NetworkInfoResultsV6 { + results := make(map[string]params.NetworkInfoResultV6) + for k, v6Result := range v7Results.Results { + results[k] = params.NetworkInfoResultV6{Error: v6Result.Error, Info: v6Result.Info} + } + return params.NetworkInfoResultsV6{Results: results} +} + +// Network Info implements UniterAPIV6 version of NetworkInfo by constructing an API V6 compatible result. +func (u *UniterAPIV6) NetworkInfo(args params.NetworkInfoParams) (params.NetworkInfoResultsV6, error) { + v6Results, err := u.UniterAPI.NetworkInfo(args) + if err != nil { + return params.NetworkInfoResultsV6{}, errors.Trace(err) + } + return networkInfoResultsToV6(v6Results), nil +} diff --git a/apiserver/params/network.go b/apiserver/params/network.go index dd45fba80229..703bd04c4b53 100644 --- a/apiserver/params/network.go +++ b/apiserver/params/network.go @@ -689,7 +689,7 @@ type NetworkInfo struct { Addresses []InterfaceAddress `json:"addresses"` } -// NetworkInfoResult holds either and error or a list of NetworkInfos for given binding. +// NetworkInfoResult Adds egress and ingress subnets and changes the `Info` key name in yaml/json serialization to V6. type NetworkInfoResult struct { Error *Error `json:"error,omitempty" yaml:"error,omitempty"` Info []NetworkInfo `json:"bind-addresses,omitempty" yaml:"bind-addresses,omitempty"` @@ -702,6 +702,17 @@ type NetworkInfoResults struct { Results map[string]NetworkInfoResult `json:"results"` } +// NetworkInfoResultV6 holds either and error or a list of NetworkInfos for given binding. +type NetworkInfoResultV6 struct { + Error *Error `json:"error,omitempty" yaml:"error,omitempty"` + Info []NetworkInfo `json:"network-info" yaml:"info"` +} + +// NetworkInfoResults holds a mapping from binding name to NetworkInfoResultV6. +type NetworkInfoResultsV6 struct { + Results map[string]NetworkInfoResultV6 `json:"results"` +} + // NetworkInfoParams holds a name of the unit and list of bindings for which we want to get NetworkInfos. type NetworkInfoParams struct { Unit string `json:"unit"`