From a3c4c80bbf36013a43c01df2d76c18ec2d7ea767 Mon Sep 17 00:00:00 2001
From: Dmitry Tantsur <dtantsur@redhat.com>
Date: Mon, 22 Sep 2014 14:24:48 +0200
Subject: [PATCH] Neutron DHCP implementation to raise exception if no ports
 have VIF

Currently only warning is risen, though deploy can't succeed in this
case for both PXE and Agent drivers.

Change-Id: If57a33818f5da820277c94b7b0ae642d29a698ce
Closes-Bug: #1362060
---
 ironic/dhcp/neutron.py            | 8 ++++----
 ironic/tests/dhcp/test_neutron.py | 3 ++-
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/ironic/dhcp/neutron.py b/ironic/dhcp/neutron.py
index 1edbdace4e..c5dae49c28 100644
--- a/ironic/dhcp/neutron.py
+++ b/ironic/dhcp/neutron.py
@@ -145,10 +145,10 @@ class NeutronDHCPApi(base.BaseDHCP):
         """
         vifs = network.get_node_vif_ids(task)
         if not vifs:
-            LOG.warning(_LW("No VIFs found for node %(node)s when attempting "
-                            "to update DHCP BOOT options."),
-                        {'node': task.node.uuid})
-            return
+            raise exception.FailedToUpdateDHCPOptOnPort(
+                _("No VIFs found for node %(node)s when attempting "
+                  "to update DHCP BOOT options.") %
+                {'node': task.node.uuid})
 
         failures = []
         for port_id, port_vif in vifs.items():
diff --git a/ironic/tests/dhcp/test_neutron.py b/ironic/tests/dhcp/test_neutron.py
index 289fd84bca..f6c5350ce0 100644
--- a/ironic/tests/dhcp/test_neutron.py
+++ b/ironic/tests/dhcp/test_neutron.py
@@ -180,7 +180,8 @@ class TestNeutron(base.TestCase):
         with task_manager.acquire(self.context,
                                   self.node.uuid) as task:
             api = dhcp_factory.DHCPFactory()
-            api.update_dhcp(task, self.node)
+            self.assertRaises(exception.FailedToUpdateDHCPOptOnPort,
+                              api.update_dhcp, task, self.node)
         self.assertFalse(mock_updo.called)
 
     @mock.patch('ironic.dhcp.neutron.NeutronDHCPApi.update_port_dhcp_opts')