Skip to content

Commit 7fc3e04

Browse files
fschulzetomster
authored andcommitted
Fix setting of virtualbox defaults, so they can be properly overwritten.
1 parent b6c97ea commit 7fc3e04

4 files changed

Lines changed: 102 additions & 13 deletions

File tree

CHANGES.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
==================
33

44
- [feature] files copied during bootstrap can be encrypted using the ``ploy vault`` commands. This is useful for the private ssh host keys in ``bootstrap-files``.
5+
- [fix] fixed setting of virtualbox defaults, so they can be properly overwritten
56

67

78
2.0.0 - 2015-03-05

bsdploy/__init__.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ def augment_instance(instance):
9090
if get_ansible_version() < (1, 5):
9191
log.error("You have an Ansible version below 1.5.0, which isn't supported anymore.")
9292
sys.exit(1)
93+
94+
main_config = instance.master.main_config
95+
9396
# provide virtualbox specific convenience defaults:
9497
if instance.master.sectiongroupname == ('vb-instance'):
9598

@@ -98,22 +101,23 @@ def augment_instance(instance):
98101
instance.config.setdefault(key, value)
99102

100103
# default hostonly interface
101-
if 'vb-hostonlyif' not in instance.master.main_config:
102-
instance.master.main_config['vb-hostonlyif'] = ConfigSection(
103-
vboxnet0=ConfigSection(virtualbox_hostonlyif_defaults))
104+
hostonlyif = main_config.setdefault('vb-hostonlyif', ConfigSection())
105+
vboxnet0 = hostonlyif.setdefault('vboxnet0', ConfigSection())
106+
for key, value in virtualbox_hostonlyif_defaults.items():
107+
vboxnet0.setdefault(key, value)
104108

105109
# default dhcp server
106-
if 'vb-dhcpserver' not in instance.master.main_config:
107-
instance.master.main_config['vb-dhcpserver'] = ConfigSection(
108-
vboxnet0=ConfigSection(virtualbox_dhcpserver_defaults))
110+
dhcpserver = main_config.setdefault('vb-dhcpserver', ConfigSection())
111+
vboxnet0 = dhcpserver.setdefault('vboxnet0', ConfigSection())
112+
for key, value in virtualbox_dhcpserver_defaults.items():
113+
vboxnet0.setdefault(key, value)
109114

110115
# default virtual disk
111116
if 'vb-disk:defaultdisk' in instance.config.get('storage', {}):
112-
try:
113-
instance.master.main_config['vb-disk']['defaultdisk']
114-
except KeyError:
115-
instance.master.main_config['vb-disk'] = ConfigSection(
116-
defaultdisk=ConfigSection(virtualbox_bootdisk_defaults))
117+
disks = main_config.setdefault('vb-disk', ConfigSection())
118+
defaultdisk = disks.setdefault('defaultdisk', ConfigSection())
119+
for key, value in virtualbox_bootdisk_defaults.items():
120+
defaultdisk.setdefault(key, value)
117121

118122
if not instance.master.sectiongroupname.startswith('ez-'):
119123
return
@@ -122,7 +126,7 @@ def augment_instance(instance):
122126
instance.config.setdefault(key, value)
123127

124128
if 'fabfile' not in instance.config:
125-
playbooks_directory = get_playbooks_directory(instance.master.main_config)
129+
playbooks_directory = get_playbooks_directory(main_config)
126130
fabfile = path.join(playbooks_directory, instance.uid, 'fabfile.py')
127131
if path.exists(fabfile):
128132
instance.config['fabfile'] = fabfile
@@ -141,7 +145,7 @@ def augment_instance(instance):
141145
instance.config['roles'] = 'jails_host'
142146
if 'fingerprint' not in instance.config:
143147
host_defined_path = instance.config.get('bootstrap-files')
144-
ploy_conf_path = instance.master.main_config.path
148+
ploy_conf_path = main_config.path
145149
if host_defined_path is None:
146150
bootstrap_path = path.join(ploy_conf_path, '..', 'bootstrap-files')
147151
else:

bsdploy/tests/test_bsdploy.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,89 @@ def test_augment_non_ezjail_instance(ctrl, ployconf):
129129
assert dict(ctrl.instances['foo'].config) == {}
130130

131131

132+
@pytest.mark.parametrize("config, expected", [
133+
([], {'vboxnet0': {'ip': '192.168.56.1'}}),
134+
(['[vb-hostonlyif:vboxnet0]'], {'vboxnet0': {'ip': '192.168.56.1'}}),
135+
(['[vb-hostonlyif:vboxnet0]', 'ip = 192.168.57.1'],
136+
{'vboxnet0': {'ip': '192.168.57.1'}}),
137+
(['[vb-hostonlyif:vboxnet1]', 'ip = 192.168.57.1'],
138+
{'vboxnet0': {'ip': '192.168.56.1'}, 'vboxnet1': {'ip': '192.168.57.1'}})])
139+
def test_virtualbox_hostonlyif(ctrl, config, expected, ployconf):
140+
import ploy_virtualbox
141+
ctrl.plugins['virtualbox'] = ploy_virtualbox.plugin
142+
ployconf.fill([
143+
'[vb-instance:vb]'] + config)
144+
# trigger augmentation
145+
ctrl.instances['vb']
146+
assert ctrl.config['vb-hostonlyif'] == expected
147+
148+
149+
@pytest.mark.parametrize("config, expected", [
150+
([],
151+
{'vboxnet0': {
152+
'ip': '192.168.56.2', 'netmask': '255.255.255.0',
153+
'lowerip': '192.168.56.100', 'upperip': '192.168.56.254'}}),
154+
(['[vb-dhcpserver:vboxnet0]'],
155+
{'vboxnet0': {
156+
'ip': '192.168.56.2', 'netmask': '255.255.255.0',
157+
'lowerip': '192.168.56.100', 'upperip': '192.168.56.254'}}),
158+
(['[vb-dhcpserver:vboxnet0]', 'ip = 192.168.57.2'],
159+
{'vboxnet0': {
160+
'ip': '192.168.57.2', 'netmask': '255.255.255.0',
161+
'lowerip': '192.168.56.100', 'upperip': '192.168.56.254'}}),
162+
(['[vb-dhcpserver:vboxnet0]', 'netmask = 255.255.0.0'],
163+
{'vboxnet0': {
164+
'ip': '192.168.56.2', 'netmask': '255.255.0.0',
165+
'lowerip': '192.168.56.100', 'upperip': '192.168.56.254'}}),
166+
(['[vb-dhcpserver:vboxnet0]', 'lowerip = 192.168.56.50'],
167+
{'vboxnet0': {
168+
'ip': '192.168.56.2', 'netmask': '255.255.255.0',
169+
'lowerip': '192.168.56.50', 'upperip': '192.168.56.254'}}),
170+
(['[vb-dhcpserver:vboxnet0]', 'upperip = 192.168.56.200'],
171+
{'vboxnet0': {
172+
'ip': '192.168.56.2', 'netmask': '255.255.255.0',
173+
'lowerip': '192.168.56.100', 'upperip': '192.168.56.200'}}),
174+
(['[vb-dhcpserver:vboxnet0]', 'ip = 192.168.57.2', 'netmask = 255.255.0.0', 'lowerip = 192.168.56.50', 'upperip = 192.168.56.200'],
175+
{'vboxnet0': {
176+
'ip': '192.168.57.2', 'netmask': '255.255.0.0',
177+
'lowerip': '192.168.56.50', 'upperip': '192.168.56.200'}}),
178+
(['[vb-dhcpserver:vboxnet1]', 'ip = 192.168.57.2'],
179+
{'vboxnet0': {
180+
'ip': '192.168.56.2', 'netmask': '255.255.255.0',
181+
'lowerip': '192.168.56.100', 'upperip': '192.168.56.254'},
182+
'vboxnet1': {
183+
'ip': '192.168.57.2'}})])
184+
def test_virtualbox_dhcpserver(ctrl, config, expected, ployconf):
185+
import ploy_virtualbox
186+
ctrl.plugins['virtualbox'] = ploy_virtualbox.plugin
187+
ployconf.fill([
188+
'[vb-instance:vb]'] + config)
189+
# trigger augmentation
190+
ctrl.instances['vb']
191+
assert ctrl.config['vb-dhcpserver'] == expected
192+
193+
194+
@pytest.mark.parametrize("config, expected", [
195+
([], {}),
196+
(['storage = --medium vb-disk:defaultdisk'],
197+
{'defaultdisk': {'size': '102400'}}),
198+
(['storage = --medium vb-disk:defaultdisk', '[vb-disk:defaultdisk]'],
199+
{'defaultdisk': {'size': '102400'}}),
200+
(['storage = --medium vb-disk:defaultdisk', '[vb-disk:defaultdisk]', 'size = 1024000'],
201+
{'defaultdisk': {'size': '1024000'}}),
202+
(['storage = --medium vb-disk:defaultdisk', '[vb-disk:otherdisk]'],
203+
{'defaultdisk': {'size': '102400'},
204+
'otherdisk': {}})])
205+
def test_virtualbox_defaultdisk(ctrl, config, expected, ployconf):
206+
import ploy_virtualbox
207+
ctrl.plugins['virtualbox'] = ploy_virtualbox.plugin
208+
ployconf.fill([
209+
'[vb-instance:vb]'] + config)
210+
# trigger augmentation
211+
ctrl.instances['vb']
212+
assert ctrl.config.get('vb-disk', {}) == expected
213+
214+
132215
@pytest.mark.parametrize("instance, key, value, expected", [
133216
('foo', 'ansible_python_interpreter', 'python2.7', 'python2.7'),
134217
('foo', 'startup_script', 'foo', {'path': '{tempdir}/etc/foo'}),

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
'repoze.sphinx.autointerface',
4747
'coverage',
4848
'jarn.mkrelease',
49+
'ploy_virtualbox>=1.1.0',
4950
'pytest >= 2.4.2',
5051
'pytest-flakes',
5152
'pytest-pep8',

0 commit comments

Comments
 (0)