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/modules
Viewing File: /opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/azurearm_resource.py
""" Azure (ARM) Resource Execution Module .. versionadded:: 2019.2.0 .. warning:: This cloud provider will be removed from Salt in version 3007 in favor of the `saltext.azurerm Salt Extension <https://github.com/salt-extensions/saltext-azurerm>`_ :maintainer: <devops@eitr.tech> :maturity: new :depends: * `azure <https://pypi.python.org/pypi/azure>`_ >= 2.0.0 * `azure-common <https://pypi.python.org/pypi/azure-common>`_ >= 1.1.8 * `azure-mgmt <https://pypi.python.org/pypi/azure-mgmt>`_ >= 1.0.0 * `azure-mgmt-compute <https://pypi.python.org/pypi/azure-mgmt-compute>`_ >= 1.0.0 * `azure-mgmt-network <https://pypi.python.org/pypi/azure-mgmt-network>`_ >= 1.7.1 * `azure-mgmt-resource <https://pypi.python.org/pypi/azure-mgmt-resource>`_ >= 1.1.0 * `azure-mgmt-storage <https://pypi.python.org/pypi/azure-mgmt-storage>`_ >= 1.0.0 * `azure-mgmt-web <https://pypi.python.org/pypi/azure-mgmt-web>`_ >= 0.32.0 * `azure-storage <https://pypi.python.org/pypi/azure-storage>`_ >= 0.34.3 * `msrestazure <https://pypi.python.org/pypi/msrestazure>`_ >= 0.4.21 :platform: linux :configuration: This module requires Azure Resource Manager credentials to be passed as keyword arguments to every function in order to work properly. Required provider parameters: if using username and password: * ``subscription_id`` * ``username`` * ``password`` if using a service principal: * ``subscription_id`` * ``tenant`` * ``client_id`` * ``secret`` Optional provider parameters: **cloud_environment**: Used to point the cloud driver to different API endpoints, such as Azure GovCloud. Possible values: * ``AZURE_PUBLIC_CLOUD`` (default) * ``AZURE_CHINA_CLOUD`` * ``AZURE_US_GOV_CLOUD`` * ``AZURE_GERMAN_CLOUD`` """ # Python libs import logging from functools import wraps # Salt Libs import salt.utils.azurearm import salt.utils.json # Azure libs HAS_LIBS = False try: import azure.mgmt.resource.resources.models # pylint: disable=unused-import from msrest.exceptions import SerializationError from msrestazure.azure_exceptions import CloudError HAS_LIBS = True except ImportError: pass __virtualname__ = "azurearm_resource" log = logging.getLogger(__name__) def __virtual__(): if not HAS_LIBS: return ( False, "The following dependencies are required to use the AzureARM modules: " "Microsoft Azure SDK for Python >= 2.0rc6, " "MS REST Azure (msrestazure) >= 0.4", ) return __virtualname__ def _deprecation_message(function): """ Decorator wrapper to warn about azurearm deprecation """ @wraps(function) def wrapped(*args, **kwargs): salt.utils.versions.warn_until( "Chlorine", "The 'azurearm' functionality in Salt has been deprecated and its " "functionality will be removed in version 3007 in favor of the " "saltext.azurerm Salt Extension. " "(https://github.com/salt-extensions/saltext-azurerm)", category=FutureWarning, ) ret = function(*args, **salt.utils.args.clean_kwargs(**kwargs)) return ret return wrapped @_deprecation_message def resource_groups_list(**kwargs): """ .. versionadded:: 2019.2.0 List all resource groups within a subscription. CLI Example: .. code-block:: bash salt-call azurearm_resource.resource_groups_list """ result = {} resconn = __utils__["azurearm.get_client"]("resource", **kwargs) try: groups = __utils__["azurearm.paged_object_to_list"]( resconn.resource_groups.list() ) for group in groups: result[group["name"]] = group except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def resource_group_check_existence(name, **kwargs): """ .. versionadded:: 2019.2.0 Check for the existence of a named resource group in the current subscription. :param name: The resource group name to check. CLI Example: .. code-block:: bash salt-call azurearm_resource.resource_group_check_existence testgroup """ result = False resconn = __utils__["azurearm.get_client"]("resource", **kwargs) try: result = resconn.resource_groups.check_existence(name) except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) return result @_deprecation_message def resource_group_get(name, **kwargs): """ .. versionadded:: 2019.2.0 Get a dictionary representing a resource group's properties. :param name: The resource group name to get. CLI Example: .. code-block:: bash salt-call azurearm_resource.resource_group_get testgroup """ result = {} resconn = __utils__["azurearm.get_client"]("resource", **kwargs) try: group = resconn.resource_groups.get(name) result = group.as_dict() except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def resource_group_create_or_update( name, location, **kwargs ): # pylint: disable=invalid-name """ .. versionadded:: 2019.2.0 Create or update a resource group in a given location. :param name: The name of the resource group to create or update. :param location: The location of the resource group. This value is not able to be updated once the resource group is created. CLI Example: .. code-block:: bash salt-call azurearm_resource.resource_group_create_or_update testgroup westus """ result = {} resconn = __utils__["azurearm.get_client"]("resource", **kwargs) resource_group_params = { "location": location, "managed_by": kwargs.get("managed_by"), "tags": kwargs.get("tags"), } try: group = resconn.resource_groups.create_or_update(name, resource_group_params) result = group.as_dict() except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def resource_group_delete(name, **kwargs): """ .. versionadded:: 2019.2.0 Delete a resource group from the subscription. :param name: The resource group name to delete. CLI Example: .. code-block:: bash salt-call azurearm_resource.resource_group_delete testgroup """ result = False resconn = __utils__["azurearm.get_client"]("resource", **kwargs) try: group = resconn.resource_groups.delete(name) group.wait() result = True except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) return result @_deprecation_message def deployment_operation_get(operation, deployment, resource_group, **kwargs): """ .. versionadded:: 2019.2.0 Get a deployment operation within a deployment. :param operation: The operation ID of the operation within the deployment. :param deployment: The name of the deployment containing the operation. :param resource_group: The resource group name assigned to the deployment. CLI Example: .. code-block:: bash salt-call azurearm_resource.deployment_operation_get XXXXX testdeploy testgroup """ resconn = __utils__["azurearm.get_client"]("resource", **kwargs) try: operation = resconn.deployment_operations.get( resource_group_name=resource_group, deployment_name=deployment, operation_id=operation, ) result = operation.as_dict() except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def deployment_operations_list(name, resource_group, result_limit=10, **kwargs): """ .. versionadded:: 2019.2.0 List all deployment operations within a deployment. :param name: The name of the deployment to query. :param resource_group: The resource group name assigned to the deployment. :param result_limit: (Default: 10) The limit on the list of deployment operations. CLI Example: .. code-block:: bash salt-call azurearm_resource.deployment_operations_list testdeploy testgroup """ result = {} resconn = __utils__["azurearm.get_client"]("resource", **kwargs) try: operations = __utils__["azurearm.paged_object_to_list"]( resconn.deployment_operations.list( resource_group_name=resource_group, deployment_name=name, top=result_limit, ) ) for oper in operations: result[oper["operation_id"]] = oper except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def deployment_delete(name, resource_group, **kwargs): """ .. versionadded:: 2019.2.0 Delete a deployment. :param name: The name of the deployment to delete. :param resource_group: The resource group name assigned to the deployment. CLI Example: .. code-block:: bash salt-call azurearm_resource.deployment_delete testdeploy testgroup """ result = False resconn = __utils__["azurearm.get_client"]("resource", **kwargs) try: deploy = resconn.deployments.delete( deployment_name=name, resource_group_name=resource_group ) deploy.wait() result = True except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) return result @_deprecation_message def deployment_check_existence(name, resource_group, **kwargs): """ .. versionadded:: 2019.2.0 Check the existence of a deployment. :param name: The name of the deployment to query. :param resource_group: The resource group name assigned to the deployment. CLI Example: .. code-block:: bash salt-call azurearm_resource.deployment_check_existence testdeploy testgroup """ result = False resconn = __utils__["azurearm.get_client"]("resource", **kwargs) try: result = resconn.deployments.check_existence( deployment_name=name, resource_group_name=resource_group ) except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) return result @_deprecation_message def deployment_create_or_update( name, resource_group, deploy_mode="incremental", debug_setting="none", deploy_params=None, parameters_link=None, deploy_template=None, template_link=None, **kwargs, ): """ .. versionadded:: 2019.2.0 Deploys resources to a resource group. :param name: The name of the deployment to create or update. :param resource_group: The resource group name assigned to the deployment. :param deploy_mode: The mode that is used to deploy resources. This value can be either 'incremental' or 'complete'. In Incremental mode, resources are deployed without deleting existing resources that are not included in the template. In Complete mode, resources are deployed and existing resources in the resource group that are not included in the template are deleted. Be careful when using Complete mode as you may unintentionally delete resources. :param debug_setting: The debug setting of the deployment. The permitted values are 'none', 'requestContent', 'responseContent', or 'requestContent,responseContent'. By logging information about the request or response, you could potentially expose sensitive data that is retrieved through the deployment operations. :param deploy_params: JSON string containing name and value pairs that define the deployment parameters for the template. You use this element when you want to provide the parameter values directly in the request rather than link to an existing parameter file. Use either the parameters_link property or the deploy_params property, but not both. :param parameters_link: The URI of a parameters file. You use this element to link to an existing parameters file. Use either the parameters_link property or the deploy_params property, but not both. :param deploy_template: JSON string of template content. You use this element when you want to pass the template syntax directly in the request rather than link to an existing template. Use either the template_link property or the deploy_template property, but not both. :param template_link: The URI of the template. Use either the template_link property or the deploy_template property, but not both. CLI Example: .. code-block:: bash salt-call azurearm_resource.deployment_create_or_update testdeploy testgroup """ resconn = __utils__["azurearm.get_client"]("resource", **kwargs) prop_kwargs = {"mode": deploy_mode} prop_kwargs["debug_setting"] = {"detail_level": debug_setting} if deploy_params: prop_kwargs["parameters"] = deploy_params else: if isinstance(parameters_link, dict): prop_kwargs["parameters_link"] = parameters_link else: prop_kwargs["parameters_link"] = {"uri": parameters_link} if deploy_template: prop_kwargs["template"] = deploy_template else: if isinstance(template_link, dict): prop_kwargs["template_link"] = template_link else: prop_kwargs["template_link"] = {"uri": template_link} deploy_kwargs = kwargs.copy() deploy_kwargs.update(prop_kwargs) try: deploy_model = __utils__["azurearm.create_object_model"]( "resource", "DeploymentProperties", **deploy_kwargs ) except TypeError as exc: result = {"error": f"The object model could not be built. ({str(exc)})"} return result try: validate = deployment_validate( name=name, resource_group=resource_group, **deploy_kwargs ) if "error" in validate: result = validate else: deploy = resconn.deployments.create_or_update( deployment_name=name, resource_group_name=resource_group, properties=deploy_model, ) deploy.wait() deploy_result = deploy.result() result = deploy_result.as_dict() except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} except SerializationError as exc: result = {"error": f"The object model could not be parsed. ({str(exc)})"} return result @_deprecation_message def deployment_get(name, resource_group, **kwargs): """ .. versionadded:: 2019.2.0 Get details about a specific deployment. :param name: The name of the deployment to query. :param resource_group: The resource group name assigned to the deployment. CLI Example: .. code-block:: bash salt-call azurearm_resource.deployment_get testdeploy testgroup """ resconn = __utils__["azurearm.get_client"]("resource", **kwargs) try: deploy = resconn.deployments.get( deployment_name=name, resource_group_name=resource_group ) result = deploy.as_dict() except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def deployment_cancel(name, resource_group, **kwargs): """ .. versionadded:: 2019.2.0 Cancel a deployment if in 'Accepted' or 'Running' state. :param name: The name of the deployment to cancel. :param resource_group: The resource group name assigned to the deployment. CLI Example: .. code-block:: bash salt-call azurearm_resource.deployment_cancel testdeploy testgroup """ resconn = __utils__["azurearm.get_client"]("resource", **kwargs) try: resconn.deployments.cancel( deployment_name=name, resource_group_name=resource_group ) result = {"result": True} except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc), "result": False} return result @_deprecation_message def deployment_validate( name, resource_group, deploy_mode=None, debug_setting=None, deploy_params=None, parameters_link=None, deploy_template=None, template_link=None, **kwargs, ): """ .. versionadded:: 2019.2.0 Validates whether the specified template is syntactically correct and will be accepted by Azure Resource Manager. :param name: The name of the deployment to validate. :param resource_group: The resource group name assigned to the deployment. :param deploy_mode: The mode that is used to deploy resources. This value can be either 'incremental' or 'complete'. In Incremental mode, resources are deployed without deleting existing resources that are not included in the template. In Complete mode, resources are deployed and existing resources in the resource group that are not included in the template are deleted. Be careful when using Complete mode as you may unintentionally delete resources. :param debug_setting: The debug setting of the deployment. The permitted values are 'none', 'requestContent', 'responseContent', or 'requestContent,responseContent'. By logging information about the request or response, you could potentially expose sensitive data that is retrieved through the deployment operations. :param deploy_params: JSON string containing name and value pairs that define the deployment parameters for the template. You use this element when you want to provide the parameter values directly in the request rather than link to an existing parameter file. Use either the parameters_link property or the deploy_params property, but not both. :param parameters_link: The URI of a parameters file. You use this element to link to an existing parameters file. Use either the parameters_link property or the deploy_params property, but not both. :param deploy_template: JSON string of template content. You use this element when you want to pass the template syntax directly in the request rather than link to an existing template. Use either the template_link property or the deploy_template property, but not both. :param template_link: The URI of the template. Use either the template_link property or the deploy_template property, but not both. CLI Example: .. code-block:: bash salt-call azurearm_resource.deployment_validate testdeploy testgroup """ resconn = __utils__["azurearm.get_client"]("resource", **kwargs) prop_kwargs = {"mode": deploy_mode} prop_kwargs["debug_setting"] = {"detail_level": debug_setting} if deploy_params: prop_kwargs["parameters"] = deploy_params else: if isinstance(parameters_link, dict): prop_kwargs["parameters_link"] = parameters_link else: prop_kwargs["parameters_link"] = {"uri": parameters_link} if deploy_template: prop_kwargs["template"] = deploy_template else: if isinstance(template_link, dict): prop_kwargs["template_link"] = template_link else: prop_kwargs["template_link"] = {"uri": template_link} deploy_kwargs = kwargs.copy() deploy_kwargs.update(prop_kwargs) try: deploy_model = __utils__["azurearm.create_object_model"]( "resource", "DeploymentProperties", **deploy_kwargs ) except TypeError as exc: result = {"error": f"The object model could not be built. ({str(exc)})"} return result try: local_validation = deploy_model.validate() if local_validation: raise local_validation[0] deploy = resconn.deployments.validate( deployment_name=name, resource_group_name=resource_group, properties=deploy_model, ) result = deploy.as_dict() except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} except SerializationError as exc: result = {"error": f"The object model could not be parsed. ({str(exc)})"} return result @_deprecation_message def deployment_export_template(name, resource_group, **kwargs): """ .. versionadded:: 2019.2.0 Exports the template used for the specified deployment. :param name: The name of the deployment to query. :param resource_group: The resource group name assigned to the deployment. CLI Example: .. code-block:: bash salt-call azurearm_resource.deployment_export_template testdeploy testgroup """ resconn = __utils__["azurearm.get_client"]("resource", **kwargs) try: deploy = resconn.deployments.export_template( deployment_name=name, resource_group_name=resource_group ) result = deploy.as_dict() except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def deployments_list(resource_group, **kwargs): """ .. versionadded:: 2019.2.0 List all deployments within a resource group. CLI Example: .. code-block:: bash salt-call azurearm_resource.deployments_list testgroup """ result = {} resconn = __utils__["azurearm.get_client"]("resource", **kwargs) try: deployments = __utils__["azurearm.paged_object_to_list"]( resconn.deployments.list_by_resource_group( resource_group_name=resource_group ) ) for deploy in deployments: result[deploy["name"]] = deploy except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def subscriptions_list_locations(subscription_id=None, **kwargs): """ .. versionadded:: 2019.2.0 List all locations for a subscription. :param subscription_id: The ID of the subscription to query. CLI Example: .. code-block:: bash salt-call azurearm_resource.subscriptions_list_locations XXXXXXXX """ result = {} if not subscription_id: subscription_id = kwargs.get("subscription_id") elif not kwargs.get("subscription_id"): kwargs["subscription_id"] = subscription_id subconn = __utils__["azurearm.get_client"]("subscription", **kwargs) try: locations = __utils__["azurearm.paged_object_to_list"]( subconn.subscriptions.list_locations( subscription_id=kwargs["subscription_id"] ) ) for loc in locations: result[loc["name"]] = loc except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def subscription_get(subscription_id=None, **kwargs): """ .. versionadded:: 2019.2.0 Get details about a subscription. :param subscription_id: The ID of the subscription to query. CLI Example: .. code-block:: bash salt-call azurearm_resource.subscription_get XXXXXXXX """ result = {} if not subscription_id: subscription_id = kwargs.get("subscription_id") elif not kwargs.get("subscription_id"): kwargs["subscription_id"] = subscription_id subconn = __utils__["azurearm.get_client"]("subscription", **kwargs) try: subscription = subconn.subscriptions.get( subscription_id=kwargs.get("subscription_id") ) result = subscription.as_dict() except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def subscriptions_list(**kwargs): """ .. versionadded:: 2019.2.0 List all subscriptions for a tenant. CLI Example: .. code-block:: bash salt-call azurearm_resource.subscriptions_list """ result = {} subconn = __utils__["azurearm.get_client"]("subscription", **kwargs) try: subs = __utils__["azurearm.paged_object_to_list"](subconn.subscriptions.list()) for sub in subs: result[sub["subscription_id"]] = sub except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def tenants_list(**kwargs): """ .. versionadded:: 2019.2.0 List all tenants for your account. CLI Example: .. code-block:: bash salt-call azurearm_resource.tenants_list """ result = {} subconn = __utils__["azurearm.get_client"]("subscription", **kwargs) try: tenants = __utils__["azurearm.paged_object_to_list"](subconn.tenants.list()) for tenant in tenants: result[tenant["tenant_id"]] = tenant except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def policy_assignment_delete(name, scope, **kwargs): """ .. versionadded:: 2019.2.0 Delete a policy assignment. :param name: The name of the policy assignment to delete. :param scope: The scope of the policy assignment. CLI Example: .. code-block:: bash salt-call azurearm_resource.policy_assignment_delete testassign \ /subscriptions/bc75htn-a0fhsi-349b-56gh-4fghti-f84852 """ result = False polconn = __utils__["azurearm.get_client"]("policy", **kwargs) try: # pylint: disable=unused-variable policy = polconn.policy_assignments.delete( policy_assignment_name=name, scope=scope ) result = True except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) return result @_deprecation_message def policy_assignment_create(name, scope, definition_name, **kwargs): """ .. versionadded:: 2019.2.0 Create a policy assignment. :param name: The name of the policy assignment to create. :param scope: The scope of the policy assignment. :param definition_name: The name of the policy definition to assign. CLI Example: .. code-block:: bash salt-call azurearm_resource.policy_assignment_create testassign \ /subscriptions/bc75htn-a0fhsi-349b-56gh-4fghti-f84852 testpolicy """ polconn = __utils__["azurearm.get_client"]("policy", **kwargs) # "get" doesn't work for built-in policies per https://github.com/Azure/azure-cli/issues/692 # Uncomment this section when the ticket above is resolved. # BEGIN # definition = policy_definition_get( # name=definition_name, # **kwargs # ) # END # Delete this section when the ticket above is resolved. # BEGIN definition_list = policy_definitions_list(**kwargs) if definition_name in definition_list: definition = definition_list[definition_name] else: definition = { "error": 'The policy definition named "{}" could not be found.'.format( definition_name ) } # END if "error" not in definition: definition_id = str(definition["id"]) prop_kwargs = {"policy_definition_id": definition_id} policy_kwargs = kwargs.copy() policy_kwargs.update(prop_kwargs) try: policy_model = __utils__["azurearm.create_object_model"]( "resource.policy", "PolicyAssignment", **policy_kwargs ) except TypeError as exc: result = {"error": f"The object model could not be built. ({str(exc)})"} return result try: policy = polconn.policy_assignments.create( scope=scope, policy_assignment_name=name, parameters=policy_model ) result = policy.as_dict() except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} except SerializationError as exc: result = {"error": f"The object model could not be parsed. ({str(exc)})"} else: result = { "error": 'The policy definition named "{}" could not be found.'.format( definition_name ) } return result @_deprecation_message def policy_assignment_get(name, scope, **kwargs): """ .. versionadded:: 2019.2.0 Get details about a specific policy assignment. :param name: The name of the policy assignment to query. :param scope: The scope of the policy assignment. CLI Example: .. code-block:: bash salt-call azurearm_resource.policy_assignment_get testassign \ /subscriptions/bc75htn-a0fhsi-349b-56gh-4fghti-f84852 """ polconn = __utils__["azurearm.get_client"]("policy", **kwargs) try: policy = polconn.policy_assignments.get( policy_assignment_name=name, scope=scope ) result = policy.as_dict() except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def policy_assignments_list_for_resource_group( resource_group, **kwargs ): # pylint: disable=invalid-name """ .. versionadded:: 2019.2.0 List all policy assignments for a resource group. :param resource_group: The resource group name to list policy assignments within. CLI Example: .. code-block:: bash salt-call azurearm_resource.policy_assignments_list_for_resource_group testgroup """ result = {} polconn = __utils__["azurearm.get_client"]("policy", **kwargs) try: policy_assign = __utils__["azurearm.paged_object_to_list"]( polconn.policy_assignments.list_for_resource_group( resource_group_name=resource_group, filter=kwargs.get("filter") ) ) for assign in policy_assign: result[assign["name"]] = assign except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def policy_assignments_list(**kwargs): """ .. versionadded:: 2019.2.0 List all policy assignments for a subscription. CLI Example: .. code-block:: bash salt-call azurearm_resource.policy_assignments_list """ result = {} polconn = __utils__["azurearm.get_client"]("policy", **kwargs) try: policy_assign = __utils__["azurearm.paged_object_to_list"]( polconn.policy_assignments.list() ) for assign in policy_assign: result[assign["name"]] = assign except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def policy_definition_create_or_update( name, policy_rule, **kwargs ): # pylint: disable=invalid-name """ .. versionadded:: 2019.2.0 Create or update a policy definition. :param name: The name of the policy definition to create or update. :param policy_rule: A dictionary defining the `policy rule <https://docs.microsoft.com/en-us/azure/azure-policy/policy-definition#policy-rule>`_. CLI Example: .. code-block:: bash salt-call azurearm_resource.policy_definition_create_or_update testpolicy '{...rule definition..}' """ if not isinstance(policy_rule, dict): result = {"error": "The policy rule must be a dictionary!"} return result polconn = __utils__["azurearm.get_client"]("policy", **kwargs) # Convert OrderedDict to dict prop_kwargs = { "policy_rule": salt.utils.json.loads(salt.utils.json.dumps(policy_rule)) } policy_kwargs = kwargs.copy() policy_kwargs.update(prop_kwargs) try: policy_model = __utils__["azurearm.create_object_model"]( "resource.policy", "PolicyDefinition", **policy_kwargs ) except TypeError as exc: result = {"error": f"The object model could not be built. ({str(exc)})"} return result try: policy = polconn.policy_definitions.create_or_update( policy_definition_name=name, parameters=policy_model ) result = policy.as_dict() except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} except SerializationError as exc: result = {"error": f"The object model could not be parsed. ({str(exc)})"} return result @_deprecation_message def policy_definition_delete(name, **kwargs): """ .. versionadded:: 2019.2.0 Delete a policy definition. :param name: The name of the policy definition to delete. CLI Example: .. code-block:: bash salt-call azurearm_resource.policy_definition_delete testpolicy """ result = False polconn = __utils__["azurearm.get_client"]("policy", **kwargs) try: # pylint: disable=unused-variable policy = polconn.policy_definitions.delete(policy_definition_name=name) result = True except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) return result @_deprecation_message def policy_definition_get(name, **kwargs): """ .. versionadded:: 2019.2.0 Get details about a specific policy definition. :param name: The name of the policy definition to query. CLI Example: .. code-block:: bash salt-call azurearm_resource.policy_definition_get testpolicy """ polconn = __utils__["azurearm.get_client"]("policy", **kwargs) try: policy_def = polconn.policy_definitions.get(policy_definition_name=name) result = policy_def.as_dict() except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result @_deprecation_message def policy_definitions_list(hide_builtin=False, **kwargs): """ .. versionadded:: 2019.2.0 List all policy definitions for a subscription. :param hide_builtin: Boolean which will filter out BuiltIn policy definitions from the result. CLI Example: .. code-block:: bash salt-call azurearm_resource.policy_definitions_list """ result = {} polconn = __utils__["azurearm.get_client"]("policy", **kwargs) try: policy_defs = __utils__["azurearm.paged_object_to_list"]( polconn.policy_definitions.list() ) for policy in policy_defs: if not (hide_builtin and policy["policy_type"] == "BuiltIn"): result[policy["name"]] = policy except CloudError as exc: __utils__["azurearm.log_cloud_error"]("resource", str(exc), **kwargs) result = {"error": str(exc)} return result