Sandro Bonazzola has uploaded a new change for review. Change subject: net_config: use vdscli and setupNetworks ......................................................................
net_config: use vdscli and setupNetworks This patch replaces the usage of the vdsm command line interface with the python vdsm.vdscli and, in the process, switches from the non-rolling-back (and deprecated) addNetwork API verb to th rolling-back setupNetworks. Change-Id: Ic1923870adcb81f4e6bb5c6c1cc819d2e6e49aa2 Signed-off-by: Antoni S. Puimedon <asegu...@redhat.com> (cherry picked from commit 25962a34d1bf9251cbef2c49199c3e029f722f8f) --- M src/plugins/ovirt-hosted-engine-setup/network/bridge.py 1 file changed, 59 insertions(+), 86 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-hosted-engine-setup refs/changes/97/32297/1 diff --git a/src/plugins/ovirt-hosted-engine-setup/network/bridge.py b/src/plugins/ovirt-hosted-engine-setup/network/bridge.py index 9ece5bc..3c35401 100644 --- a/src/plugins/ovirt-hosted-engine-setup/network/bridge.py +++ b/src/plugins/ovirt-hosted-engine-setup/network/bridge.py @@ -34,6 +34,7 @@ from otopi import util from otopi import plugin from vdsm import netinfo +from vdsm import vdscli from ovirt_hosted_engine_setup import constants as ohostedcons @@ -194,96 +195,42 @@ ) def _misc(self): self.logger.info(_('Configuring the management bridge')) - selected = self.environment[ohostedcons.NetworkEnv.BRIDGE_IF] - vds_caps = self.environment[ - ohostedcons.VDSMEnv.VDS_CLI - ].s.getVdsCapabilities()['info'] - self.logger.debug( - 'getVdsCapabilities for {selected}: {caps}'.format( - selected=selected, - caps=vds_caps, - ) - ) - nics_caps = vds_caps['nics'] - vlan_caps = vds_caps['vlans'] - bond_caps = vds_caps['bondings'] - iface = selected - bond = '' - vlan = '' - caps = None - if selected in vlan_caps: - iface = vlan_caps[selected]['iface'] - vlan = vlan_caps[selected]['vlanid'] - caps = vlan_caps[selected] - elif netinfo.isbonding(iface): - bond = iface - iface = ','.join(netinfo.slaves(bond)) - caps = bond_caps[selected] - else: - caps = nics_caps[selected] - + conn = vdscli.connect() + net_info = netinfo.NetInfo(_getVdsCapabilities(conn)) + bridge_port = self.environment[ohostedcons.NetworkEnv.BRIDGE_IF] bridge = self.environment[ohostedcons.NetworkEnv.BRIDGE_NAME] - cmd = [self.command.get('vdsClient')] - if self.environment[ohostedcons.VDSMEnv.USE_SSL]: - cmd.append('-s') - cmd += [ - 'localhost', - 'addNetwork', - 'bridge=%s' % bridge, - 'vlan=%s' % vlan, - 'bond=%s' % bond, - 'nics=%s' % iface, - 'force=False', - 'bridged=True', - 'ONBOOT=yes', - ] - boot_proto = None - if 'BOOTPROTO' in caps['cfg']: - boot_proto = caps['cfg']['BOOTPROTO'] - cmd += ['bootproto=%s' % boot_proto] - - if boot_proto in ('dhcp', 'bootp'): - cmd += [ - 'blockingdhcp=true', - ] + networks = {bridge: {}} + if bridge_port in net_info.vlans: + port_info = net_info.vlans[bridge_port] + networks[bridge]['vlan'] = port_info['vlanid'] + iface = port_info['iface'] + if iface in net_info.bondings: + networks[bridge]['bonding'] = iface + else: + networks[bridge]['nic'] = iface + elif bridge_port in net_info.bondings: + networks[bridge]['bonding'] = bridge_port + port_info = net_info.bondings[bridge_port] + elif bridge_port in net_info.nics: + networks[bridge]['nic'] = bridge_port + port_info = net_info.nics[bridge_port] else: - # Static configuration - cmd += [ - 'ipaddr=%s' % caps['addr'], - 'netmask=%s' % caps['netmask'], - ] - if 'GATEWAY' in caps['cfg']: - cmd += [ - 'gateway=%s' % caps['cfg']['GATEWAY'], - ] - self.execute( - cmd, - raiseOnError=True - ) + raise RuntimeError('The selected device %s is not a supported ' + 'bridge port' % bridge_port) - # TODO: refactor above with vdsmcli API and check if it still works - # since previously it got stuck on EL6 - # from vdsm import vdscli - # s = vdscli.connect() - # s.setupNetwork( - # {'netname': {'vlan': vlan, 'nic': iface, 'bootproto': boot_proto, - # 'blockingdhcp': True}, - # {}, - # {'connectivityCheck': False} - # ) + if 'BOOTPROTO' in port_info['cfg']: + networks[bridge]['bootproto'] = port_info['cfg']['BOOTPROTO'] + if networks[bridge].get('bootproto') == 'dhcp': + networks[bridge]['blockingdhcp'] = True + else: + networks[bridge]['ipaddr'] = port_info['addr'] + networks[bridge]['netmask'] = port_info['netmask'] + gateway = port_info.get('gateway') + if gateway is not None: + networks[bridge]['gateway'] = gateway - status = self.environment[ - ohostedcons.VDSMEnv.VDS_CLI - ].s.setSafeNetworkConfig() - self.logger.debug(status) - if status['status']['code'] != 0: - raise RuntimeError(status['status']['message']) - - for state in (False, True): - self.services.state( - name='network', - state=state, - ) + _setupNetworks(conn, networks, {}, {'connectivityCheck': False}) + _setSafeNetworkConfig(conn) @plugin.event( stage=plugin.Stages.STAGE_CLOSEUP, @@ -295,4 +242,30 @@ self.services.startup('network', True) +def _setupNetworks(conn, networks, bonds, options): + result = conn.setupNetworks(networks, bonds, options) + code, message = result['status']['code'], result['status']['message'] + if code != 0: + raise RuntimeError('Failed to setup networks %r. Error code: "%s" ' + 'message: "%s"' % (networks, code, message)) + + +def _getVdsCapabilities(conn): + result = conn.getVdsCapabilities() + code, message = result['status']['code'], result['status']['message'] + if code != 0 or 'info' not in result: + raise RuntimeError('Failed to get vds capabilities. Error code: ' + '"%s" message: "%s"' % (code, message)) + return result['info'] + + +def _setSafeNetworkConfig(conn): + result = conn.setSafeNetworkConfig() + code, message = result['status']['code'], result['status']['message'] + if code != 0: + raise RuntimeError('Failed to persist network configuration. ' + 'Error code: "%s" message: "%s"' % + (code, message)) + + # vim: expandtab tabstop=4 shiftwidth=4 -- To view, visit http://gerrit.ovirt.org/32297 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic1923870adcb81f4e6bb5c6c1cc819d2e6e49aa2 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-hosted-engine-setup Gerrit-Branch: ovirt-hosted-engine-setup-1.2 Gerrit-Owner: Sandro Bonazzola <sbona...@redhat.com> Gerrit-Reviewer: Antoni Segura Puimedon <asegu...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches