diff --git a/etc/neutron.conf b/etc/neutron.conf index 3cca29c2bf0..96d574c5fd8 100644 --- a/etc/neutron.conf +++ b/etc/neutron.conf @@ -181,6 +181,11 @@ # Seconds to regard the agent as down; should be at least twice # report_interval, to be sure the agent is down for good # agent_down_time = 75 + +# Agent starts with admin_state_up=False when enable_new_agents=False. +# In the case, user's resources will not be scheduled automatically to the +# agent until admin changes admin_state_up to True. +# enable_new_agents = True # =========== end of items for agent management extension ===== # =========== items for agent scheduler extension ============= diff --git a/neutron/db/agents_db.py b/neutron/db/agents_db.py index 702f2e497d1..9417d5e3c37 100644 --- a/neutron/db/agents_db.py +++ b/neutron/db/agents_db.py @@ -56,6 +56,11 @@ AGENT_OPTS = [ 'dhcp_load_type can be configured to represent the ' 'choice for the resource being balanced. ' 'Example: dhcp_load_type=networks')), + cfg.BoolOpt('enable_new_agents', default=True, + help=_("Agent starts with admin_state_up=False when " + "enable_new_agents=False. In the case, user's " + "resources will not be scheduled automatically to the " + "agent until admin changes admin_state_up to True.")), ] cfg.CONF.register_opts(AGENT_OPTS) @@ -236,7 +241,7 @@ class AgentDbMixin(ext_agent.AgentPluginBase): res['created_at'] = current_time res['started_at'] = current_time res['heartbeat_timestamp'] = current_time - res['admin_state_up'] = True + res['admin_state_up'] = cfg.CONF.enable_new_agents agent_db = Agent(**res) greenthread.sleep(0) context.session.add(agent_db) diff --git a/neutron/tests/unit/db/test_agents_db.py b/neutron/tests/unit/db/test_agents_db.py index a4726631458..3aeea2b3ab4 100644 --- a/neutron/tests/unit/db/test_agents_db.py +++ b/neutron/tests/unit/db/test_agents_db.py @@ -16,6 +16,7 @@ import datetime import mock +from oslo_config import cfg from oslo_db import exception as exc from oslo_utils import timeutils import testscenarios @@ -154,6 +155,12 @@ class TestAgentsDbMixin(TestAgentsDbBase): self.assertEqual(add_mock.call_count, 2, "Agent entry creation hasn't been retried") + def test_create_or_update_agent_disable_new_agents(self): + cfg.CONF.set_override('enable_new_agents', False) + self.plugin.create_or_update_agent(self.context, self.agent_status) + agent = self.plugin.get_agents(self.context)[0] + self.assertFalse(agent['admin_state_up']) + class TestAgentsDbGetAgents(TestAgentsDbBase): scenarios = [