diff options
| author | Jenkins <jenkins@review.openstack.org> | 2017-03-20 21:31:53 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2017-03-20 21:31:53 +0000 |
| commit | 3e621c9a9c730e758bd4f8c73d29c00f3c622f5b (patch) | |
| tree | 2d7a76a71ee03baa049dc5497a1f748898aa6c3d /openstackclient/network/v2/network_agent.py | |
| parent | f16513aaf2cbe9bb9432480d43f46376a7f19133 (diff) | |
| parent | f4fd8f6e31dcc177b56d1e618cdefef728d09157 (diff) | |
| download | python-openstackclient-3e621c9a9c730e758bd4f8c73d29c00f3c622f5b.tar.gz | |
Merge "Introduce Neutron DHCP agent commands to OSC"
Diffstat (limited to 'openstackclient/network/v2/network_agent.py')
| -rw-r--r-- | openstackclient/network/v2/network_agent.py | 116 |
1 files changed, 105 insertions, 11 deletions
diff --git a/openstackclient/network/v2/network_agent.py b/openstackclient/network/v2/network_agent.py index 37ad9f06..7c2edb88 100644 --- a/openstackclient/network/v2/network_agent.py +++ b/openstackclient/network/v2/network_agent.py @@ -29,7 +29,6 @@ LOG = logging.getLogger(__name__) def _format_admin_state(state): return 'UP' if state else 'DOWN' - _formatters = { 'admin_state_up': _format_admin_state, 'is_admin_state_up': _format_admin_state, @@ -45,6 +44,40 @@ def _get_network_columns(item): return sdk_utils.get_osc_show_columns_for_sdk_resource(item, column_map) +class AddNetworkToAgent(command.Command): + _description = _("Add network to an agent") + + def get_parser(self, prog_name): + parser = super(AddNetworkToAgent, self).get_parser(prog_name) + parser.add_argument( + '--dhcp', + action='store_true', + help=_('Add network to a DHCP agent')) + parser.add_argument( + 'agent_id', + metavar='<agent-id>', + help=_('Agent to which a network is added. (ID only)')) + parser.add_argument( + 'network', + metavar='<network>', + help=_('Network to be added to an agent. (ID or name)')) + + return parser + + def take_action(self, parsed_args): + client = self.app.client_manager.network + agent = client.get_agent(parsed_args.agent_id) + if parsed_args.dhcp: + network = client.find_network( + parsed_args.network, ignore_missing=False) + try: + client.add_dhcp_agent_to_network(agent, network) + except Exception: + msg = 'Failed to add {} to {}'.format( + network.name, agent.agent_type) + exceptions.CommandError(msg) + + class DeleteNetworkAgent(command.Command): _description = _("Delete network agent(s)") @@ -102,6 +135,11 @@ class ListNetworkAgent(command.Lister): metavar='<host>', help=_("List only agents running on the specified host") ) + parser.add_argument( + '--network', + metavar='<network>', + help=_('List agents hosting a network (name or ID)') + ) return parser def take_action(self, parsed_args): @@ -140,16 +178,72 @@ class ListNetworkAgent(command.Lister): } filters = {} - if parsed_args.agent_type is not None: - filters['agent_type'] = key_value[parsed_args.agent_type] - if parsed_args.host is not None: - filters['host'] = parsed_args.host - - data = client.agents(**filters) - return (column_headers, - (utils.get_item_properties( - s, columns, formatters=_formatters, - ) for s in data)) + if parsed_args.network is not None: + columns = ( + 'id', + 'host', + 'is_admin_state_up', + 'is_alive', + ) + column_headers = ( + 'ID', + 'Host', + 'Admin State Up', + 'Alive', + ) + network = client.find_network( + parsed_args.network, ignore_missing=False) + data = client.network_hosting_dhcp_agents(network) + + return (column_headers, + (utils.get_item_properties( + s, columns, + formatters=_formatters, + ) for s in data)) + else: + if parsed_args.agent_type is not None: + filters['agent_type'] = key_value[parsed_args.agent_type] + if parsed_args.host is not None: + filters['host'] = parsed_args.host + + data = client.agents(**filters) + return (column_headers, + (utils.get_item_properties( + s, columns, formatters=_formatters, + ) for s in data)) + + +class RemoveNetworkFromAgent(command.Command): + _description = _("Remove network from an agent.") + + def get_parser(self, prog_name): + parser = super(RemoveNetworkFromAgent, self).get_parser(prog_name) + parser.add_argument( + '--dhcp', + action='store_true', + help=_('Remove network from DHCP agent')) + parser.add_argument( + 'agent_id', + metavar='<agent-id>', + help=_('Agent to which a network is removed. (ID only)')) + parser.add_argument( + 'network', + metavar='<network>', + help=_('Network to be removed from an agent. (ID or name)')) + return parser + + def take_action(self, parsed_args): + client = self.app.client_manager.network + agent = client.get_agent(parsed_args.agent_id) + if parsed_args.dhcp: + network = client.find_network( + parsed_args.network, ignore_missing=False) + try: + client.remove_dhcp_agent_from_network(agent, network) + except Exception: + msg = 'Failed to remove {} to {}'.format( + network.name, agent.agent_type) + exceptions.CommandError(msg) # TODO(huanxuan): Use the SDK resource mapped attribute names once the |
