1
// Copyright 2012, 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
9
"github.com/juju/juju/api/watcher"
10
"github.com/juju/juju/environs/config"
11
"github.com/juju/juju/network"
14
func SetObserver(p Provisioner, observer chan<- *config.Config) {
15
var configObserver *configObserver
16
if ep, ok := p.(*environProvisioner); ok {
17
configObserver = &ep.configObserver
19
cp := p.(*containerProvisioner)
20
configObserver = &cp.configObserver
23
configObserver.observer = observer
24
configObserver.Unlock()
27
func GetRetryWatcher(p Provisioner) (watcher.NotifyWatcher, error) {
28
return p.getRetryWatcher()
32
ContainerManagerConfig = containerManagerConfig
33
GetToolsFinder = &getToolsFinder
34
SysctlConfig = &sysctlConfig
35
ResolvConf = &resolvConf
36
LocalDNSServers = localDNSServers
37
MustParseTemplate = mustParseTemplate
38
RunTemplateCommand = runTemplateCommand
39
IptablesRules = &iptablesRules
40
NetInterfaces = &netInterfaces
41
InterfaceAddrs = &interfaceAddrs
42
DiscoverPrimaryNIC = discoverPrimaryNIC
43
ConfigureContainerNetwork = configureContainerNetwork
44
MaybeOverrideDefaultLXCNet = maybeOverrideDefaultLXCNet
45
EtcDefaultLXCNetPath = &etcDefaultLXCNetPath
46
EtcDefaultLXCNet = etcDefaultLXCNet
47
MaxInstanceRetryDelay = &maxInstanceRetryDelay
51
IPForwardSysctlKey = ipForwardSysctlKey
52
ARPProxySysctlKey = arpProxySysctlKey
55
// SetIPAndARPForwarding calls the internal setIPAndARPForwarding and
56
// then restores the mocked one.
57
var SetIPAndARPForwarding func(bool) error
59
// SetupRoutesAndIPTables calls the internal setupRoutesAndIPTables
60
// and the restores the mocked one.
61
var SetupRoutesAndIPTables func(string, network.Address, string, []network.InterfaceInfo, bool) error
64
// In order to isolate the host machine from the running tests,
65
// but also allow calling the original setIPAndARPForwarding and
66
// setupRoutesAndIPTables funcs to test them, we need a litte bit
67
// of reflect magic, mostly borrowed from the juju/testing
69
newSetIPAndARPForwardingValue := reflect.ValueOf(&setIPAndARPForwarding).Elem()
70
newSetupRoutesAndIPTablesValue := reflect.ValueOf(&setupRoutesAndIPTables).Elem()
71
oldSetIPAndARPForwardingValue := reflect.New(newSetIPAndARPForwardingValue.Type()).Elem()
72
oldSetupRoutesAndIPTablesValue := reflect.New(newSetupRoutesAndIPTablesValue.Type()).Elem()
73
oldSetIPAndARPForwardingValue.Set(newSetIPAndARPForwardingValue)
74
oldSetupRoutesAndIPTablesValue.Set(newSetupRoutesAndIPTablesValue)
75
mockSetIPAndARPForwardingValue := reflect.ValueOf(
76
func(bool) error { return nil },
78
mockSetupRoutesAndIPTablesValue := reflect.ValueOf(
79
func(string, network.Address, string, []network.InterfaceInfo, bool) error { return nil },
81
switchValues := func(newValue, oldValue reflect.Value) {
82
newValue.Set(oldValue)
84
switchValues(newSetIPAndARPForwardingValue, mockSetIPAndARPForwardingValue)
85
switchValues(newSetupRoutesAndIPTablesValue, mockSetupRoutesAndIPTablesValue)
87
SetIPAndARPForwarding = func(v bool) error {
88
switchValues(newSetIPAndARPForwardingValue, oldSetIPAndARPForwardingValue)
89
defer switchValues(newSetIPAndARPForwardingValue, mockSetIPAndARPForwardingValue)
90
return setIPAndARPForwarding(v)
92
SetupRoutesAndIPTables = func(nic string, addr network.Address, bridge string, ifinfo []network.InterfaceInfo, enableNAT bool) error {
93
switchValues(newSetupRoutesAndIPTablesValue, oldSetupRoutesAndIPTablesValue)
94
defer switchValues(newSetupRoutesAndIPTablesValue, mockSetupRoutesAndIPTablesValue)
95
return setupRoutesAndIPTables(nic, addr, bridge, ifinfo, enableNAT)
99
var ClassifyMachine = classifyMachine