{
    "name"  : "生成树测试",
    "precondition" : ["name"],
    "problems" : {
        "problem1-1" : {
            "desc"      : "【问题】接口配置的ROOT GUARD生效，导致端口被阻断。",
            "advice"    : "【建议】请确认接口上是否必要配置ROOT GUARD功能。如果需要配置，则需要人工排查该接口对端设备是否出现识别生成树根桥错误。可通过在接口上no spanning-tree guard root关闭接口上的ROOT GURAD功能。"
        },
		"problem1-2" : {
            "desc"      : "【问题】接口配置的LOOP GUARD生效，导致端口被阻断。",
            "advice"    : "【建议】请确认接口上是否必要配置LOOP GUARD功能。如果需要配置，则需要人工排查该接口是否处于环路中，且环路是否有阻断。可通过在接口上no spanning-tree guard loop关闭接口上的LOOP GURAD功能。"
        },
		"problem2-1" : {
            "desc"      : "【问题】当前接口为路由口，不参与计算。",
            "advice"    : "【建议】请人工确认是否该接口需要参与生成树。"
        },
		"problem2-2" : {
            "desc"      : "【问题】当前查询接口存在物理链路Down掉。",
            "advice"    : "【建议】请确认链路是否正常。"
        }
    }
}
---------------------------code-------------------------------

#1——1
result=cli('Show spanning-tree summary 1.1.2')
reg=(/no\sspanning\stree\sinfo\savailable\sfor/)
if reg.test(result) :
	#2——1
	result2=cli('show int 1.1.2')
	reg=(/Port-type:/)
	if !reg.test(result2) :
		add_problem('problem2-1')
		return 'warn'
	end
	#2——2
	reg=(/GigabitEthernet\s0/1\sis\sDOWN\s+,\sline\sprotocol\sis\sDOWN/)
	if reg.test(result2) :
		add_problem('problem2-2')
		return 'warn'
	end
		
end
#1——2
reg1=(/no\sspanning\stree\sinfo\savailable\sfor/)
reg2=(/PortRole\s:\sdesignatedPort/)
reg3=(/Inconsistent\sstates\s:\sRoot\sInconsistent/)
if reg1.test(result) &&  reg2.test(result) && reg3.test(result):
	add_problem('problem1-1')
	return 'warn'
end
#1——3
reg1=(/PortState\s:\sdiscarding/)
reg2=(/PortRole\s:\sdesignatedPort/)
reg3=(/Inconsistent\sstates\s:\sLoop\sInconsistent/)
if reg1.test(result) && reg2.test(result) && reg3.test(result) :
	add_problem('problem1-2')
	return 'warn'
end
#1——4
reg1=(/PortState\s:\sdiscarding/)
reg2=(/PortRole\s:\sdesignatedPort/)
reg3=(/Inconsistent\sstates\s:\snormal/)
if reg1.test(result) && reg2.test(result) && reg3.test(result) :
	#4——1
end
return ''success