Merge lp:~vlastimil-holer/cloud-init/net-reconfigure into lp:~cloud-init-dev/cloud-init/trunk

Proposed by Scott Moser
Status: Rejected
Rejected by: Scott Moser
Proposed branch: lp:~vlastimil-holer/cloud-init/net-reconfigure
Merge into: lp:~cloud-init-dev/cloud-init/trunk
Diff against target: 212 lines (+67/-22)
4 files modified
cloudinit/distros/__init__.py (+24/-6)
cloudinit/distros/debian.py (+14/-5)
cloudinit/distros/rhel.py (+15/-6)
cloudinit/distros/sles.py (+14/-5)
To merge this branch: bzr merge lp:~vlastimil-holer/cloud-init/net-reconfigure
Reviewer Review Type Date Requested Status
Server Team CI bot continuous-integration Needs Fixing
cloud-init Commiters Pending
Review via email: mp+186352@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Server Team CI bot (server-team-bot) wrote :

FAILED: Continuous integration, rev:871
No commit message was specified in the merge proposal. Click on the following link and set the commit message (if you want a jenkins rebuild you need to trigger it yourself):
https://code.launchpad.net/~vlastimil-holer/cloud-init/net-reconfigure/+merge/186352/+edit-commit-message

https://server-team-jenkins.canonical.com/job/cloud-init-ci/32/
Executed test runs:
    None: https://server-team-jenkins.canonical.com/job/lp-vote-on-merge/6/console

Click here to trigger a rebuild:
https://server-team-jenkins.canonical.com/job/cloud-init-ci/32/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Scott Moser (smoser) wrote :

Hello,
Thank you for taking the time to contribute to cloud-init. Cloud-init has moved its revision control system to git. As a result, we are marking all bzr merge proposals as 'rejected'. If you would like to re-submit this proposal for review, please do so by following the current HACKING documentation at http://cloudinit.readthedocs.io/en/latest/topics/hacking.html .

The network configuration is dramatically changed in current trunk. This may be already fixed, and if not probably needs rework.

Thanks for your contributions.

Unmerged revisions

871. By Vlastimil Holer

Typo

870. By Vlastimil Holer

Support for shutting down network devices.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'cloudinit/distros/__init__.py'
2--- cloudinit/distros/__init__.py 2013-09-11 12:30:35 +0000
3+++ cloudinit/distros/__init__.py 2013-09-18 14:56:08 +0000
4@@ -63,7 +63,7 @@
5 raise NotImplementedError()
6
7 @abc.abstractmethod
8- def _write_network(self, settings):
9+ def _write_network(self, settings, pretend=False):
10 # In the future use the http://fedorahosted.org/netcf/
11 # to write this blob out in a distro format
12 raise NotImplementedError()
13@@ -112,6 +112,12 @@
14 mirror_info=arch_info)
15
16 def apply_network(self, settings, bring_up=True):
17+ # List newly configured devices and put them
18+ # down before new configuration is written to disk,
19+ if bring_up:
20+ dev_names = self._write_network(settings, pretend=True)
21+ self._bring_down_interfaces(dev_names)
22+
23 # Write it out
24 dev_names = self._write_network(settings)
25 # Now try to bring them up
26@@ -266,9 +272,9 @@
27 contents.write("%s\n" % (eh))
28 util.write_file(self.hosts_fn, contents.getvalue(), mode=0644)
29
30- def _bring_up_interface(self, device_name):
31- cmd = ['ifup', device_name]
32- LOG.debug("Attempting to run bring up interface %s using command %s",
33+ def _bring_interface(self, device_name, command):
34+ cmd = [command, device_name]
35+ LOG.debug("Attempting to manage interface %s using command %s",
36 device_name, cmd)
37 try:
38 (_out, err) = util.subp(cmd)
39@@ -279,15 +285,27 @@
40 util.logexc(LOG, "Running interface command %s failed", cmd)
41 return False
42
43- def _bring_up_interfaces(self, device_names):
44+ def _bring_up_interface(self, device_name):
45+ return self._bring_interface(device_name, command='ifup')
46+
47+ def _bring_down_interface(self, device_name):
48+ return self._bring_interface(device_name, command='ifdown')
49+
50+ def _bring_interfaces(self, device_names, cb):
51 am_failed = 0
52 for d in device_names:
53- if not self._bring_up_interface(d):
54+ if not cb(d):
55 am_failed += 1
56 if am_failed == 0:
57 return True
58 return False
59
60+ def _bring_up_interfaces(self, device_names):
61+ return self._bring_interfaces(device_names, self._bring_up_interface)
62+
63+ def _bring_down_interfaces(self, device_names):
64+ return self._bring_interfaces(device_names, self._bring_down_interface)
65+
66 def get_default_user(self):
67 return self.get_option('default_user')
68
69
70=== modified file 'cloudinit/distros/debian.py'
71--- cloudinit/distros/debian.py 2013-09-04 06:51:51 +0000
72+++ cloudinit/distros/debian.py 2013-09-18 14:56:08 +0000
73@@ -70,19 +70,28 @@
74 self.update_package_sources()
75 self.package_command('install', pkgs=pkglist)
76
77- def _write_network(self, settings):
78- util.write_file(self.network_conf_fn, settings)
79+ def _write_network(self, settings, pretend=False):
80+ if not pretend:
81+ util.write_file(self.network_conf_fn, settings)
82 return ['all']
83
84- def _bring_up_interfaces(self, device_names):
85+ def _bring_interfaces(self, device_names, cb):
86 use_all = False
87 for d in device_names:
88 if d == 'all':
89 use_all = True
90 if use_all:
91- return distros.Distro._bring_up_interface(self, '--all')
92+ return cb(self, '--all')
93 else:
94- return distros.Distro._bring_up_interfaces(self, device_names)
95+ return cb(self, device_names)
96+
97+ def _bring_up_interfaces(self, device_names):
98+ return self._bring_interfaces(device_names,
99+ distros.Distro._bring_up_interface)
100+
101+ def _bring_down_interfaces(self, device_names):
102+ return self._bring_interfaces(device_names,
103+ distros.Distro._bring_down_interface)
104
105 def _select_hostname(self, hostname, fqdn):
106 # Prefer the short hostname over the long
107
108=== modified file 'cloudinit/distros/rhel.py'
109--- cloudinit/distros/rhel.py 2013-09-04 06:51:51 +0000
110+++ cloudinit/distros/rhel.py 2013-09-18 14:56:08 +0000
111@@ -61,7 +61,7 @@
112 def install_packages(self, pkglist):
113 self.package_command('install', pkgs=pkglist)
114
115- def _write_network(self, settings):
116+ def _write_network(self, settings, pretend=False):
117 # TODO(harlowja) fix this... since this is the ubuntu format
118 entries = rhel_util.translate_network(settings)
119 LOG.debug("Translated ubuntu style network settings %s into %s",
120@@ -82,15 +82,16 @@
121 'MACADDR': info.get('hwaddress'),
122 'ONBOOT': _make_sysconfig_bool(info.get('auto')),
123 }
124- rhel_util.update_sysconfig_file(net_fn, net_cfg)
125+ if not pretend:
126+ rhel_util.update_sysconfig_file(net_fn, net_cfg)
127 if 'dns-nameservers' in info:
128 nameservers.extend(info['dns-nameservers'])
129 if 'dns-search' in info:
130 searchservers.extend(info['dns-search'])
131- if nameservers or searchservers:
132+ if (nameservers or searchservers) and not pretend:
133 rhel_util.update_resolve_conf_file(self.resolve_conf_fn,
134 nameservers, searchservers)
135- if dev_names:
136+ if dev_names and not pretend:
137 net_cfg = {
138 'NETWORKING': _make_sysconfig_bool(True),
139 }
140@@ -154,11 +155,19 @@
141 else:
142 return default
143
144- def _bring_up_interfaces(self, device_names):
145+ def _bring_interfaces(self, device_names, cb):
146 if device_names and 'all' in device_names:
147 raise RuntimeError(('Distro %s can not translate '
148 'the device name "all"') % (self.name))
149- return distros.Distro._bring_up_interfaces(self, device_names)
150+ return cb(self, device_names)
151+
152+ def _bring_up_interfaces(self, device_names):
153+ return self._bring_interfaces(device_names,
154+ distros.Distro._bring_up_interfaces)
155+
156+ def _bring_down_interfaces(self, device_names):
157+ return self._bring_interfaces(device_names,
158+ distros.Distro._bring_down_interfaces)
159
160 def set_timezone(self, tz):
161 tz_file = self._find_tz_file(tz)
162
163=== modified file 'cloudinit/distros/sles.py'
164--- cloudinit/distros/sles.py 2013-08-06 10:36:30 +0000
165+++ cloudinit/distros/sles.py 2013-09-18 14:56:08 +0000
166@@ -52,7 +52,7 @@
167 def install_packages(self, pkglist):
168 self.package_command('install', args='-l', pkgs=pkglist)
169
170- def _write_network(self, settings):
171+ def _write_network(self, settings, pretend=False):
172 # Convert debian settings to ifcfg format
173 entries = rhel_util.translate_network(settings)
174 LOG.debug("Translated ubuntu style network settings %s into %s",
175@@ -83,12 +83,13 @@
176 net_cfg['ETHTOOL_OPTIONS'] = ''
177 else:
178 net_cfg['FIREWALL'] = 'no'
179- rhel_util.update_sysconfig_file(net_fn, net_cfg, True)
180+ if not pretend:
181+ rhel_util.update_sysconfig_file(net_fn, net_cfg, True)
182 if 'dns-nameservers' in info:
183 nameservers.extend(info['dns-nameservers'])
184 if 'dns-search' in info:
185 searchservers.extend(info['dns-search'])
186- if nameservers or searchservers:
187+ if (nameservers or searchservers) and not pretend:
188 rhel_util.update_resolve_conf_file(self.resolve_conf_fn,
189 nameservers, searchservers)
190 return dev_names
191@@ -141,11 +142,19 @@
192 return default
193 return hostname
194
195- def _bring_up_interfaces(self, device_names):
196+ def _bring_interfaces(self, device_names, cb):
197 if device_names and 'all' in device_names:
198 raise RuntimeError(('Distro %s can not translate '
199 'the device name "all"') % (self.name))
200- return distros.Distro._bring_up_interfaces(self, device_names)
201+ return cb(self, device_names)
202+
203+ def _bring_up_interfaces(self, device_names):
204+ return self._bring_interfaces(device_names,
205+ distros.Distro._bring_up_interfaces)
206+
207+ def _bring_down_interfaces(self, device_names):
208+ return self._bring_interfaces(device_names,
209+ distros.Distro._bring_down_interfaces)
210
211 def set_timezone(self, tz):
212 tz_file = self._find_tz_file(tz)