이 페이지의 내용
예: LDP 구성 제어
이 커밋 스크립트 예에서는 또는 [edit protocols isis]
계층 수준에서 구성되었지만 계층 수준에서 구성 [edit protocols ospf]
[edit protocols ldp]
되지 않은 모든 인터페이스에 대해 LDP 지원 디바이스에서 경고를 생성합니다. 두 번째 테스트에서는 모든 LDP 지원 인터페이스가 IGP(Interior Gateway Protocol)에 대해 구성되었는지 확인합니다. 이 예제에서는 커밋 스크립트 LDP 테스트에서 특정 인터페이스를 제외하는 지침도 제공합니다.
요구 사항
이 예에서는 Junos OS를 실행하는 라우터를 사용합니다.
개요 및 커밋 스크립트
인터페이스에서 LDP를 활성화하려면 및 [edit protocols ldp]
계층 수준 모두에서 [edit protocols routing-protocol-name]
인터페이스를 구성해야 합니다. 이 예에서는 커밋 스크립트를 사용하여 인터페이스가 두 수준 모두에서 구성되도록 하는 방법을 보여줍니다.
이 예에서는 또는 [edit protocols isis]
계층 수준에서는 [edit protocols ospf]
구성되지만 계층 수준에서는 구성되지 않은 [edit protocols ldp]
인터페이스를 테스트합니다. 디바이스에서 LDP가 활성화되지 않은 경우 문제가 없습니다. 그렇지 않으면 인터페이스에 LDP가 활성화되어 있지 않다는 메시지와 함께 경고가 생성됩니다.
일부 인터페이스가 LDP 테스트에서 제외되기를 원하는 경우, 이 스크립트를 사용하면 또는 [edit protocols ospf area area-id interface interface-name]
계층 수준에서 문을 포함하여 apply-macro no-ldp
해당 인터페이스에 LDP를 요구하지 않는 것으로 태그를 지정할 수 있습니다[edit protocols isis interface interface-name]
. 예를 들어:
[edit] protocols { isis { interface so-0/1/2.0 { apply-macro no-ldp; } } }
apply-macro no-ldp
문이 포함되어 있으면 경고가 생성되지 않습니다.
두 번째 테스트에서는 모든 LDP 지원 인터페이스가 IGP(Interior Gateway Protocol)에 대해 구성되었는지 확인합니다. LDP의 경우, 계층 수준에서 문을 [edit protocols ldp interface interface-name]
포함하여 apply-macro no-igp
일부 인터페이스를 테스트에서 제외할 수 있습니다. 해당 문이 포함되지 않고 IGP가 구성되지 않은 경우 경고가 생성됩니다.
예제 스크립트는 XSLT 및 SLAX 구문으로 표시됩니다.
XSLT 구문
<?xml version="1.0" standalone="yes"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:junos="http://xml.juniper.net/junos/*/junos" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm" xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0"> <xsl:import href="../import/junos.xsl"/> <xsl:template match="configuration"> <xsl:variable name="ldp" select="protocols/ldp"/> <xsl:variable name="isis" select="protocols/isis"/> <xsl:variable name="ospf" select="protocols/ospf"/> <xsl:if test="$ldp"> <xsl:for-each select="$isis/interface/name | $ospf/area/interface/name"> <xsl:variable name="ifname" select="."/> <xsl:if test="not(../apply-macro[name = 'no-ldp']) and not($ldp/interface[name = $ifname])"> <xnm:warning> <xsl:call-template name="jcs:edit-path"/> <xsl:call-template name="jcs:statement"/> <message>ldp not enabled for this interface</message> </xnm:warning> </xsl:if> </xsl:for-each> <xsl:for-each select="protocols/ldp/interface/name"> <xsl:variable name="ifname" select="."/> <xsl:if test="not(apply-macro[name = 'no-igp']) and not($isis/interface[name = $ifname]) and not($ospf/area/interface[name = $ifname])"> <xnm:warning> <xsl:call-template name="jcs:edit-path"/> <xsl:call-template name="jcs:statement"/> <message> <xsl:text>ldp-enabled interface does not have </xsl:text> <xsl:text>an IGP configured</xsl:text> </message> </xnm:warning> </xsl:if> </xsl:for-each> </xsl:if> </xsl:template> </xsl:stylesheet>
SLAX 구문
version 1.0; ns junos = "http://xml.juniper.net/junos/*/junos"; ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; import "../import/junos.xsl"; apply-macro no-ldp; match configuration { var $ldp = protocols/ldp; var $isis = protocols/isis; var $ospf = protocols/ospf; if ($ldp) { for-each ($isis/interface/name | $ospf/area/interface/name) { var $ifname = .; if (not(../apply-macro[name = 'no-ldp']) and not($ldp/interface[name = $ifname])) { <xnm:warning> { call jcs:edit-path(); call jcs:statement(); <message> "ldp not enabled for this interface"; } } } for-each (protocols/ldp/interface/name) { var $ifname = .; if (not(apply-macro[name = 'no-igp']) and not($isis/interface[name = $ifname]) and not($ospf/area/interface[name = $ifname])) { <xnm:warning> { call jcs:edit-path(); call jcs:statement(); <message> { expr "ldp-enabled interface does not have "; expr "an IGP configured"; } } } } } }
구성
절차
단계별 절차
스크립트를 다운로드, 사용 및 테스트하려면:To download, enable, and test the script:
스크립트를 텍스트 파일로 복사하고, 파일 이름을 ldp.xsl 또는 ldp.slax로 적절하게 지정한 다음, 디바이스의 /var/db/scripts/commit/ 디렉터리에 복사합니다.
다음 테스트 구성 스탠자를 선택하고 Ctrl+c를 눌러 클립보드에 복사하십시오.
SLAX 버전의 스크립트를 사용하는 경우 계층 수준에서 파일 이름을
[edit system scripts commit file]
ldp.slax로 변경합니다.system { scripts { commit { file ldp.xsl; } } } protocols { isis { interface so-1/2/2.0 { apply-macro no-ldp; } interface so-1/2/3.0; } ospf { area 10.4.0.0 { interface ge-3/2/1.0; interface ge-2/2/1.0; } } ldp { interface ge-1/2/1.0; interface ge-2/2/1.0; } }
구성 모드에서 명령을 실행하여
load merge terminal
스탠자를 디바이스 구성에 병합합니다.[edit] user@host# load merge terminal [Type ^D at a new line to end input] ... Paste the contents of the clipboard here ...
프롬프트에서 마우스와 붙여넣기 아이콘을 사용하여 클립보드의 내용을 붙여넣습니다.
Enter.
Ctrl+d를 누릅니다.
구성을 커밋합니다.
user@host# commit
확인
스크립트 실행 확인
목적
스크립트가 예상대로 작동하는지 확인합니다.
작업
명령의 commit
출력을 검토합니다. 샘플 구성 스탠자는 디바이스에서 LDP를 활성화하고 계층 수준에서 so-1/2/2 및 so-1/2/3 인터페이스를 구성하고 계층 수준에서 ge-3/2/1 및 ge-2/2/1 인터페이스를 [edit protocols isis]
[edit protocols ospf]
구성합니다.
ge-2/2/1도 계층 수준에서 구성 [edit protocols ldp]
되기 때문에 스크립트는 커밋 작업 중에 이 인터페이스에 대한 경고 메시지를 발행하지 않습니다. 구성에는 so-1/2/2 인터페이스 아래의 문이 포함 apply-macro no-ldp
되므로, 스크립트가 계층에서 [edit protocols ldp]
구성되지 않더라도 이 인터페이스를 테스트하거나 경고 메시지를 발행하지 않습니다.
so-1/2/3 또는 ge-3/2/1은 커밋 스크립트에서 [edit protocols ldp]
요구하는 대로 계층 수준에서 구성되지 않으므로 두 인터페이스 모두에 대해 경고가 발행됩니다. ge-1/2/1 인터페이스는 계층에서 [edit protocols ldp]
구성됩니다. 그러나 IGP에 대해 구성되지 않았으므로 커밋 스크립트는 ge-1/2/1 인터페이스에 대한 경고도 발행합니다.
[edit] user@host# commit
[edit protocols ospf area 10.4.0.0 interface so-1/2/3.0] 'interface so-1/2/3.0;' warning: LDP not enabled for this interface [edit protocols ospf area 10.4.0.0 interface ge-3/2/1.0] 'interface ge-3/2/1.0;' warning: LDP not enabled for this interface [edit protocols ldp interface ge-1/2/1.0] 'interface ge-1/2/1.0;' warning: LDP-enabled interface does not have an IGP configured commit complete