diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py
index f989129a439e..fb098cee3268 100644
--- a/src/sonic-config-engine/minigraph.py
+++ b/src/sonic-config-engine/minigraph.py
@@ -207,11 +207,15 @@ def parse_dpg(dpg, hname):
'type': 'MIRROR' if is_mirror else 'L3'}
else:
# This ACL has no interfaces to attach to -- consider this a control plane ACL
- aclservice = aclintf.find(str(QName(ns, "Type"))).text
- acls[aclname] = {'policy_desc': aclname,
- 'ports': acl_intfs,
- 'type': 'CTRLPLANE',
- 'service': aclservice if aclservice is not None else 'UNKNOWN'}
+ try:
+ aclservice = aclintf.find(str(QName(ns, "Type"))).text
+ acls[aclname] = {'policy_desc': aclname,
+ 'ports': acl_intfs,
+ 'type': 'CTRLPLANE',
+ 'service': aclservice if aclservice is not None else 'UNKNOWN'}
+ except:
+ print >> sys.stderr, "Warning: Ingore Control Plane ACL %s without type" % aclname
+
return intfs, lo_intfs, mgmt_intf, vlans, vlan_members, pcs, acls
return None, None, None, None, None, None, None
diff --git a/src/sonic-config-engine/tests/t0-sample-graph.xml b/src/sonic-config-engine/tests/t0-sample-graph.xml
index f3d05cbc22c1..a12605c8c3e1 100644
--- a/src/sonic-config-engine/tests/t0-sample-graph.xml
+++ b/src/sonic-config-engine/tests/t0-sample-graph.xml
@@ -271,6 +271,20 @@
SNMP_ACL
SNMP
+
+ NTP
+ NTP_ACL
+ NTP
+
+
+ SSH
+ SSH_ACL
+ SSH
+
+
+ NTP
+ NTP_ACL
+
diff --git a/src/sonic-config-engine/tests/test_cfggen.py b/src/sonic-config-engine/tests/test_cfggen.py
index d187cfd26b8b..64162e49417e 100644
--- a/src/sonic-config-engine/tests/test_cfggen.py
+++ b/src/sonic-config-engine/tests/test_cfggen.py
@@ -16,9 +16,13 @@ def setUp(self):
self.sample_device_desc = os.path.join(self.test_dir, 'device.xml')
self.port_config = os.path.join(self.test_dir, 't0-sample-port-config.ini')
- def run_script(self, argument):
+ def run_script(self, argument, check_stderr=False):
print '\n Running sonic-cfggen ' + argument
- output = subprocess.check_output(self.script_file + ' ' + argument, shell=True)
+ if check_stderr:
+ output = subprocess.check_output(self.script_file + ' ' + argument, stderr=subprocess.STDOUT, shell=True)
+ else:
+ output = subprocess.check_output(self.script_file + ' ' + argument, shell=True)
+
linecount = output.strip().count('\n')
if linecount <= 0:
print ' Output: ' + output.strip()
@@ -73,10 +77,12 @@ def test_render_template(self):
def test_minigraph_acl(self):
argument = '-m "' + self.sample_graph_t0 + '" -p "' + self.port_config + '" -v ACL_TABLE'
- output = self.run_script(argument)
- self.assertEqual(output.strip(), "{'SNMP_ACL': {'type': 'CTRLPLANE', 'policy_desc': 'SNMP_ACL', 'service': 'SNMP', 'ports': []},"
- " 'DATAACL': {'type': 'L3', 'policy_desc': 'DATAACL', 'ports': ['Ethernet112', 'Ethernet116', 'Ethernet120', 'Ethernet124']}}")
-
+ output = self.run_script(argument, True)
+ self.assertEqual(output.strip(), "Warning: Ingore Control Plane ACL NTP_ACL without type\n"
+ "{'SSH_ACL': {'type': 'CTRLPLANE', 'policy_desc': 'SSH_ACL', 'service': 'SSH', 'ports': []},"
+ " 'SNMP_ACL': {'type': 'CTRLPLANE', 'policy_desc': 'SNMP_ACL', 'service': 'SNMP', 'ports': []},"
+ " 'DATAACL': {'type': 'L3', 'policy_desc': 'DATAACL', 'ports': ['Ethernet112', 'Ethernet116', 'Ethernet120', 'Ethernet124']},"
+ " 'NTP_ACL': {'type': 'CTRLPLANE', 'policy_desc': 'NTP_ACL', 'service': 'NTP', 'ports': []}}")
def test_minigraph_everflow(self):
argument = '-m "' + self.sample_graph_t0 + '" -p "' + self.port_config + '" -v MIRROR_SESSION'
output = self.run_script(argument)