Merge "Upload check dhcp on network node"

This commit is contained in:
Jenkins 2016-03-23 04:10:45 +00:00 committed by Gerrit Code Review
commit 7efce52296
3 changed files with 110 additions and 0 deletions

View File

@ -93,3 +93,84 @@ class CheckDHCPonComputeNodes(Lister):
['qvb', data['qvb']],
['qbr', data['qbr']],
['tap', data['tap']]))
class CheckDHCPonNetworkNodes(Lister):
"Check DHCP on network nodes."
log = logging.getLogger(__name__)
def get_parser(self, prog_name):
parser = super(CheckDHCPonNetworkNodes, self).get_parser(prog_name)
parser.add_argument('port_id', default='bad',
help='ID of port to look up.')
parser.add_argument('physical_interface', default='bad',
help=('Name of physical interface.'
'We catch packets at this interface'))
parser.add_argument('network_type', default='vlan',
help='Network type, you want to check.')
return parser
def take_action(self, parsed_args):
self.log.debug('Get parsed_args: %s' % parsed_args)
if not utils.is_uuid_like(parsed_args.port_id):
utils.Logger.log_fail("Port id: %s is not like"
"uuid." % parsed_args.port_id)
sys.exit()
# get network_type
network_type = parsed_args.network_type
if network_type != 'vlan' and network_type != 'vxlan':
utils.Logger.log_fail("Network type %s not support!"
"Please choose from 'vlan' and 'vxlan'."
% network_type)
sys.exit()
self.log.debug("network_type is %s" % network_type)
# get port's network_id and ip address
port_network_id = neutron.get_port_attr(parsed_args.port_id,
'network_id')
if not port_network_id:
utils.Logger.log_fail("Get port network_id fails."
"Please check this port.")
sys.exit()
self.log.debug("port network id is %s" % port_network_id)
port_ip_addr = neutron.get_port_attr(parsed_args.port_id,
'fixed_ips')[0]['ip_address']
if not port_ip_addr:
utils.Logger.log_fail("Get port ip_addr fails."
"Please check this port.")
sys.exit()
self.log.debug("port ip addr is %s" % port_ip_addr)
# get port's host info
host_id = neutron.get_port_attr(parsed_args.port_id, 'binding:host_id')
if not host_id:
utils.Logger.log_fail("Port %s doesn't attach to any vms."
% parsed_args.port_id)
sys.exit()
self.log.debug("port host id is %s" % host_id)
# setup steth server
try:
server = utils.setup_server(host_id)
self.log.debug("setup server: %s" % host_id)
except:
utils.Logger.log_fail("Setup server fail in: %s." % server)
sys.exit()
# get physical interface name
physical_interface = parsed_args.physical_interface
self.log.debug("Physical interface is %s" % physical_interface)
res = server.check_dhcp_on_net(net_id=port_network_id,
port_ip=port_ip_addr,
phy_iface=physical_interface,
net_type=network_type)
self.log.debug("Response is %s" % res)
if res['code'] == 0:
data = res['data']
return (['Device Name', 'Result'],
(['br-int', data['br-int']],
['ovsbr3', data['ovsbr3']],
['eth0', data['eth0']]))
return (['Error Mssage', ' '], [('message', res['message'])])

View File

@ -39,6 +39,7 @@ COMMAND_V1 = {
'check-vlan-interface': agent_api.CheckVlanInterface,
'check-iperf': iperf_api.CheckIperf,
'check-dhcp-on-comp': dhcp.CheckDHCPonComputeNodes,
'check-dhcp-on-network': dhcp.CheckDHCPonNetworkNodes,
'print-agents-info': agent_api.PrintAgentsInfo,
}

View File

@ -123,3 +123,31 @@ class TestStethClientMethods(unittest.TestCase):
'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa',
'eth0', 'vlan'])
self.assertEqual(self.server.check_dhcp_on_comp.called, True)
@mock.patch('neutronclient.v2_0.client.Client.show_port')
def test_check_dhcp_on_net(self, show_port):
show_port.return_value = {
'port': {
'mac_address': 'aa:bb:cc:dd:ee:ff',
'binding:host_id': 'server-9',
'network_id': '0912af24-4525-4737-beb7-c77aa14e0567',
'fixed_ips': [
{
'subnet_id': '73b19b70-c469-473a-b589-459524f2c6a6',
'ip_address': u'10.0.0.3'
}]
}
}
device = "tapaaaaaaaa-aa"
msg = device + "No such device exists (SIOCGIFHWADDR: No such device)"
check_dhcp_on_net_r = {
'message': msg,
'code': 1,
'data': {}
}
self.server.check_dhcp_on_net = mock.Mock(
return_value=check_dhcp_on_net_r)
shell.main(['check-dhcp-on-net',
'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa',
'eth0', 'vlan'])
self.assertEqual(self.server.check_dhcp_on_net.called, True)