LOG = logging.getLogger(__name__)
-DEVICE_OWNER_PROBE = 'network:probe'
+DEVICE_OWNER_NETWORK_PROBE = 'network:probe'
+
+DEVICE_OWNER_COMPUTE_PROBE = 'compute:probe'
class QuantumDebugAgent():
def _get_namespace(self, port):
return "qprobe-%s" % port.id
- def create_probe(self, network_id):
+ def create_probe(self, network_id, device_owner='network'):
network = self._get_network(network_id)
bridge = None
if network.external:
bridge = self.conf.external_network_bridge
- port = self._create_port(network)
+ port = self._create_port(network, device_owner)
port.network = network
interface_name = self.driver.get_device_name(port)
namespace = None
return network
def clear_probe(self):
- ports = self.client.list_ports(device_id=socket.gethostname(),
- device_owner=DEVICE_OWNER_PROBE)
+ ports = self.client.list_ports(
+ device_id=socket.gethostname(),
+ device_owner=[DEVICE_OWNER_NETWORK_PROBE,
+ DEVICE_OWNER_COMPUTE_PROBE])
info = ports['ports']
for port in info:
self.delete_probe(port['id'])
self.client.delete_port(port.id)
def list_probes(self):
- ports = self.client.list_ports(device_owner=DEVICE_OWNER_PROBE)
+ ports = self.client.list_ports(
+ device_owner=[DEVICE_OWNER_NETWORK_PROBE,
+ DEVICE_OWNER_COMPUTE_PROBE])
info = ports['ports']
for port in info:
port['device_name'] = self.driver.get_device_name(DictModel(port))
def ensure_probe(self, network_id):
ports = self.client.list_ports(network_id=network_id,
device_id=socket.gethostname(),
- device_owner=DEVICE_OWNER_PROBE)
+ device_owner=DEVICE_OWNER_NETWORK_PROBE)
info = ports.get('ports', [])
if info:
return DictModel(info[0])
result = ""
for port in ports:
probe = self.ensure_probe(port['network_id'])
- if port['device_owner'] == DEVICE_OWNER_PROBE:
+ if port['device_owner'] == DEVICE_OWNER_NETWORK_PROBE:
continue
for fixed_ip in port['fixed_ips']:
address = fixed_ip['ip_address']
address))
return result
- def _create_port(self, network):
+ def _create_port(self, network, device_owner):
body = dict(port=dict(
admin_state_up=True,
network_id=network.id,
device_id='%s' % socket.gethostname(),
- device_owner=DEVICE_OWNER_PROBE,
+ device_owner='%s:probe' % device_owner,
tenant_id=network.tenant_id,
fixed_ips=[dict(subnet_id=s.id) for s in network.subnets]))
port_dict = self.client.create_port(body)['port']
from quantum.agent.common import config
from quantum.agent.linux import interface
from quantum.debug import commands
-from quantum.debug.debug_agent import DEVICE_OWNER_PROBE, QuantumDebugAgent
+from quantum.debug.debug_agent import DEVICE_OWNER_COMPUTE_PROBE
+from quantum.debug.debug_agent import DEVICE_OWNER_NETWORK_PROBE
+from quantum.debug.debug_agent import QuantumDebugAgent
from quantum.tests import base
client_inst,
mock_driver)
- def test_create_probe(self):
+ def _test_create_probe(self, device_owner):
cmd = commands.CreateProbe(self.app, None)
cmd_parser = cmd.get_parser('create_probe')
- args = ['fake_net']
+ if device_owner == DEVICE_OWNER_COMPUTE_PROBE:
+ args = ['fake_net', '--device-owner', 'compute']
+ else:
+ args = ['fake_net']
parsed_args = cmd_parser.parse_args(args)
cmd.run(parsed_args)
fake_port = {'port':
- {'device_owner': DEVICE_OWNER_PROBE,
+ {'device_owner': device_owner,
'admin_state_up': True,
'network_id': 'fake_net',
'tenant_id': 'fake_tenant',
namespace=namespace
)])
- def test_create_probe_external(self):
+ def test_create_newwork_probe(self):
+ self._test_create_probe(DEVICE_OWNER_NETWORK_PROBE)
+
+ def test_create_nova_probe(self):
+ self._test_create_probe(DEVICE_OWNER_COMPUTE_PROBE)
+
+ def _test_create_probe_external(self, device_owner):
fake_network = {'network': {'id': 'fake_net',
'tenant_id': 'fake_tenant',
'router:external': True,
self.client.show_network.return_value = fake_network
cmd = commands.CreateProbe(self.app, None)
cmd_parser = cmd.get_parser('create_probe')
- args = ['fake_net']
+ if device_owner == DEVICE_OWNER_COMPUTE_PROBE:
+ args = ['fake_net', '--device-owner', 'compute']
+ else:
+ args = ['fake_net']
parsed_args = cmd_parser.parse_args(args)
cmd.run(parsed_args)
fake_port = {'port':
- {'device_owner': DEVICE_OWNER_PROBE,
+ {'device_owner': device_owner,
'admin_state_up': True,
'network_id': 'fake_net',
'tenant_id': 'fake_tenant',
namespace=namespace
)])
+ def test_create_network_probe_external(self):
+ self._test_create_probe_external(DEVICE_OWNER_NETWORK_PROBE)
+
+ def test_create_nova_probe_external(self):
+ self._test_create_probe_external(DEVICE_OWNER_COMPUTE_PROBE)
+
def test_delete_probe(self):
cmd = commands.DeleteProbe(self.app, None)
cmd_parser = cmd.get_parser('delete_probe')
parsed_args = cmd_parser.parse_args(args)
cmd.run(parsed_args)
self.client.assert_has_calls(
- [mock.call.list_ports(device_owner=DEVICE_OWNER_PROBE)])
+ [mock.call.list_ports(device_owner=[DEVICE_OWNER_NETWORK_PROBE,
+ DEVICE_OWNER_COMPUTE_PROBE])])
def test_exec_command(self):
cmd = commands.ExecProbe(self.app, None)
parsed_args = cmd_parser.parse_args(args)
cmd.run(parsed_args)
namespace = 'qprobe-fake_port'
- self.client.assert_has_calls([mock.call.list_ports(
- device_id=socket.gethostname(),
- device_owner=DEVICE_OWNER_PROBE),
- mock.call.show_port('fake_port'),
- mock.call.show_network('fake_net'),
- mock.call.show_subnet('fake_subnet'),
- mock.call.delete_port('fake_port')])
+ self.client.assert_has_calls(
+ [mock.call.list_ports(device_id=socket.gethostname(),
+ device_owner=[DEVICE_OWNER_NETWORK_PROBE,
+ DEVICE_OWNER_COMPUTE_PROBE]),
+ mock.call.show_port('fake_port'),
+ mock.call.show_network('fake_net'),
+ mock.call.show_subnet('fake_subnet'),
+ mock.call.delete_port('fake_port')])
self.driver.assert_has_calls([mock.call.get_device_name(mock.ANY),
mock.call.unplug('tap12345678-12',
namespace=namespace,
cmd.run(parsed_args)
ns.assert_has_calls([mock.call.execute(mock.ANY)])
fake_port = {'port':
- {'device_owner': DEVICE_OWNER_PROBE,
+ {'device_owner': DEVICE_OWNER_NETWORK_PROBE,
'admin_state_up': True,
'network_id': 'fake_net',
'tenant_id': 'fake_tenant',
cmd.run(parsed_args)
ns.assert_has_calls([mock.call.execute(mock.ANY)])
fake_port = {'port':
- {'device_owner': DEVICE_OWNER_PROBE,
+ {'device_owner': DEVICE_OWNER_NETWORK_PROBE,
'admin_state_up': True,
'network_id': 'fake_net',
'tenant_id': 'fake_tenant',
'fixed_ips': [{'subnet_id': 'fake_subnet'}],
'device_id': socket.gethostname()}}
expected = [mock.call.list_ports(),
- mock.call.list_ports(network_id='fake_net',
- device_owner=DEVICE_OWNER_PROBE,
- device_id=socket.gethostname()),
+ mock.call.list_ports(
+ network_id='fake_net',
+ device_owner=DEVICE_OWNER_NETWORK_PROBE,
+ device_id=socket.gethostname()),
mock.call.show_subnet('fake_subnet'),
mock.call.show_port('fake_port')]
self.client.assert_has_calls(expected)