Skip to content

Commit 2808990

Browse files
committed
Refactor API versioning, replace not update the settings.
1 parent 5e24035 commit 2808990

12 files changed

Lines changed: 194 additions & 257 deletions

File tree

apiserver/allfacades.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,9 +267,9 @@ func AllFacades() *facade.Registry {
267267

268268
reg("StatusHistory", 2, statushistory.NewAPI)
269269

270-
reg("Storage", 3, storage.NewFacadeV3)
271-
reg("Storage", 4, storage.NewFacadeV4) // changes Destroy() method signature.
272-
reg("Storage", 5, storage.NewFacadeV5) // adds Update() and Delete()
270+
reg("Storage", 3, storage.NewStorageAPIV3)
271+
reg("Storage", 4, storage.NewStorageAPIV4) // changes Destroy() method signature.
272+
reg("Storage", 5, storage.NewStorageAPI) // Update and Delete storage pools
273273

274274
reg("StorageProvisioner", 3, storageprovisioner.NewFacadeV3)
275275
reg("StorageProvisioner", 4, storageprovisioner.NewFacadeV4)

apiserver/facades/client/storage/base_test.go

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ type baseStorageSuite struct {
2626
resources *common.Resources
2727
authorizer apiservertesting.FakeAuthorizer
2828

29-
api *storage.APIv5
30-
apiCaas *storage.APIv5
31-
apiv3 *storage.APIv3
29+
api *storage.StorageAPI
30+
apiCaas *storage.StorageAPI
31+
apiv3 *storage.StorageAPIv3
3232
storageAccessor *mockStorageAccessor
3333
state *mockState
3434

@@ -67,12 +67,14 @@ func (s *baseStorageSuite) SetUpTest(c *gc.C) {
6767
s.poolManager = s.constructPoolManager()
6868

6969
s.callContext = context.NewCloudCallContext()
70-
var err error
71-
s.api, err = storage.NewAPIv5(s.state, state.ModelTypeIAAS, s.storageAccessor, s.registry, s.poolManager, s.resources, s.authorizer, s.callContext)
72-
s.apiCaas, err = storage.NewAPIv5(s.state, state.ModelTypeCAAS, s.storageAccessor, s.registry, s.poolManager, s.resources, s.authorizer, s.callContext)
73-
c.Assert(err, jc.ErrorIsNil)
74-
s.apiv3, err = storage.NewAPIv3(s.state, state.ModelTypeIAAS, s.storageAccessor, s.registry, s.poolManager, s.resources, s.authorizer, s.callContext)
75-
c.Assert(err, jc.ErrorIsNil)
70+
s.api = storage.NewStorageAPIForTest(s.state, state.ModelTypeIAAS, s.storageAccessor, s.registry, s.poolManager, s.authorizer, s.callContext)
71+
s.apiCaas = storage.NewStorageAPIForTest(s.state, state.ModelTypeCAAS, s.storageAccessor, s.registry, s.poolManager, s.authorizer, s.callContext)
72+
newAPI := storage.NewStorageAPIForTest(s.state, state.ModelTypeIAAS, s.storageAccessor, s.registry, s.poolManager, s.authorizer, s.callContext)
73+
s.apiv3 = &storage.StorageAPIv3{
74+
StorageAPIv4: storage.StorageAPIv4{
75+
StorageAPI: *newAPI,
76+
},
77+
}
7678
}
7779

7880
// TODO(axw) get rid of assertCalls, use stub directly everywhere.
@@ -357,13 +359,9 @@ func (s *baseStorageSuite) constructPoolManager() *mockPoolManager {
357359
}
358360
return result, nil
359361
},
360-
updatePool: func(name string, attrs map[string]interface{}) error {
362+
replacePool: func(name string, attrs map[string]interface{}) error {
361363
if p, ok := s.pools[name]; ok {
362-
updatedAttr := p.Attrs()
363-
for k, v := range attrs {
364-
updatedAttr[k] = v
365-
}
366-
newPool, err := jujustorage.NewConfig(name, p.Provider(), updatedAttr)
364+
newPool, err := jujustorage.NewConfig(name, p.Provider(), attrs)
367365
s.pools[name] = newPool
368366
return err
369367
}

apiserver/facades/client/storage/export_test.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
// Copyright 2015, 2019 Canonical Ltd.
1+
// Copyright 2015 Canonical Ltd.
22
// Licensed under the AGPLv3, see LICENCE file for details.
33

44
package storage
55

66
var (
7-
ValidatePoolListFilter = (*APIv5).validatePoolListFilter
8-
ValidateNameCriteria = (*APIv5).validateNameCriteria
9-
ValidateProviderCriteria = (*APIv5).validateProviderCriteria
10-
EnsureStoragePoolFilter = (*APIv5).ensureStoragePoolFilter
7+
ValidatePoolListFilter = (*StorageAPI).validatePoolListFilter
8+
ValidateNameCriteria = (*StorageAPI).validateNameCriteria
9+
ValidateProviderCriteria = (*StorageAPI).validateProviderCriteria
10+
EnsureStoragePoolFilter = (*StorageAPI).ensureStoragePoolFilter
11+
NewStorageAPIForTest = newStorageAPI
1112
)
1213

1314
type (

apiserver/facades/client/storage/mock_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ import (
1616
)
1717

1818
type mockPoolManager struct {
19-
getPool func(name string) (*jujustorage.Config, error)
20-
createPool func(name string, providerType jujustorage.ProviderType, attrs map[string]interface{}) (*jujustorage.Config, error)
21-
deletePool func(name string) error
22-
listPools func() ([]*jujustorage.Config, error)
23-
updatePool func(name string, attrs map[string]interface{}) error
19+
getPool func(name string) (*jujustorage.Config, error)
20+
createPool func(name string, providerType jujustorage.ProviderType, attrs map[string]interface{}) (*jujustorage.Config, error)
21+
deletePool func(name string) error
22+
listPools func() ([]*jujustorage.Config, error)
23+
replacePool func(name string, attrs map[string]interface{}) error
2424
}
2525

2626
func (m *mockPoolManager) Get(name string) (*jujustorage.Config, error) {
@@ -39,8 +39,8 @@ func (m *mockPoolManager) List() ([]*jujustorage.Config, error) {
3939
return m.listPools()
4040
}
4141

42-
func (m *mockPoolManager) Update(name string, attrs map[string]interface{}) error {
43-
return m.updatePool(name, attrs)
42+
func (m *mockPoolManager) Replace(name string, attrs map[string]interface{}) error {
43+
return m.replacePool(name, attrs)
4444
}
4545

4646
type mockStorageAccessor struct {

apiserver/facades/client/storage/pooldelete_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
jc "github.com/juju/testing/checkers"
1010
gc "gopkg.in/check.v1"
1111

12-
storage "github.com/juju/juju/storage"
12+
"github.com/juju/juju/storage"
1313
"github.com/juju/juju/storage/provider"
1414
)
1515

@@ -41,7 +41,7 @@ func (s *poolDeleteSuite) TestDeletePool(c *gc.C) {
4141
c.Assert(pools, gc.HasLen, 0)
4242
}
4343

44-
func (s *poolDeleteSuite) TestDeleteErrorNotExists(c *gc.C) {
44+
func (s *poolDeleteSuite) TestDeleteNotExists(c *gc.C) {
4545
poolName := fmt.Sprintf("%v%v", tstName, 0)
4646

4747
err := s.api.DeletePool(poolName)

apiserver/facades/client/storage/poolupdate_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
gc "gopkg.in/check.v1"
1212

1313
"github.com/juju/juju/apiserver/params"
14-
storage "github.com/juju/juju/storage"
14+
"github.com/juju/juju/storage"
1515
"github.com/juju/juju/storage/provider"
1616
)
1717

@@ -26,7 +26,10 @@ func (s *poolUpdateSuite) createPools(c *gc.C, num int) {
2626
for i := 0; i < num; i++ {
2727
poolName := fmt.Sprintf("%v%v", tstName, i)
2828
s.baseStorageSuite.pools[poolName], err =
29-
storage.NewConfig(poolName, provider.LoopProviderType, map[string]interface{}{"zip": "zap"})
29+
storage.NewConfig(poolName, provider.LoopProviderType, map[string]interface{}{
30+
"zip": "zap",
31+
"beep": "boop",
32+
})
3033
c.Assert(err, jc.ErrorIsNil)
3134
}
3235
}

apiserver/facades/client/storage/shim.go

Lines changed: 0 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -8,104 +8,14 @@ import (
88
"gopkg.in/juju/names.v2"
99

1010
"github.com/juju/juju/apiserver/common/storagecommon"
11-
"github.com/juju/juju/apiserver/facade"
12-
"github.com/juju/juju/caas"
13-
"github.com/juju/juju/environs"
1411
"github.com/juju/juju/state"
15-
"github.com/juju/juju/state/stateenvirons"
16-
"github.com/juju/juju/storage/poolmanager"
1712
)
1813

1914
// This file contains untested shims to let us wrap state in a sensible
2015
// interface and avoid writing tests that depend on mongodb. If you were
2116
// to change any part of it so that it were no longer *obviously* and
2217
// *trivially* correct, you would be Doing It Wrong.
2318

24-
// NewFacadeV5 provides the signature required for facade registration.
25-
func NewFacadeV5(
26-
st *state.State,
27-
resources facade.Resources,
28-
authorizer facade.Authorizer,
29-
) (*APIv5, error) {
30-
model, err := st.Model()
31-
if err != nil {
32-
return nil, errors.Trace(err)
33-
}
34-
registry, err := stateenvirons.NewStorageProviderRegistryForModel(
35-
model,
36-
stateenvirons.GetNewEnvironFunc(environs.New),
37-
stateenvirons.GetNewCAASBrokerFunc(caas.New))
38-
pm := poolmanager.New(state.NewStateSettings(st), registry)
39-
40-
storageAccessor, err := getStorageAccessor(st)
41-
if err != nil {
42-
return nil, errors.Annotate(err, "getting backend")
43-
}
44-
return NewAPIv5(
45-
stateShim{st},
46-
model.Type(),
47-
storageAccessor,
48-
registry, pm, resources, authorizer,
49-
state.CallContext(st))
50-
}
51-
52-
// NewFacadeV4 provides the signature required for facade registration.
53-
func NewFacadeV4(
54-
st *state.State,
55-
resources facade.Resources,
56-
authorizer facade.Authorizer,
57-
) (*APIv4, error) {
58-
model, err := st.Model()
59-
if err != nil {
60-
return nil, errors.Trace(err)
61-
}
62-
registry, err := stateenvirons.NewStorageProviderRegistryForModel(
63-
model,
64-
stateenvirons.GetNewEnvironFunc(environs.New),
65-
stateenvirons.GetNewCAASBrokerFunc(caas.New))
66-
pm := poolmanager.New(state.NewStateSettings(st), registry)
67-
68-
storageAccessor, err := getStorageAccessor(st)
69-
if err != nil {
70-
return nil, errors.Annotate(err, "getting backend")
71-
}
72-
return NewAPIv4(
73-
stateShim{st},
74-
model.Type(),
75-
storageAccessor,
76-
registry, pm, resources, authorizer,
77-
state.CallContext(st))
78-
}
79-
80-
// NewFacadeV3 provides the signature required for facade registration.
81-
func NewFacadeV3(
82-
st *state.State,
83-
resources facade.Resources,
84-
authorizer facade.Authorizer,
85-
) (*APIv3, error) {
86-
model, err := st.Model()
87-
if err != nil {
88-
return nil, errors.Trace(err)
89-
}
90-
env, err := stateenvirons.GetNewEnvironFunc(environs.New)(st)
91-
if err != nil {
92-
return nil, errors.Annotate(err, "getting environ")
93-
}
94-
registry := stateenvirons.NewStorageProviderRegistry(env)
95-
pm := poolmanager.New(state.NewStateSettings(st), registry)
96-
97-
storageAccessor, err := getStorageAccessor(st)
98-
if err != nil {
99-
return nil, errors.Annotate(err, "getting backend")
100-
}
101-
return NewAPIv3(
102-
stateShim{st},
103-
model.Type(),
104-
storageAccessor,
105-
registry, pm, resources, authorizer,
106-
state.CallContext(st))
107-
}
108-
10919
type storageAccess interface {
11020
storageInterface
11121

0 commit comments

Comments
 (0)