From 1312d34147af604355117ee85ed913e7a9460092 Mon Sep 17 00:00:00 2001 From: Marc Bruggmann Date: Fri, 29 May 2020 10:23:01 +0200 Subject: [PATCH 1/2] ADR: Core entities in the catalog This is capturing the catalog part of the Backstage System Model RFC (#390). I'm planning to follow this up with a second ADR on how to express System, Application and Domain in catalog labels. Not sure if it helps to have the example yamls inline here. It helps me to visualize how it'd work, but it could also get outdated quickly. --- .../adr005-catalog-core-entities.md | 75 ++++++++++++++++++ .../catalog-core-entities.png | Bin 0 -> 14895 bytes 2 files changed, 75 insertions(+) create mode 100644 docs/architecture-decisions/adr005-catalog-core-entities.md create mode 100644 docs/architecture-decisions/catalog-core-entities.png diff --git a/docs/architecture-decisions/adr005-catalog-core-entities.md b/docs/architecture-decisions/adr005-catalog-core-entities.md new file mode 100644 index 0000000000..f14f8c8179 --- /dev/null +++ b/docs/architecture-decisions/adr005-catalog-core-entities.md @@ -0,0 +1,75 @@ +# ADR005: Catalog Core Entities + +| Created | Status | +| ---------- | ------ | +| 2020-05-29 | Open | + +## Context + +We want to standardize on a few core entities that we are tracking in the Backstage catalog. This allows us to build specific plugins around them. + +## Decision + +We maintain a catalog of the following core entities: + +* **Components** are individual pieces of software +* **APIs** are the boundaries between different components +* **Resources** are physical or virtual infrastructure needed to operate a component + +![Catalog Core Entities][catalog-core-entities] + +### Component +A component is a piece of software, for example a mobile application feature, web site, backend service or data pipeline (list not exhaustive). A component can be tracked in source control, or use some existing open source or commercial software. It can implement APIs for other components to consume. In turn it might depend on APIs implemented by other components, or resources that are attached to it at runtime. + +Component entities are typically defined in YAML descriptor files next to the code of the component, and could look like this (actual schema will evolve): +```yaml +apiVersion: backstage.io/v1beta1 +kind: Component +metadata: + name: my-component-name +spec: + type: service +``` + +### API +APIs form an abstraction that allows large software ecosystems to scale. Thus, APIs are a first class citizen in the Backstage model and the primary way to discover existing functionality in the ecosystem. + +APIs are implemented by components and make their boundaries explicit. They might be defined using an RPC IDL (eg in Protobuf, GraphQL or similar), a data schema (eg in Avro, TFRecord or similar), or as code interfaces (eg framework APIs in Swift, Kotlin, Java, C++, Typescript etc). In any case, APIs exposed by components need to be in a known machine-readable format so we can build further tooling and analysis on top. + +APIs are typically indexed from existing definitions in source control and thus wouldn't need their own descriptor files, but would be stored in the catalog somewhat like this (actual schema will evolve): +```yaml +apiVersion: backstage.io/v1beta1 +kind: API +metadata: + name: my-component-api +spec: + type: grpc + definition: > + service HelloService { + rpc SayHello (HelloRequest) returns (HelloResponse); + } + message HelloRequest { + string greeting = 1; + } + message HelloResponse { + string reply = 1; + } +``` + +### Resource +Resources are the infrastructure your software needs to operate at runtime like Bigtable databases, Pub/Sub topics, S3 buckets or CDNs. Modelling them together with components and APIs will allow us to visualize and create tooling around them in Backstage. + +Resources are typically indexed from declarative definitions (eg Terraform, GCP Config Connector, AWS Cloud Formation) and/or inventories from cloud providers (eg GCP Asset Inventory) and thus wouldn't need their own descriptor files, but would be stored in the catalog somewhat like this (actual schema will evolve): +```yaml +apiVersion: backstage.io/v1beta1 +kind: Resource +metadata: + name: my-component-db +spec: + type: gcp-spanner + url: spanner.googleapis.com/projects/prj/instances/my-component-db/databases/my-db +``` + +## Consequences + +We will start with fleshing out support for the Component entity in the catalog, and expand to APIs and Resources later down the line. diff --git a/docs/architecture-decisions/catalog-core-entities.png b/docs/architecture-decisions/catalog-core-entities.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c7cb4575e3426d298753c9bb626e45ca035e60 GIT binary patch literal 14895 zcmeHtXH=70+vWot@EjEN*pQ}Jks^pRslj#-5Kw8-RTPvegcd>)6uVLc0jWWyNR5Cr z69^uUbP}XR3?yg*5duUKl8`>Z_j|wj=FF^Fv*ypNS?lD-6IgrY*?ZsnF4w-V>)|

`=?tkU)}t0i*7yT^YN~f(>pUV52c>Sb~{jh{?W~AIu}~b-zN5)-lMqvvr^ov zZB4J6wy5hoay%XSXg&Yrxlj4y^2#fAC9M03w;y@P=T=SMBM4w$9K9Q9liZ~Nj2Va| zNV;UmBDHfT!HfYfC?l3L5!@szUDrRKe=P97v%s;Vq$q}RfOmJ=W`Y-n`u#L~D^rbG zu$ifLGfJrkhlS6%+-S&%`_Am7O#14<8uk~Oiv z?ZNI@d)!hu^{djaKVR|laozUL|M4(SX(;*E7c$4!7O^(n+DzANrLzbX)~5S8Q?l?N z)r@MkhiYakx7S$HZU{zS?XxHj=%&z*jqO5*Yq+F$cVN;izXb9G`{>7v{3T7XNkJNB zZ)uanW)amQB0SyNFg((PR9);!6b~ebjOeY`G+I!UiDmdEClo#u8G@JmSXoV>Cq!5k zb3uo(zwwkr|2bdxaRmZdRc;PVSpN24Y-bVzsu6Ip+nT;AT;(k-uWF4i&s%huD~zW< z3AeV`g++%877l4*n$xl<%iut@DO>`1Y-cIgE?R=JQ9B;dMpw_+*K6GYaEgR7P{0DJX?g z(X0npNsqB|ySl&1={u|ZL#Bm08J;6-gC^kIGfL=x;A> zIC=(tx$rkc?1mx6^+uVFBMQB=E~JVOIoSZ*jNb5r&W5B{ct-lgBZ4qwI>kIamF5>B zQ^IK(*XS|DHYbLDdS77o>BTMt>`TYrjQaRQ=V0~B>1F5CZfC!5&5@H7ww6Aa=;)jl zPHM#mTWkNzal0S?uLDOKUpP|5tC7z3erLkQdE|% z3#cc_Mfd$ac)l+ZD=t7l%s~4ig_EM-_$A4x!J@EdT?C93FZoUu!g!Z-a;WHDZfVLB zVVp=A$YfM)VlN{l-*NFU?n4&;+|QKesTaKilsZ()K#&Vkgii9wVnJb1AEQIEuERxU zdRjGOgK)QBcWB!6GzWOU-V2?bHk{E&WPFZg(YKg8AofH6h+(3As{Hzo=}5#CS}%h4 z7bG3Ftc%661d^5bxL|{8P!&B|^zHnJ0s?gaf>oc}Ew08dcFaylex%2@6cI{S^I*@p zX2d?q#2?H6MA!{W1f2n!zwM~PB=tUpk#m}#;&bqMv{_nWIP>NVrR`Al&kbz{hVACD zF7RFkS(H+N7l^hZgcDPkr-erXF63EdVc6B1$Sno5oamDX=jaiu51Ob-p%=Cv|414)mprD4RG_O(itV8 zL|`Ent#*7pLv6{wwo=UP5Zvw_HeXEn5#s=gnbp#Nt|L&E%v&qRyrxw)spw%TMT}z% z=Iwb~LUJN0PI2?t@6Ipwx<(5qkx(Kr&T^PdYAWJE813v?GmxD{Ck(VD&%`~QV9G>? zVT-eF*>cLFZ=9aFsBx9r^2!xB<6oI&0ESndiF&L5)B&q!9)nBeiof8CJ$=u1d{5U> zX7|_3FWVeL3KGT)Fv~04C9!BLH*3=)o(a%rJY94%j3LT)hSad0VY02V)i28TQcJ1mFCK$B-`fmP_TsZLFUKEA z0kqU6oqJu~r<`6cjqn9mlA(uXpZCQ&8Mp$iH44<6SYczV5EUylGXjn|@M;xPiPU?2 z_9oAl+71LyLGQoA>A9yl*nw@ba&BLfv>^vk8)Gfn&>ve3GZ-2aZ?tAGT@aV}^zHc3 z*MFW+S_*AqBq9fFz7xMUst!M71ph|2Y*YZ4#7~ESt4Ai4k2~3X|JYu${+xMLw4L9} zJR9%rzaA~YGqQ-8k@M`{ylg06K&YwEiSa)xqj~xc-*5XF-HP!iDLQ(kN6tfPIoL-? zcj~#dJ$af}<@;=(Iu+aD8E)7KQLx?Hi-{lF4s5KEvEMU27b^tW8QUGejsXdCTashK zz^O@2=_p^L0OY$6*RRzl{Rm|qY4ff#p&5R1-}!AWA8HppaNdV~=bx$kDl&H@&Iw$J zlWs@+zOHwNpjX_5sUQQ2MXV?j=v)b>mI#xKXb+dMmk(GED13KeFYXhSy;^M66qp$VR zRo!3}Lb>Q?sCXIL}R>A#k@ld`soh33^{0`NL5%38~n4-V4L-RZUtz2yHUK&B+XJDXNYDIn}e z;&S(eNkjZaGph5j6uA0H9&ljo^{U{h!ytU=sn--*^8Ka?C$(JRGj5A&wSz^G6GlIoDA5fDade?yRfaNgJ$k797U|v z$4=|Ekpw+!|I{WJtSY%TaF3u?}XeHjom{7z78@a76aQSJc6$fa(ZJ}`d5^`+e(&|Ac7AB2 z@cd(8t?A_D{V8I&cJRz+xbE<~UoMX=-MMgjyj>A!w6t7}Do{81|1G&VVzJisn`5Syu1pa+pQF^dhbu+bvz9*;r z^Li=FaQc;}^zVzsf81fDSBX0czx*6o18`C_{NL{|8RX zWiv{a9-;|YCmT=B0YMA{C0dYgIXKYNN$9(BNpq_SDz=ehI>cTiZRi%(RgxiN7tzFeZ9njx1yNsht(5W2Jw zRF1)b5G>>23nxLsSr(JaB_*;7daak2c3ZWxM4%tA$T%Qt0YQ~(SrXf%o>G0asfhQm zh{0dl>O*cZ(GaIku}9DhF>;XEV;qB)`fb4=-Cjkx;T-bXt;xG|;;OIVNo;!cqV|zzku27}Em|a`j^eHt7zZ z_m?PtsrsHFxF=b)gS){gZwik+5&I~R80f|J`_aPEfTtbjnZ5=`O36PF28LGdl0%!l z(+BB(|Bm5tcUWCA_o|GM4YyBgSt;mP5$=u{XoJ8Rf&=7^#qda?Mh}4%{RA=nih(dP zt8mGsl_JL1{V*#Qlcu->(BR$h?=Z$hDtzw^tZ$}`e>;8+_ALe1T>(GZ%X>oHmKCZ7 zfj55=)Cy*PIDPz<1QJMtLry-~(V`&pYWw2Evk$w3<;NXP)ZG$X(6UgvsER85eL<U4$I@4CAElYWpUiY#ei=XBJT~aG@uD<*(fc51Hh^r(~u?a3t-0 z8O|%MT0I~a{iire8}OZLeJG-@nQee64x z%_Et{%3e@GH9k`W)Mtb_FE6FF*c=9(enZVs2btIL>kEv`Vs}&ot%O;mG>)p&Zj6Y% z1IEm*_Hm-0%)+4l_Ir*pvd-LZV_w7i&9%5-AxfgqSaOZPDo}-9}sr&K})1e%|oTN4-;#GcuJrf&|}-+qJ@9f8-okU$WQanbjn2RMc~0zM%kyDpAC#8 zT(cZISN4He!S(!xGu<+mR4#MozMg%pMJiZEI^PNBS6PHI83$QxVQ31gjbD=@!tI;| zQ`<)l(ZDm7uPbA2JYcqkO#8d8R^M{C-&!@t+sN$TO|oILv@l(z&;G$}!^xgAKGIZD zNM<71m9@b&TASQI8Gy71qnhR#4Kd}Jy3vydkYN^TMlN=P)0Qc{#aqFc@ok^Oj8OKZ z8sYPeJ{l7992VHGBP-lP<`t(UI?%?`??XQKHL_7e&7i)*1dz}i5M&RpT!E>ru-`>b zsk||gr#JQn}|yT6so+NRCT3#djkbYE~)67g{% zaR+cAxz<)q782PfPBTL|ZTvz=M0>D}s~`V}GQfU z!TR*GmpWcyf)Q9DG~8$v2Opd9XL+G9o&hC#8gzf-r8Yy!K~X+!0U?Iz2PM`DyZ+pe z>^Z)?VzK1aUD>~g9lMQ%9Lf>w0g=UBZ^0l)V+?Z-*#>l1x@1C7VgKh_A@wvXa$CC#09qPW! zZmBCX0hnz@uj}$Qw~Nk5S{0kJT@x>ZT??`by(EA1dht5uPhFT9vgy|iKNCIY3%tG( zE5T;iP>&z>IE;O7r~?exHicw$ejIueCX0>lmYLtzm>TToeFoy^ZR{0`7zGFqhJ@}oC z^rnE1zYxsY1{~|-g%`^|3w)!mJO6ZJ$adVU`!lX|Zk{f$q`cG9uu)(8Oqv6&A+4po zj)lVAv2J0%J>8-#n$w z;)T+#=1mo6jTlL|jX1QAo3ucc#42PGXVEL}M=vgPU*_wyf6j&5rKRdH#|%AkN3Nbj zf&`s$HiE*JrxZRB{o~wIrfjxemgZe%fW`;}1rgn%zV@a}Uoen)-T!K~V}3YM*O9=$ z!_W(X$Zr9;_R{i7zW)W4)IsX5Lp1Uve+sAOu(xD8J&b@vn$AOT#}1p|o0(LDcm-RF z(E>$4^o1xE6ZJ~7oyi!7aQ8o}4T-ZC9u&U#68U>hTT~rgBFHP-up?2XM2lwp3rwL? z8u}ui6{D*resw$ADjnX+0(R!u8P$~zP1iIwd`Gp#?KzBp--hHeVfJFh2M>*}8%pT| zacMLQ($P1_b@h-4&H;RHU@ua%CAn}epR2`i9kGy}Qz^?***;54YC2JktN3ikYsNvr zIQ}Zz3hM^E7FG5C$``of9PBy*KKPjHF7_vRG%BbOeJgy7hGxCoCb0QVpDIMN0xuol z>Souwq>x-DOltVUY;tBif7+yb&gywxlBW@n6J((8x8)hdC}kCX;y||@mM(>JXO|g| z=`#tvQ8`wV!M5WA)ny%okJL$N&+PE6GFe;BK4R@;Hsjij`i^kHDXGPphM30(f!B^8 zfnY#Bxg(WYRi*;)%;p+<=Z(Uk#FIRwZ2(T~5_c|JC5bDK9KJYeQqi;*jtzogO@K^H z$ovdOq4R>=`LQL3XT)v5@SC#bGg|c)aTDYXnbqK8QLi{cN1^mp z#X(e&9Va44`vez)hePsxup3*J&aPc$Jupszz5-;IIXP7I_Lm@z7UPo|`xI>4_@L*! z&6M;qVS$~IAQ)FYUc6C&nQx5tb^HBDx39&Jc~G;LoTgkCeDZ2?@nXeikH?uF-NuYD zRQ;eAgL=O&H+!qJ^U$^zvY&^tSn4$~dEkt5SgyCB_{%3-_;`$jhIW0pAXB2)oUJwg zZe-ykbL2uXYQn*>=o`lKFkoq*p3}{Qar-sq$p;uFsO${xAiZj_R}h)M=(c_@C&^Qg z8%}$Im=SqLz7QK+6=Wl;FAf>ddc^-awRw+3QA17#?zC7^-j2$%)%F-y1Dd17<%= zdiFi*S%Wm8qU@P=ca6iJKy0zYzHy**Y+u7BIm8Yqg;VL#TQ}+TacTj)-3RJF71O1U@5Nr`fXJR=e?jhXN0P3FIH~K@lo1AL z??|eV|G-4-UG(tJ{d1|g7^r|d%N zXQXzjzL8q_Rx3N52KSz+_wGeVdnA4*p86JGvea|b-H=U+0MCegjd`&hVE|Aq2ScH| z7PWrpx1h9s7ODNc`ysgAcjf6EGOZ0Pmw9K>^Uk8{ROs*7@Bjgvp7r5@v2)Y0(F^r~ z1=(VHW8}Nk!3*n5@B!X2<#qVQkthQ;xl#fxy;wiUZX7F#eE0E%EI>F3cMJ|*%9!1W zIzDYBdb?XPr^z-7$ps6;y{F!#G0HHF0i@5Sc)fPAe|30dpN3$D*PqJwbsQ0}Y#h^P zOju<~j>y1~_$C7PId`G0?aQyc)X*kL4*bI;qAJOZYZRS>*^Qlx^gVl?ULx>c*R)qu zrZ*Valm76R{A zVU>kC0q{na=xca6T$2JW{9hK7@(arjWMe{Fe zE)2(e6|8?` zSk2lugy?q@^WvZd&I9|&*FqrW*}8GNmL8T4?05Qfpi%F_b<%8Hij?7Y+5!BFn~r+T zTja!AeS&vDH1O&}d$Pk9pMai{?+hX2{?$A(+f#Q14vo>kw;)0FX<$V_N^P%o(4?fP zl$~xBGl}8!goF(oqfXEmPK>ywVUS9u(JG{5@G6g*K$?rSI^vI9oIDyXxfeTWy$kUs z94pNZ;&#e1w3|gcalBcO7du(s-Mri5>`%7)x^3O{s|P0ZS}(Lb=_TiS*N}Lq)D4r;ja75H2yjf?=@8A@p1`)-LW_HFW=g`{-|3*&RlF# zs78Q)_lT5GK2_I`4b~uE?AE2!3x$6sz~LQH8oSj&h*+V1Is&aU>XJsjHr}Z`zWnVo zX|NXfF=*I7-5*XoAb(5BR4*jJ9&K`I?q=nKe7b4fU?wTP&%@3VdoA^4jai0`+qhS+ zpM1`eerA(-k7`bqF?v8TO!Ht3SRH{(#O0`7cyJln* z`kCIeJJ;UnYT1~uZWA@@JJ|EK@gHsbjw|rnHbq46F0|NH3NZc;ouhZ0_I-!1lLdMr ziKOsr*d9Nns*DWvw!ssZJsWNooDM*Z*LF$|34M9P!0zX`W*RTJ3or1K{XyNC5U;H| z`c5YOiHxL|Qw$N-bNpS-63Hs^4=}S$u~wtIu-CTzf=iSA3->(l+^*e5GRI!>4$HA8 zi?mZXlMna7UQ=_a+5W%uoTzG}xH3X#IG{CA>|;;ir)p0*CvhF!4ah~)M|HCBTA zObupmjyzuxOFag`NxZ0cP9p6!dYW9g#t!D$R&H^-$^K zy|Gnj?fRSCRlyX6yWJqwNL+2`^R?jB(9Ht9*taYng*g==Ev^#$yMfk)X!@+MuzQ4% z&-nJtvVqEtjkDCH;JGEJmz~2J<#kQc#`*U9=YiM6b>*5b*A9nabQ`J~&m2>4fHv4P26fQxVku)vZwQ)B*bOJ^F7-qzPUNlxhu24Q(0g3^LoHUZJKvCp>*)q9%#EoF*IV^ zhGVyRhs}dsU+BZ0_i6OH7C49P-{g+eYw;Zf-XUAdRMBMvO;}1dE25b8V6=A zlvA56>Rs=4Q5!M(ZFLd96W0UUwp7l8Y#*bOMr{Tt`~6zutcFb!q;mMo%&Ct4FmzD) zJXS^#P+MxspIfQauQ+f2(&glc+S9W}Q^rN6cT-|6MQeP{)(1+DM7iPNH>AmdlSa*t zxt>)WeekfxNWN?VE=mHmC>b+!vNJY6jB+IPc{RR+n`#iPTJ#O(<&$}g-rTtiTKmW? zT+F0ZPM#|S!@LyaRrUe8lYlwcfF&^X?w;(4Y)L!LI=NUQ?0u{UQ27E{*M{57KaJ(4 zd*@*IC&&44`DADp*~JM3vL4)fXt%n6Srry*%<>U~!W#YU^efNq0T-xbm}KBJEmC*} z){^^bNaXQE&WoVfg8};)VKTs-NS!nA6E z+YG1x57k@{3=^!)Be9w^VdZ_iar8NEw83~=<>Yuxa(g*stOS(Wy=INy?Uzr;0BON8 zCCFYE+EGYoB`~!9uF7f!I3E`YN8U<`_BeeQ(eMEeH)Om^(r+Ca0w3 zr`~+R^igUSjPl<7G99K1BuODYW)hAYxOKnc<)3tEs`~L<BDEzR-bJ^h*Gjm zO365oaD9P`+qsJRBG3lZzslO~zNE$7f8T91?+5iId{zp|ZKDsv{0kZd<_{a^?(_^F z0OAWpm1Y%v3@I{VznINaV85gGQAausx)viR0PA(L?N!*g&+^Gh>8t}=r1@XA^X(Qo z=7C$?qKj6uYMBt``s&#|%~T(MaM^lbZsp)7UBGv`^i@9P9PqrNr+h2M4S2r(`CMy| zZE^Q7WU*+Ow1->`9EpFft2|R*m{-sOxtOwoVU&Nwrd@~kd#&VpL^@4Kz8r%}`sQoz za_9AgZHBEV8Ge7@bdjS%L$t)Gy2XQvxLo)U#Z7>R8R2=e57b%?0jH+qr|&NF30=)} zk6SM3}a`Jrc`a!L0A(v;*Vp0A2GLOidV&igthe4f z{j#b&ncf!g`#t7OO!j4E;HX;lxVn_*-3FNI$v&@&D$g7PK)qHPbH=77(|El04(gY> z{maI?OcrbE1XWU89pZYPkT%08*zutcS|L+)&p>)nD>aS-r{pS76E7~ZGt@E)7bSH1 zDvG`eqOY=|4l1T4$&{314kAiFc!BWp$#9>Mn2X@l>lO{Mhr_1&-$m4V%BMJLOS7!D z?5N-xu{SGQ5Yqmv4F5KO)E~$?T$gzt#iskkW|-r6hr6L^BZV?3N8J%rUoxm|e`wz5 zw1pgd!=-BSGpo!j<2-k_Zg{j)P>=`7L0nB-r$3Y9Emsol80~-!0`cmj{Yhp5H@TG! zrCIo@WUuv#9_L>wZtQKJaORXL%Cg~*aK+zD95u}wl>J%4vfEwdg%^?NpcgoELvt&b z4^K(zC$t?VP5H5Vi^e)$#vS;&f59pT2Ns__;UbsOc)fDTL*`Q2J5J3K6ixP)ZGS(X zB5J!*xSx!&v~+&@2WJt)1oP6w+|^=9(i~d3+h&(_pL}x6v(U1+n3vUA7Rtb|mov%1 zF0KQ5Mo~7eEmnnj>CsR%vA3({<-K}N z)*&o3g&^3qi2~)5lgWzuZ#ru*tm5#Nur1!H??@F z%^xu^$RJA@Q2npbDNftx9lfY!5!!)D$?GS-zn*Q~2Gq64zi2R6SMTg#LD0UvWMX>` zu!V0WBvP3v?~K1iM}`*VZCqD>c#Ty3rdsHbt9_$e1RYAgSttb{9AaTT-fc8glsM%0 zaPp&OZe*`ibjCmZE%ojtRIdE_8MA*YK7X>c%zsn5QrY8w0AVRFD^+{`OI!L=tals^ z#z-05pJc7{$4WiyZ(U3T*&>EAr^>4~kUq6@hV;iI}2yF#cLWrS+D3AZDE|rTO zoihB^x&y$~QlvkX+F@-}$}6j8yjmLnJt|SE3?)5pKpIiFwUp6>g=WKZ;+xRLhlZ_q zHwl^$CE2+mEf&WNajn5VyL~_B7IecWLCug42@AO8`~qd04~vv~v?nbf;%3MKLut`E zGF(c=NE^7TpSwb=T1fOTDB^!q47Sy=9f70YMY9i-yC;@6WPpss;%_^LKu48+NOh(x zsVG&0yz661nQUimprt`ArJtS``6O(a86#W*YGx#aN!X3!5WiAs@uWYVwc4>!Vzu_^}-M{j8xz6+}Rkw`Ge3wu5QO3;@Sf05TfgUy=Ne+bOUXUtb z#40PGH;I8tw}RKa^@U_jNGX**E1Z(K)Rg$f8cse2hEwMMG?7ADN#%_<#q?$D&4=>I z-Q7UD%Q7O2-Stk^%=eVc^sQy?{Vsg_gA5e_-}^r;W8{a?8$|R5@$SN1(&9WtS<}Dr z&Hgw)UGAs{6spSK0l(ULu9^?J`MVL|zfP)h!X#xkTEOr8S%}UrU@H#8=8B?!fog%7D?GHXkL_oi~xi3T&@z$)~6;(da$c z917Id4R(G)v$Ej4z)I#S6Y5t~B2@(}TU{Ni(dPKae>>cG$KdZXYvSpjitV4VejboU z_J7q~P!qG}xWOKgwS@-%w<>bq52RSKazOw4Lw~WiRV)eCNk%^P! Date: Mon, 1 Jun 2020 17:06:00 +0200 Subject: [PATCH 2/2] Clarify that we start by only implementing the Component entity --- docs/architecture-decisions/adr005-catalog-core-entities.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/architecture-decisions/adr005-catalog-core-entities.md b/docs/architecture-decisions/adr005-catalog-core-entities.md index f14f8c8179..1014019f8a 100644 --- a/docs/architecture-decisions/adr005-catalog-core-entities.md +++ b/docs/architecture-decisions/adr005-catalog-core-entities.md @@ -10,7 +10,7 @@ We want to standardize on a few core entities that we are tracking in the Backst ## Decision -We maintain a catalog of the following core entities: +Backstage should eventually support the following core entities: * **Components** are individual pieces of software * **APIs** are the boundaries between different components @@ -18,6 +18,8 @@ We maintain a catalog of the following core entities: ![Catalog Core Entities][catalog-core-entities] +For now, we'll start by only implementing support for the Component entity in the Backstage catalog. This can later be extended to APIs, Resources and other potentially useful entities. + ### Component A component is a piece of software, for example a mobile application feature, web site, backend service or data pipeline (list not exhaustive). A component can be tracked in source control, or use some existing open source or commercial software. It can implement APIs for other components to consume. In turn it might depend on APIs implemented by other components, or resources that are attached to it at runtime. @@ -72,4 +74,4 @@ spec: ## Consequences -We will start with fleshing out support for the Component entity in the catalog, and expand to APIs and Resources later down the line. +We will continue fleshing out support for the Component entity in the Backstage catalog.