[Kimchi-devel] [PATCH] Try to activate physical interface when create a network on it
Sheldon
shaohef at linux.vnet.ibm.com
Wed Apr 9 07:25:58 UTC 2014
Reviewed-by: ShaoHe Feng <shaohef at linux.vnet.ibm.com>
This patch make the the thing simple, user do not need to care the
interface information.
not sure we should add a rest API for interface active in future.
On 04/09/2014 11:41 AM, Mark Wu wrote:
> Currently, the backend network interfaces API doesn't filter out
> the down interfaces. So the user could create network on top of
> a down interface. Kimchi should try to activate the interface if
> it's down and report failure if the cable is not plugged.
>
> In future, we could report the link status to front end and give
> a prompt to user that it need takes several seconds to activate
> the interface.
> ---
> src/kimchi/i18n.py | 2 ++
> src/kimchi/model/networks.py | 18 +++++++++++++++++-
> 2 files changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
> index 86ab5d6..3db2d4c 100644
> --- a/src/kimchi/i18n.py
> +++ b/src/kimchi/i18n.py
> @@ -188,6 +188,8 @@ messages = {
> "KCHNET0017E": _("Unable to delete network %(name)s. There are some virtual machines and/or templates linked to this network."),
> "KCHNET0018E": _("Unable to deactivate network %(name)s. There are some virtual machines and/or templates linked to this network."),
> "KCHNET0019E": _("Bridge device %(name)s can not be the trunk device of a VLAN."),
> + "KCHNET0020E": _("Failed to activate interface %(iface)s: %(err)s."),
> + "KCHNET0021E": _("Failed to activate interface %(iface)s. Please check the physical link status."),
>
> "KCHDR0001E": _("Debug report %(name)s does not exist"),
> "KCHDR0002E": _("Debug report tool not found in system"),
> diff --git a/src/kimchi/model/networks.py b/src/kimchi/model/networks.py
> index 8f77c12..c5fec87 100644
> --- a/src/kimchi/model/networks.py
> +++ b/src/kimchi/model/networks.py
> @@ -18,6 +18,7 @@
> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>
> import sys
> +import time
>
> import ipaddr
> import libvirt
> @@ -29,7 +30,7 @@ from kimchi import xmlutils
> from kimchi.exception import InvalidOperation, InvalidParameter
> from kimchi.exception import MissingParameter, NotFoundError, OperationFailed
> from kimchi.rollbackcontext import RollbackContext
> -from kimchi.utils import kimchi_log
> +from kimchi.utils import kimchi_log, run_command
>
>
> class NetworksModel(object):
> @@ -141,6 +142,20 @@ class NetworksModel(object):
> 'dhcp': {'range': {'start': dhcp_start,
> 'end': dhcp_end}}})
>
> + def _ensure_iface_up(self, iface):
> + if netinfo.operstate(iface) != 'up':
> + _, err, rc = run_command(['ip', 'link', 'set', 'dev', iface, 'up'])
> + if rc != 0:
> + raise OperationFailed("KCHNET0020E",
> + {'iface': iface, 'err': err})
> + # Add a delay to wait for the link change takes into effect.
> + for i in range(10):
> + time.sleep(1)
> + if netinfo.operstate(iface) == 'up':
> + break
> + else:
> + raise OperationFailed("KCHNET0021E", {'iface': iface})
> +
> def _set_network_bridge(self, params):
> try:
> iface = params['interface']
> @@ -150,6 +165,7 @@ class NetworksModel(object):
> except KeyError:
> raise MissingParameter("KCHNET0004E", {'name': params['name']})
>
> + self._ensure_iface_up(iface)
> if netinfo.is_bridge(iface):
> if 'vlan_id' in params:
> raise InvalidParameter('KCHNET0019E', {'name': iface})
--
Thanks and best regards!
Sheldon Feng(冯少合)<shaohef at linux.vnet.ibm.com>
IBM Linux Technology Center
More information about the Kimchi-devel
mailing list