github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/provisioner/export_test.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package provisioner 5 6 import ( 7 "sort" 8 9 "github.com/juju/names/v5" 10 "github.com/juju/version/v2" 11 12 apiprovisioner "github.com/juju/juju/api/agent/provisioner" 13 "github.com/juju/juju/core/watcher" 14 "github.com/juju/juju/environs" 15 "github.com/juju/juju/environs/config" 16 "github.com/juju/juju/rpc/params" 17 ) 18 19 func SetObserver(p Provisioner, observer chan<- *config.Config) { 20 var configObserver *configObserver 21 if ep, ok := p.(*environProvisioner); ok { 22 configObserver = &ep.configObserver 23 configObserver.catacomb = &ep.catacomb 24 } else { 25 cp := p.(*containerProvisioner) 26 configObserver = &cp.configObserver 27 configObserver.catacomb = &cp.catacomb 28 } 29 configObserver.Lock() 30 configObserver.observer = observer 31 configObserver.Unlock() 32 } 33 34 func GetRetryWatcher(p Provisioner) (watcher.NotifyWatcher, error) { 35 return p.getRetryWatcher() 36 } 37 38 var ( 39 GetContainerInitialiser = &getContainerInitialiser 40 GetToolsFinder = &getToolsFinder 41 RetryStrategyDelay = &retryStrategyDelay 42 RetryStrategyCount = &retryStrategyCount 43 ) 44 45 var ClassifyMachine = classifyMachine 46 47 // GetCopyAvailabilityZoneMachines returns a copy of p.(*provisionerTask).availabilityZoneMachines 48 func GetCopyAvailabilityZoneMachines(p ProvisionerTask) []AvailabilityZoneMachine { 49 task := p.(*provisionerTask) 50 task.machinesMutex.RLock() 51 defer task.machinesMutex.RUnlock() 52 // Sort to make comparisons in the tests easier. 53 zoneMachines := task.availabilityZoneMachines 54 sort.Slice(task.availabilityZoneMachines, func(i, j int) bool { 55 switch { 56 case zoneMachines[i].MachineIds.Size() < zoneMachines[j].MachineIds.Size(): 57 return true 58 case zoneMachines[i].MachineIds.Size() == zoneMachines[j].MachineIds.Size(): 59 return zoneMachines[i].ZoneName < zoneMachines[j].ZoneName 60 } 61 return false 62 }) 63 retvalues := make([]AvailabilityZoneMachine, len(zoneMachines)) 64 for i := range zoneMachines { 65 retvalues[i] = *zoneMachines[i] 66 } 67 return retvalues 68 } 69 70 func SetupToStartMachine( 71 p ProvisionerTask, 72 machine apiprovisioner.MachineProvisioner, 73 version *version.Number, 74 pInfoResult params.ProvisioningInfoResult, 75 ) (environs.StartInstanceParams, error) { 76 return p.(*provisionerTask).setupToStartMachine(machine, version, pInfoResult) 77 } 78 79 func MachineSupportsContainers( 80 cfg ContainerManifoldConfig, pr ContainerMachineGetter, mTag names.MachineTag, 81 ) (ContainerMachine, error) { 82 return cfg.machineSupportsContainers(pr, mTag) 83 }