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/random_org.py
""" Module for retrieving random information from Random.org .. versionadded:: 2015.5.0 :configuration: This module can be used by either passing an api key and version directly or by specifying both in a configuration profile in the salt master/minion config. For example: .. code-block:: yaml random_org: api_key: 7be1402d-5719-5bd3-a306-3def9f135da5 api_version: 1 """ import http.client import logging import urllib.request import salt.utils.http import salt.utils.json log = logging.getLogger(__name__) __virtualname__ = "random_org" RANDOM_ORG_FUNCTIONS = { "1": { "getUsage": {"method": "getUsage"}, "generateIntegers": {"method": "generateIntegers"}, "generateStrings": {"method": "generateStrings"}, "generateUUIDs": {"method": "generateUUIDs"}, "generateDecimalFractions": {"method": "generateDecimalFractions"}, "generateGaussians": {"method": "generateGaussians"}, "generateBlobs": {"method": "generateBlobs"}, } } def __virtual__(): """ Return virtual name of the module. :return: The virtual name of the module. """ return __virtualname__ def _numeric(n): """ Tell whether an argument is numeric """ return isinstance(n, (int, float)) def _query(api_version=None, data=None): """ Slack object method function to construct and execute on the API URL. :param api_key: The Random.org api key. :param api_version: The version of Random.org api. :param data: The data to be sent for POST method. :return: The json response from the API call or False. """ if data is None: data = {} ret = {"res": True} api_url = "https://api.random.org/" base_url = urllib.parse.urljoin(api_url, "json-rpc/" + str(api_version) + "/invoke") data = salt.utils.json.dumps(data) result = salt.utils.http.query( base_url, method="POST", params={}, data=data, decode=True, status=True, header_dict={}, opts=__opts__, ) if result.get("status", None) == http.client.OK: _result = result["dict"] if _result.get("result"): return _result.get("result") if _result.get("error"): return _result.get("error") return False elif result.get("status", None) == http.client.NO_CONTENT: return False else: ret["message"] = result.text if hasattr(result, "text") else "" return ret def getUsage(api_key=None, api_version=None): """ Show current usages statistics :param api_key: The Random.org api key. :param api_version: The Random.org api version. :return: The current usage statistics. CLI Example: .. code-block:: bash salt '*' random_org.getUsage salt '*' random_org.getUsage api_key=peWcBiMOS9HrZG15peWcBiMOS9HrZG15 api_version=1 """ ret = {"res": True} if not api_key or not api_version: try: options = __salt__["config.option"]("random_org") if not api_key: api_key = options.get("api_key") if not api_version: api_version = options.get("api_version") except (NameError, KeyError, AttributeError): log.error("No Random.org api key found.") ret["message"] = "No Random.org api key or api version found." ret["res"] = False return ret if isinstance(api_version, int): api_version = str(api_version) _function = RANDOM_ORG_FUNCTIONS.get(api_version).get("getUsage").get("method") data = {} data["id"] = 1911220 data["jsonrpc"] = "2.0" data["method"] = _function data["params"] = {"apiKey": api_key} result = _query(api_version=api_version, data=data) if result: ret["bitsLeft"] = result.get("bitsLeft") ret["requestsLeft"] = result.get("requestsLeft") ret["totalBits"] = result.get("totalBits") ret["totalRequests"] = result.get("totalRequests") else: ret["res"] = False ret["message"] = result["message"] return ret def generateIntegers(api_key=None, api_version=None, **kwargs): """ Generate random integers :param api_key: The Random.org api key. :param api_version: The Random.org api version. :param number: The number of integers to generate :param minimum: The lower boundary for the range from which the random numbers will be picked. Must be within the [-1e9,1e9] range. :param maximum: The upper boundary for the range from which the random numbers will be picked. Must be within the [-1e9,1e9] range. :param replacement: Specifies whether the random numbers should be picked with replacement. The default (true) will cause the numbers to be picked with replacement, i.e., the resulting numbers may contain duplicate values (like a series of dice rolls). If you want the numbers picked to be unique (like raffle tickets drawn from a container), set this value to false. :param base: Specifies the base that will be used to display the numbers. Values allowed are 2, 8, 10 and 16. This affects the JSON types and formatting of the resulting data as discussed below. :return: A list of integers. CLI Example: .. code-block:: bash salt '*' random_org.generateIntegers number=5 minimum=1 maximum=6 salt '*' random_org.generateIntegers number=5 minimum=2 maximum=255 base=2 """ ret = {"res": True} if not api_key or not api_version: try: options = __salt__["config.option"]("random_org") if not api_key: api_key = options.get("api_key") if not api_version: api_version = options.get("api_version") except (NameError, KeyError, AttributeError): log.error("No Random.org api key found.") ret["message"] = "No Random.org api key or api version found." ret["res"] = False return ret for item in ["number", "minimum", "maximum"]: if item not in kwargs: ret["res"] = False ret["message"] = f"Rquired argument, {item} is missing." return ret if not _numeric(kwargs["number"]) or not 1 <= kwargs["number"] <= 10000: ret["res"] = False ret["message"] = "Number of integers must be between 1 and 10000" return ret if ( not _numeric(kwargs["minimum"]) or not -1000000000 <= kwargs["minimum"] <= 1000000000 ): ret["res"] = False ret["message"] = ( "Minimum argument must be between -1,000,000,000 and 1,000,000,000" ) return ret if ( not _numeric(kwargs["maximum"]) or not -1000000000 <= kwargs["maximum"] <= 1000000000 ): ret["res"] = False ret["message"] = ( "Maximum argument must be between -1,000,000,000 and 1,000,000,000" ) return ret if "base" in kwargs: base = kwargs["base"] if base not in [2, 8, 10, 16]: ret["res"] = False ret["message"] = "Base must be either 2, 8, 10 or 16." return ret else: base = 10 if "replacement" not in kwargs: replacement = True else: replacement = kwargs["replacement"] if isinstance(api_version, int): api_version = str(api_version) _function = ( RANDOM_ORG_FUNCTIONS.get(api_version).get("generateIntegers").get("method") ) data = {} data["id"] = 1911220 data["jsonrpc"] = "2.0" data["method"] = _function data["params"] = { "apiKey": api_key, "n": kwargs["number"], "min": kwargs["minimum"], "max": kwargs["maximum"], "replacement": replacement, "base": base, } result = _query(api_version=api_version, data=data) log.debug("result %s", result) if result: if "random" in result: random_data = result.get("random").get("data") ret["data"] = random_data else: ret["res"] = False ret["message"] = result["message"] else: ret["res"] = False ret["message"] = result["message"] return ret def generateStrings(api_key=None, api_version=None, **kwargs): """ Generate random strings. :param api_key: The Random.org api key. :param api_version: The Random.org api version. :param number: The number of strings to generate. :param length: The length of each string. Must be within the [1,20] range. All strings will be of the same length :param characters: A string that contains the set of characters that are allowed to occur in the random strings. The maximum number of characters is 80. :param replacement: Specifies whether the random strings should be picked with replacement. The default (true) will cause the strings to be picked with replacement, i.e., the resulting list of strings may contain duplicates (like a series of dice rolls). If you want the strings to be unique (like raffle tickets drawn from a container), set this value to false. :return: A list of strings. CLI Example: .. code-block:: bash salt '*' random_org.generateStrings number=5 length=8 characters='abcdefghijklmnopqrstuvwxyz' salt '*' random_org.generateStrings number=10 length=16 characters'abcdefghijklmnopqrstuvwxyz' """ ret = {"res": True} if not api_key or not api_version: try: options = __salt__["config.option"]("random_org") if not api_key: api_key = options.get("api_key") if not api_version: api_version = options.get("api_version") except (NameError, KeyError, AttributeError): log.error("No Random.org api key found.") ret["message"] = "No Random.org api key or api version found." ret["res"] = False return ret for item in ["number", "length", "characters"]: if item not in kwargs: ret["res"] = False ret["message"] = f"Required argument, {item} is missing." return ret if not _numeric(kwargs["number"]) or not 1 <= kwargs["number"] <= 10000: ret["res"] = False ret["message"] = "Number of strings must be between 1 and 10000" return ret if not _numeric(kwargs["length"]) or not 1 <= kwargs["length"] <= 20: ret["res"] = False ret["message"] = "Length of strings must be between 1 and 20" return ret if len(kwargs["characters"]) >= 80: ret["res"] = False ret["message"] = "Length of characters must be less than 80." return ret if isinstance(api_version, int): api_version = str(api_version) if "replacement" not in kwargs: replacement = True else: replacement = kwargs["replacement"] _function = ( RANDOM_ORG_FUNCTIONS.get(api_version).get("generateStrings").get("method") ) data = {} data["id"] = 1911220 data["jsonrpc"] = "2.0" data["method"] = _function data["params"] = { "apiKey": api_key, "n": kwargs["number"], "length": kwargs["length"], "characters": kwargs["characters"], "replacement": replacement, } result = _query(api_version=api_version, data=data) if result: if "random" in result: random_data = result.get("random").get("data") ret["data"] = random_data else: ret["res"] = False ret["message"] = result["message"] else: ret["res"] = False ret["message"] = result["message"] return ret def generateUUIDs(api_key=None, api_version=None, **kwargs): """ Generate a list of random UUIDs :param api_key: The Random.org api key. :param api_version: The Random.org api version. :param number: How many random UUIDs you need. Must be within the [1,1e3] range. :return: A list of UUIDs CLI Example: .. code-block:: bash salt '*' random_org.generateUUIDs number=5 """ ret = {"res": True} if not api_key or not api_version: try: options = __salt__["config.option"]("random_org") if not api_key: api_key = options.get("api_key") if not api_version: api_version = options.get("api_version") except (NameError, KeyError, AttributeError): log.error("No Random.org api key found.") ret["message"] = "No Random.org api key or api version found." ret["res"] = False return ret for item in ["number"]: if item not in kwargs: ret["res"] = False ret["message"] = f"Required argument, {item} is missing." return ret if isinstance(api_version, int): api_version = str(api_version) if not _numeric(kwargs["number"]) or not 1 <= kwargs["number"] <= 1000: ret["res"] = False ret["message"] = "Number of UUIDs must be between 1 and 1000" return ret _function = RANDOM_ORG_FUNCTIONS.get(api_version).get("generateUUIDs").get("method") data = {} data["id"] = 1911220 data["jsonrpc"] = "2.0" data["method"] = _function data["params"] = { "apiKey": api_key, "n": kwargs["number"], } result = _query(api_version=api_version, data=data) if result: if "random" in result: random_data = result.get("random").get("data") ret["data"] = random_data else: ret["res"] = False ret["message"] = result["message"] else: ret["res"] = False ret["message"] = result["message"] return ret def generateDecimalFractions(api_key=None, api_version=None, **kwargs): """ Generates true random decimal fractions :param api_key: The Random.org api key. :param api_version: The Random.org api version. :param number: How many random decimal fractions you need. Must be within the [1,1e4] range. :param decimalPlaces: The number of decimal places to use. Must be within the [1,20] range. :param replacement: Specifies whether the random numbers should be picked with replacement. The default (true) will cause the numbers to be picked with replacement, i.e., the resulting numbers may contain duplicate values (like a series of dice rolls). If you want the numbers picked to be unique (like raffle tickets drawn from a container), set this value to false. :return: A list of decimal fraction CLI Example: .. code-block:: bash salt '*' random_org.generateDecimalFractions number=10 decimalPlaces=4 salt '*' random_org.generateDecimalFractions number=10 decimalPlaces=4 replacement=True """ ret = {"res": True} if not api_key or not api_version: try: options = __salt__["config.option"]("random_org") if not api_key: api_key = options.get("api_key") if not api_version: api_version = options.get("api_version") except (NameError, KeyError, AttributeError): log.error("No Random.org api key found.") ret["message"] = "No Random.org api key or api version found." ret["res"] = False return ret for item in ["number", "decimalPlaces"]: if item not in kwargs: ret["res"] = False ret["message"] = f"Required argument, {item} is missing." return ret if not isinstance(kwargs["number"], int) or not 1 <= kwargs["number"] <= 10000: ret["res"] = False ret["message"] = "Number of decimal fractions must be between 1 and 10000" return ret if not _numeric(kwargs["decimalPlaces"]) or not 1 <= kwargs["decimalPlaces"] <= 20: ret["res"] = False ret["message"] = "Number of decimal places must be between 1 and 20" return ret if "replacement" not in kwargs: replacement = True else: replacement = kwargs["replacement"] if isinstance(api_version, int): api_version = str(api_version) _function = ( RANDOM_ORG_FUNCTIONS.get(api_version) .get("generateDecimalFractions") .get("method") ) data = {} data["id"] = 1911220 data["jsonrpc"] = "2.0" data["method"] = _function data["params"] = { "apiKey": api_key, "n": kwargs["number"], "decimalPlaces": kwargs["decimalPlaces"], "replacement": replacement, } result = _query(api_version=api_version, data=data) if result: if "random" in result: random_data = result.get("random").get("data") ret["data"] = random_data else: ret["res"] = False ret["message"] = result["message"] else: ret["res"] = False ret["message"] = result["message"] return ret def generateGaussians(api_key=None, api_version=None, **kwargs): """ This method generates true random numbers from a Gaussian distribution (also known as a normal distribution). :param api_key: The Random.org api key. :param api_version: The Random.org api version. :param number: How many random numbers you need. Must be within the [1,1e4] range. :param mean: The distribution's mean. Must be within the [-1e6,1e6] range. :param standardDeviation: The distribution's standard deviation. Must be within the [-1e6,1e6] range. :param significantDigits: The number of significant digits to use. Must be within the [2,20] range. :return: The user list. CLI Example: .. code-block:: bash salt '*' random_org.generateGaussians number=10 mean=0.0 standardDeviation=1.0 significantDigits=8 """ ret = {"res": True} if not api_key or not api_version: try: options = __salt__["config.option"]("random_org") if not api_key: api_key = options.get("api_key") if not api_version: api_version = options.get("api_version") except (NameError, KeyError, AttributeError): log.error("No Random.org api key found.") ret["message"] = "No Random.org api key or api version found." ret["res"] = False return ret for item in ["number", "mean", "standardDeviation", "significantDigits"]: if item not in kwargs: ret["res"] = False ret["message"] = f"Required argument, {item} is missing." return ret if not _numeric(kwargs["number"]) or not 1 <= kwargs["number"] <= 10000: ret["res"] = False ret["message"] = "Number of decimal fractions must be between 1 and 10000" return ret if not _numeric(kwargs["mean"]) or not -1000000 <= kwargs["mean"] <= 1000000: ret["res"] = False ret["message"] = "The distribution's mean must be between -1000000 and 1000000" return ret if ( not _numeric(kwargs["standardDeviation"]) or not -1000000 <= kwargs["standardDeviation"] <= 1000000 ): ret["res"] = False ret["message"] = ( "The distribution's standard deviation must be between -1000000 and 1000000" ) return ret if ( not _numeric(kwargs["significantDigits"]) or not 2 <= kwargs["significantDigits"] <= 20 ): ret["res"] = False ret["message"] = "The number of significant digits must be between 2 and 20" return ret if isinstance(api_version, int): api_version = str(api_version) _function = ( RANDOM_ORG_FUNCTIONS.get(api_version).get("generateGaussians").get("method") ) data = {} data["id"] = 1911220 data["jsonrpc"] = "2.0" data["method"] = _function data["params"] = { "apiKey": api_key, "n": kwargs["number"], "mean": kwargs["mean"], "standardDeviation": kwargs["standardDeviation"], "significantDigits": kwargs["significantDigits"], } result = _query(api_version=api_version, data=data) if result: if "random" in result: random_data = result.get("random").get("data") ret["data"] = random_data else: ret["res"] = False ret["message"] = result["message"] else: ret["res"] = False ret["message"] = result["message"] return ret def generateBlobs(api_key=None, api_version=None, **kwargs): """ List all Slack users. :param api_key: The Random.org api key. :param api_version: The Random.org api version. :param format: Specifies the format in which the blobs will be returned. Values allowed are base64 and hex. :return: The user list. CLI Example: .. code-block:: bash salt '*' get_integers number=5 min=1 max=6 salt '*' get_integers number=5 min=1 max=6 """ ret = {"res": True} if not api_key or not api_version: try: options = __salt__["config.option"]("random_org") if not api_key: api_key = options.get("api_key") if not api_version: api_version = options.get("api_version") except (NameError, KeyError, AttributeError): log.error("No Random.org api key found.") ret["message"] = "No Random.org api key or api version found." ret["res"] = False return ret for item in ["number", "size"]: if item not in kwargs: ret["res"] = False ret["message"] = f"Required argument, {item} is missing." return ret if not _numeric(kwargs["number"]) or not 1 <= kwargs["number"] <= 100: ret["res"] = False ret["message"] = "Number of blobs must be between 1 and 100" return ret # size should be between range and divisible by 8 if ( not _numeric(kwargs["size"]) or not 1 <= kwargs["size"] <= 1048576 or kwargs["size"] % 8 != 0 ): ret["res"] = False ret["message"] = "Number of blobs must be between 1 and 100" return ret if "format" in kwargs: _format = kwargs["format"] if _format not in ["base64", "hex"]: ret["res"] = False ret["message"] = "Format must be either base64 or hex." return ret else: _format = "base64" if isinstance(api_version, int): api_version = str(api_version) _function = RANDOM_ORG_FUNCTIONS.get(api_version).get("generateBlobs").get("method") data = {} data["id"] = 1911220 data["jsonrpc"] = "2.0" data["method"] = _function data["params"] = { "apiKey": api_key, "n": kwargs["number"], "size": kwargs["size"], "format": _format, } result = _query(api_version=api_version, data=data) if result: if "random" in result: random_data = result.get("random").get("data") ret["data"] = random_data else: ret["res"] = False ret["message"] = result["message"] else: ret["res"] = False ret["message"] = result["message"] return ret