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  }