Add agent modules and states

Add REST API wrapper for agents, l3_agents and dhcp_agents

Change-Id: I63ce0a4224b7cd4d65ce80f1efd0c5cfb6f0617e
Closes-Issue: PROD-22594
diff --git a/_modules/neutronv2/agents.py b/_modules/neutronv2/agents.py
new file mode 100644
index 0000000..15703d2
--- /dev/null
+++ b/_modules/neutronv2/agents.py
@@ -0,0 +1,89 @@
+from neutronv2.common import send
+from neutronv2.arg_converter import get_by_name_or_uuid_multiple
+
+
+try:
+    from urllib.parse import urlencode
+except ImportError:
+    from urllib import urlencode
+
+
+@send('get')
+def agent_get_details(agent_id, **kwargs):
+    url = '/agents/{}?{}'.format(agent_id, urlencode(kwargs))
+    return url, {}
+
+
+@send('put')
+def agent_update(agent_id, **kwargs):
+    url = '/agents/{}'.format(agent_id)
+    json = {
+        'agent': kwargs,
+    }
+    return url, {'json': json}
+
+
+@send('delete')
+def agent_delete(agent_id, **kwargs):
+    url = '/agents/{}'.format(agent_id)
+    return url, {}
+
+
+@send('get')
+def l3_agent_router_list(agent_id, **kwargs):
+    url = '/agents/{}/l3-routers'.format(agent_id)
+    return url, {}
+
+
+@get_by_name_or_uuid_multiple([('router', 'router_id')])
+@send('post')
+def l3_agent_router_schedule(router_id, agent_id, **kwargs):
+    url = '/agents/{}/l3-routers'.format(agent_id)
+    json = {
+        'router_id': router_id,
+    }
+    return url, {'json': json}
+
+
+@get_by_name_or_uuid_multiple([('router', 'router_id')])
+@send('delete')
+def l3_agent_router_remove(router_id, agent_id, **kwargs):
+    url = '/agents/{}/l3-routers/{}'.format(agent_id, router_id)
+    return url, {}
+
+
+@get_by_name_or_uuid_multiple([('router', 'router_id')])
+@send('get')
+def l3_agent_by_router_list(router_id, **kwargs):
+    url = '/routers/{}/l3-agents'.format(router_id)
+    return url, {}
+
+
+@send('get')
+def dhcp_agent_list_networks(agent_id, **kwargs):
+    url = '/agents/{}/dhcp-networks'.format(agent_id)
+    return url, {}
+
+
+@get_by_name_or_uuid_multiple([('network', 'network_id')])
+@send('post')
+def dhcp_agent_network_schedule(network_id, agent_id, **kwargs):
+    url = '/agents/{}/dhcp-networks'.format(agent_id)
+    json = {
+        'network_id': network_id,
+    }
+    return url, {'json': json}
+
+
+@get_by_name_or_uuid_multiple([('network', 'network_id')])
+@send('delete')
+def dhcp_agent_network_remove(network_id, agent_id, **kwargs):
+    url = '/agents/{}/dhcp-networks/{}'.format(agent_id, network_id)
+    return url, {}
+
+
+@get_by_name_or_uuid_multiple([('network', 'network_id')])
+@send('get')
+def dhcp_agent_by_network_list(network_id, **kwargs):
+    url = '/networks/{}/dhcp-agents'.format(network_id)
+    return url, {}