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  }