Merge "Add release notes job to zuul template"
diff --git a/neutron_tempest_plugin/scenario/test_trunk.py b/neutron_tempest_plugin/scenario/test_trunk.py
index 2ff7e5d..f7568c5 100644
--- a/neutron_tempest_plugin/scenario/test_trunk.py
+++ b/neutron_tempest_plugin/scenario/test_trunk.py
@@ -29,13 +29,11 @@
 CONF = config.CONF
 
 CONFIGURE_VLAN_INTERFACE_COMMANDS = (
-    'IFACE=$(PATH=$PATH:/usr/sbin ip l | grep "^[0-9]*: e" |'
-    'cut -d \: -f 2) && '
-    'sudo su -c '
-    '"ip l a link $IFACE name $IFACE.%(tag)d type vlan id %(tag)d &&'
-    'ip l s up dev $IFACE.%(tag)d && '
-    '{ ps -ef | grep -q "dhclient .*$IFACE.%(tag)d" || '
-    'dhclient $IFACE.%(tag)d"; }')
+    'IFACE=$(PATH=$PATH:/usr/sbin ip l | grep "^[0-9]*: e"|cut -d \: -f 2) &&'
+    'sudo ip l a link $IFACE name $IFACE.%(tag)d type vlan id %(tag)d &&'
+    'sudo ip l s up dev $IFACE.%(tag)d && '
+    'ps -ef | grep -q "[d]hclient .*$IFACE.%(tag)d" || '
+    'sudo dhclient $IFACE.%(tag)d;')
 
 
 class TrunkTest(base.BaseTempestTestCase):
@@ -141,7 +139,6 @@
                                 CONF.validation.image_ssh_user,
                                 self.keypair['private_key'])
 
-    @utils.unstable_test("bug 1766701")
     @decorators.idempotent_id('bb13fe28-f152-4000-8131-37890a40c79e')
     def test_trunk_subport_lifecycle(self):
         """Test trunk creation and subport transition to ACTIVE status.
@@ -222,7 +219,6 @@
                                 CONF.validation.image_ssh_user,
                                 self.keypair['private_key'])
 
-    @utils.unstable_test('bug 1766701')
     @testtools.skipUnless(
           CONF.neutron_plugin_options.image_is_advanced,
           "Advanced image is required to run this test.")
diff --git a/neutron_tempest_plugin/services/network/json/network_client.py b/neutron_tempest_plugin/services/network/json/network_client.py
index b316ce4..a28d668 100644
--- a/neutron_tempest_plugin/services/network/json/network_client.py
+++ b/neutron_tempest_plugin/services/network/json/network_client.py
@@ -461,6 +461,12 @@
         body = jsonutils.loads(body)
         return service_client.ResponseBody(resp, body)
 
+    def delete_agent(self, agent_id):
+        uri = '%s/agents/%s' % (self.uri_prefix, agent_id)
+        resp, body = self.delete(uri)
+        self.expected_success(204, resp.status)
+        return service_client.ResponseBody(resp, body)
+
     def list_routers_on_l3_agent(self, agent_id):
         uri = '%s/agents/%s/l3-routers' % (self.uri_prefix, agent_id)
         resp, body = self.get(uri)
diff --git a/releasenotes/notes/agents-client-delete-method-de1a7fb3f845999c.yaml b/releasenotes/notes/agents-client-delete-method-de1a7fb3f845999c.yaml
new file mode 100644
index 0000000..01c94f4
--- /dev/null
+++ b/releasenotes/notes/agents-client-delete-method-de1a7fb3f845999c.yaml
@@ -0,0 +1,7 @@
+---
+features:
+  - |
+    Added a new method ``delete_agent`` to the AgentsClient class that
+    implements agent deletion according to the neutron API.
+    https://developer.openstack.org/api-ref/network/v2/index.html#delete-agent
+