github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/provider/openstack/upgrades.go (about) 1 // Copyright 2020 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package openstack 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/version/v2" 9 10 "github.com/juju/juju/environs" 11 ) 12 13 // PreparePrechecker is part of the environs.JujuUpgradePrechecker 14 // interface. It is called to to give an Environ a chance to perform 15 // interactive operations that are required for prechecking 16 // an upgrade. 17 func (e *Environ) PreparePrechecker() error { 18 return authenticateClient(e.client()) 19 } 20 21 // PrecheckUpgradeOperations is part of the environs.JujuUpgradePrechecker 22 // interface. It returns a slice of PrecheckJujuUpgradeOperation to be 23 // used to determine if a controller can be safely upgraded. 24 func (env *Environ) PrecheckUpgradeOperations() []environs.PrecheckJujuUpgradeOperation { 25 return []environs.PrecheckJujuUpgradeOperation{{ 26 TargetVersion: version.MustParse("2.8.0"), // should be 2.8 27 Steps: []environs.PrecheckJujuUpgradeStep{ 28 verifyNeutronEnabledStep{env}, 29 }, 30 }} 31 } 32 33 type verifyNeutronEnabledStep struct { 34 env *Environ 35 } 36 37 func (verifyNeutronEnabledStep) Description() string { 38 return "Verify Neutron OpenStack service enabled" 39 } 40 41 // Run is part of the environs.PrecheckJujuUpgradeStep interface. 42 func (step verifyNeutronEnabledStep) Run() error { 43 if step.env.supportsNeutron() { 44 return nil 45 } 46 return errors.NotFoundf("OpenStack Neutron service") 47 }