PNG  IHDRX cHRMz&u0`:pQ<bKGD pHYsodtIME MeqIDATxw]Wug^Qd˶ 6`!N:!@xI~)%7%@Bh&`lnjVF29gΨ4E$|>cɚ{gk= %,a KX%,a KX%,a KX%,a KX%,a KX%,a KX%, b` ǟzeאfp]<!SJmɤY޲ڿ,%c ~ع9VH.!Ͳz&QynֺTkRR.BLHi٪:l;@(!MԴ=žI,:o&N'Kù\vRmJ雵֫AWic H@" !: Cé||]k-Ha oݜ:y F())u]aG7*JV@J415p=sZH!=!DRʯvɱh~V\}v/GKY$n]"X"}t@ xS76^[bw4dsce)2dU0 CkMa-U5tvLƀ~mlMwfGE/-]7XAƟ`׮g ewxwC4\[~7@O-Q( a*XGƒ{ ՟}$_y3tĐƤatgvێi|K=uVyrŲlLӪuܿzwk$m87k( `múcE)"@rK( z4$D; 2kW=Xb$V[Ru819קR~qloѱDyįݎ*mxw]y5e4K@ЃI0A D@"BDk_)N\8͜9dz"fK0zɿvM /.:2O{ Nb=M=7>??Zuo32 DLD@D| &+֎C #B8ַ`bOb $D#ͮҪtx]%`ES`Ru[=¾!@Od37LJ0!OIR4m]GZRJu$‡c=%~s@6SKy?CeIh:[vR@Lh | (BhAMy=݃  G"'wzn޺~8ԽSh ~T*A:xR[ܹ?X[uKL_=fDȊ؂p0}7=D$Ekq!/t.*2ʼnDbŞ}DijYaȲ(""6HA;:LzxQ‘(SQQ}*PL*fc\s `/d'QXW, e`#kPGZuŞuO{{wm[&NBTiiI0bukcA9<4@SӊH*؎4U/'2U5.(9JuDfrޱtycU%j(:RUbArLֺN)udA':uGQN"-"Is.*+k@ `Ojs@yU/ H:l;@yyTn}_yw!VkRJ4P)~y#)r,D =ě"Q]ci'%HI4ZL0"MJy 8A{ aN<8D"1#IJi >XjX֔#@>-{vN!8tRݻ^)N_╗FJEk]CT՟ YP:_|H1@ CBk]yKYp|og?*dGvzنzӴzjֺNkC~AbZƷ`.H)=!QͷVTT(| u78y֮}|[8-Vjp%2JPk[}ԉaH8Wpqhwr:vWª<}l77_~{s۴V+RCģ%WRZ\AqHifɤL36: #F:p]Bq/z{0CU6ݳEv_^k7'>sq*+kH%a`0ԣisqにtү04gVgW΂iJiS'3w.w}l6MC2uԯ|>JF5`fV5m`Y**Db1FKNttu]4ccsQNnex/87+}xaUW9y>ͯ骵G{䩓Գ3+vU}~jJ.NFRD7<aJDB1#ҳgSb,+CS?/ VG J?|?,2#M9}B)MiE+G`-wo߫V`fio(}S^4e~V4bHOYb"b#E)dda:'?}׮4繏`{7Z"uny-?ǹ;0MKx{:_pÚmFמ:F " .LFQLG)Q8qN q¯¯3wOvxDb\. BKD9_NN &L:4D{mm o^tֽ:q!ƥ}K+<"m78N< ywsard5+вz~mnG)=}lYݧNj'QJS{S :UYS-952?&O-:W}(!6Mk4+>A>j+i|<<|;ر^߉=HE|V#F)Emm#}/"y GII웻Jі94+v뾧xu~5C95~ūH>c@덉pʃ1/4-A2G%7>m;–Y,cyyaln" ?ƻ!ʪ<{~h~i y.zZB̃/,雋SiC/JFMmBH&&FAbϓO^tubbb_hZ{_QZ-sύodFgO(6]TJA˯#`۶ɟ( %$&+V'~hiYy>922 Wp74Zkq+Ovn錄c>8~GqܲcWꂎz@"1A.}T)uiW4="jJ2W7mU/N0gcqܗOO}?9/wìXžΏ0 >֩(V^Rh32!Hj5`;O28؇2#ݕf3 ?sJd8NJ@7O0 b־?lldщ̡&|9C.8RTWwxWy46ah嘦mh٤&l zCy!PY?: CJyв]dm4ǜҐR޻RլhX{FƯanшQI@x' ao(kUUuxW_Ñ줮[w8 FRJ(8˼)_mQ _!RJhm=!cVmm ?sFOnll6Qk}alY}; "baӌ~M0w,Ggw2W:G/k2%R,_=u`WU R.9T"v,<\Ik޽/2110Ӿxc0gyC&Ny޽JҢrV6N ``یeA16"J³+Rj*;BϜkZPJaÍ<Jyw:NP8/D$ 011z֊Ⱳ3ι֘k1V_"h!JPIΣ'ɜ* aEAd:ݺ>y<}Lp&PlRfTb1]o .2EW\ͮ]38؋rTJsǏP@芎sF\> P^+dYJLbJ C-xϐn> ι$nj,;Ǖa FU *择|h ~izť3ᤓ`K'-f tL7JK+vf2)V'-sFuB4i+m+@My=O҈0"|Yxoj,3]:cо3 $#uŘ%Y"y죯LebqtҢVzq¼X)~>4L׶m~[1_k?kxֺQ`\ |ٛY4Ѯr!)N9{56(iNq}O()Em]=F&u?$HypWUeB\k]JɩSع9 Zqg4ZĊo oMcjZBU]B\TUd34ݝ~:7ڶSUsB0Z3srx 7`:5xcx !qZA!;%͚7&P H<WL!džOb5kF)xor^aujƍ7 Ǡ8/p^(L>ὴ-B,{ۇWzֺ^k]3\EE@7>lYBȝR.oHnXO/}sB|.i@ɥDB4tcm,@ӣgdtJ!lH$_vN166L__'Z)y&kH;:,Y7=J 9cG) V\hjiE;gya~%ks_nC~Er er)muuMg2;֫R)Md) ,¶ 2-wr#F7<-BBn~_(o=KO㭇[Xv eN_SMgSҐ BS헃D%g_N:/pe -wkG*9yYSZS.9cREL !k}<4_Xs#FmҶ:7R$i,fi!~' # !6/S6y@kZkZcX)%5V4P]VGYq%H1!;e1MV<!ϐHO021Dp= HMs~~a)ަu7G^];git!Frl]H/L$=AeUvZE4P\.,xi {-~p?2b#amXAHq)MWǾI_r`S Hz&|{ +ʖ_= (YS(_g0a03M`I&'9vl?MM+m~}*xT۲(fY*V4x@29s{DaY"toGNTO+xCAO~4Ϳ;p`Ѫ:>Ҵ7K 3}+0 387x\)a"/E>qpWB=1 ¨"MP(\xp߫́A3+J] n[ʼnӼaTbZUWb={~2ooKױӰp(CS\S筐R*JغV&&"FA}J>G֐p1ٸbk7 ŘH$JoN <8s^yk_[;gy-;߉DV{c B yce% aJhDȶ 2IdйIB/^n0tNtџdcKj4϶v~- CBcgqx9= PJ) dMsjpYB] GD4RDWX +h{y`,3ꊕ$`zj*N^TP4L:Iz9~6s) Ga:?y*J~?OrMwP\](21sZUD ?ܟQ5Q%ggW6QdO+\@ ̪X'GxN @'4=ˋ+*VwN ne_|(/BDfj5(Dq<*tNt1х!MV.C0 32b#?n0pzj#!38}޴o1KovCJ`8ŗ_"]] rDUy޲@ Ȗ-;xџ'^Y`zEd?0„ DAL18IS]VGq\4o !swV7ˣι%4FѮ~}6)OgS[~Q vcYbL!wG3 7띸*E Pql8=jT\꘿I(z<[6OrR8ºC~ډ]=rNl[g|v TMTղb-o}OrP^Q]<98S¤!k)G(Vkwyqyr޽Nv`N/e p/~NAOk \I:G6]4+K;j$R:Mi #*[AȚT,ʰ,;N{HZTGMoּy) ]%dHء9Պ䠬|<45,\=[bƟ8QXeB3- &dҩ^{>/86bXmZ]]yޚN[(WAHL$YAgDKp=5GHjU&99v簪C0vygln*P)9^͞}lMuiH!̍#DoRBn9l@ xA/_v=ȺT{7Yt2N"4!YN`ae >Q<XMydEB`VU}u]嫇.%e^ánE87Mu\t`cP=AD/G)sI"@MP;)]%fH9'FNsj1pVhY&9=0pfuJ&gޤx+k:!r˭wkl03׼Ku C &ѓYt{.O.zҏ z}/tf_wEp2gvX)GN#I ݭ߽v/ .& и(ZF{e"=V!{zW`, ]+LGz"(UJp|j( #V4, 8B 0 9OkRrlɱl94)'VH9=9W|>PS['G(*I1==C<5"Pg+x'K5EMd؞Af8lG ?D FtoB[je?{k3zQ vZ;%Ɠ,]E>KZ+T/ EJxOZ1i #T<@ I}q9/t'zi(EMqw`mYkU6;[t4DPeckeM;H}_g pMww}k6#H㶏+b8雡Sxp)&C $@'b,fPߑt$RbJ'vznuS ~8='72_`{q纶|Q)Xk}cPz9p7O:'|G~8wx(a 0QCko|0ASD>Ip=4Q, d|F8RcU"/KM opKle M3#i0c%<7׿p&pZq[TR"BpqauIp$ 8~Ĩ!8Սx\ւdT>>Z40ks7 z2IQ}ItԀ<-%S⍤};zIb$I 5K}Q͙D8UguWE$Jh )cu4N tZl+[]M4k8֦Zeq֮M7uIqG 1==tLtR,ƜSrHYt&QP윯Lg' I,3@P'}'R˪e/%-Auv·ñ\> vDJzlӾNv5:|K/Jb6KI9)Zh*ZAi`?S {aiVDԲuy5W7pWeQJk֤#5&V<̺@/GH?^τZL|IJNvI:'P=Ϛt"¨=cud S Q.Ki0 !cJy;LJR;G{BJy޺[^8fK6)=yʊ+(k|&xQ2`L?Ȓ2@Mf 0C`6-%pKpm')c$׻K5[J*U[/#hH!6acB JA _|uMvDyk y)6OPYjœ50VT K}cǻP[ $:]4MEA.y)|B)cf-A?(e|lɉ#P9V)[9t.EiQPDѠ3ϴ;E:+Օ t ȥ~|_N2,ZJLt4! %ա]u {+=p.GhNcŞQI?Nd'yeh n7zi1DB)1S | S#ًZs2|Ɛy$F SxeX{7Vl.Src3E℃Q>b6G ўYCmtկ~=K0f(=LrAS GN'ɹ9<\!a`)֕y[uՍ[09` 9 +57ts6}b4{oqd+J5fa/,97J#6yν99mRWxJyѡyu_TJc`~W>l^q#Ts#2"nD1%fS)FU w{ܯ R{ ˎ󅃏џDsZSQS;LV;7 Od1&1n$ N /.q3~eNɪ]E#oM~}v֯FڦwyZ=<<>Xo稯lfMFV6p02|*=tV!c~]fa5Y^Q_WN|Vs 0ҘދU97OI'N2'8N֭fgg-}V%y]U4 峧p*91#9U kCac_AFңĪy뚇Y_AiuYyTTYЗ-(!JFLt›17uTozc. S;7A&&<ԋ5y;Ro+:' *eYJkWR[@F %SHWP 72k4 qLd'J "zB6{AC0ƁA6U.'F3:Ȅ(9ΜL;D]m8ڥ9}dU "v!;*13Rg^fJyShyy5auA?ɩGHRjo^]׽S)Fm\toy 4WQS@mE#%5ʈfFYDX ~D5Ϡ9tE9So_aU4?Ѽm%&c{n>.KW1Tlb}:j uGi(JgcYj0qn+>) %\!4{LaJso d||u//P_y7iRJ߬nHOy) l+@$($VFIQ9%EeKʈU. ia&FY̒mZ=)+qqoQn >L!qCiDB;Y<%} OgBxB!ØuG)WG9y(Ą{_yesuZmZZey'Wg#C~1Cev@0D $a@˲(.._GimA:uyw֬%;@!JkQVM_Ow:P.s\)ot- ˹"`B,e CRtaEUP<0'}r3[>?G8xU~Nqu;Wm8\RIkբ^5@k+5(By'L&'gBJ3ݶ!/㮻w҅ yqPWUg<e"Qy*167΃sJ\oz]T*UQ<\FԎ`HaNmڜ6DysCask8wP8y9``GJ9lF\G g's Nn͵MLN֪u$| /|7=]O)6s !ĴAKh]q_ap $HH'\1jB^s\|- W1:=6lJBqjY^LsPk""`]w)󭃈,(HC ?䔨Y$Sʣ{4Z+0NvQkhol6C.婧/u]FwiVjZka&%6\F*Ny#8O,22+|Db~d ~Çwc N:FuuCe&oZ(l;@ee-+Wn`44AMK➝2BRՈt7g*1gph9N) *"TF*R(#'88pm=}X]u[i7bEc|\~EMn}P瘊J)K.0i1M6=7'_\kaZ(Th{K*GJyytw"IO-PWJk)..axӝ47"89Cc7ĐBiZx 7m!fy|ϿF9CbȩV 9V-՛^pV̌ɄS#Bv4-@]Vxt-Z, &ֺ*diؠ2^VXbs֔Ìl.jQ]Y[47gj=幽ex)A0ip׳ W2[ᎇhuE^~q흙L} #-b۸oFJ_QP3r6jr+"nfzRJTUqoaۍ /$d8Mx'ݓ= OՃ| )$2mcM*cЙj}f };n YG w0Ia!1Q.oYfr]DyISaP}"dIӗթO67jqR ҊƐƈaɤGG|h;t]䗖oSv|iZqX)oalv;۩meEJ\!8=$4QU4Xo&VEĊ YS^E#d,yX_> ۘ-e\ "Wa6uLĜZi`aD9.% w~mB(02G[6y.773a7 /=o7D)$Z 66 $bY^\CuP. (x'"J60׿Y:Oi;F{w佩b+\Yi`TDWa~|VH)8q/=9!g߆2Y)?ND)%?Ǐ`k/sn:;O299yB=a[Ng 3˲N}vLNy;*?x?~L&=xyӴ~}q{qE*IQ^^ͧvü{Huu=R|>JyUlZV, B~/YF!Y\u_ݼF{_C)LD]m {H 0ihhadd nUkf3oٺCvE\)QJi+֥@tDJkB$1!Đr0XQ|q?d2) Ӣ_}qv-< FŊ߫%roppVBwü~JidY4:}L6M7f٬F "?71<2#?Jyy4뷢<_a7_=Q E=S1И/9{+93֮E{ǂw{))?maÆm(uLE#lïZ  ~d];+]h j?!|$F}*"4(v'8s<ŏUkm7^7no1w2ؗ}TrͿEk>p'8OB7d7R(A 9.*Mi^ͳ; eeUwS+C)uO@ =Sy]` }l8^ZzRXj[^iUɺ$tj))<sbDJfg=Pk_{xaKo1:-uyG0M ԃ\0Lvuy'ȱc2Ji AdyVgVh!{]/&}}ċJ#%d !+87<;qN޼Nفl|1N:8ya  8}k¾+-$4FiZYÔXk*I&'@iI99)HSh4+2G:tGhS^繿 Kتm0 вDk}֚+QT4;sC}rՅE,8CX-e~>G&'9xpW,%Fh,Ry56Y–hW-(v_,? ; qrBk4-V7HQ;ˇ^Gv1JVV%,ik;D_W!))+BoS4QsTM;gt+ndS-~:11Sgv!0qRVh!"Ȋ(̦Yl.]PQWgٳE'`%W1{ndΗBk|Ž7ʒR~,lnoa&:ü$ 3<a[CBݮwt"o\ePJ=Hz"_c^Z.#ˆ*x z̝grY]tdkP*:97YľXyBkD4N.C_[;F9`8& !AMO c `@BA& Ost\-\NX+Xp < !bj3C&QL+*&kAQ=04}cC!9~820G'PC9xa!w&bo_1 Sw"ܱ V )Yl3+ס2KoXOx]"`^WOy :3GO0g;%Yv㐫(R/r (s } u B &FeYZh0y> =2<Ϟc/ -u= c&׭,.0"g"7 6T!vl#sc>{u/Oh Bᾈ)۴74]x7 gMӒ"d]U)}" v4co[ ɡs 5Gg=XR14?5A}D "b{0$L .\4y{_fe:kVS\\O]c^W52LSBDM! C3Dhr̦RtArx4&agaN3Cf<Ԉp4~ B'"1@.b_/xQ} _߃҉/gٓ2Qkqp0շpZ2fԫYz< 4L.Cyυι1t@鎫Fe sYfsF}^ V}N<_`p)alٶ "(XEAVZ<)2},:Ir*#m_YӼ R%a||EƼIJ,,+f"96r/}0jE/)s)cjW#w'Sʯ5<66lj$a~3Kʛy 2:cZ:Yh))+a߭K::N,Q F'qB]={.]h85C9cr=}*rk?vwV렵ٸW Rs%}rNAkDv|uFLBkWY YkX מ|)1!$#3%y?pF<@<Rr0}: }\J [5FRxY<9"SQdE(Q*Qʻ)q1E0B_O24[U'],lOb ]~WjHޏTQ5Syu wq)xnw8~)c 쫬gٲߠ H% k5dƝk> kEj,0% b"vi2Wس_CuK)K{n|>t{P1򨾜j>'kEkƗBg*H%'_aY6Bn!TL&ɌOb{c`'d^{t\i^[uɐ[}q0lM˕G:‚4kb祔c^:?bpg… +37stH:0}en6x˟%/<]BL&* 5&fK9Mq)/iyqtA%kUe[ڛKN]Ě^,"`/ s[EQQm?|XJ߅92m]G.E΃ח U*Cn.j_)Tѧj̿30ڇ!A0=͜ar I3$C^-9#|pk!)?7.x9 @OO;WƝZBFU keZ75F6Tc6"ZȚs2y/1 ʵ:u4xa`C>6Rb/Yм)^=+~uRd`/|_8xbB0?Ft||Z\##|K 0>>zxv8۴吅q 8ĥ)"6>~\8:qM}#͚'ĉ#p\׶ l#bA?)|g g9|8jP(cr,BwV (WliVxxᡁ@0Okn;ɥh$_ckCgriv}>=wGzβ KkBɛ[˪ !J)h&k2%07δt}!d<9;I&0wV/ v 0<H}L&8ob%Hi|޶o&h1L|u֦y~󛱢8fٲUsւ)0oiFx2}X[zVYr_;N(w]_4B@OanC?gĦx>мgx>ΛToZoOMp>40>V Oy V9iq!4 LN,ˢu{jsz]|"R޻&'ƚ{53ўFu(<٪9:΋]B;)B>1::8;~)Yt|0(pw2N%&X,URBK)3\zz&}ax4;ǟ(tLNg{N|Ǽ\G#C9g$^\}p?556]/RP.90 k,U8/u776s ʪ_01چ|\N 0VV*3H鴃J7iI!wG_^ypl}r*jɤSR 5QN@ iZ#1ٰy;_\3\BQQ x:WJv츟ٯ$"@6 S#qe딇(/P( Dy~TOϻ<4:-+F`0||;Xl-"uw$Цi󼕝mKʩorz"mϺ$F:~E'ҐvD\y?Rr8_He@ e~O,T.(ފR*cY^m|cVR[8 JҡSm!ΆԨb)RHG{?MpqrmN>߶Y)\p,d#xۆWY*,l6]v0h15M˙MS8+EdI='LBJIH7_9{Caз*Lq,dt >+~ّeʏ?xԕ4bBAŚjﵫ!'\Ը$WNvKO}ӽmSşذqsOy?\[,d@'73'j%kOe`1.g2"e =YIzS2|zŐƄa\U,dP;jhhhaxǶ?КZ՚.q SE+XrbOu%\GتX(H,N^~]JyEZQKceTQ]VGYqnah;y$cQahT&QPZ*iZ8UQQM.qo/T\7X"u?Mttl2Xq(IoW{R^ ux*SYJ! 4S.Jy~ BROS[V|žKNɛP(L6V^|cR7i7nZW1Fd@ Ara{詑|(T*dN]Ko?s=@ |_EvF]׍kR)eBJc" MUUbY6`~V޴dJKß&~'d3i WWWWWW
Current Directory: /opt/saltstack/salt/lib/python3.10/site-packages/salt/states
Viewing File: /opt/saltstack/salt/lib/python3.10/site-packages/salt/states/junos.py
""" State modules to interact with Junos devices. ============================================== :maturity: new :dependencies: junos-eznc, jxmlease .. note:: Those who wish to use junos-eznc (PyEZ) version >= 2.1.0, must use the latest salt code from github until the next release. Refer to :mod:`junos <salt.proxy.junos>` for information on connecting to junos proxy. """ import logging from functools import wraps log = logging.getLogger() def resultdecorator(function): @wraps(function) def wrapper(*args, **kwargs): ret = function(*args, **kwargs) ret["result"] = ret["changes"]["out"] return ret return wrapper @resultdecorator def rpc(name, dest=None, format="xml", args=None, **kwargs): """ Executes the given rpc. The returned data can be stored in a file by specifying the destination path with dest as an argument .. code-block:: yaml get-interface-information: junos.rpc: - dest: /home/user/rpc.log - interface_name: lo0 fetch interface information with terse: junos.rpc: - name: get-interface-information - terse: True Parameters: Required * name: The rpc to be executed. (default = None) Optional * dest: Destination file where the rpc output is stored. (default = None) Note that the file will be stored on the proxy minion. To push the files to the master use the salt's following execution module: \ :py:func:`cp.push <salt.modules.cp.push>` * format: The format in which the rpc reply must be stored in file specified in the dest (used only when dest is specified) (default = xml) * kwargs: keyworded arguments taken by rpc call like- * timeout: 30 Set NETCONF RPC timeout. Can be used for commands which take a while to execute. (default= 30 seconds) * filter: Only to be used with 'get-config' rpc to get specific configuration. * terse: Amount of information you want. * interface_name: Name of the interface whose information you want. """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} if args is not None: ret["changes"] = __salt__["junos.rpc"]( name, dest=dest, format=format, args=args, **kwargs ) else: ret["changes"] = __salt__["junos.rpc"](name, dest=dest, format=format, **kwargs) return ret @resultdecorator def set_hostname(name, **kwargs): """ Changes the hostname of the device. .. code-block:: yaml device_name: junos.set_hostname: - comment: "Host-name set via saltstack." Parameters: Required * name: The name to be set. (default = None) Optional * kwargs: Keyworded arguments which can be provided like- * timeout: Set NETCONF RPC timeout. Can be used for commands which take a while to execute. (default = 30 seconds) * comment: Provide a comment to the commit. (default = None) * confirm: Provide time in minutes for commit confirmation. \ If this option is specified, the commit will be rollbacked in \ the given time unless the commit is confirmed. """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} ret["changes"] = __salt__["junos.set_hostname"](name, **kwargs) return ret @resultdecorator def commit(name, **kwargs): """ Commits the changes loaded into the candidate configuration. .. code-block:: yaml commit the changes: junos.commit: - confirm: 10 Parameters: Optional * kwargs: Keyworded arguments which can be provided like- * timeout: Set NETCONF RPC timeout. Can be used for commands which take a \ while to execute. (default = 30 seconds) * comment: Provide a comment to the commit. (default = None) * confirm: Provide time in minutes for commit confirmation. If this option \ is specified, the commit will be rollbacked in the given time \ unless the commit is confirmed. * sync: On dual control plane systems, requests that the candidate\ configuration on one control plane be copied to the other \ control plane,checked for correct syntax, and committed on \ both Routing Engines. (default = False) * force_sync: On dual control plane systems, force the candidate configuration on one control plane to be copied to the other control plane. * full: When set to True requires all the daemons to check and evaluate \ the new configuration. * detail: When true return commit detail. """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} ret["changes"] = __salt__["junos.commit"](**kwargs) return ret @resultdecorator def rollback(name, d_id, **kwargs): """ Rollbacks the committed changes. .. code-block:: yaml rollback the changes: junos.rollback: - id: 5 Parameters: Optional * id: * d_id: The rollback id value [0-49]. (default = 0) (this variable cannot be named `id`, it conflicts with the state compiler's internal id) * kwargs: Keyworded arguments which can be provided like- * timeout: Set NETCONF RPC timeout. Can be used for commands which take a while to execute. (default = 30 seconds) * comment: Provide a comment to the commit. (default = None) * confirm: Provide time in minutes for commit confirmation. If this option \ is specified, the commit will be rollbacked in the given time \ unless the commit is confirmed. * diffs_file: Path to the file where any diffs will be written. (default = None) """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} ret["changes"] = __salt__["junos.rollback"](d_id=d_id, **kwargs) return ret @resultdecorator def diff(name, d_id=0, **kwargs): """ .. versionchanged:: 3001 Gets the difference between the candidate and the current configuration. .. code-block:: yaml get the diff: junos.diff: - d_id: 10 Parameters: Optional * d_id: The rollback diff id (d_id) value [0-49]. (default = 0) """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} ret["changes"] = __salt__["junos.diff"](id=d_id, **kwargs) return ret @resultdecorator def cli(name, **kwargs): """ Executes the CLI commands and reuturns the text output. .. code-block:: yaml show version: junos.cli: - format: xml get software version of device: junos.cli: - name: show version - format: text - dest: /home/user/show_version.log Parameters: Required * name: The command that need to be executed on Junos CLI. (default = None) Optional * kwargs: Keyworded arguments which can be provided like- * format: Format in which to get the CLI output. (text or xml, \ default = 'text') * timeout: Set NETCONF RPC timeout. Can be used for commands which take a while to execute. (default = 30 seconds) * dest: The destination file where the CLI output can be stored.\ (default = None) """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} ret["changes"] = __salt__["junos.cli"](name, **kwargs) return ret @resultdecorator def shutdown(name, **kwargs): """ Shuts down the device. .. code-block:: yaml shut the device: junos.shutdown: - in_min: 10 Parameters: Optional * kwargs: * reboot: Whether to reboot instead of shutdown. (default=False) * at: Specify time for reboot. (To be used only if reboot=yes) * in_min: Specify delay in minutes for shutdown """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} ret["changes"] = __salt__["junos.shutdown"](**kwargs) return ret @resultdecorator def install_config(name, **kwargs): """ Loads and commits the configuration provided. .. code-block:: yaml Install the mentioned config: junos.install_config: - name: salt://configs/interface.set - timeout: 100 - diffs_file: '/var/log/diff' .. code-block:: yaml Install the mentioned config: junos.install_config: - path: salt://configs/interface.set - timeout: 100 - template_vars: interface_name: lo0 description: Creating interface via SaltStack. name Path where the configuration/template file is present. If the file has a ``*.conf`` extension, the content is treated as text format. If the file has a ``*.xml`` extension, the content is treated as XML format. If the file has a ``*.set`` extension, the content is treated as Junos OS ``set`` commands template_vars The dictionary of data for the jinja variables present in the jinja template timeout : 30 Set NETCONF RPC timeout. Can be used for commands which take a while to execute. overwrite : False Set to ``True`` if you want this file is to completely replace the configuration file. Sets action to override .. note:: This option cannot be used if **format** is "set". merge : False If set to ``True`` will set the load-config action to merge. the default load-config action is 'replace' for xml/json/text config comment Provide a comment to the commit. (default = None) confirm Provide time in minutes for commit confirmation. If this option is specified, the commit will be rolled back in the given time unless the commit is confirmed. diffs_file Path to the file where the diff (difference in old configuration and the committed configuration) will be stored. .. note:: The file will be stored on the proxy minion. To push the files to the master use :py:func:`cp.push <salt.modules.cp.push>`. """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} ret["changes"] = __salt__["junos.install_config"](name, **kwargs) return ret @resultdecorator def zeroize(name): """ Resets the device to default factory settings. .. code-block:: yaml reset my device: junos.zeroize name: can be anything """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} ret["changes"] = __salt__["junos.zeroize"]() return ret @resultdecorator def install_os(name, **kwargs): """ Installs the given image on the device. After the installation is complete the device is rebooted, if reboot=True is given as a keyworded argument. .. code-block:: yaml salt://images/junos_image.tgz: junos.install_os: - timeout: 100 - reboot: True Parameters: Required * name: Path where the image file is present on the pro\ xy minion. Optional * kwargs: keyworded arguments to be given such as timeout, reboot etc * timeout: Set NETCONF RPC timeout. Can be used to RPCs which take a while to execute. (default = 30 seconds) * reboot: Whether to reboot after installation (default = False) * no_copy: When True the software package will not be SCP’d to the device. \ (default = False) """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} ret["changes"] = __salt__["junos.install_os"](name, **kwargs) return ret @resultdecorator def file_copy(name, dest=None, **kwargs): """ Copies the file from the local device to the junos device. .. code-block:: yaml /home/m2/info.txt: junos.file_copy: - dest: info_copy.txt Parameters: Required * name: The sorce path where the file is kept. * dest: The destination path where the file will be copied. """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} ret["changes"] = __salt__["junos.file_copy"](name, dest, **kwargs) return ret @resultdecorator def lock(name): """ Attempts an exclusive lock on the candidate configuration. This is a non-blocking call. .. note:: Any user who wishes to use lock, must necessarily unlock the configuration too. Ensure :py:func:`unlock <salt.states.junos.unlock>` is called in the same orchestration run in which the lock is called. .. code-block:: yaml lock the config: junos.lock """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} ret["changes"] = __salt__["junos.lock"]() return ret @resultdecorator def unlock(name): """ Unlocks the candidate configuration. .. code-block:: yaml unlock the config: junos.unlock """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} ret["changes"] = __salt__["junos.unlock"]() return ret @resultdecorator def load(name, **kwargs): """ Loads the configuration provided onto the junos device. .. code-block:: yaml Install the mentioned config: junos.load: - name: salt://configs/interface.set .. code-block:: yaml Install the mentioned config: junos.load: - name: salt://configs/interface.set - template_vars: interface_name: lo0 description: Creating interface via SaltStack. Sample template: .. code-block:: bash set interfaces {{ interface_name }} unit 0 name Path where the configuration/template file is present. If the file has a ``*.conf`` extension, the content is treated as text format. If the file has a ``*.xml`` extension, the content is treated as XML format. If the file has a ``*.set`` extension, the content is treated as Junos OS ``set`` commands. overwrite : False Set to ``True`` if you want this file is to completely replace the configuration file. .. note:: This option cannot be used if **format** is "set". merge : False If set to ``True`` will set the load-config action to merge. the default load-config action is 'replace' for xml/json/text config update : False Compare a complete loaded configuration against the candidate configuration. For each hierarchy level or configuration object that is different in the two configurations, the version in the loaded configuration replaces the version in the candidate configuration. When the configuration is later committed, only system processes that are affected by the changed configuration elements parse the new configuration. This action is supported from PyEZ 2.1 (default = False) template_vars Variables to be passed into the template processing engine in addition to those present in __pillar__, __opts__, __grains__, etc. You may reference these variables in your template like so: {{ template_vars["var_name"] }} """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} ret["changes"] = __salt__["junos.load"](name, **kwargs) return ret @resultdecorator def commit_check(name): """ Perform a commit check on the configuration. .. code-block:: yaml perform commit check: junos.commit_check """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} ret["changes"] = __salt__["junos.commit_check"]() return ret @resultdecorator def get_table(name, table, table_file, **kwargs): """ .. versionadded:: 3001 Retrieve data from a Junos device using Tables/Views .. code-block:: yaml get route details: junos.get_table: - table: RouteTable - table_file: routes.yml get interface details: junos.get_table: - table: EthPortTable - table_file: ethport.yml - table_args: interface_name: ge-0/0/0 name (required) task definition table (required) Name of PyEZ Table file YAML file that has the table specified in table parameter path: Path of location of the YAML file. defaults to op directory in jnpr.junos.op target: if command need to run on FPC, can specify fpc target key: To overwrite key provided in YAML key_items: To select only given key items filters: To select only filter for the dictionary from columns template_args: key/value pair which should render Jinja template command """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} ret["changes"] = __salt__["junos.get_table"](table, table_file, **kwargs) return ret