From b1c020abd8bec99ed49dda7872962170cd7bd5ed Mon Sep 17 00:00:00 2001 From: John Manero Date: Wed, 18 Feb 2015 14:55:53 -0500 Subject: [PATCH 1/4] Add support for region eu-central-1 * Update AWS-SDK library (aws-java-sdk) to version 1.8.11. This is the latest 1.8.x release, which includes support for the new region * Add EU_CENTRAL_1 to Region, with SimpleDB disabled (SDB isn't deployed in eu-central-1) * Add a Boolean field to Region to disable SimpleDB caching/access, and hack short-circuits in into AwsSimpleDbService to keep it from trying to make calls to the non-existant API endpoint. --- grails-app/conf/BuildConfig.groovy | 3 ++- .../netflix/asgard/AwsSimpleDbService.groovy | 7 +++++++ src/groovy/com/netflix/asgard/Region.groovy | 15 ++++++++++++++- web-app/images/worldmap/eu-central-1.gif | Bin 0 -> 15723 bytes 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 web-app/images/worldmap/eu-central-1.gif diff --git a/grails-app/conf/BuildConfig.groovy b/grails-app/conf/BuildConfig.groovy index d4d0ac4b..91692b32 100644 --- a/grails-app/conf/BuildConfig.groovy +++ b/grails-app/conf/BuildConfig.groovy @@ -93,7 +93,8 @@ grails.project.dependency.resolution = { compile( // Amazon Web Services programmatic interface. Transitive dependency of glisten, but also used directly. - 'com.amazonaws:aws-java-sdk:1.7.5', + // 'com.amazonaws:aws-java-sdk:1.7.5', + 'com.amazonaws:aws-java-sdk:1.8.11', // Enables publication of a health check URL for deploying Asgard, and an on/off switch for activities. // Transitive dependencies include: diff --git a/grails-app/services/com/netflix/asgard/AwsSimpleDbService.groovy b/grails-app/services/com/netflix/asgard/AwsSimpleDbService.groovy index a6a8f2be..4b41ca5c 100644 --- a/grails-app/services/com/netflix/asgard/AwsSimpleDbService.groovy +++ b/grails-app/services/com/netflix/asgard/AwsSimpleDbService.groovy @@ -96,6 +96,8 @@ class AwsSimpleDbService implements InitializingBean { private List runQuery(String domainName, String queryString, Region region) { List appItems = [] + if (!region.simpledb) return appItems + try { appItems = itemRetriever.retrieve(region, new SelectRequest(queryString, true)) } catch (AmazonServiceException ase) { @@ -118,6 +120,8 @@ class AwsSimpleDbService implements InitializingBean { */ void save(String domainName, String itemName, Collection attributes, Region region = Region.defaultRegion()) { + if (!region.simpledb) return + try { awsClient.by(region).putAttributes(new PutAttributesRequest().withDomainName(domainName). withItemName(itemName).withAttributes(attributes)) @@ -143,6 +147,8 @@ class AwsSimpleDbService implements InitializingBean { */ void delete(String domainName, String itemName, List attributes = null, Region region = Region.defaultRegion()) { + if (!region.simpledb) return + try { awsClient.by(region).deleteAttributes(new DeleteAttributesRequest(domainName, itemName, attributes)) @@ -159,6 +165,7 @@ class AwsSimpleDbService implements InitializingBean { List listDomains(Region region) { List domains = [] + if (!region.simpledb) return domains ListDomainsResult result = listDomainsWithToken(region, null) while (true) { diff --git a/src/groovy/com/netflix/asgard/Region.groovy b/src/groovy/com/netflix/asgard/Region.groovy index 47fed9d8..b5e33e6b 100644 --- a/src/groovy/com/netflix/asgard/Region.groovy +++ b/src/groovy/com/netflix/asgard/Region.groovy @@ -47,6 +47,13 @@ enum Region { 'Ireland' ), + EU_CENTRAL_1('eu-central-1', + 'eu-frankfurt', + 'eu-central-1.gif', + 'Frankfurt', + false + ), + AP_NORTHEAST_1('ap-northeast-1', 'apac-tokyo', 'ap-northeast-1.png', @@ -91,17 +98,23 @@ enum Region { */ String location + /** + * Enable SimpleDB caching + */ + Boolean simpledb + /** * @param code the commonly used code name of the region such as us-east-1 * @param pricingJsonCode the code name of the region used in EC2 pricing json files * @param mapImageFileName the name of the image file to display when the region is selected * @param location the geographical location of the region */ - Region(String code, String pricingJsonCode, mapImageFileName, location) { + Region(String code, String pricingJsonCode, mapImageFileName, location, Boolean simpledb = true) { this.code = code this.pricingJsonCode = pricingJsonCode this.mapImageFileName = mapImageFileName this.location = location + this.simpledb = simpledb } /** diff --git a/web-app/images/worldmap/eu-central-1.gif b/web-app/images/worldmap/eu-central-1.gif new file mode 100644 index 0000000000000000000000000000000000000000..f6b7b94b0091635a58f8bcdbe8d1d21972037aac GIT binary patch literal 15723 zcmeI3`#;l<|Nb4e8HQnEjLrEFa!k%UIiEI%QdG`4Rfa;zX(OkYL#0s0D(9EOgvi@r zbDV4ry;Lfpl2k|~dDVA)zW>4N^UM2lyR{#mKi{9%^SZ9bH3ujALuP?qdjY)Gt8D8(W)*&>vDGAz<1{G35VK0e~2cSQV&$at5iWS8hHtJB$D zrzzg2FXGQo49}KEo;_z3Q{oqsjEl`Ph`Z$#mx+%rO^i=)IhT9#9L45*h1dB!mxNNk z#C)%$68weIkPG>y7i%mpR#;uE!C$O!y;yPLVu?j^y>l}CY;u<0rJLB48n2Y{jPz{l z47yha-7ll&Aemu7ZorcpT*!BW$z@UG8zgeR1*IKFY4@fy_)~7iQ%VkH_F^)7Tr(T| zGaEuOYuvIrOmmnPIo)^&E2wC^RZ$gR$;zngh@*{_(CX>ccXDcaDr)MB>5Sw% zW9RS9X5Sm4-)k(X>uIWMyj9;$Zg^DMFqGH$=vHHIa}(o6+h|8y2fe*NkMXpT(ZlHI zsp*_(>>MiXddhh4kk&KP&@=I$o`;NwtcQJrxBv69p?`)kFwr~6Vh*u-nGvEpQ%9aGyt@%AcLiK{6|}8Lzkhd&J~WW)vP=@ zfSwV#eln6vEbLmUfc3Qh02H&sLsUN-3xXE$>0<=*v3eQDstt-kBp z7Tb~XsQ1WnuDn5{?n7xak2>dgwKO!pAjtFKIrjKbnYsfYsJdShU!3NdGDfSCy5#rP z;1LG=26zd)fXqOSMOKQb`S6+2+CW8bQXwNz0vWT8+YOWwTe9Pd0VlYnJqJPv&1K-PmvgD7iD^FSP zG6cso;%q_+ppiST91!aZsuJ2E2+38P*B)jRnW`37Xcj@G4Vx7nglXSNUCi*%JwwH0 z8CUAlB_ykU@{gHBm;J{Xq*ABj&6Y_>JC=1RlFn}r>(HQ2$akx}!wK)N@&Up&02c{j z$JK6(D7DqakfofwX*KP@rWSxwn%1DNnUY-kY2gKNinwB^+LK{@0I`ZJNeC%wMz=tU zLJ&1D<`j547gN=4vN!-n(GVsA$HG?P4nT!QimEYu`$??+4jt(c`LMYNeDRcc9ZJq=pz5IjdBUCs4&vRa9h|w%ID;kqn}qROd<}F*P?*&HWv0>Jh@u4+ax!@Rknj~wz6@6)>6lgy8zQQ!2O>sDet2(rLbhS}m zv{3?9={WXu?&2xEZd{ycV#O~<5>~YH+)}Mur%VmBHR0<@E6!}{BF@P;ac@4ARb~)4 zfi})n?5|LrN?$h!MdJSP{Sj3!6Bv#?Jt!aMY{gvAEl(Pq*JJ3 z=T!4-gA>t1Vy+CD5b~ncR<=sT{51Tkn2a$NAeT&Y+0QMDbJuC5eJ2>=8e4~D9xc=q z+Pn+r7FI%KW?0A+zO8JVZ@n{)^2N|yj#22|K(*4RgCVf0a!R-Y%Q~Y=uF-p5zhcPJcHY_;=v_cQq$r!=P z2@+9!0*(j_dx#H$Yw4gcz=}jYr3#2zj<7wtm07hY1rt_yoT5C9mRapTZ1_POFd^lB zlYi39szn{&C&1+!RY_V2g39pYHh}{_xBEwtVg11z;8z_CU|@tv`k*gF3mz2Kbj57w zM{99$Si_1m3`A2R5C9SGn8tumXo!erjaocg8WSx*!hNP3+U7R>E1jOL^>{g42=5L} zuYu5=a`q_vT(1vL+e!@JYh?Az$phzC=2;6#1SA+0W%0yMQ(SSXM$k+$-Sh5E%lIdW z%GPVS*-~1CFD8S(xvkBXt%gC;rR<(tCHOx~vF>iToUeFstunLzyxu6(1X4j$pHd`7 zjI7@*RS#mO0S6YY2ETcKjW~dG3CXS!%r*rds&)n(??kIaF4XSpOj9_Sr#3^IQ*G`^lSN2n+I7L^z%TS6u- zU04;eIgCtNDXUSsFv=ZqF*vyG23FmO!6C0vszbEh`GWJzF<5UL>@dF7`Rvwcjk`3_ zd4(*WveW8d^NnXG^pn^#>UiT`QV?RX6h4KFfVIED9puXhGTNPA7KVo$io1vNS{PVD z(iemCk!PsH@hY)PuN-ny`LNE22)=Ovy6AvvraYMY40qk@X*ABXU}VD|+CVEQ*GQf}CuL_&1G=sR-3O|^Sg;pl(iD*n*= zht~f)w6gz4TjhQLrK^RNMoXl=02_>4o*R`KC>98K)+zQ}H;hw(-Dl=oB)lKroOX(@ zGEi{#9P{gR_rF_>PvZKvsXehu_&DC3Q6J}3h>U&F9V{C!_jlQ@bG}@0l+w&y_M^d4 zSWrK_)s-7+sUaJh4-yR0)w_P>N$aso7-v=f0g6U^2VNMuF-TY{96_nYU>d*~0(Oyx z&(0+U8-hhI02;oC9q$fq>bv^5D*^-1URa=&JdS#-s;PA9Wc1uJQzmqp4*bD}{n$nQevBPFlo^->Pl^!&qmrXlUg3H}(gwhe z>*=Gp$qZ#7mE@4XiEMFUK|IW|G3bivG+IzpygVMDbVbz8D+`%IEiSa#UM(qrv7o|S z!_YlLN2SfxxG762RXMX%;;5Ipa%%E4(KLcOU~d+1(AyQBMyZh&eI8J1CO2lG?57$$G#t34o z^7}J@A9RcX@!%v5Kj6coAtw{z^rdu>4@Ptei_iGz&0GBZ|3XB0Ha6Jqk`m67?I1)S zEfLFcGCY_gJANIUp#7cIT&Wmu5GS&CAN#2L+{b>snH$n}g(2^Y+kzdoU+YVsoNvN) z7F15$)l_}%nCXs~JI8hn`ZD?|tC{Y_y;NiJxTa4E+eouJ((GS!Ur`MB3jgT21!O) ztQMd2|7vw7W#!0Nw~W3T>T@gCUD3>qX$eRd);+z$$U(h2vzM*m9|%fJ;!`<}x{$wh z60Z~=kOe2TY=TgrH?1R9qBbj75$i)zx$1?ZM0*5jrPVo0oQtNZe6PZZ>#EPAneh8n z^H8yA7U_}oma8fb;61-ekl;CmJew~o7!aHQR#n3}z;28j?4o0`6awZqRZUwoYm&a3XCgN40 zS~xV(PUa;nGF&z_8$(rfM)PMH74MrBR7%Uo5X`J%1~OIT&g*bwKuTU59p^H~r$V;% zyQ-PUXvC}#%wLP>+7z~f8NxhRrwWQz)b9de8YmdgU9NgY9l*gdpysOa0S-;iDM4=7 zGXD*HlNilQvwKxv4*CbKKXCn*!KKPd;T5G7wNr;7v8rAN_cVq|JDpy7k6YFLWv6iV z<5O1ISX`BwO7}uj@LS07sT;jku0@?^DlKE!1>*}074Mn5ujo#0b$>C%jx9Z=DdTM8iR8c)A&Sv?w@6!=@xjShFr~C)qN>-N^icwgNk~Hnf}yaCnHPH zp75#T@&rpf0{*%u2qN#e0nNu>|cQQ^J;OWAPq zLg;41%p1ss9McPBfw(@;w#e?T0J7RQyIDLUZLerixwW>WK;8i+C#f5@epv`5haD7= zJMJh~B!qViv`5HltO_aYCGJ3_L+2NV;3vz7LGXul^8`7$Hf}B|4r<7ha+wVZ#yRq3 zEF4&!FCGv!--9x#5XC?>Ix$ zYFMuH4;pnJP5S`}pnW>1g6TZrLh=7}13{2g7gja*Mr|NFYqBAKvn(B` z(imFvChvNK-&jbF+VR$T0Wq7WVYq{?M~ys)CY-zTf0c4Wm5R9K$13t8^A`r2xf($x+{-G3qcotn ztP#CXXLNRH!jQ2+1!`7xd9uylh7;|C^(_3iVUv{`(FVBH3?8FpF|}PUV}f2`s$-yo;oo#t0!L8o@PGS>{e$QqME}bX zwYxM}`tGx%QIHMtVsD4eSg~@qd2H`P!K~&xZsa$SsPC`ODE9c7k#}c0bF%IxyifL& zx)3*%t2A(-d4FeqgiE|(cyi!%*zxY@!$&_#VN~G{=u6`{4e-Y`0y^&N>c=mOS9YB} zZP^x#PRq4=uv8oRWBA}-_8>7-KK8APjJnBk(@S-TeX{N|jz-gvJidp-B*gQQJ;{_>IA|LKV% z^=^Xnwyd|^G+vet6=>dEiJP+7-5~SIzLtS32_V)x&*TwPa@cYgJ?ddZ@(s_@gJVsm zR96@%oRXuDPsTg~OU<=rl8>wni9yV*W7<>8XMY*?_ zxLfZWG&fs{v&wzEzud!)$G;k>Nke%K)BL<8Usem7t_dlV`HaZo{?W=hCS_qyS&EcB zlD&qymh#%ZN2MjX9HV|=lx{iok@T)Um$c|_xf(aNb&wR``I zwDO13Kb-#8b6R8fdm&O$HYI#Dh!=cT9>4Oja)16i_(<3zh4Ho5UCPpu6d6$%#6h^#+> zN^DV{p-;##uxz+h_nAOJH2w1 z*>{Sm3`~J-n_Mn05)lAJYZ#k&o~g{(p=UHY&BjDw{&8&upd7T!CB$6NhO8FAxn-bI znw%X6?2J~JgnYuk3{5p7g(zI^%AvEe z-9=iGeQ{gbdA+3uz>iY=>&J~G4ZYq(y{fG^biRS}dau@F(Fz=woGbnJ$7h^^6*+LP zy1?V*#{20!y64p_ulaiS{C7$-v7;mWZm(Y*jalhQl4lm&z7-|I7nsrAtlDlT`kgCALXgWMn1`ZOQb zJ6U~ZPTq~1b0=Y3jWPX|Eo*eLugv@h`l8B2!XlNb+8|cm6+K6d->IZMnkI|tR&BrWGVQSp)SLt z5zA`W9{hI)%`fQM%L=@^;2=DHiDPrrGBnT=O~s)sZGfIUOOovW2ykMelbu9h;9Yipw(zEhIth5d*qR+mwLyeeVS9f1w&(mu$f+%7Sgmv2XzbtC z;D4a~1MUA+XloDL?km!gxE8;)Iy+Ws@Q+j5tM$q{M?YNCHFpqW|ZCUbefv9Y~Vgt z3j_pFhd@UVJ;&pXcjvRR_!L_&P0&P=x&GG@!{zg<59bwYd3UyT2Ssz8ZYR|4tHKiL zqXuCe97e`?Qnj?(r!$$|3;2FJ=@Kt@c@5KcowjCI1h^q)?}Z!#_n6AoUMdlUD;>5#Gi8_Gc?p zyfLyVJBDDCDx`(qUfwU-5LaK{wpNdTP=#r~<%zP?$!H zsV+$fb(C%D!P^}1vm_6=y_c|5c@a45FEH7T?F`DcBp9A(BwbboUJ0N`9jRJwwjEn+ zbwseBltS@u`n11#F7XLuLxEqG1qaLl>mQ{eOG$Z{macvQQK`I%A*nb7!v&<651s5& z*+#K3FJr3sg|9xy6OZBvudw=$H;tbk0f7H<8~R&$W!DtoZE8bjD|S)oVQqIXNqUIZ zXOD5WC(2)&B@% zjt1?yrz;Kx4tAY~&_4PKTh5MZ06Sej*k6jPl7Y|ZH2a)h8a&$GK$_kk3WO|Rch}*j zq}OXwee(xg^aDZ8x;4Y1b9u5IZKrQ0w<_!l*pep@L$f{gh}A|%OT4K_+c;LPo`SRd zDnH!N zlt>f=Py+>TK)(!SAull7-#89aF(9EBEFOi5cp;ak5JKg=#aZuRzzQ$&DN{(wqnKKp zH6L~q+1ShLF+!j^EV>vs;2kP0ytrWBgMh@`C;+GFGwEb(5uA}cIp*oqeiY_Z-#)&u^SDU?ls z1`^Enn;@{vpSrEXYC=y)gTjXRg(;{jJ(Qy*7rwzia&XZgOiw9VIP){($@kWacjyLZJ^R?#e_a(mV%HiWeM(ep;H+Ii=)={J zQd@D2Ynh4@ANqYv`shtfWm98nQ8M0mJ&S9{@1_?=KA-MMPh+Pmru;rXy38cD{Y?7!@R|A8oSK%FUwMDykDZE~Wzu+SYT?#%({ib)a!N`z zma9X#ex2e+v=cto#!e+eGe^X2>QJBa5AK;}Pndip1cTF|b~uXhr z=(^ONC4V0VFOrD#4|KIbZPrYg_|+$X5D~cX3u_NQ{9t z?ntfSC@OWM1t3>`1~Yh1^h-+?^12a?BLEACA!dp->a5fw(+(|pn3?=mUx$^OP_g5@ zU6X+T(EtE*$_~`U?pG@ZVostjvRr5OF`0@a29~NvC~a`<1bpEgWl6p`swpqZvAS19 zW+fEJ2D}c}UXF`@DDY$uBv&VgcMvhJ;A^q%iEjlNf+l%KFhyO&r1+7Y5CTLlq@~5y zc&Gm~rkTPwFtR$I4LzWfy1q5RC-iT91pd<2RubYnX{N&F!S7owv_vs}0oE}+(sp;? zxJq;c?w+`?P&pdtnS|w08{6Lk7Cq**FX!+)zU$oU`X>W{*Md!Sq~-G?MZbnyn*7x`H&?q3kq5Rtm6u7__U<`MHg@+^ z8$)YEci`uW&qtLlA9=2FvXM3>LvibaG)Z5EJTW-7koFyVnwzC@M(iN*VphI?=H4wNdr<~V^W11 zGXZ4CPi&UDj5BOf@(8oN%0_gHEGl=0qE#dpmCRpAhAz#3<+{7%xUiHK9+zTEWKnnk zrCJql^%Emv1ASZrf`>2?={T=i3>fv!Bpgy20x?v-8U@9Ik)IZqa})?aH$ri46mu}D zmA<70_p9xGgFVgLI-!V=0Xum=YT(;SVHPJ7nX*R|1lvcys)bN==z}r|JCY72KM(P0 zFF&-rHde-;cK~n$Gx8+MFYMM~YII2sh;eYdi3G%1trch6AP>XJrj=o+`)jd8*Jj`( zUp6uZHY+IW-;dVC=pjU1F$^sl0Lrp{KLtsklVmVGt5mZ1P~tL9M5| v#={a0r7lo)c>E%|_tQK<5Zjbb#q|EnE`_SELK`;*0e?XJ1LA)Rh?f5ksH+SN literal 0 HcmV?d00001 From 9b0a8b5b2fd2614aec3f03e83abb7b7a96ceb8fa Mon Sep 17 00:00:00 2001 From: John Manero Date: Wed, 18 Feb 2015 15:02:26 -0500 Subject: [PATCH 2/4] Remove commented version of aws-java-sdk --- grails-app/conf/BuildConfig.groovy | 1 - 1 file changed, 1 deletion(-) diff --git a/grails-app/conf/BuildConfig.groovy b/grails-app/conf/BuildConfig.groovy index 91692b32..97d28b48 100644 --- a/grails-app/conf/BuildConfig.groovy +++ b/grails-app/conf/BuildConfig.groovy @@ -93,7 +93,6 @@ grails.project.dependency.resolution = { compile( // Amazon Web Services programmatic interface. Transitive dependency of glisten, but also used directly. - // 'com.amazonaws:aws-java-sdk:1.7.5', 'com.amazonaws:aws-java-sdk:1.8.11', // Enables publication of a health check URL for deploying Asgard, and an on/off switch for activities. From 394c7d19807064e1e35dae8c3dc72d952af7c5dc Mon Sep 17 00:00:00 2001 From: eciramella-r7 Date: Tue, 2 Feb 2016 15:47:41 -0500 Subject: [PATCH 3/4] CORE-1580 First pass at making M4's work --- grails-app/conf/BuildConfig.groovy | 5 +- scripts/Codenarc.groovy | 440 +++++++++--------- .../AsgardAWSCredentialsProviderChain.groovy | 4 +- .../netflix/asgard/model/InstanceType.groovy | 3 + web-app/images/occasion/halloween/readme.txt | 98 ++-- 5 files changed, 277 insertions(+), 273 deletions(-) diff --git a/grails-app/conf/BuildConfig.groovy b/grails-app/conf/BuildConfig.groovy index 97d28b48..57b47170 100644 --- a/grails-app/conf/BuildConfig.groovy +++ b/grails-app/conf/BuildConfig.groovy @@ -93,12 +93,13 @@ grails.project.dependency.resolution = { compile( // Amazon Web Services programmatic interface. Transitive dependency of glisten, but also used directly. - 'com.amazonaws:aws-java-sdk:1.8.11', + //'com.amazonaws:aws-java-sdk:1.8.11', + 'com.amazonaws:aws-java-sdk:1.10.0', // Enables publication of a health check URL for deploying Asgard, and an on/off switch for activities. // Transitive dependencies include: // rxjava, archaius, ribbon, servo, netflix-commons, netflix-statistics, jersey, guava - 'com.netflix.eureka:eureka-client:1.1.127', + 'com.netflix.eureka:eureka-client:1.3.4', // Transitive dependencies of eureka and aws-java-sdk, but also used for REST calls, e.g., HttpClient 'org.apache.httpcomponents:httpcore:4.2', diff --git a/scripts/Codenarc.groovy b/scripts/Codenarc.groovy index ebdd9060..52d952f8 100644 --- a/scripts/Codenarc.groovy +++ b/scripts/Codenarc.groovy @@ -1,220 +1,220 @@ -/* - * Copyright 2012 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* This script came from the Grails CodeNarc plugin. We are using just the script so that we can control our dependency - * on the CodeNarc library. - */ -import grails.util.GrailsUtil -import org.apache.tools.ant.BuildException - -// Begin hack to replace CodeNarc 0.19's implementation of loadRuleScriptFile which blows up in recent Groovy. -// Remove this hack after https://github.com/CodeNarc/CodeNarc/pull/26 gets merged and released -// in future CodeNarc version to fix https://github.com/CodeNarc/CodeNarc/issues/25 -import org.codenarc.ruleset.RuleSetUtil -import org.codenarc.util.io.DefaultResourceFactory -import org.codenarc.util.io.ResourceFactory - -ResourceFactory RESOURCE_FACTORY = new DefaultResourceFactory() -RuleSetUtil.metaClass.'static'.loadRuleScriptFile = { String path -> - def inputStream = RESOURCE_FACTORY.getResource(path).inputStream - Class ruleClass - inputStream.withStream { InputStream input -> - GroovyClassLoader gcl = new GroovyClassLoader(getClass().classLoader) - ruleClass = gcl.parseClass(input.text) - } - RuleSetUtil.assertClassImplementsRuleInterface(ruleClass) - ruleClass.newInstance() -} -// End temporary hack for compatibility between CodeNarc 0.19 and Groovy 1.8.* - -includeTargets << grailsScript('_GrailsCompile') - -target('codenarc': 'Run CodeNarc') { - depends(compile) - - runCodenarc() -} - -private void runCodenarc() { - ant.taskdef(name: 'codenarc', classname: 'org.codenarc.ant.CodeNarcTask') - - String configClassName = getBindingValueOrDefault('configClassname', 'BuildConfig') - ConfigObject config = loadConfig(configClassName) - - List reports = getConfiguredReports(config) - - int maxPriority1Violations = getConfigInt(config, 'maxPriority1Violations', Integer.MAX_VALUE) - int maxPriority2Violations = getConfigInt(config, 'maxPriority2Violations', Integer.MAX_VALUE) - int maxPriority3Violations = getConfigInt(config, 'maxPriority3Violations', Integer.MAX_VALUE) - String ruleSetFiles = config.ruleSetFiles ?: - 'rulesets/basic.xml,rulesets/exceptions.xml,rulesets/imports.xml,rulesets/grails.xml,rulesets/unused.xml' - List includes = configureIncludes(config) - boolean systemExitOnBuildException = getConfigBoolean(config, 'systemExitOnBuildException') - - configureCodeNarcPropertiesFile(config) - - println "Running CodeNarc ..." - - try { - ant.codenarc(ruleSetFiles: ruleSetFiles, - maxPriority1Violations: maxPriority1Violations, - maxPriority2Violations: maxPriority2Violations, - maxPriority3Violations: maxPriority3Violations) { - reports.each { r -> - report(type: r.type) { - r.each { key, value -> - if (key != 'type') { - option(name:key, value:value) - } - } - } - } - fileset(dir: '.', includes: includes.join(',')) - } - } - catch (BuildException e) { - if (systemExitOnBuildException) { - println "FAILED -- ${e.message}" - System.exit(1) - } - else { - throw e - } - } - - def reportNames = reports.collect { report -> report.outputFile ?: report.type } - println "CodeNarc finished; report(s) generated: ${reportNames}" -} - -private ConfigObject loadConfig(String className) { - ClassLoader classLoader = Thread.currentThread().contextClassLoader - classLoader.addURL(new File(classesDirPath).toURL()) - - try { - return new ConfigSlurper(GrailsUtil.environment).parse(classLoader.loadClass(className)).codenarc - } - catch (ClassNotFoundException ignored) { - return new ConfigObject() - } -} - -private getBindingValueOrDefault(String varName, Object defaultValue) { - Map variables = binding.variables - variables.containsKey(varName) ? getProperty(varName) : defaultValue -} - -class ReportsDslDelegate { - List reports = [] - def methodMissing(String name, args) { - println "Adding report ${name}" - assert args.size() == 2, "Report [${name}] must specify a report type(String or Class) and a Closure" - assert args[0] instanceof String || args[0] instanceof Class, "Report [${name}] must specify a report type" - assert args[0], "The report definition for [${name}] must specify the report type that is not empty or null" - assert args[1] instanceof Closure, "Report name [${name}] must be followed by a Closure" - def reportClosure = args[1] - def report = new Expando() - report.type = args[0] instanceof String ? args[0] : args[0].name - reportClosure.delegate = report - reportClosure.resolveStrategy = Closure.DELEGATE_FIRST - reportClosure.call() - reports << report.properties - } -} - -private List getConfiguredReports(config) { - if (config.reports) { - assert config.reports instanceof Closure, 'The reports property value must be a Closure' - def closure = config.reports - def delegate = new ReportsDslDelegate() - closure.resolveStrategy = Closure.DELEGATE_FIRST - closure.delegate = delegate - closure.call() - return delegate.reports - } - [] -} - -private void configureCodeNarcPropertiesFile(ConfigObject config) { - final PROPERTIES_FILE_PROP = 'codenarc.properties.file' - if (config.propertiesFile) { - def propValue = "file:${config.propertiesFile}" - System.setProperty(PROPERTIES_FILE_PROP, propValue) - } -} - -private int getConfigInt(config, String name, int defaultIfMissing) { - def value = config[name] - value instanceof Integer ? value : defaultIfMissing -} - -private boolean getConfigBoolean(config, String name, boolean defaultValue = true) { - def value = config[name] - value instanceof Boolean ? value : defaultValue -} - -private List configureIncludes(config) { - List includes = [] - - if (getConfigBoolean(config, 'processSrcGroovy')) { - includes << 'src/groovy/**/*.groovy' - } - - if (getConfigBoolean(config, 'processControllers')) { - includes << 'grails-app/controllers/**/*.groovy' - } - - if (getConfigBoolean(config, 'processDomain')) { - includes << 'grails-app/domain/**/*.groovy' - } - - if (getConfigBoolean(config, 'processServices')) { - includes << 'grails-app/services/**/*.groovy' - } - - if (getConfigBoolean(config, 'processTaglib')) { - includes << 'grails-app/taglib/**/*.groovy' - } - - if (getConfigBoolean(config, 'processUtils')) { - includes << 'grails-app/utils/**/*.groovy' - } - - if (getConfigBoolean(config, 'processTestUnit')) { - includes << 'test/unit/**/*.groovy' - } - - if (getConfigBoolean(config, 'processTestIntegration')) { - includes << 'test/integration/**/*.groovy' - } - - if (getConfigBoolean(config, 'processViews', false)) { - includes << 'grails-app/views/**/*.gsp' - } - - for (includeDir in config.extraIncludeDirs) { - includes << "${includeDir}/**/*.groovy" - } - - includes -} - -try { - // Required for Grails 1.3 and later - setDefaultTarget('codenarc') -} -catch (MissingMethodException ignored) { - // Ignore. Older versions of Groovy/Grails do not implement this method -} - +/* + * Copyright 2012 Netflix, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* This script came from the Grails CodeNarc plugin. We are using just the script so that we can control our dependency + * on the CodeNarc library. + */ +import grails.util.GrailsUtil +import org.apache.tools.ant.BuildException + +// Begin hack to replace CodeNarc 0.19's implementation of loadRuleScriptFile which blows up in recent Groovy. +// Remove this hack after https://github.com/CodeNarc/CodeNarc/pull/26 gets merged and released +// in future CodeNarc version to fix https://github.com/CodeNarc/CodeNarc/issues/25 +import org.codenarc.ruleset.RuleSetUtil +import org.codenarc.util.io.DefaultResourceFactory +import org.codenarc.util.io.ResourceFactory + +ResourceFactory RESOURCE_FACTORY = new DefaultResourceFactory() +RuleSetUtil.metaClass.'static'.loadRuleScriptFile = { String path -> + def inputStream = RESOURCE_FACTORY.getResource(path).inputStream + Class ruleClass + inputStream.withStream { InputStream input -> + GroovyClassLoader gcl = new GroovyClassLoader(getClass().classLoader) + ruleClass = gcl.parseClass(input.text) + } + RuleSetUtil.assertClassImplementsRuleInterface(ruleClass) + ruleClass.newInstance() +} +// End temporary hack for compatibility between CodeNarc 0.19 and Groovy 1.8.* + +includeTargets << grailsScript('_GrailsCompile') + +target('codenarc': 'Run CodeNarc') { + depends(compile) + + runCodenarc() +} + +private void runCodenarc() { + ant.taskdef(name: 'codenarc', classname: 'org.codenarc.ant.CodeNarcTask') + + String configClassName = getBindingValueOrDefault('configClassname', 'BuildConfig') + ConfigObject config = loadConfig(configClassName) + + List reports = getConfiguredReports(config) + + int maxPriority1Violations = getConfigInt(config, 'maxPriority1Violations', Integer.MAX_VALUE) + int maxPriority2Violations = getConfigInt(config, 'maxPriority2Violations', Integer.MAX_VALUE) + int maxPriority3Violations = getConfigInt(config, 'maxPriority3Violations', Integer.MAX_VALUE) + String ruleSetFiles = config.ruleSetFiles ?: + 'rulesets/basic.xml,rulesets/exceptions.xml,rulesets/imports.xml,rulesets/grails.xml,rulesets/unused.xml' + List includes = configureIncludes(config) + boolean systemExitOnBuildException = getConfigBoolean(config, 'systemExitOnBuildException') + + configureCodeNarcPropertiesFile(config) + + println "Running CodeNarc ..." + + try { + ant.codenarc(ruleSetFiles: ruleSetFiles, + maxPriority1Violations: maxPriority1Violations, + maxPriority2Violations: maxPriority2Violations, + maxPriority3Violations: maxPriority3Violations) { + reports.each { r -> + report(type: r.type) { + r.each { key, value -> + if (key != 'type') { + option(name:key, value:value) + } + } + } + } + fileset(dir: '.', includes: includes.join(',')) + } + } + catch (BuildException e) { + if (systemExitOnBuildException) { + println "FAILED -- ${e.message}" + System.exit(1) + } + else { + throw e + } + } + + def reportNames = reports.collect { report -> report.outputFile ?: report.type } + println "CodeNarc finished; report(s) generated: ${reportNames}" +} + +private ConfigObject loadConfig(String className) { + ClassLoader classLoader = Thread.currentThread().contextClassLoader + classLoader.addURL(new File(classesDirPath).toURL()) + + try { + return new ConfigSlurper(GrailsUtil.environment).parse(classLoader.loadClass(className)).codenarc + } + catch (ClassNotFoundException ignored) { + return new ConfigObject() + } +} + +private getBindingValueOrDefault(String varName, Object defaultValue) { + Map variables = binding.variables + variables.containsKey(varName) ? getProperty(varName) : defaultValue +} + +class ReportsDslDelegate { + List reports = [] + def methodMissing(String name, args) { + println "Adding report ${name}" + assert args.size() == 2, "Report [${name}] must specify a report type(String or Class) and a Closure" + assert args[0] instanceof String || args[0] instanceof Class, "Report [${name}] must specify a report type" + assert args[0], "The report definition for [${name}] must specify the report type that is not empty or null" + assert args[1] instanceof Closure, "Report name [${name}] must be followed by a Closure" + def reportClosure = args[1] + def report = new Expando() + report.type = args[0] instanceof String ? args[0] : args[0].name + reportClosure.delegate = report + reportClosure.resolveStrategy = Closure.DELEGATE_FIRST + reportClosure.call() + reports << report.properties + } +} + +private List getConfiguredReports(config) { + if (config.reports) { + assert config.reports instanceof Closure, 'The reports property value must be a Closure' + def closure = config.reports + def delegate = new ReportsDslDelegate() + closure.resolveStrategy = Closure.DELEGATE_FIRST + closure.delegate = delegate + closure.call() + return delegate.reports + } + [] +} + +private void configureCodeNarcPropertiesFile(ConfigObject config) { + final PROPERTIES_FILE_PROP = 'codenarc.properties.file' + if (config.propertiesFile) { + def propValue = "file:${config.propertiesFile}" + System.setProperty(PROPERTIES_FILE_PROP, propValue) + } +} + +private int getConfigInt(config, String name, int defaultIfMissing) { + def value = config[name] + value instanceof Integer ? value : defaultIfMissing +} + +private boolean getConfigBoolean(config, String name, boolean defaultValue = true) { + def value = config[name] + value instanceof Boolean ? value : defaultValue +} + +private List configureIncludes(config) { + List includes = [] + + if (getConfigBoolean(config, 'processSrcGroovy')) { + includes << 'src/groovy/**/*.groovy' + } + + if (getConfigBoolean(config, 'processControllers')) { + includes << 'grails-app/controllers/**/*.groovy' + } + + if (getConfigBoolean(config, 'processDomain')) { + includes << 'grails-app/domain/**/*.groovy' + } + + if (getConfigBoolean(config, 'processServices')) { + includes << 'grails-app/services/**/*.groovy' + } + + if (getConfigBoolean(config, 'processTaglib')) { + includes << 'grails-app/taglib/**/*.groovy' + } + + if (getConfigBoolean(config, 'processUtils')) { + includes << 'grails-app/utils/**/*.groovy' + } + + if (getConfigBoolean(config, 'processTestUnit')) { + includes << 'test/unit/**/*.groovy' + } + + if (getConfigBoolean(config, 'processTestIntegration')) { + includes << 'test/integration/**/*.groovy' + } + + if (getConfigBoolean(config, 'processViews', false)) { + includes << 'grails-app/views/**/*.gsp' + } + + for (includeDir in config.extraIncludeDirs) { + includes << "${includeDir}/**/*.groovy" + } + + includes +} + +try { + // Required for Grails 1.3 and later + setDefaultTarget('codenarc') +} +catch (MissingMethodException ignored) { + // Ignore. Older versions of Groovy/Grails do not implement this method +} + diff --git a/src/groovy/com/netflix/asgard/cred/AsgardAWSCredentialsProviderChain.groovy b/src/groovy/com/netflix/asgard/cred/AsgardAWSCredentialsProviderChain.groovy index 5f50d82c..1952891b 100644 --- a/src/groovy/com/netflix/asgard/cred/AsgardAWSCredentialsProviderChain.groovy +++ b/src/groovy/com/netflix/asgard/cred/AsgardAWSCredentialsProviderChain.groovy @@ -62,8 +62,8 @@ class AsgardAWSCredentialsProviderChain extends AWSCredentialsProviderChain { new SshCredentialsProvider(configService), new KeyManagementServiceAssumeRoleCredentialsProvider(configService, restClientService), new KeyManagementServiceCredentialsProvider(configService, restClientService), - new STSAssumeRoleSessionCredentialsProvider(configService.assumeRoleArn, - configService.assumeRoleSessionName), + //new STSAssumeRoleSessionCredentialsProvider.Builder(configService.assumeRoleArn, + // configService.assumeRoleSessionName), new InstanceProfileCredentialsProvider() ] as AWSCredentialsProvider[] ) diff --git a/src/groovy/com/netflix/asgard/model/InstanceType.groovy b/src/groovy/com/netflix/asgard/model/InstanceType.groovy index 79dc78bb..85ea2a39 100644 --- a/src/groovy/com/netflix/asgard/model/InstanceType.groovy +++ b/src/groovy/com/netflix/asgard/model/InstanceType.groovy @@ -27,6 +27,9 @@ enum InstanceType { M3Xlarge("m3.xlarge"), M32xlarge("m3.2xlarge"), M2Xlarge("m2.xlarge"), + M4Large("m4.large"), + M4Xlarge("m4.xlarge"), + M42xlarge("m4.2xlarge"), M22xlarge("m2.2xlarge"), M24xlarge("m2.4xlarge"), Cr18xlarge("cr1.8xlarge"), diff --git a/web-app/images/occasion/halloween/readme.txt b/web-app/images/occasion/halloween/readme.txt index 66a2215f..9f3679ce 100644 --- a/web-app/images/occasion/halloween/readme.txt +++ b/web-app/images/occasion/halloween/readme.txt @@ -1,49 +1,49 @@ -Desktop Halloween Icons - -License Agreement - -By purchasing icons from Aha-Soft, You (the purchaser) agree -to the terms of this agreement, as detailed below. - -You may use the icons from Aha-Soft in commercial and personal -design projects, software or Internet products. Icons can be -displayed in documentation, help files, and advertising materials. -You are free to sell and distribute products and projects using -purchased icons without further royalty fees. - -All icon files are provided 'as is'. Aha-Soft cannot be held -liable for any negative issues that may occur as a result of -using the icons. - -You agree that all ownership and copyright of the icons remains -the property of Aha-Soft. You may not resell, distribute, lease, -license or sub-license the icons or modified icons (or a subset -of the icons), to any third party unless they are incorporated into -your software or design products. - -If you have any questions regarding copyright or licensing, including -whether another license is required for icon use within products, -please contact us here: http://www.aha-soft.com/support.htm - - -Product page: -http://www.desktop-icon.com/stock-icons/desktop-halloween-icons.htm - -Download demo: -http://www.desktop-icon.com/downloads/desktop-halloween-icons.zip -http://www.icon-files.com/downloads/desktop-halloween-icons.zip - -Icon Design Service - -We can design custom icons for you. Please find the basic information -about ordering icons, pricing and the portfolio here: -www.aha-soft.com/icon-design.htm - - -Notice -Web-site standard-icons.com belongs to Aha-Soft. - - -Support page: http://www.aha-soft.com/support.htm - -Copyright � 2000-2010 Aha-Soft. All rights reserved. +Desktop Halloween Icons + +License Agreement + +By purchasing icons from Aha-Soft, You (the purchaser) agree +to the terms of this agreement, as detailed below. + +You may use the icons from Aha-Soft in commercial and personal +design projects, software or Internet products. Icons can be +displayed in documentation, help files, and advertising materials. +You are free to sell and distribute products and projects using +purchased icons without further royalty fees. + +All icon files are provided 'as is'. Aha-Soft cannot be held +liable for any negative issues that may occur as a result of +using the icons. + +You agree that all ownership and copyright of the icons remains +the property of Aha-Soft. You may not resell, distribute, lease, +license or sub-license the icons or modified icons (or a subset +of the icons), to any third party unless they are incorporated into +your software or design products. + +If you have any questions regarding copyright or licensing, including +whether another license is required for icon use within products, +please contact us here: http://www.aha-soft.com/support.htm + + +Product page: +http://www.desktop-icon.com/stock-icons/desktop-halloween-icons.htm + +Download demo: +http://www.desktop-icon.com/downloads/desktop-halloween-icons.zip +http://www.icon-files.com/downloads/desktop-halloween-icons.zip + +Icon Design Service + +We can design custom icons for you. Please find the basic information +about ordering icons, pricing and the portfolio here: +www.aha-soft.com/icon-design.htm + + +Notice +Web-site standard-icons.com belongs to Aha-Soft. + + +Support page: http://www.aha-soft.com/support.htm + +Copyright � 2000-2010 Aha-Soft. All rights reserved. From f57bd1648df2dfa0bdba27b9ea5ebbe4794b9bb7 Mon Sep 17 00:00:00 2001 From: Dave Greene Date: Thu, 4 Feb 2016 09:17:58 -0500 Subject: [PATCH 4/4] CORE-1580: Added M4, C4, and T2 instance type families. --- .../netflix/asgard/InstanceTypeService.groovy | 46 +++++++++++++++++++ .../netflix/asgard/model/InstanceType.groovy | 12 +++++ 2 files changed, 58 insertions(+) diff --git a/grails-app/services/com/netflix/asgard/InstanceTypeService.groovy b/grails-app/services/com/netflix/asgard/InstanceTypeService.groovy index 3c276c2d..69a58cb9 100644 --- a/grails-app/services/com/netflix/asgard/InstanceTypeService.groovy +++ b/grails-app/services/com/netflix/asgard/InstanceTypeService.groovy @@ -145,12 +145,14 @@ class InstanceTypeService implements CacheInitializer { String xxl = 'Double Extra Large' String xxxxl = 'Quadruple Extra Large' String xxxxxxxxl = 'Eight Extra Large' + String decaxl = 'Deca Extra Large' String gen = 'General purpose' String second = 'Second Generation Standard' String cc = 'Cluster Compute' String memOpt = 'Memory optimized' String hiMem = 'High-Memory' String compOpt = 'Compute optimized' + String bInst = 'Burstable Performance Instances' String six4 = '64-bit' String three2OrSix4 = '32-bit or 64-bit' String hcpu = 'High-CPU' @@ -159,6 +161,22 @@ class InstanceTypeService implements CacheInitializer { arch: three2OrSix4, vCpu: '1', ecu: 'Variable', mem: '0.615', storage: 'EBS only', ebsOptim: '-', netPerf: 'Very Low'), + new HardwareProfile(instanceType: 't2.nano', family: bInst, group: gen, size: 'Nano', + arch: six4, vCpu: '1', ecu: 'Variable', mem: '0.5', storage: 'EBS only', ebsOptim: '-', + netPerf: 'Low'), + new HardwareProfile(instanceType: 't2.micro', family: bInst, group: gen, size: 'Micro', + arch: three2OrSix4, vCpu: '1', ecu: 'Variable', mem: '1', storage: 'EBS only', ebsOptim: '-', + netPerf: 'Low to Moderate'), + new HardwareProfile(instanceType: 't2.small', family: bInst, group: gen, size: 'Small', + arch: three2OrSix4, vCpu: '1', ecu: 'Variable', mem: '2', storage: 'EBS only', ebsOptim: '-', + netPerf: 'Low to Moderate'), + new HardwareProfile(instanceType: 't2.medium', family: bInst, group: gen, size: 'Medium', + arch: six4, vCpu: '2', ecu: 'Variable', mem: '4', storage: 'EBS only', ebsOptim: '-', + netPerf: 'Low to Moderate'), + new HardwareProfile(instanceType: 't2.large', family: bInst, group: gen, size: 'Large', + arch: six4, vCpu: '2', ecu: 'Variable', mem: '8', storage: 'EBS only', ebsOptim: '-', + netPerf: 'Low to Moderate'), + new HardwareProfile(instanceType: 'm1.small', family: gen, group: 'Standard', size: 'Small (Default)', arch: three2OrSix4, vCpu: '1', ecu: '1', mem: '1.7', storage: '1 x 160', ebsOptim: '-', netPerf: 'Low'), @@ -180,6 +198,17 @@ class InstanceTypeService implements CacheInitializer { new HardwareProfile(instanceType: 'm3.2xlarge', family: gen, group: second, size: xxl, arch: six4, vCpu: '8', ecu: '26', mem: '30', storage: 'EBS only', ebsOptim: 'Yes', netPerf: 'High'), + new HardwareProfile(instanceType: 'm4.large', family: gen, group: gen, size: 'Large', arch: six4, + vCpu: '2', ecu: '6.5', mem: '8', storage: 'EBS only', ebsOptim: 'Yes', netPerf: 'Moderate'), + new HardwareProfile(instanceType: 'm4.xlarge', family: gen, group: gen, size: xl, arch: six4, + vCpu: '4', ecu: '13', mem: '16', storage: 'EBS only', ebsOptim: 'Yes', netPerf: 'High'), + new HardwareProfile(instanceType: 'm4.2xlarge', family: gen, group: gen, size: xxl, arch: six4, + vCpu: '8', ecu: '26', mem: '32', storage: 'EBS only', ebsOptim: 'Yes', netPerf: 'High'), + new HardwareProfile(instanceType: 'm4.4xlarge', family: gen, group: gen, size: xxxxl, arch: six4, + vCpu: '16', ecu: '53.5', mem: '64', storage: 'EBS only', ebsOptim: 'Yes', netPerf: 'High'), + new HardwareProfile(instanceType: 'm4.10xlarge', family: gen, group: gen, size: decaxl, arch: six4, + vCpu: '40', ecu: '124.5', mem: '160', storage: 'EBS only', ebsOptim: 'Yes', netPerf: '10 Gigabit'), + new HardwareProfile(instanceType: 'c1.medium', family: compOpt, group: hcpu, size: 'Medium', arch: three2OrSix4, vCpu: '2', ecu: '5', mem: '1.7', storage: '1 x 350', ebsOptim: '-', netPerf: 'Moderate'), @@ -193,6 +222,23 @@ class InstanceTypeService implements CacheInitializer { arch: six4, vCpu: '32', ecu: '88', mem: '60.5', storage: '4 x 840', ebsOptim: '-', netPerf: '10 Gigabit'), + new HardwareProfile(instanceType: 'c4.large', family: compOpt, group: hcpu, size: 'Large', + arch: six4, vCpu: '2', ecu: '8', mem: '3.75', storage: 'EBS Only', ebsOptim: 'Yes', + netPerf: 'Moderate'), + new HardwareProfile(instanceType: 'c4.xlarge', family: compOpt, group: hcpu, size: xl, + arch: six4, vCpu: '4', ecu: '16', mem: '7.5', storage: 'EBS Only', ebsOptim: 'Yes', + netPerf: 'High'), + new HardwareProfile(instanceType: 'c4.2xlarge', family: compOpt, group: hcpu, size: xxl, + arch: six4, vCpu: '8', ecu: '31', mem: '15', storage: 'EBS Only', ebsOptim: 'Yes', + netPerf: 'High'), + new HardwareProfile(instanceType: 'c4.4xlarge', family: compOpt, group: hcpu, size: xxxxl, + arch: six4, vCpu: '16', ecu: '62', mem: '30', storage: 'EBS Only', ebsOptim: 'Yes', + netPerf: 'High'), + new HardwareProfile(instanceType: 'c4.8xlarge', family: compOpt, group: hcpu, size: xxxxxxxxl, + arch: six4, vCpu: '36', ecu: '132', mem: '60', storage: 'EBS Only', ebsOptim: 'Yes', + netPerf: '10 Gigabit'), + + // M2 INSTANCE TYPES new HardwareProfile(instanceType: 'm2.xlarge', family: memOpt, group: hiMem, size: xl, arch: six4, vCpu: '2', ecu: '6.5', mem: '17.1', storage: '1 x 420', ebsOptim: '-', netPerf: 'Moderate'), new HardwareProfile(instanceType: 'm2.2xlarge', family: memOpt, group: hiMem, size: xxl, arch: six4, diff --git a/src/groovy/com/netflix/asgard/model/InstanceType.groovy b/src/groovy/com/netflix/asgard/model/InstanceType.groovy index 85ea2a39..99188187 100644 --- a/src/groovy/com/netflix/asgard/model/InstanceType.groovy +++ b/src/groovy/com/netflix/asgard/model/InstanceType.groovy @@ -18,6 +18,11 @@ package com.netflix.asgard.model enum InstanceType { T1Micro("t1.micro"), + T2Nano("t2.nano"), + T2Micro("t2.micro"), + T2Small("t2.small"), + T2Medium("t2.medium"), + T2Large("t2.large"), M1Small("m1.small"), M1Medium("m1.medium"), M1Large("m1.large"), @@ -30,6 +35,8 @@ enum InstanceType { M4Large("m4.large"), M4Xlarge("m4.xlarge"), M42xlarge("m4.2xlarge"), + M44xlarge("m4.4xlarge"), + M410xlarge("m4.10xlarge"), M22xlarge("m2.2xlarge"), M24xlarge("m2.4xlarge"), Cr18xlarge("cr1.8xlarge"), @@ -46,6 +53,11 @@ enum InstanceType { C32xlarge("c3.2xlarge"), C34xlarge("c3.4xlarge"), C38xlarge("c3.8xlarge"), + C4Large("c4.large"), + C4Xlarge("c4.xlarge"), + C42xlarge("c4.2xlarge"), + C44xlarge("c4.4xlarge"), + C48xlarge("c4.8xlarge"), Cc14xlarge("cc1.4xlarge"), Cc28xlarge("cc2.8xlarge"), G22xlarge("g2.2xlarge"),