sigs.k8s.io/cluster-api-provider-aws@v1.5.5/docs/proposal/20200506-single-controller-multitenancy-flow.svg (about) 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1167px" preserveAspectRatio="none" style="width:1085px;height:1167px;" version="1.1" viewBox="0 0 1085 1167" width="1085px" zoomAndPan="magnify"><defs><filter height="300%" id="f1cwptt09zntpe" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><ellipse cx="534.75" cy="20" fill="#000000" filter="url(#f1cwptt09zntpe)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><rect fill="#FEFECE" filter="url(#f1cwptt09zntpe)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="111" x="479.25" y="50"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="91" x="489.25" y="71.1387">AWS controller</text><rect fill="#FEFECE" filter="url(#f1cwptt09zntpe)" height="47.9375" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="211" x="429.25" y="103.9688"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="187" x="439.25" y="125.1074">enqueue AWSCluster/Machine</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="105" x="482.25" y="139.0762">for reconciliation</text><rect fill="#FEFECE" filter="url(#f1cwptt09zntpe)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="127" x="471.25" y="171.9063"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="107" x="481.25" y="193.0449">fetch AWSCluster</text><polygon fill="#FEFECE" filter="url(#f1cwptt09zntpe)" points="439.75,225.875,629.75,225.875,641.75,237.875,629.75,249.875,439.75,249.875,427.75,237.875,439.75,225.875" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="190" x="439.75" y="241.6831">AWSCluster has spec.identityRef?</text><text fill="#666666" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="21" x="406.75" y="235.0449">yes</text><text fill="#666666" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="16" x="641.75" y="235.0449">no</text><polygon fill="#FEFECE" filter="url(#f1cwptt09zntpe)" points="137.5,259.875,368.5,259.875,380.5,271.875,368.5,283.875,137.5,283.875,125.5,271.875,137.5,259.875" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="231" x="137.5" y="275.6831">Referenced object is cluster scoped CRD</text><text fill="#666666" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="21" x="104.5" y="269.0449">yes</text><text fill="#666666" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="16" x="380.5" y="269.0449">no</text><rect fill="#FEFECE" filter="url(#f1cwptt09zntpe)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="209" x="11" y="293.875"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="189" x="21" y="315.0137">fetch cluster scoped resource</text><rect fill="#FEFECE" filter="url(#f1cwptt09zntpe)" height="47.9375" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="204" x="288.5" y="293.875"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="180" x="298.5" y="315.0137">fetch referenced resource in</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="335" y="328.9824">same namespace</text><polygon fill="#FEFECE" filter="url(#f1cwptt09zntpe)" points="253,347.8125,265,359.8125,253,371.8125,241,359.8125,253,347.8125" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#f1cwptt09zntpe)" height="61.9063" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="219" x="143.5" y="406.8125"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="162" x="170" y="427.9512">set or append referenced</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="199" x="153.5" y="441.9199">resource as OwnerReference to</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="114" x="196" y="455.8887">AWSCluster object</text><rect fill="#FEFECE" filter="url(#f1cwptt09zntpe)" height="47.9375" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="180" x="163" y="537.7031"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="156" x="173" y="558.8418">construct new credential</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="51" x="227.5" y="572.8105">provider</text><rect fill="#FEFECE" filter="url(#f1cwptt09zntpe)" height="47.9375" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="194" x="156" y="654.625"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="170" x="166" y="675.7637">store credential provider in</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="38" x="234" y="689.7324">cache</text><polygon fill="#FEFECE" filter="url(#f1cwptt09zntpe)" points="137.5,605.6406,368.5,605.6406,380.5,617.6406,368.5,629.6406,137.5,629.6406,125.5,617.6406,137.5,605.6406" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#666666" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="16" x="257" y="640.7793">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="231" x="137.5" y="621.4487">cache contains value for provider.Hash()</text><polygon fill="#FEFECE" filter="url(#f1cwptt09zntpe)" points="253,722.5625,265,734.5625,253,746.5625,241,734.5625,253,722.5625" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#f1cwptt09zntpe)" height="47.9375" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="173" x="166.5" y="766.5625"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="149" x="176.5" y="787.7012">fetch cached credential</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="51" x="227.5" y="801.6699">provider</text><polygon fill="#FEFECE" filter="url(#f1cwptt09zntpe)" points="235.5,488.7188,270.5,488.7188,282.5,500.7188,270.5,512.7188,235.5,512.7188,223.5,500.7188,235.5,488.7188" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#666666" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="16" x="257" y="523.8574">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="235.5" y="504.5269">error?</text><text fill="#666666" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="21" x="282.5" y="497.8887">yes</text><ellipse cx="325.5" cy="500.7188" fill="#FFFFFF" filter="url(#f1cwptt09zntpe)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="325.5" cy="500.7188" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><rect fill="#FEFECE" filter="url(#f1cwptt09zntpe)" height="47.9375" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="198" x="717.5" y="259.875"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="165" x="734" y="281.0137">default spec.identityRef to</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="178" x="727.5" y="294.9824">AWSClusterControllerIdentity</text><polygon fill="#FEFECE" filter="url(#f1cwptt09zntpe)" points="648.5,342.8125,984.5,342.8125,996.5,354.8125,984.5,366.8125,648.5,366.8125,636.5,354.8125,648.5,342.8125" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="336" x="648.5" y="358.6206">AWSCluster namespace matches with allowedNamespaces</text><text fill="#666666" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="21" x="615.5" y="351.9824">yes</text><text fill="#666666" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="16" x="996.5" y="351.9824">no</text><rect fill="#FEFECE" filter="url(#f1cwptt09zntpe)" height="47.9375" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="188" x="532.5" y="376.8125"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="164" x="542.5" y="397.9512">use controller's credential</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="58" x="597.5" y="411.9199">providers</text><rect fill="#FEFECE" filter="url(#f1cwptt09zntpe)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="123" x="945" y="376.8125"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="103" x="955" y="397.9512">return with error</text><ellipse cx="1006.5" cy="456.7813" fill="#FFFFFF" filter="url(#f1cwptt09zntpe)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="1006.5" cy="456.7813" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#f1cwptt09zntpe)" points="534.75,824.5,546.75,836.5,534.75,848.5,522.75,836.5,534.75,824.5" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#f1cwptt09zntpe)" height="117.7813" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="212" x="428.75" y="868.5"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="173" x="448.25" y="889.6387">call STS::GetCallerIdentity():</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="187" x="439.25" y="903.6074">if (awscluster.AccountID != nil</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="177" x="444.25" y="917.5762">&& awscluster.AccountID !=</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="192" x="438.75" y="931.5449">GetCallerIdentity?) then (error)</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="28" x="524.75" y="945.5137">stop</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="31" x="519.25" y="959.4824">endif</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="187" x="441.25" y="973.4512">:update awscluster.accountID</text><rect fill="#FEFECE" filter="url(#f1cwptt09zntpe)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="183" x="443.25" y="1006.2813"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="163" x="453.25" y="1027.4199">create new service clients</text><rect fill="#FEFECE" filter="url(#f1cwptt09zntpe)" height="47.9375" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="173" x="448.25" y="1060.25"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="149" x="458.25" y="1081.3887">reconcile AWSCluster or</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="79" x="495.25" y="1095.3574">AWSMachine</text><ellipse cx="534.75" cy="1139.1875" fill="#FFFFFF" filter="url(#f1cwptt09zntpe)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="534.75" cy="1139.1875" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="534.75" x2="534.75" y1="30" y2="50"/><polygon fill="#666666" points="530.75,40,534.75,50,538.75,40,534.75,44" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="534.75" x2="534.75" y1="83.9688" y2="103.9688"/><polygon fill="#666666" points="530.75,93.9688,534.75,103.9688,538.75,93.9688,534.75,97.9688" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="534.75" x2="534.75" y1="151.9063" y2="171.9063"/><polygon fill="#666666" points="530.75,161.9063,534.75,171.9063,538.75,161.9063,534.75,165.9063" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="125.5" x2="115.5" y1="271.875" y2="271.875"/><line style="stroke: #666666; stroke-width: 1.5;" x1="115.5" x2="115.5" y1="271.875" y2="293.875"/><polygon fill="#666666" points="111.5,283.875,115.5,293.875,119.5,283.875,115.5,287.875" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="380.5" x2="390.5" y1="271.875" y2="271.875"/><line style="stroke: #666666; stroke-width: 1.5;" x1="390.5" x2="390.5" y1="271.875" y2="293.875"/><polygon fill="#666666" points="386.5,283.875,390.5,293.875,394.5,283.875,390.5,287.875" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="115.5" x2="115.5" y1="327.8438" y2="359.8125"/><line style="stroke: #666666; stroke-width: 1.5;" x1="115.5" x2="241" y1="359.8125" y2="359.8125"/><polygon fill="#666666" points="231,355.8125,241,359.8125,231,363.8125,235,359.8125" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="390.5" x2="390.5" y1="341.8125" y2="359.8125"/><line style="stroke: #666666; stroke-width: 1.5;" x1="390.5" x2="265" y1="359.8125" y2="359.8125"/><polygon fill="#666666" points="275,355.8125,265,359.8125,275,363.8125,271,359.8125" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="253" x2="253" y1="371.8125" y2="406.8125"/><polygon fill="#666666" points="249,396.8125,253,406.8125,257,396.8125,253,400.8125" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="253" x2="253" y1="629.6406" y2="654.625"/><polygon fill="#666666" points="249,644.625,253,654.625,257,644.625,253,648.625" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="380.5" x2="392.5" y1="617.6406" y2="617.6406"/><polygon fill="#666666" points="388.5,668.5938,392.5,678.5938,396.5,668.5938,392.5,672.5938" style="stroke: #666666; stroke-width: 1.5;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="392.5" x2="392.5" y1="617.6406" y2="734.5625"/><line style="stroke: #666666; stroke-width: 1.5;" x1="392.5" x2="265" y1="734.5625" y2="734.5625"/><polygon fill="#666666" points="275,730.5625,265,734.5625,275,738.5625,271,734.5625" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="253" x2="253" y1="702.5625" y2="722.5625"/><polygon fill="#666666" points="249,712.5625,253,722.5625,257,712.5625,253,716.5625" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="253" x2="253" y1="585.6406" y2="605.6406"/><polygon fill="#666666" points="249,595.6406,253,605.6406,257,595.6406,253,599.6406" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="253" x2="253" y1="746.5625" y2="766.5625"/><polygon fill="#666666" points="249,756.5625,253,766.5625,257,756.5625,253,760.5625" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="253" x2="253" y1="512.7188" y2="537.7031"/><polygon fill="#666666" points="249,527.7031,253,537.7031,257,527.7031,253,531.7031" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="282.5" x2="314.5" y1="500.7188" y2="500.7188"/><polygon fill="#666666" points="304.5,496.7188,314.5,500.7188,304.5,504.7188,308.5,500.7188" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="253" x2="253" y1="814.5" y2="836.5"/><line style="stroke: #666666; stroke-width: 1.5;" x1="253" x2="522.75" y1="836.5" y2="836.5"/><polygon fill="#666666" points="512.75,832.5,522.75,836.5,512.75,840.5,516.75,836.5" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="253" x2="253" y1="468.7188" y2="488.7188"/><polygon fill="#666666" points="249,478.7188,253,488.7188,257,478.7188,253,482.7188" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="1006.5" x2="1006.5" y1="410.7813" y2="445.7813"/><polygon fill="#666666" points="1002.5,435.7813,1006.5,445.7813,1010.5,435.7813,1006.5,439.7813" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="636.5" x2="626.5" y1="354.8125" y2="354.8125"/><line style="stroke: #666666; stroke-width: 1.5;" x1="626.5" x2="626.5" y1="354.8125" y2="376.8125"/><polygon fill="#666666" points="622.5,366.8125,626.5,376.8125,630.5,366.8125,626.5,370.8125" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="996.5" x2="1006.5" y1="354.8125" y2="354.8125"/><line style="stroke: #666666; stroke-width: 1.5;" x1="1006.5" x2="1006.5" y1="354.8125" y2="376.8125"/><polygon fill="#666666" points="1002.5,366.8125,1006.5,376.8125,1010.5,366.8125,1006.5,370.8125" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="626.5" x2="626.5" y1="424.75" y2="836.5"/><line style="stroke: #666666; stroke-width: 1.5;" x1="626.5" x2="546.75" y1="836.5" y2="836.5"/><polygon fill="#666666" points="556.75,832.5,546.75,836.5,556.75,840.5,552.75,836.5" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="816.5" x2="816.5" y1="307.8125" y2="342.8125"/><polygon fill="#666666" points="812.5,332.8125,816.5,342.8125,820.5,332.8125,816.5,336.8125" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="427.75" x2="253" y1="237.875" y2="237.875"/><line style="stroke: #666666; stroke-width: 1.5;" x1="253" x2="253" y1="237.875" y2="259.875"/><polygon fill="#666666" points="249,249.875,253,259.875,257,249.875,253,253.875" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="641.75" x2="816.5" y1="237.875" y2="237.875"/><line style="stroke: #666666; stroke-width: 1.5;" x1="816.5" x2="816.5" y1="237.875" y2="259.875"/><polygon fill="#666666" points="812.5,249.875,816.5,259.875,820.5,249.875,816.5,253.875" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="534.75" x2="534.75" y1="205.875" y2="225.875"/><polygon fill="#666666" points="530.75,215.875,534.75,225.875,538.75,215.875,534.75,219.875" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="534.75" x2="534.75" y1="848.5" y2="868.5"/><polygon fill="#666666" points="530.75,858.5,534.75,868.5,538.75,858.5,534.75,862.5" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="534.75" x2="534.75" y1="986.2813" y2="1006.2813"/><polygon fill="#666666" points="530.75,996.2813,534.75,1006.2813,538.75,996.2813,534.75,1000.2813" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="534.75" x2="534.75" y1="1040.25" y2="1060.25"/><polygon fill="#666666" points="530.75,1050.25,534.75,1060.25,538.75,1050.25,534.75,1054.25" style="stroke: #666666; stroke-width: 1.0;"/><line style="stroke: #666666; stroke-width: 1.5;" x1="534.75" x2="534.75" y1="1108.1875" y2="1128.1875"/><polygon fill="#666666" points="530.75,1118.1875,534.75,1128.1875,538.75,1118.1875,534.75,1122.1875" style="stroke: #666666; stroke-width: 1.0;"/><!--MD5=[1909c1ebedcd2f59042db9e57e40b367] 2 @startuml 20200506-single-controller-multitenancy-flow 3 !includeurl https://raw.githubusercontent.com/RicardoNiepel/C4-PlantUML/release/1-0/C4_Container.puml 4 5 start 6 :AWS controller; 7 :enqueue AWSCluster/Machine for reconciliation; 8 :fetch AWSCluster; 9 if (AWSCluster has spec.identityRef?) then (yes) 10 if (Referenced object is cluster scoped CRD) then (yes) 11 :fetch cluster scoped resource; 12 else (no) 13 :fetch referenced resource in same namespace; 14 endif 15 :set or append referenced resource as OwnerReference to AWSCluster object; 16 if (error?) then (yes) 17 stop 18 else (no) 19 :construct new credential provider; 20 if (cache contains value for provider.Hash()) then (no) 21 :store credential provider in cache; 22 endif 23 :fetch cached credential provider; 24 endif 25 else (no) 26 : default spec.identityRef to AWSClusterControllerIdentity; 27 if (AWSCluster namespace matches with allowedNamespaces) then (yes) 28 :use controller's credential providers; 29 else (no) 30 :return with error; 31 stop 32 endif 33 endif 34 :call STS::GetCallerIdentity(): 35 if (awscluster.AccountID != nil && awscluster.AccountID != GetCallerIdentity?) then (error) 36 stop 37 endif 38 :update awscluster.accountID; 39 :create new service clients; 40 :reconcile AWSCluster or AWSMachine; 41 stop 42 43 @enduml 44 45 @startuml 20200506-single-controller-multitenancy-flow 46 47 48 49 50 51 skinparam defaultTextAlignment center 52 53 skinparam wrapWidth 200 54 skinparam maxMessageSize 150 55 56 skinparam rectangle { 57 StereotypeFontSize 12 58 shadowing false 59 } 60 61 skinparam database { 62 StereotypeFontSize 12 63 shadowing false 64 } 65 66 skinparam Arrow { 67 Color #666666 68 FontColor #666666 69 FontSize 12 70 } 71 72 skinparam rectangle<<boundary>> { 73 Shadowing false 74 StereotypeFontSize 0 75 FontColor #444444 76 BorderColor #444444 77 BorderStyle dashed 78 } 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 skinparam rectangle<<person>> { 102 StereotypeFontColor #FFFFFF 103 FontColor #FFFFFF 104 BackgroundColor #08427B 105 BorderColor #073B6F 106 } 107 108 skinparam rectangle<<external_person>> { 109 StereotypeFontColor #FFFFFF 110 FontColor #FFFFFF 111 BackgroundColor #686868 112 BorderColor #8A8A8A 113 } 114 115 skinparam rectangle<<system>> { 116 StereotypeFontColor #FFFFFF 117 FontColor #FFFFFF 118 BackgroundColor #1168BD 119 BorderColor #3C7FC0 120 } 121 122 skinparam rectangle<<external_system>> { 123 StereotypeFontColor #FFFFFF 124 FontColor #FFFFFF 125 BackgroundColor #999999 126 BorderColor #8A8A8A 127 } 128 129 skinparam database<<system>> { 130 StereotypeFontColor #FFFFFF 131 FontColor #FFFFFF 132 BackgroundColor #1168BD 133 BorderColor #3C7FC0 134 } 135 136 skinparam database<<external_system>> { 137 StereotypeFontColor #FFFFFF 138 FontColor #FFFFFF 139 BackgroundColor #999999 140 BorderColor #8A8A8A 141 } 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 skinparam rectangle<<container>> { 159 StereotypeFontColor #FFFFFF 160 FontColor #FFFFFF 161 BackgroundColor #438DD5 162 BorderColor #3C7FC0 163 } 164 165 skinparam database<<container>> { 166 StereotypeFontColor #FFFFFF 167 FontColor #FFFFFF 168 BackgroundColor #438DD5 169 BorderColor #3C7FC0 170 } 171 172 173 174 175 176 177 178 179 start 180 :AWS controller; 181 :enqueue AWSCluster/Machine for reconciliation; 182 :fetch AWSCluster; 183 if (AWSCluster has spec.identityRef?) then (yes) 184 if (Referenced object is cluster scoped CRD) then (yes) 185 :fetch cluster scoped resource; 186 else (no) 187 :fetch referenced resource in same namespace; 188 endif 189 :set or append referenced resource as OwnerReference to AWSCluster object; 190 if (error?) then (yes) 191 stop 192 else (no) 193 :construct new credential provider; 194 if (cache contains value for provider.Hash()) then (no) 195 :store credential provider in cache; 196 endif 197 :fetch cached credential provider; 198 endif 199 else (no) 200 : default spec.identityRef to AWSClusterControllerIdentity; 201 if (AWSCluster namespace matches with allowedNamespaces) then (yes) 202 :use controller's credential providers; 203 else (no) 204 :return with error; 205 stop 206 endif 207 endif 208 :call STS::GetCallerIdentity(): 209 if (awscluster.AccountID != nil && awscluster.AccountID != GetCallerIdentity?) then (error) 210 stop 211 endif 212 :update awscluster.accountID; 213 :create new service clients; 214 :reconcile AWSCluster or AWSMachine; 215 stop 216 217 @enduml 218 219 PlantUML version 1.2020.16(Sun Aug 23 20:20:43 UTC 2020) 220 (GPL source distribution) 221 Java Runtime: OpenJDK Runtime Environment 222 JVM: OpenJDK 64-Bit Server VM 223 Default Encoding: UTF-8 224 Language: en 225 Country: null 226 --></g></svg>