CINXE.COM
Providers · Crossplane v1.18
<!doctype html><html lang=en class=color-toggle-hidden color-theme=light><head><meta charset=utf-8><script type="text/javascript"> ;window.NREUM||(NREUM={});NREUM.init={distributed_tracing:{enabled:true},privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]}}; window.NREUM||(NREUM={}),__nr_require=function(t,e,n){function r(n){if(!e[n]){var o=e[n]={exports:{}};t[n][0].call(o.exports,function(e){var o=t[n][1][e];return r(o||e)},o,o.exports)}return e[n].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<n.length;o++)r(n[o]);return r}({1:[function(t,e,n){function r(t){try{s.console&&console.log(t)}catch(e){}}var o,i=t("ee"),a=t(32),s={};try{o=localStorage.getItem("__nr_flags").split(","),console&&"function"==typeof console.log&&(s.console=!0,o.indexOf("dev")!==-1&&(s.dev=!0),o.indexOf("nr_dev")!==-1&&(s.nrDev=!0))}catch(c){}s.nrDev&&i.on("internal-error",function(t){r(t.stack)}),s.dev&&i.on("fn-err",function(t,e,n){r(n.stack)}),s.dev&&(r("NR AGENT IN DEVELOPMENT MODE"),r("flags: "+a(s,function(t,e){return t}).join(", ")))},{}],2:[function(t,e,n){function r(t,e,n,r,s){try{l?l-=1:o(s||new UncaughtException(t,e,n),!0)}catch(f){try{i("ierr",[f,c.now(),!0])}catch(d){}}return"function"==typeof u&&u.apply(this,a(arguments))}function UncaughtException(t,e,n){this.message=t||"Uncaught error with no additional information",this.sourceURL=e,this.line=n}function o(t,e){var n=e?null:c.now();i("err",[t,n])}var i=t("handle"),a=t(33),s=t("ee"),c=t("loader"),f=t("gos"),u=window.onerror,d=!1,p="nr@seenError";if(!c.disabled){var l=0;c.features.err=!0,t(1),window.onerror=r;try{throw new Error}catch(h){"stack"in h&&(t(14),t(13),"addEventListener"in window&&t(7),c.xhrWrappable&&t(15),d=!0)}s.on("fn-start",function(t,e,n){d&&(l+=1)}),s.on("fn-err",function(t,e,n){d&&!n[p]&&(f(n,p,function(){return!0}),this.thrown=!0,o(n))}),s.on("fn-end",function(){d&&!this.thrown&&l>0&&(l-=1)}),s.on("internal-error",function(t){i("ierr",[t,c.now(),!0])})}},{}],3:[function(t,e,n){var r=t("loader");r.disabled||(r.features.ins=!0)},{}],4:[function(t,e,n){function r(){U++,L=g.hash,this[u]=y.now()}function o(){U--,g.hash!==L&&i(0,!0);var t=y.now();this[h]=~~this[h]+t-this[u],this[d]=t}function i(t,e){E.emit("newURL",[""+g,e])}function a(t,e){t.on(e,function(){this[e]=y.now()})}var s="-start",c="-end",f="-body",u="fn"+s,d="fn"+c,p="cb"+s,l="cb"+c,h="jsTime",m="fetch",v="addEventListener",w=window,g=w.location,y=t("loader");if(w[v]&&y.xhrWrappable&&!y.disabled){var x=t(11),b=t(12),E=t(9),R=t(7),O=t(14),T=t(8),P=t(15),S=t(10),M=t("ee"),N=M.get("tracer"),C=t(23);t(17),y.features.spa=!0;var L,U=0;M.on(u,r),b.on(p,r),S.on(p,r),M.on(d,o),b.on(l,o),S.on(l,o),M.buffer([u,d,"xhr-resolved"]),R.buffer([u]),O.buffer(["setTimeout"+c,"clearTimeout"+s,u]),P.buffer([u,"new-xhr","send-xhr"+s]),T.buffer([m+s,m+"-done",m+f+s,m+f+c]),E.buffer(["newURL"]),x.buffer([u]),b.buffer(["propagate",p,l,"executor-err","resolve"+s]),N.buffer([u,"no-"+u]),S.buffer(["new-jsonp","cb-start","jsonp-error","jsonp-end"]),a(T,m+s),a(T,m+"-done"),a(S,"new-jsonp"),a(S,"jsonp-end"),a(S,"cb-start"),E.on("pushState-end",i),E.on("replaceState-end",i),w[v]("hashchange",i,C(!0)),w[v]("load",i,C(!0)),w[v]("popstate",function(){i(0,U>1)},C(!0))}},{}],5:[function(t,e,n){function r(){var t=new PerformanceObserver(function(t,e){var n=t.getEntries();s(v,[n])});try{t.observe({entryTypes:["resource"]})}catch(e){}}function o(t){if(s(v,[window.performance.getEntriesByType(w)]),window.performance["c"+p])try{window.performance[h](m,o,!1)}catch(t){}else try{window.performance[h]("webkit"+m,o,!1)}catch(t){}}function i(t){}if(window.performance&&window.performance.timing&&window.performance.getEntriesByType){var a=t("ee"),s=t("handle"),c=t(14),f=t(13),u=t(6),d=t(23),p="learResourceTimings",l="addEventListener",h="removeEventListener",m="resourcetimingbufferfull",v="bstResource",w="resource",g="-start",y="-end",x="fn"+g,b="fn"+y,E="bstTimer",R="pushState",O=t("loader");if(!O.disabled){O.features.stn=!0,t(9),"addEventListener"in window&&t(7);var T=NREUM.o.EV;a.on(x,function(t,e){var n=t[0];n instanceof T&&(this.bstStart=O.now())}),a.on(b,function(t,e){var n=t[0];n instanceof T&&s("bst",[n,e,this.bstStart,O.now()])}),c.on(x,function(t,e,n){this.bstStart=O.now(),this.bstType=n}),c.on(b,function(t,e){s(E,[e,this.bstStart,O.now(),this.bstType])}),f.on(x,function(){this.bstStart=O.now()}),f.on(b,function(t,e){s(E,[e,this.bstStart,O.now(),"requestAnimationFrame"])}),a.on(R+g,function(t){this.time=O.now(),this.startPath=location.pathname+location.hash}),a.on(R+y,function(t){s("bstHist",[location.pathname+location.hash,this.startPath,this.time])}),u()?(s(v,[window.performance.getEntriesByType("resource")]),r()):l in window.performance&&(window.performance["c"+p]?window.performance[l](m,o,d(!1)):window.performance[l]("webkit"+m,o,d(!1))),document[l]("scroll",i,d(!1)),document[l]("keypress",i,d(!1)),document[l]("click",i,d(!1))}}},{}],6:[function(t,e,n){e.exports=function(){return"PerformanceObserver"in window&&"function"==typeof window.PerformanceObserver}},{}],7:[function(t,e,n){function r(t){for(var e=t;e&&!e.hasOwnProperty(u);)e=Object.getPrototypeOf(e);e&&o(e)}function o(t){s.inPlace(t,[u,d],"-",i)}function i(t,e){return t[1]}var a=t("ee").get("events"),s=t("wrap-function")(a,!0),c=t("gos"),f=XMLHttpRequest,u="addEventListener",d="removeEventListener";e.exports=a,"getPrototypeOf"in Object?(r(document),r(window),r(f.prototype)):f.prototype.hasOwnProperty(u)&&(o(window),o(f.prototype)),a.on(u+"-start",function(t,e){var n=t[1];if(null!==n&&("function"==typeof n||"object"==typeof n)){var r=c(n,"nr@wrapped",function(){function t(){if("function"==typeof n.handleEvent)return n.handleEvent.apply(n,arguments)}var e={object:t,"function":n}[typeof n];return e?s(e,"fn-",null,e.name||"anonymous"):n});this.wrapped=t[1]=r}}),a.on(d+"-start",function(t){t[1]=this.wrapped||t[1]})},{}],8:[function(t,e,n){function r(t,e,n){var r=t[e];"function"==typeof r&&(t[e]=function(){var t=i(arguments),e={};o.emit(n+"before-start",[t],e);var a;e[m]&&e[m].dt&&(a=e[m].dt);var s=r.apply(this,t);return o.emit(n+"start",[t,a],s),s.then(function(t){return o.emit(n+"end",[null,t],s),t},function(t){throw o.emit(n+"end",[t],s),t})})}var o=t("ee").get("fetch"),i=t(33),a=t(32);e.exports=o;var s=window,c="fetch-",f=c+"body-",u=["arrayBuffer","blob","json","text","formData"],d=s.Request,p=s.Response,l=s.fetch,h="prototype",m="nr@context";d&&p&&l&&(a(u,function(t,e){r(d[h],e,f),r(p[h],e,f)}),r(s,"fetch",c),o.on(c+"end",function(t,e){var n=this;if(e){var r=e.headers.get("content-length");null!==r&&(n.rxSize=r),o.emit(c+"done",[null,e],n)}else o.emit(c+"done",[t],n)}))},{}],9:[function(t,e,n){var r=t("ee").get("history"),o=t("wrap-function")(r);e.exports=r;var i=window.history&&window.history.constructor&&window.history.constructor.prototype,a=window.history;i&&i.pushState&&i.replaceState&&(a=i),o.inPlace(a,["pushState","replaceState"],"-")},{}],10:[function(t,e,n){function r(t){function e(){f.emit("jsonp-end",[],l),t.removeEventListener("load",e,c(!1)),t.removeEventListener("error",n,c(!1))}function n(){f.emit("jsonp-error",[],l),f.emit("jsonp-end",[],l),t.removeEventListener("load",e,c(!1)),t.removeEventListener("error",n,c(!1))}var r=t&&"string"==typeof t.nodeName&&"script"===t.nodeName.toLowerCase();if(r){var o="function"==typeof t.addEventListener;if(o){var a=i(t.src);if(a){var d=s(a),p="function"==typeof d.parent[d.key];if(p){var l={};u.inPlace(d.parent,[d.key],"cb-",l),t.addEventListener("load",e,c(!1)),t.addEventListener("error",n,c(!1)),f.emit("new-jsonp",[t.src],l)}}}}}function o(){return"addEventListener"in window}function i(t){var e=t.match(d);return e?e[1]:null}function a(t,e){var n=t.match(l),r=n[1],o=n[3];return o?a(o,e[r]):e[r]}function s(t){var e=t.match(p);return e&&e.length>=3?{key:e[2],parent:a(e[1],window)}:{key:t,parent:window}}var c=t(23),f=t("ee").get("jsonp"),u=t("wrap-function")(f);if(e.exports=f,o()){var d=/[?&](?:callback|cb)=([^&#]+)/,p=/(.*)\.([^.]+)/,l=/^(\w+)(\.|$)(.*)$/,h=["appendChild","insertBefore","replaceChild"];Node&&Node.prototype&&Node.prototype.appendChild?u.inPlace(Node.prototype,h,"dom-"):(u.inPlace(HTMLElement.prototype,h,"dom-"),u.inPlace(HTMLHeadElement.prototype,h,"dom-"),u.inPlace(HTMLBodyElement.prototype,h,"dom-")),f.on("dom-start",function(t){r(t[0])})}},{}],11:[function(t,e,n){var r=t("ee").get("mutation"),o=t("wrap-function")(r),i=NREUM.o.MO;e.exports=r,i&&(window.MutationObserver=function(t){return this instanceof i?new i(o(t,"fn-")):i.apply(this,arguments)},MutationObserver.prototype=i.prototype)},{}],12:[function(t,e,n){function r(t){var e=i.context(),n=s(t,"executor-",e,null,!1),r=new f(n);return i.context(r).getCtx=function(){return e},r}var o=t("wrap-function"),i=t("ee").get("promise"),a=t("ee").getOrSetContext,s=o(i),c=t(32),f=NREUM.o.PR;e.exports=i,f&&(window.Promise=r,["all","race"].forEach(function(t){var e=f[t];f[t]=function(n){function r(t){return function(){i.emit("propagate",[null,!o],a,!1,!1),o=o||!t}}var o=!1;c(n,function(e,n){Promise.resolve(n).then(r("all"===t),r(!1))});var a=e.apply(f,arguments),s=f.resolve(a);return s}}),["resolve","reject"].forEach(function(t){var e=f[t];f[t]=function(t){var n=e.apply(f,arguments);return t!==n&&i.emit("propagate",[t,!0],n,!1,!1),n}}),f.prototype["catch"]=function(t){return this.then(null,t)},f.prototype=Object.create(f.prototype,{constructor:{value:r}}),c(Object.getOwnPropertyNames(f),function(t,e){try{r[e]=f[e]}catch(n){}}),o.wrapInPlace(f.prototype,"then",function(t){return function(){var e=this,n=o.argsToArray.apply(this,arguments),r=a(e);r.promise=e,n[0]=s(n[0],"cb-",r,null,!1),n[1]=s(n[1],"cb-",r,null,!1);var c=t.apply(this,n);return r.nextPromise=c,i.emit("propagate",[e,!0],c,!1,!1),c}}),i.on("executor-start",function(t){t[0]=s(t[0],"resolve-",this,null,!1),t[1]=s(t[1],"resolve-",this,null,!1)}),i.on("executor-err",function(t,e,n){t[1](n)}),i.on("cb-end",function(t,e,n){i.emit("propagate",[n,!0],this.nextPromise,!1,!1)}),i.on("propagate",function(t,e,n){this.getCtx&&!e||(this.getCtx=function(){if(t instanceof Promise)var e=i.context(t);return e&&e.getCtx?e.getCtx():this})}),r.toString=function(){return""+f})},{}],13:[function(t,e,n){var r=t("ee").get("raf"),o=t("wrap-function")(r),i="equestAnimationFrame";e.exports=r,o.inPlace(window,["r"+i,"mozR"+i,"webkitR"+i,"msR"+i],"raf-"),r.on("raf-start",function(t){t[0]=o(t[0],"fn-")})},{}],14:[function(t,e,n){function r(t,e,n){t[0]=a(t[0],"fn-",null,n)}function o(t,e,n){this.method=n,this.timerDuration=isNaN(t[1])?0:+t[1],t[0]=a(t[0],"fn-",this,n)}var i=t("ee").get("timer"),a=t("wrap-function")(i),s="setTimeout",c="setInterval",f="clearTimeout",u="-start",d="-";e.exports=i,a.inPlace(window,[s,"setImmediate"],s+d),a.inPlace(window,[c],c+d),a.inPlace(window,[f,"clearImmediate"],f+d),i.on(c+u,r),i.on(s+u,o)},{}],15:[function(t,e,n){function r(t,e){d.inPlace(e,["onreadystatechange"],"fn-",s)}function o(){var t=this,e=u.context(t);t.readyState>3&&!e.resolved&&(e.resolved=!0,u.emit("xhr-resolved",[],t)),d.inPlace(t,y,"fn-",s)}function i(t){x.push(t),m&&(E?E.then(a):w?w(a):(R=-R,O.data=R))}function a(){for(var t=0;t<x.length;t++)r([],x[t]);x.length&&(x=[])}function s(t,e){return e}function c(t,e){for(var n in t)e[n]=t[n];return e}t(7);var f=t("ee"),u=f.get("xhr"),d=t("wrap-function")(u),p=t(23),l=NREUM.o,h=l.XHR,m=l.MO,v=l.PR,w=l.SI,g="readystatechange",y=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],x=[];e.exports=u;var b=window.XMLHttpRequest=function(t){var e=new h(t);try{u.emit("new-xhr",[e],e),e.addEventListener(g,o,p(!1))}catch(n){try{u.emit("internal-error",[n])}catch(r){}}return e};if(c(h,b),b.prototype=h.prototype,d.inPlace(b.prototype,["open","send"],"-xhr-",s),u.on("send-xhr-start",function(t,e){r(t,e),i(e)}),u.on("open-xhr-start",r),m){var E=v&&v.resolve();if(!w&&!v){var R=1,O=document.createTextNode(R);new m(a).observe(O,{characterData:!0})}}else f.on("fn-end",function(t){t[0]&&t[0].type===g||a()})},{}],16:[function(t,e,n){function r(t){if(!s(t))return null;var e=window.NREUM;if(!e.loader_config)return null;var n=(e.loader_config.accountID||"").toString()||null,r=(e.loader_config.agentID||"").toString()||null,f=(e.loader_config.trustKey||"").toString()||null;if(!n||!r)return null;var h=l.generateSpanId(),m=l.generateTraceId(),v=Date.now(),w={spanId:h,traceId:m,timestamp:v};return(t.sameOrigin||c(t)&&p())&&(w.traceContextParentHeader=o(h,m),w.traceContextStateHeader=i(h,v,n,r,f)),(t.sameOrigin&&!u()||!t.sameOrigin&&c(t)&&d())&&(w.newrelicHeader=a(h,m,v,n,r,f)),w}function o(t,e){return"00-"+e+"-"+t+"-01"}function i(t,e,n,r,o){var i=0,a="",s=1,c="",f="";return o+"@nr="+i+"-"+s+"-"+n+"-"+r+"-"+t+"-"+a+"-"+c+"-"+f+"-"+e}function a(t,e,n,r,o,i){var a="btoa"in window&&"function"==typeof window.btoa;if(!a)return null;var s={v:[0,1],d:{ty:"Browser",ac:r,ap:o,id:t,tr:e,ti:n}};return i&&r!==i&&(s.d.tk=i),btoa(JSON.stringify(s))}function s(t){return f()&&c(t)}function c(t){var e=!1,n={};if("init"in NREUM&&"distributed_tracing"in NREUM.init&&(n=NREUM.init.distributed_tracing),t.sameOrigin)e=!0;else if(n.allowed_origins instanceof Array)for(var r=0;r<n.allowed_origins.length;r++){var o=h(n.allowed_origins[r]);if(t.hostname===o.hostname&&t.protocol===o.protocol&&t.port===o.port){e=!0;break}}return e}function f(){return"init"in NREUM&&"distributed_tracing"in NREUM.init&&!!NREUM.init.distributed_tracing.enabled}function u(){return"init"in NREUM&&"distributed_tracing"in NREUM.init&&!!NREUM.init.distributed_tracing.exclude_newrelic_header}function d(){return"init"in NREUM&&"distributed_tracing"in NREUM.init&&NREUM.init.distributed_tracing.cors_use_newrelic_header!==!1}function p(){return"init"in NREUM&&"distributed_tracing"in NREUM.init&&!!NREUM.init.distributed_tracing.cors_use_tracecontext_headers}var l=t(29),h=t(18);e.exports={generateTracePayload:r,shouldGenerateTrace:s}},{}],17:[function(t,e,n){function r(t){var e=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(var r=0;r<p;r++)t.removeEventListener(d[r],this.listener,!1);e.aborted||(n.duration=a.now()-this.startTime,this.loadCaptureCalled||4!==t.readyState?null==e.status&&(e.status=0):i(this,t),n.cbTime=this.cbTime,s("xhr",[e,n,this.startTime,this.endTime,"xhr"],this))}}function o(t,e){var n=c(e),r=t.params;r.hostname=n.hostname,r.port=n.port,r.protocol=n.protocol,r.host=n.hostname+":"+n.port,r.pathname=n.pathname,t.parsedOrigin=n,t.sameOrigin=n.sameOrigin}function i(t,e){t.params.status=e.status;var n=v(e,t.lastSize);if(n&&(t.metrics.rxSize=n),t.sameOrigin){var r=e.getResponseHeader("X-NewRelic-App-Data");r&&(t.params.cat=r.split(", ").pop())}t.loadCaptureCalled=!0}var a=t("loader");if(a.xhrWrappable&&!a.disabled){var s=t("handle"),c=t(18),f=t(16).generateTracePayload,u=t("ee"),d=["load","error","abort","timeout"],p=d.length,l=t("id"),h=t(24),m=t(22),v=t(19),w=t(23),g=NREUM.o.REQ,y=window.XMLHttpRequest;a.features.xhr=!0,t(15),t(8),u.on("new-xhr",function(t){var e=this;e.totalCbs=0,e.called=0,e.cbTime=0,e.end=r,e.ended=!1,e.xhrGuids={},e.lastSize=null,e.loadCaptureCalled=!1,e.params=this.params||{},e.metrics=this.metrics||{},t.addEventListener("load",function(n){i(e,t)},w(!1)),h&&(h>34||h<10)||t.addEventListener("progress",function(t){e.lastSize=t.loaded},w(!1))}),u.on("open-xhr-start",function(t){this.params={method:t[0]},o(this,t[1]),this.metrics={}}),u.on("open-xhr-end",function(t,e){"loader_config"in NREUM&&"xpid"in NREUM.loader_config&&this.sameOrigin&&e.setRequestHeader("X-NewRelic-ID",NREUM.loader_config.xpid);var n=f(this.parsedOrigin);if(n){var r=!1;n.newrelicHeader&&(e.setRequestHeader("newrelic",n.newrelicHeader),r=!0),n.traceContextParentHeader&&(e.setRequestHeader("traceparent",n.traceContextParentHeader),n.traceContextStateHeader&&e.setRequestHeader("tracestate",n.traceContextStateHeader),r=!0),r&&(this.dt=n)}}),u.on("send-xhr-start",function(t,e){var n=this.metrics,r=t[0],o=this;if(n&&r){var i=m(r);i&&(n.txSize=i)}this.startTime=a.now(),this.listener=function(t){try{"abort"!==t.type||o.loadCaptureCalled||(o.params.aborted=!0),("load"!==t.type||o.called===o.totalCbs&&(o.onloadCalled||"function"!=typeof e.onload))&&o.end(e)}catch(n){try{u.emit("internal-error",[n])}catch(r){}}};for(var s=0;s<p;s++)e.addEventListener(d[s],this.listener,w(!1))}),u.on("xhr-cb-time",function(t,e,n){this.cbTime+=t,e?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof n.onload||this.end(n)}),u.on("xhr-load-added",function(t,e){var n=""+l(t)+!!e;this.xhrGuids&&!this.xhrGuids[n]&&(this.xhrGuids[n]=!0,this.totalCbs+=1)}),u.on("xhr-load-removed",function(t,e){var n=""+l(t)+!!e;this.xhrGuids&&this.xhrGuids[n]&&(delete this.xhrGuids[n],this.totalCbs-=1)}),u.on("xhr-resolved",function(){this.endTime=a.now()}),u.on("addEventListener-end",function(t,e){e instanceof y&&"load"===t[0]&&u.emit("xhr-load-added",[t[1],t[2]],e)}),u.on("removeEventListener-end",function(t,e){e instanceof y&&"load"===t[0]&&u.emit("xhr-load-removed",[t[1],t[2]],e)}),u.on("fn-start",function(t,e,n){e instanceof y&&("onload"===n&&(this.onload=!0),("load"===(t[0]&&t[0].type)||this.onload)&&(this.xhrCbStart=a.now()))}),u.on("fn-end",function(t,e){this.xhrCbStart&&u.emit("xhr-cb-time",[a.now()-this.xhrCbStart,this.onload,e],e)}),u.on("fetch-before-start",function(t){function e(t,e){var n=!1;return e.newrelicHeader&&(t.set("newrelic",e.newrelicHeader),n=!0),e.traceContextParentHeader&&(t.set("traceparent",e.traceContextParentHeader),e.traceContextStateHeader&&t.set("tracestate",e.traceContextStateHeader),n=!0),n}var n,r=t[1]||{};"string"==typeof t[0]?n=t[0]:t[0]&&t[0].url?n=t[0].url:window.URL&&t[0]&&t[0]instanceof URL&&(n=t[0].href),n&&(this.parsedOrigin=c(n),this.sameOrigin=this.parsedOrigin.sameOrigin);var o=f(this.parsedOrigin);if(o&&(o.newrelicHeader||o.traceContextParentHeader))if("string"==typeof t[0]||window.URL&&t[0]&&t[0]instanceof URL){var i={};for(var a in r)i[a]=r[a];i.headers=new Headers(r.headers||{}),e(i.headers,o)&&(this.dt=o),t.length>1?t[1]=i:t.push(i)}else t[0]&&t[0].headers&&e(t[0].headers,o)&&(this.dt=o)}),u.on("fetch-start",function(t,e){this.params={},this.metrics={},this.startTime=a.now(),this.dt=e,t.length>=1&&(this.target=t[0]),t.length>=2&&(this.opts=t[1]);var n,r=this.opts||{},i=this.target;"string"==typeof i?n=i:"object"==typeof i&&i instanceof g?n=i.url:window.URL&&"object"==typeof i&&i instanceof URL&&(n=i.href),o(this,n);var s=(""+(i&&i instanceof g&&i.method||r.method||"GET")).toUpperCase();this.params.method=s,this.txSize=m(r.body)||0}),u.on("fetch-done",function(t,e){this.endTime=a.now(),this.params||(this.params={}),this.params.status=e?e.status:0;var n;"string"==typeof this.rxSize&&this.rxSize.length>0&&(n=+this.rxSize);var r={txSize:this.txSize,rxSize:n,duration:a.now()-this.startTime};s("xhr",[this.params,r,this.startTime,this.endTime,"fetch"],this)})}},{}],18:[function(t,e,n){var r={};e.exports=function(t){if(t in r)return r[t];var e=document.createElement("a"),n=window.location,o={};e.href=t,o.port=e.port;var i=e.href.split("://");!o.port&&i[1]&&(o.port=i[1].split("/")[0].split("@").pop().split(":")[1]),o.port&&"0"!==o.port||(o.port="https"===i[0]?"443":"80"),o.hostname=e.hostname||n.hostname,o.pathname=e.pathname,o.protocol=i[0],"/"!==o.pathname.charAt(0)&&(o.pathname="/"+o.pathname);var a=!e.protocol||":"===e.protocol||e.protocol===n.protocol,s=e.hostname===document.domain&&e.port===n.port;return o.sameOrigin=a&&(!e.hostname||s),"/"===o.pathname&&(r[t]=o),o}},{}],19:[function(t,e,n){function r(t,e){var n=t.responseType;return"json"===n&&null!==e?e:"arraybuffer"===n||"blob"===n||"json"===n?o(t.response):"text"===n||""===n||void 0===n?o(t.responseText):void 0}var o=t(22);e.exports=r},{}],20:[function(t,e,n){function r(){}function o(t,e,n,r){return function(){return u.recordSupportability("API/"+e+"/called"),i(t+e,[f.now()].concat(s(arguments)),n?null:this,r),n?void 0:this}}var i=t("handle"),a=t(32),s=t(33),c=t("ee").get("tracer"),f=t("loader"),u=t(25),d=NREUM;"undefined"==typeof window.newrelic&&(newrelic=d);var p=["setPageViewName","setCustomAttribute","setErrorHandler","finished","addToTrace","inlineHit","addRelease"],l="api-",h=l+"ixn-";a(p,function(t,e){d[e]=o(l,e,!0,"api")}),d.addPageAction=o(l,"addPageAction",!0),d.setCurrentRouteName=o(l,"routeName",!0),e.exports=newrelic,d.interaction=function(){return(new r).get()};var m=r.prototype={createTracer:function(t,e){var n={},r=this,o="function"==typeof e;return i(h+"tracer",[f.now(),t,n],r),function(){if(c.emit((o?"":"no-")+"fn-start",[f.now(),r,o],n),o)try{return e.apply(this,arguments)}catch(t){throw c.emit("fn-err",[arguments,this,t],n),t}finally{c.emit("fn-end",[f.now()],n)}}}};a("actionText,setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","),function(t,e){m[e]=o(h,e)}),newrelic.noticeError=function(t,e){"string"==typeof t&&(t=new Error(t)),u.recordSupportability("API/noticeError/called"),i("err",[t,f.now(),!1,e])}},{}],21:[function(t,e,n){function r(t){if(NREUM.init){for(var e=NREUM.init,n=t.split("."),r=0;r<n.length-1;r++)if(e=e[n[r]],"object"!=typeof e)return;return e=e[n[n.length-1]]}}e.exports={getConfiguration:r}},{}],22:[function(t,e,n){e.exports=function(t){if("string"==typeof t&&t.length)return t.length;if("object"==typeof t){if("undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer&&t.byteLength)return t.byteLength;if("undefined"!=typeof Blob&&t instanceof Blob&&t.size)return t.size;if(!("undefined"!=typeof FormData&&t instanceof FormData))try{return JSON.stringify(t).length}catch(e){return}}}},{}],23:[function(t,e,n){var r=!1;try{var o=Object.defineProperty({},"passive",{get:function(){r=!0}});window.addEventListener("testPassive",null,o),window.removeEventListener("testPassive",null,o)}catch(i){}e.exports=function(t){return r?{passive:!0,capture:!!t}:!!t}},{}],24:[function(t,e,n){var r=0,o=navigator.userAgent.match(/Firefox[\/\s](\d+\.\d+)/);o&&(r=+o[1]),e.exports=r},{}],25:[function(t,e,n){function r(t,e){var n=[a,t,{name:t},e];return i("storeMetric",n,null,"api"),n}function o(t,e){var n=[s,t,{name:t},e];return i("storeEventMetrics",n,null,"api"),n}var i=t("handle"),a="sm",s="cm";e.exports={constants:{SUPPORTABILITY_METRIC:a,CUSTOM_METRIC:s},recordSupportability:r,recordCustom:o}},{}],26:[function(t,e,n){function r(){return s.exists&&performance.now?Math.round(performance.now()):(i=Math.max((new Date).getTime(),i))-a}function o(){return i}var i=(new Date).getTime(),a=i,s=t(34);e.exports=r,e.exports.offset=a,e.exports.getLastTimestamp=o},{}],27:[function(t,e,n){function r(t){return!(!t||!t.protocol||"file:"===t.protocol)}e.exports=r},{}],28:[function(t,e,n){function r(t,e){var n=t.getEntries();n.forEach(function(t){"first-paint"===t.name?p("timing",["fp",Math.floor(t.startTime)]):"first-contentful-paint"===t.name&&p("timing",["fcp",Math.floor(t.startTime)])})}function o(t,e){var n=t.getEntries();if(n.length>0){var r=n[n.length-1];if(c&&c<r.startTime)return;p("lcp",[r])}}function i(t){t.getEntries().forEach(function(t){t.hadRecentInput||p("cls",[t])})}function a(t){if(t instanceof v&&!g){var e=Math.round(t.timeStamp),n={type:t.type};e<=l.now()?n.fid=l.now()-e:e>l.offset&&e<=Date.now()?(e-=l.offset,n.fid=l.now()-e):e=l.now(),g=!0,p("timing",["fi",e,n])}}function s(t){"hidden"===t&&(c=l.now(),p("pageHide",[c]))}if(!("init"in NREUM&&"page_view_timing"in NREUM.init&&"enabled"in NREUM.init.page_view_timing&&NREUM.init.page_view_timing.enabled===!1)){var c,f,u,d,p=t("handle"),l=t("loader"),h=t(31),m=t(23),v=NREUM.o.EV;if("PerformanceObserver"in window&&"function"==typeof window.PerformanceObserver){f=new PerformanceObserver(r);try{f.observe({entryTypes:["paint"]})}catch(w){}u=new PerformanceObserver(o);try{u.observe({entryTypes:["largest-contentful-paint"]})}catch(w){}d=new PerformanceObserver(i);try{d.observe({type:"layout-shift",buffered:!0})}catch(w){}}if("addEventListener"in document){var g=!1,y=["click","keydown","mousedown","pointerdown","touchstart"];y.forEach(function(t){document.addEventListener(t,a,m(!1))})}h(s)}},{}],29:[function(t,e,n){function r(){function t(){return e?15&e[n++]:16*Math.random()|0}var e=null,n=0,r=window.crypto||window.msCrypto;r&&r.getRandomValues&&(e=r.getRandomValues(new Uint8Array(31)));for(var o,i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx",a="",s=0;s<i.length;s++)o=i[s],"x"===o?a+=t().toString(16):"y"===o?(o=3&t()|8,a+=o.toString(16)):a+=o;return a}function o(){return a(16)}function i(){return a(32)}function a(t){function e(){return n?15&n[r++]:16*Math.random()|0}var n=null,r=0,o=window.crypto||window.msCrypto;o&&o.getRandomValues&&Uint8Array&&(n=o.getRandomValues(new Uint8Array(31)));for(var i=[],a=0;a<t;a++)i.push(e().toString(16));return i.join("")}e.exports={generateUuid:r,generateSpanId:o,generateTraceId:i}},{}],30:[function(t,e,n){function r(t,e){if(!o)return!1;if(t!==o)return!1;if(!e)return!0;if(!i)return!1;for(var n=i.split("."),r=e.split("."),a=0;a<r.length;a++)if(r[a]!==n[a])return!1;return!0}var o=null,i=null,a=/Version\/(\S+)\s+Safari/;if(navigator.userAgent){var s=navigator.userAgent,c=s.match(a);c&&s.indexOf("Chrome")===-1&&s.indexOf("Chromium")===-1&&(o="Safari",i=c[1])}e.exports={agent:o,version:i,match:r}},{}],31:[function(t,e,n){function r(t){function e(){t(s&&document[s]?document[s]:document[i]?"hidden":"visible")}"addEventListener"in document&&a&&document.addEventListener(a,e,o(!1))}var o=t(23);e.exports=r;var i,a,s;"undefined"!=typeof document.hidden?(i="hidden",a="visibilitychange",s="visibilityState"):"undefined"!=typeof document.msHidden?(i="msHidden",a="msvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(i="webkitHidden",a="webkitvisibilitychange",s="webkitVisibilityState")},{}],32:[function(t,e,n){function r(t,e){var n=[],r="",i=0;for(r in t)o.call(t,r)&&(n[i]=e(r,t[r]),i+=1);return n}var o=Object.prototype.hasOwnProperty;e.exports=r},{}],33:[function(t,e,n){function r(t,e,n){e||(e=0),"undefined"==typeof n&&(n=t?t.length:0);for(var r=-1,o=n-e||0,i=Array(o<0?0:o);++r<o;)i[r]=t[e+r];return i}e.exports=r},{}],34:[function(t,e,n){e.exports={exists:"undefined"!=typeof window.performance&&window.performance.timing&&"undefined"!=typeof window.performance.timing.navigationStart}},{}],ee:[function(t,e,n){function r(){}function o(t){function e(t){return t&&t instanceof r?t:t?f(t,c,a):a()}function n(n,r,o,i,a){if(a!==!1&&(a=!0),!l.aborted||i){t&&a&&t(n,r,o);for(var s=e(o),c=m(n),f=c.length,u=0;u<f;u++)c[u].apply(s,r);var p=d[y[n]];return p&&p.push([x,n,r,s]),s}}function i(t,e){g[t]=m(t).concat(e)}function h(t,e){var n=g[t];if(n)for(var r=0;r<n.length;r++)n[r]===e&&n.splice(r,1)}function m(t){return g[t]||[]}function v(t){return p[t]=p[t]||o(n)}function w(t,e){l.aborted||u(t,function(t,n){e=e||"feature",y[n]=e,e in d||(d[e]=[])})}var g={},y={},x={on:i,addEventListener:i,removeEventListener:h,emit:n,get:v,listeners:m,context:e,buffer:w,abort:s,aborted:!1};return x}function i(t){return f(t,c,a)}function a(){return new r}function s(){(d.api||d.feature)&&(l.aborted=!0,d=l.backlog={})}var c="nr@context",f=t("gos"),u=t(32),d={},p={},l=e.exports=o();e.exports.getOrSetContext=i,l.backlog=d},{}],gos:[function(t,e,n){function r(t,e,n){if(o.call(t,e))return t[e];var r=n();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(t,e,{value:r,writable:!0,enumerable:!1}),r}catch(i){}return t[e]=r,r}var o=Object.prototype.hasOwnProperty;e.exports=r},{}],handle:[function(t,e,n){function r(t,e,n,r){o.buffer([t],r),o.emit(t,e,n)}var o=t("ee").get("handle");e.exports=r,r.ee=o},{}],id:[function(t,e,n){function r(t){var e=typeof t;return!t||"object"!==e&&"function"!==e?-1:t===window?0:a(t,i,function(){return o++})}var o=1,i="nr@id",a=t("gos");e.exports=r},{}],loader:[function(t,e,n){function r(){if(!P++){var t=T.info=NREUM.info,e=v.getElementsByTagName("script")[0];if(setTimeout(f.abort,3e4),!(t&&t.licenseKey&&t.applicationID&&e))return f.abort();c(R,function(e,n){t[e]||(t[e]=n)});var n=a();s("mark",["onload",n+T.offset],null,"api"),s("timing",["load",n]);var r=v.createElement("script");0===t.agent.indexOf("http://")||0===t.agent.indexOf("https://")?r.src=t.agent:r.src=h+"://"+t.agent,e.parentNode.insertBefore(r,e)}}function o(){"complete"===v.readyState&&i()}function i(){s("mark",["domContent",a()+T.offset],null,"api")}var a=t(26),s=t("handle"),c=t(32),f=t("ee"),u=t(30),d=t(27),p=t(21),l=t(23),h=p.getConfiguration("ssl")===!1?"http":"https",m=window,v=m.document,w="addEventListener",g="attachEvent",y=m.XMLHttpRequest,x=y&&y.prototype,b=!d(m.location);NREUM.o={ST:setTimeout,SI:m.setImmediate,CT:clearTimeout,XHR:y,REQ:m.Request,EV:m.Event,PR:m.Promise,MO:m.MutationObserver};var E=""+location,R={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-spa-1212.min.js"},O=y&&x&&x[w]&&!/CriOS/.test(navigator.userAgent),T=e.exports={offset:a.getLastTimestamp(),now:a,origin:E,features:{},xhrWrappable:O,userAgent:u,disabled:b};if(!b){t(20),t(28),v[w]?(v[w]("DOMContentLoaded",i,l(!1)),m[w]("load",r,l(!1))):(v[g]("onreadystatechange",o),m[g]("onload",r)),s("mark",["firstbyte",a.getLastTimestamp()],null,"api");var P=0}},{}],"wrap-function":[function(t,e,n){function r(t,e){function n(e,n,r,c,f){function nrWrapper(){var i,a,u,p;try{a=this,i=d(arguments),u="function"==typeof r?r(i,a):r||{}}catch(l){o([l,"",[i,a,c],u],t)}s(n+"start",[i,a,c],u,f);try{return p=e.apply(a,i)}catch(h){throw s(n+"err",[i,a,h],u,f),h}finally{s(n+"end",[i,a,p],u,f)}}return a(e)?e:(n||(n=""),nrWrapper[p]=e,i(e,nrWrapper,t),nrWrapper)}function r(t,e,r,o,i){r||(r="");var s,c,f,u="-"===r.charAt(0);for(f=0;f<e.length;f++)c=e[f],s=t[c],a(s)||(t[c]=n(s,u?c+r:r,o,c,i))}function s(n,r,i,a){if(!h||e){var s=h;h=!0;try{t.emit(n,r,i,e,a)}catch(c){o([c,n,r,i],t)}h=s}}return t||(t=u),n.inPlace=r,n.flag=p,n}function o(t,e){e||(e=u);try{e.emit("internal-error",t)}catch(n){}}function i(t,e,n){if(Object.defineProperty&&Object.keys)try{var r=Object.keys(t);return r.forEach(function(n){Object.defineProperty(e,n,{get:function(){return t[n]},set:function(e){return t[n]=e,e}})}),e}catch(i){o([i],n)}for(var a in t)l.call(t,a)&&(e[a]=t[a]);return e}function a(t){return!(t&&t instanceof Function&&t.apply&&!t[p])}function s(t,e){var n=e(t);return n[p]=t,i(t,n,u),n}function c(t,e,n){var r=t[e];t[e]=s(r,n)}function f(){for(var t=arguments.length,e=new Array(t),n=0;n<t;++n)e[n]=arguments[n];return e}var u=t("ee"),d=t(33),p="nr@original",l=Object.prototype.hasOwnProperty,h=!1;e.exports=r,e.exports.wrapFunction=s,e.exports.wrapInPlace=c,e.exports.argsToArray=f},{}]},{},["loader",2,17,5,3,4]); ;NREUM.loader_config={accountID:"3768898",trustKey:"3768898",agentID:"1134285132",licenseKey:"NRJS-2bc9f9fb1efc463f27c",applicationID:"1134285132"} ;NREUM.info={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",licenseKey:"NRJS-2bc9f9fb1efc463f27c",applicationID:"1134285132",sa:1} newrelic.addRelease("", "Remove-ControllerConfig-r-production-4dd74f6-17d951-17d94f"); </script><meta name=viewport content="width=device-width,initial-scale=1"><meta name=author content="Crossplane Community"><meta name=color-scheme content="light dark"><meta name=docsearch:language content="en"><meta name=generator content="Hugo 0.119.0"><link rel=preload href=/fonts/Avenir-Roman.woff2 as=font type=font/woff2 crossorigin><meta property="og:image" content="/img/crossplane-logo-og.webp"><meta property="twitter:card" content="/img/crossplane-logo-og.webp"><meta property="og:image:width" content="600"><meta property="og:image:height" content="199"><meta property="og:image:alt" content="Crossplane name and popsicle logo"><meta property="twitter:image:alt" content="Crossplane name and popsicle logo"><meta property="og:type" content="website"><meta name=twitter:site content="@crossplane_io"><meta property="og:site_name" content="Crossplane Documentation"><meta name=description content="Providers connect Crossplane to external APIs"><meta property="og:url" content="https://docs.crossplane.io/v1.18/concepts/providers/"><meta name=docsearch:modified content="November 8, 2024"><meta name=docsearch:version content="1.18"><title>Providers · Crossplane v1.18</title><link rel=canonical href=https://docs.crossplane.io/latest/concepts/providers/><script>(()=>{var e=window.matchMedia("(prefers-color-scheme: dark)").matches,t=localStorage.getItem("darkSwitch")!==null&&localStorage.getItem("darkSwitch")==="dark",n=localStorage.getItem("darkSwitch")!==null&&localStorage.getItem("darkSwitch")==="light";n&&(e=!1),t||e?document.documentElement.setAttribute("color-theme","dark"):document.documentElement.setAttribute("color-theme","light")})()</script><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3 media=print onload='this.media="all"'><link rel=preconnect href=https://9UXKYX61NK-dsn.algolia.net crossorigin data-proofer-ignore><link href="https://docs.crossplane.io/scss/docs.0346bfd4a8aeace526724de64ddada78a0e5122b3b0c83b1021770d6ddef1160.css" rel=stylesheet><link rel=apple-touch-icon sizes=180x180 href=/apple-touch-icon.png><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=192x192 href=/android-chrome-192x192.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=manifest href=/site.webmanifest><link rel=mask-icon href=/safari-pinned-tab.svg color=#f87c44><meta name=apple-mobile-web-app-title content="Crossplane Docs"><meta name=application-name content="Crossplane Docs"><meta name=msapplication-TileColor content="#333f5b"><meta name=theme-color content="#ffffff"><meta property="og:title" content="Crossplane Docs · v1.18 · Providers"><meta property="og:description" content="Providers enable Crossplane to provision infrastructure on an external service. Providers create new Kubernetes APIs and map them to external APIs. Providers are responsible for all aspects of …"></head><body><svg xmlns="http://www.w3.org/2000/svg" style="display:none"><symbol id="check2" viewBox="0 0 16 16"><path d="M13.854 3.646a.5.5.0 010 .708l-7 7a.5.5.0 01-.708.0l-3.5-3.5a.5.5.0 11.708-.708L6.5 10.293l6.646-6.647a.5.5.0 01.708.0z"/></symbol><symbol id="x" viewBox="0 0 16 16"><path d="M2.146 2.854a.5.5.0 11.708-.708L8 7.293l5.146-5.147a.5.5.0 01.708.708L8.707 8l5.147 5.146a.5.5.0 01-.708.708L8 8.707l-5.146 5.147a.5.5.0 01-.708-.708L7.293 8 2.146 2.854z"/></symbol><symbol id="chevron-expand" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M3.646 9.146a.5.5.0 01.708.0L8 12.793l3.646-3.647a.5.5.0 01.708.708l-4 4a.5.5.0 01-.708.0l-4-4a.5.5.0 010-.708zm0-2.292a.5.5.0 00.708.0L8 3.207l3.646 3.647a.5.5.0 00.708-.708l-4-4a.5.5.0 00-.708.0l-4 4a.5.5.0 000 .708z"/></symbol><symbol id="clipboard" viewBox="0 0 16 16"><path d="M4 1.5H3a2 2 0 00-2 2V14a2 2 0 002 2h10a2 2 0 002-2V3.5a2 2 0 00-2-2h-1v1h1a1 1 0 011 1V14a1 1 0 01-1 1H3a1 1 0 01-1-1V3.5a1 1 0 011-1h1v-1z"/><path d="M9.5 1a.5.5.0 01.5.5v1a.5.5.0 01-.5.5h-3A.5.5.0 016 2.5v-1a.5.5.0 01.5-.5h3zm-3-1A1.5 1.5.0 005 1.5v1A1.5 1.5.0 006.5 4h3A1.5 1.5.0 0011 2.5v-1A1.5 1.5.0 009.5.0h-3z"/></symbol><symbol id="plus" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8 2a.5.5.0 01.5.5v5h5a.5.5.0 010 1h-5v5a.5.5.0 01-1 0v-5h-5a.5.5.0 010-1h5v-5A.5.5.0 018 2z"/></symbol><symbol id="three-dots" viewBox="0 0 16 16"><path d="M3 9.5a1.5 1.5.0 110-3 1.5 1.5.0 010 3zm5 0a1.5 1.5.0 110-3 1.5 1.5.0 010 3zm5 0a1.5 1.5.0 110-3 1.5 1.5.0 010 3z"/></symbol><symbol id="info" viewBox="0 0 16 16"><path d="M8 15A7 7 0 118 1a7 7 0 010 14zm0 1A8 8 0 108 0a8 8 0 000 16z"/><path d="m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545.0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275.0-.375-.193-.304-.533L8.93 6.588zM9 4.5a1 1 0 11-2 0 1 1 0 012 0z"/></symbol><symbol id="check" viewBox="0 0 16 16"><path d="M8 15A7 7 0 118 1a7 7 0 010 14zm0 1A8 8 0 108 0a8 8 0 000 16z"/><path d="M10.97 4.97a.235.235.0 00-.02.022L7.477 9.417 5.384 7.323a.75.75.0 00-1.06 1.06L6.97 11.03a.75.75.0 001.079-.02l3.992-4.99A.75.75.0 0010.97 4.97z"/></symbol><symbol id="exclamation" viewBox="0 0 16 16"><path d="M8 15A7 7 0 118 1a7 7 0 010 14zm0 1A8 8 0 108 0a8 8 0 000 16z"/><path d="M7.002 11a1 1 0 112 0 1 1 0 01-2 0zM7.1 4.995a.905.905.0 111.8.0l-.35 3.507a.552.552.0 01-1.1.0L7.1 4.995z"/></symbol><symbol id="x-circle" viewBox="0 0 16 16"><path d="M8 15A7 7 0 118 1a7 7 0 010 14zm0 1A8 8 0 108 0a8 8 0 000 16z"/><path d="M4.646 4.646a.5.5.0 01.708.0L8 7.293l2.646-2.647a.5.5.0 01.708.708L8.707 8l2.647 2.646a.5.5.0 01-.708.708L8 8.707l-2.646 2.647a.5.5.0 01-.708-.708L7.293 8 4.646 5.354a.5.5.0 010-.708z"/></symbol><symbol id="fire" viewBox="0 0 16 16"><path d="M8 16c3.314.0 6-2 6-5.5.0-1.5-.5-4-2.5-6 .25 1.5-1.25 2-1.25 2C11 4 9 .5 6 0c.357 2 .5 4-2 6-1.25 1-2 2.729-2 4.5C2 14 4.686 16 8 16zm0-1c-1.657.0-3-1-3-2.75.0-.75.25-2 1.25-3C6.125 10 7 10.5 7 10.5c-.375-1.25.5-3.25 2-3.5-.179 1-.25 2 1 3 .625.5 1 1.364 1 2.25C11 14 9.657 15 8 15z"/></symbol><symbol id="search" viewBox="0 0 16 16"><path d="M11.742 10.344a6.5 6.5.0 10-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 001.415-1.414l-3.85-3.85a1.007 1.007.0 00-.115-.1zM12 6.5a5.5 5.5.0 11-11 0 5.5 5.5.0 0111 0z"/></symbol><symbol id="clipboard-check" viewBox="0 0 16 16"><path d="M6.5.0A1.5 1.5.0 005 1.5v1A1.5 1.5.0 006.5 4h3A1.5 1.5.0 0011 2.5v-1A1.5 1.5.0 009.5.0h-3zm3 1a.5.5.0 01.5.5v1a.5.5.0 01-.5.5h-3A.5.5.0 016 2.5v-1a.5.5.0 01.5-.5h3z"/><path d="M4 1.5H3a2 2 0 00-2 2V14a2 2 0 002 2h10a2 2 0 002-2V3.5a2 2 0 00-2-2h-1v1A2.5 2.5.0 019.5 5h-3A2.5 2.5.0 014 2.5v-1zm6.854 7.354-3 3a.5.5.0 01-.708.0l-1.5-1.5a.5.5.0 01.708-.708L7.5 10.793l2.646-2.647a.5.5.0 01.708.708z"/></symbol><symbol id="pencil-square" viewBox="0 0 16 16"><path d="M15.502 1.94a.5.5.0 010 .706L14.459 3.69l-2-2L13.502.646a.5.5.0 01.707.0l1.293 1.293zm-1.75 2.456-2-2L4.939 9.21a.5.5.0 00-.121.196l-.805 2.414a.25.25.0 00.316.316l2.414-.805a.5.5.0 00.196-.12l6.813-6.814z"/><path fill-rule="evenodd" d="M1 13.5A1.5 1.5.0 002.5 15h11a1.5 1.5.0 001.5-1.5v-6a.5.5.0 00-1 0v6a.5.5.0 01-.5.5h-11a.5.5.0 01-.5-.5v-11a.5.5.0 01.5-.5H9a.5.5.0 000-1H2.5A1.5 1.5.0 001 2.5v11z"/></symbol><symbol id="github" viewBox="0 0 16 16"><path d="M8 0C3.58.0.0 3.58.0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38.0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95.0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12.0.0.67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15.0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48.0 1.07-.01 1.93-.01 2.2.0.21.15.46.55.38A8.012 8.012.0 0016 8c0-4.42-3.58-8-8-8z"/></symbol><symbol id="box-arrow-up-right" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.636 3.5a.5.5.0 00-.5-.5H1.5A1.5 1.5.0 000 4.5v10A1.5 1.5.0 001.5 16h10a1.5 1.5.0 001.5-1.5V7.864a.5.5.0 00-1 0V14.5a.5.5.0 01-.5.5h-10a.5.5.0 01-.5-.5v-10a.5.5.0 01.5-.5h6.636a.5.5.0 00.5-.5z"/><path fill-rule="evenodd" d="M16 .5a.5.5.0 00-.5-.5h-5a.5.5.0 000 1h3.793L6.146 9.146a.5.5.0 10.708.708L15 1.707V5.5a.5.5.0 001 0v-5z"/></symbol></svg><header class="navbar docs-navbar navbar-expand-lg py-0 align-items-center"><div class=docs-left-toggle><button class=navbar-toggler type=button data-bs-toggle=offcanvas data-bs-target=#bdSidebar aria-controls=bdSidebar aria-label="Toggle docs content"><svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentcolor" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M2.5 11.5A.5.5.0 013 11h10a.5.5.0 010 1H3a.5.5.0 01-.5-.5zm0-4A.5.5.0 013 7h10a.5.5.0 010 1H3a.5.5.0 01-.5-.5zm0-4A.5.5.0 013 3h10a.5.5.0 010 1H3a.5.5.0 01-.5-.5z"/></svg> <span class="d-none fs-6 pe-1">Browse</span></button></div><div class="docs-right-toggle order-3"><button class=navbar-toggler type=button data-bs-toggle=offcanvas data-bs-target=#offcanvas aria-controls=offcanvas aria-label="Toggle Crossplane navigation"><svg class="bi white" aria-hidden="true"><use xlink:href="#three-dots"/></svg></button></div><div class=navbar-brand><a href=https://www.crossplane.io aria-label=Crossplane><img src=/img/crossplane-logo.svg alt="Crossplane logo" srcset="/img/crossplane-logo.svg 1x, /img/crossplane-logo.svg 2x" width=152px decoding=async data-nimg=future loading=lazy></a></div><div class="w-100 offcanvas-lg offcanvas-end" tabindex=-1 id=offcanvas aria-labelledby=offcanvasLabel><div class="offcanvas-body p-0"><div class="offcanvas-header p-0"><div class=navbar-brand><a href=https://www.crossplane.io aria-label=Crossplane><img src=/img/crossplane-logo.svg alt="Crossplane logo" srcset="/img/crossplane-logo.svg 1x, /img/crossplane-logo.svg 2x" width=152px decoding=async data-nimg=future loading=lazy></a></div><button type=button class="btn-close btn-close-white" data-bs-dismiss=offcanvas aria-label=Close data-bs-target=#offcanvas></button></div><div class="navbar-center-links collapse navbar-collapse justify-content-evenly show"><ul class="navbar-nav align-items-center"><li class=nav-item><a class=navbar-link href=https://www.crossplane.io/why-control-planes>Why Control Planes?</a></li><li class=nav-item><a class=navbar-link aria-current=page href=https://docs.crossplane.io/>Documentation</a></li><li class=nav-item><a class=navbar-link href=https://www.crossplane.io/community>Community</a></li><li class=nav-item><a class=navbar-link href=https://blog.crossplane.io/>Blog</a></li></ul></div><div class="navbar-icons flex-shrink-1 show"><ul class=navbar-nav><li class="nav-item col-xs p-2"><a class=navbar-link href=https://github.com/crossplane title="Crossplane Github Repository" target=_blank rel=noopener><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentcolor" class="icon-github" viewBox="0 0 16 16"><path d="M8 0C3.58.0.0 3.58.0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38.0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95.0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12.0.0.67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15.0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48.0 1.07-.01 1.93-.01 2.2.0.21.15.46.55.38A8.012 8.012.0 0016 8c0-4.42-3.58-8-8-8z"/></svg><span class=icon-label>Crossplane GitHub</span></a></li><li class="nav-item col-xs p-2"><div id=slack><a class=navbar-link href=https://slack.crossplane.io title="Join the Crossplane Slack" target=_blank rel=noopener><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentcolor" class="icon-slack" viewBox="0 0 16 16"><path d="M3.362 10.11c0 .926-.756 1.681-1.681 1.681S0 11.036.0 10.111C0 9.186.756 8.43 1.68 8.43h1.682v1.68zm.846.0c0-.924.756-1.68 1.681-1.68s1.681.756 1.681 1.68v4.21c0 .924-.756 1.68-1.68 1.68a1.685 1.685.0 01-1.682-1.68v-4.21zM5.89 3.362c-.926.0-1.682-.756-1.682-1.681S4.964.0 5.89.0s1.68.756 1.68 1.68v1.682H5.89zm0 .846c.924.0 1.68.756 1.68 1.681S6.814 7.57 5.89 7.57H1.68C.757 7.57.0 6.814.0 5.89c0-.926.756-1.682 1.68-1.682h4.21zm6.749 1.682c0-.926.755-1.682 1.68-1.682.925.0 1.681.756 1.681 1.681s-.756 1.681-1.68 1.681h-1.681V5.89zm-.848.0c0 .924-.755 1.68-1.68 1.68A1.685 1.685.0 018.43 5.89V1.68C8.43.757 9.186.0 10.11.0c.926.0 1.681.756 1.681 1.68v4.21zm-1.681 6.748c.926.0 1.682.756 1.682 1.681S11.036 16 10.11 16s-1.681-.756-1.681-1.68v-1.682h1.68zm0-.847c-.924.0-1.68-.755-1.68-1.68.0-.925.756-1.681 1.68-1.681h4.21c.924.0 1.68.756 1.68 1.68.0.926-.756 1.681-1.68 1.681h-4.21z"/></svg><span class=icon-label>Crossplane Slack</span></a></div></li><li class="nav-item col-x p-2"><div class="vr d-lg-flex mx-lg-2 text-white"></div></li><li class="nav-item col-xs p-2"><div class="form-check form-switch color-switcher"><input class="d-flex form-check-input" type=checkbox id=darkSwitch> <label class="d-flex navbar-link form-check-label" for=darkSwitch>Dark Mode</label></div></li></ul></div></div></div></header><div class="bd-layout docs-container" data-bs-spy=scroll data-bs-target=#TableOfContents data-bs-threshold=0,1 data-bs-root-margin="0% 0% -75%"><aside class=bd-sidebar><div class="offcanvas-lg offcanvas-start bd-sidebar-container" tabindex=-1 id=bdSidebar aria-labelledby=bdSidebarOffcanvasLabel><div class="offcanvas-header pb-4 border-bottom"><div class="d-flex offcanvas-title fw-bold" id=bdNavbarOffcanvasLabel>Crossplane Documentation - v1.18</div><div class=d-flex><button type=button class="btn-close bi align-self-center p-0" data-bs-dismiss=offcanvas aria-label=Close data-bs-target=#bdSidebar></button></div></div><div class=offcanvas-body><div class="container-fluid p-0"><div class="search-container d-flex row pt-3 ps-4 docsearch opacity-50" data-bs-target=#bdSidebar data-bs-dismiss=offcanvas aria-label="Docs navigation"><div class=p-0 id=docSearch></div></div><nav class="bd-links-nav w-100" aria-label="Docs navigation"><div class="section-container container pe-0 pt-1"><div class="container nav-container pe-0 d-flex w-100"><a class="d-flex w-100 border-0" href=https://docs.crossplane.io/v1.18/>Overview</a></div></div><div class="section-container container pe-0 pt-1"><div class="container nav-container pe-0 d-flex w-100"><a class="d-flex w-100 border-0" href=https://docs.crossplane.io/v1.18/getting-started/>Getting Started</a><div class="d-flex flex-shrink-1 sidebar-control-container align-self-center"><input type=checkbox class="d-flex sidebar-checkbox" aria-label="Close or Expand Getting Started Section"> <label for=collapse-83678735 class="sidebar-label collapsed" data-bs-toggle=collapse data-bs-target=#collapse-83678735 aria-expanded=false aria-label="Close or Expand Getting Started Section"><svg class="flex bi sidebar-icon plus"><use xlink:href="#plus"/></svg><svg class="flex bi sidebar-icon x"><use xlink:href="#x"/></svg></label></div></div><div class="container flex-row collapse" id=collapse-83678735><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/getting-started/introduction/>Crossplane Introduction</a></div></div><div class="container flex-row collapse" id=collapse-83678735><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/getting-started/provider-aws/>AWS Quickstart</a></div></div><div class="container flex-row collapse" id=collapse-83678735><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/getting-started/provider-azure/>Azure Quickstart</a></div></div><div class="container flex-row collapse" id=collapse-83678735><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/getting-started/provider-gcp/>GCP Quickstart</a></div></div></div><div class="section-container container pe-0 pt-1"><div class="container nav-container pe-0 d-flex w-100"><a class="d-flex w-100 border-0" href=https://docs.crossplane.io/v1.18/software/>Install, Upgrade and Uninstall</a><div class="d-flex flex-shrink-1 sidebar-control-container align-self-center"><input type=checkbox class="d-flex sidebar-checkbox" aria-label="Close or Expand Install, Upgrade and Uninstall Section"> <label for=collapse-2ea344ac class="sidebar-label collapsed" data-bs-toggle=collapse data-bs-target=#collapse-2ea344ac aria-expanded=false aria-label="Close or Expand Install, Upgrade and Uninstall Section"><svg class="flex bi sidebar-icon plus"><use xlink:href="#plus"/></svg><svg class="flex bi sidebar-icon x"><use xlink:href="#x"/></svg></label></div></div><div class="container flex-row collapse" id=collapse-2ea344ac><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/software/install/>Install Crossplane</a></div></div><div class="container flex-row collapse" id=collapse-2ea344ac><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/software/upgrade/>Upgrade Crossplane</a></div></div><div class="container flex-row collapse" id=collapse-2ea344ac><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/software/uninstall/>Uninstall Crossplane</a></div></div></div><div class="section-container container pe-0 pt-1"><div class="container nav-container pe-0 d-flex w-100 active-parent"><a class="d-flex w-100 border-0" href=https://docs.crossplane.io/v1.18/concepts/>Concepts</a><div class="d-flex flex-shrink-1 sidebar-control-container align-self-center"><input type=checkbox class="d-flex sidebar-checkbox" checked aria-label="Close or Expand Concepts Section"> <label for=collapse-4c9a67bb class=sidebar-label data-bs-toggle=collapse data-bs-target=#collapse-4c9a67bb aria-expanded=false aria-label="Close or Expand Concepts Section"><svg class="flex bi sidebar-icon plus"><use xlink:href="#plus"/></svg><svg class="flex bi sidebar-icon x"><use xlink:href="#x"/></svg></label></div></div><div class="container flex-row collapse show" id=collapse-4c9a67bb><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/concepts/pods/>Crossplane Pods</a></div></div><div class="container flex-row collapse show" id=collapse-4c9a67bb><div class="d-flex flex-column"><a class="bd-links d-flex active" href=https://docs.crossplane.io/v1.18/concepts/providers/>Providers</a></div></div><div class="container flex-row collapse show" id=collapse-4c9a67bb><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/concepts/managed-resources/>Managed Resources</a></div></div><div class="container flex-row collapse show" id=collapse-4c9a67bb><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/concepts/compositions/>Compositions</a></div></div><div class="container flex-row collapse show" id=collapse-4c9a67bb><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/concepts/composition-revisions/>Composition Revisions</a></div></div><div class="container flex-row collapse show" id=collapse-4c9a67bb><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/concepts/composite-resource-definitions/>Composite Resource Definitions</a></div></div><div class="container flex-row collapse show" id=collapse-4c9a67bb><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/concepts/composite-resources/>Composite Resources</a></div></div><div class="container flex-row collapse show" id=collapse-4c9a67bb><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/concepts/claims/>Claims</a></div></div><div class="container flex-row collapse show" id=collapse-4c9a67bb><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/concepts/environment-configs/>Environment Configurations</a></div></div><div class="container flex-row collapse show" id=collapse-4c9a67bb><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/concepts/usages/>Usages</a></div></div><div class="container flex-row collapse show" id=collapse-4c9a67bb><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/concepts/connection-details/>Connection Details</a></div></div><div class="container flex-row collapse show" id=collapse-4c9a67bb><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/concepts/packages/>Configuration Packages</a></div></div><div class="container flex-row collapse show" id=collapse-4c9a67bb><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/concepts/server-side-apply/>Server-Side Apply</a></div></div><div class="container flex-row collapse show" id=collapse-4c9a67bb><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/concepts/image-configs/>Image Configs</a></div></div></div><div class="section-container container pe-0 pt-1"><div class="container nav-container pe-0 d-flex w-100"><a class="d-flex w-100 border-0" href=https://docs.crossplane.io/v1.18/guides/>Guides</a><div class="d-flex flex-shrink-1 sidebar-control-container align-self-center"><input type=checkbox class="d-flex sidebar-checkbox" aria-label="Close or Expand Guides Section"> <label for=collapse-0092279e class="sidebar-label collapsed" data-bs-toggle=collapse data-bs-target=#collapse-0092279e aria-expanded=false aria-label="Close or Expand Guides Section"><svg class="flex bi sidebar-icon plus"><use xlink:href="#plus"/></svg><svg class="flex bi sidebar-icon x"><use xlink:href="#x"/></svg></label></div></div><div class="container flex-row collapse" id=collapse-0092279e><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/guides/disaster-recovery/>Disaster Recovery with Crossplane</a></div></div><div class="container flex-row collapse" id=collapse-0092279e><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/guides/metrics/>Metrics</a></div></div><div class="container flex-row collapse" id=collapse-0092279e><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/guides/function-patch-and-transform/>Function Patch and Transform</a></div></div><div class="container flex-row collapse" id=collapse-0092279e><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/guides/write-a-composition-function-in-go/>Write a Composition Function in Go</a></div></div><div class="container flex-row collapse" id=collapse-0092279e><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/guides/write-a-composition-function-in-python/>Write a Composition Function in Python</a></div></div><div class="container flex-row collapse" id=collapse-0092279e><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/guides/import-existing-resources/>Import Existing Resources</a></div></div><div class="container flex-row collapse" id=collapse-0092279e><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/guides/vault-as-secret-store/>Vault as an External Secret Store</a></div></div><div class="container flex-row collapse" id=collapse-0092279e><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/guides/vault-injection/>Vault Credential Injection</a></div></div><div class="container flex-row collapse" id=collapse-0092279e><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/guides/multi-tenant/>Multi-Tenant Crossplane</a></div></div><div class="container flex-row collapse" id=collapse-0092279e><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/guides/crossplane-with-argo-cd/>Configuring Crossplane with Argo CD</a></div></div><div class="container flex-row collapse" id=collapse-0092279e><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/guides/self-signed-ca-certs/>Self-Signed CA Certs</a></div></div><div class="container flex-row collapse" id=collapse-0092279e><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/guides/troubleshoot-crossplane/>Troubleshoot Crossplane</a></div></div></div><div class="section-container container pe-0 pt-1"><div class="container nav-container pe-0 d-flex w-100"><a class="d-flex w-100 border-0" href=https://docs.crossplane.io/v1.18/cli/>CLI Reference</a><div class="d-flex flex-shrink-1 sidebar-control-container align-self-center"><input type=checkbox class="d-flex sidebar-checkbox" aria-label="Close or Expand CLI Reference Section"> <label for=collapse-ffd26267 class="sidebar-label collapsed" data-bs-toggle=collapse data-bs-target=#collapse-ffd26267 aria-expanded=false aria-label="Close or Expand CLI Reference Section"><svg class="flex bi sidebar-icon plus"><use xlink:href="#plus"/></svg><svg class="flex bi sidebar-icon x"><use xlink:href="#x"/></svg></label></div></div><div class="container flex-row collapse" id=collapse-ffd26267><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/cli/command-reference/>Command Reference</a></div></div></div><div class="section-container container pe-0 pt-1"><div class="container nav-container pe-0 d-flex w-100"><a class="d-flex w-100 border-0" href=https://docs.crossplane.io/v1.18/api/>API Reference</a><div class="d-flex flex-shrink-1 sidebar-control-container align-self-center"><input type=checkbox class="d-flex sidebar-checkbox" aria-label="Close or Expand API Reference Section"> <label for=collapse-6144acbe class="sidebar-label collapsed" data-bs-toggle=collapse data-bs-target=#collapse-6144acbe aria-expanded=false aria-label="Close or Expand API Reference Section"><svg class="flex bi sidebar-icon plus"><use xlink:href="#plus"/></svg><svg class="flex bi sidebar-icon x"><use xlink:href="#x"/></svg></label></div></div></div><div class="section-container container pe-0 pt-1"><div class="container nav-container pe-0 d-flex w-100"><a class="d-flex w-100 border-0" href=https://docs.crossplane.io/v1.18/learn/>Learn More</a><div class="d-flex flex-shrink-1 sidebar-control-container align-self-center"><input type=checkbox class="d-flex sidebar-checkbox" aria-label="Close or Expand Learn More Section"> <label for=collapse-a721e305 class="sidebar-label collapsed" data-bs-toggle=collapse data-bs-target=#collapse-a721e305 aria-expanded=false aria-label="Close or Expand Learn More Section"><svg class="flex bi sidebar-icon plus"><use xlink:href="#plus"/></svg><svg class="flex bi sidebar-icon x"><use xlink:href="#x"/></svg></label></div></div><div class="container flex-row collapse" id=collapse-a721e305><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/learn/release-cycle/>Release Cycle</a></div></div><div class="container flex-row collapse" id=collapse-a721e305><div class="d-flex flex-column"><a class="bd-links d-flex" href=https://docs.crossplane.io/v1.18/learn/feature-lifecycle/>Feature Lifecycle</a></div></div></div><div class="section-container container pe-0 pt-1"><div class=nav-container><a href=https://docs.crossplane.io/contribute/ class="d-inline-flex align-items-center">Contributing Guide</a></div></div><div class="section-container container pe-0 pt-1"><div class="container nav-container pe-0 d-flex w-100"><a class="d-flex w-100 border-0" href="https://github.com/orgs/crossplane/projects/20/views/9?pane=info" target=_blank>Crossplane Roadmap</a><div class="d-flex flex-shrink-1 sidebar-control-container align-self-center"><a href="https://github.com/orgs/crossplane/projects/20/views/9?pane=info"><svg class="flex bi"><use xlink:href="#box-arrow-up-right"/></svg></a></div></div></div></nav></div></div></aside><main class="bd-main order-1"><div class="bd-intro pt-2 ps-lg-2"><div class="d-md-flex flex-md-row-reverse align-items-center justify-content-between"><div class="mb-3 mb-md-0 d-flex"><div class="dropdown float-end bd-dropdown"><a class="btn btn-outline-secondary dropdown-toggle bd-dropdown-item text-reset" href=# role=button id=dropdownMenuLink data-bs-toggle=dropdown aria-haspopup=true aria-expanded=false>v1.18<div class="badge rounded-pill latest">Latest</div></a><div class="dropdown-menu bd-border-color bd-dropdown" aria-labelledby=dropdownMenuLink><a class="dropdown-item bd-dropdown-item" href=https://docs.crossplane.io/master/concepts/providers/>master</a> <a class="dropdown-item bd-dropdown-item active" aria-current=true href=https://docs.crossplane.io/v1.18/concepts/providers/>v1.18<div class="badge rounded-pill latest">Latest</div></a><a class="dropdown-item bd-dropdown-item" href=https://docs.crossplane.io/v1.17/concepts/providers/>v1.17</a> <a class="dropdown-item bd-dropdown-item" href=https://docs.crossplane.io/v1.16/concepts/providers/>v1.16</a></div></div></div><h1 class="bd-title mb-0" id=content>Providers</h1></div></div><div class="bd-toc mt-3 mb-5 my-lg-0 ps-xl-3 mb-lg-5"><button class="btn btn-link p-md-0 mb-2 mb-md-0 text-decoration-none bd-toc-toggle d-md-none" type=button data-bs-toggle=collapse data-bs-target=#tocContents aria-expanded=false aria-controls=tocContents> On this page<svg class="bi d-md-none ms-2" aria-hidden="true"><use xlink:href="#chevron-expand"/></svg></button> <strong class="d-none d-md-block h6 my-2">On this page</strong><hr class="d-none d-md-block my-2"><div class="collapse bd-toc-collapse" id=tocContents><nav id=TableOfContents><ul class=nav><li class=nav-item><a class=nav-link href=#install-a-provider>Install a Provider</a><ul class=nav><li class=nav-item><a class=nav-link href=#install-with-helm>Install with Helm</a></li><li class=nav-item><a class=nav-link href=#install-offline>Install offline</a></li><li class=nav-item><a class=nav-link href=#installation-options>Installation options</a><ul class=nav><li class=nav-item><a class=nav-link href=#provider-pull-policy>Provider pull policy</a></li><li class=nav-item><a class=nav-link href=#revision-activation-policy>Revision activation policy</a></li><li class=nav-item><a class=nav-link href=#package-revision-history-limit>Package revision history limit</a></li><li class=nav-item><a class=nav-link href=#install-a-provider-from-a-private-registry>Install a provider from a private registry</a></li><li class=nav-item><a class=nav-link href=#ignore-dependencies>Ignore dependencies</a></li><li class=nav-item><a class=nav-link href=#ignore-crossplane-version-requirements>Ignore Crossplane version requirements</a></li></ul></li><li class=nav-item><a class=nav-link href=#manage-dependencies>Manage dependencies</a></li></ul></li><li class=nav-item><a class=nav-link href=#upgrade-a-provider>Upgrade a Provider</a></li><li class=nav-item><a class=nav-link href=#remove-a-provider>Remove a Provider</a></li><li class=nav-item><a class=nav-link href=#verify-a-provider>Verify a Provider</a><ul class=nav><li class=nav-item><a class=nav-link href=#provider-conditions>Provider conditions</a><ul class=nav><li class=nav-item><a class=nav-link href=#types>Types</a></li><li class=nav-item><a class=nav-link href=#reasons>Reasons</a><ul class=nav><li class=nav-item><a class=nav-link href=#inactivepackagerevision>InactivePackageRevision</a></li><li class=nav-item><a class=nav-link href=#activepackagerevision>ActivePackageRevision</a></li><li class=nav-item><a class=nav-link href=#healthypackagerevision>HealthyPackageRevision</a></li><li class=nav-item><a class=nav-link href=#unhealthypackagerevision>UnhealthyPackageRevision</a></li><li class=nav-item><a class=nav-link href=#unknownpackagerevisionhealth>UnknownPackageRevisionHealth</a></li></ul></li></ul></li></ul></li><li class=nav-item><a class=nav-link href=#configure-a-provider>Configure a Provider</a><ul class=nav><li class=nav-item><a class=nav-link href=#controller-configuration>Controller configuration</a></li><li class=nav-item><a class=nav-link href=#runtime-configuration>Runtime configuration</a><ul class=nav><li class=nav-item><a class=nav-link href=#configuring-runtime-deployment-spec>Configuring runtime deployment spec</a></li><li class=nav-item><a class=nav-link href=#configuring-metadata-of-runtime-resources>Configuring metadata of runtime resources</a></li></ul></li><li class=nav-item><a class=nav-link href=#provider-configuration>Provider configuration</a></li></ul></li></ul></li></ul></nav><nav class=pt-3><div class=pb-2><svg class="bi" width="1em" height="1em"><use xlink:href="#pencil-square"/></svg><span class=ps-1><a target=_blank href="https://github.com/crossplane/docs/issues/new?title=[Web%20Bug]%20-%20Providers&body=%3c!--%20What%27s%20the%20problem?%20--%3e%0a%0a%0aURL:%20https://docs.crossplane.io/v1.18/concepts/providers/">Report a problem</a></span></div><div><svg class="bi" width="1em" height="1em"><use xlink:href="#github"/></svg><span class=ps-1><a href=https://github.com/crossplane/docs/tree/master/content/v1.18/concepts/providers.md>View page source</a></span></div></div></nav></div><div class="bd-content ps-lg-2 DocSearch-content"><p>Providers enable Crossplane to provision infrastructure on an external service. Providers create new Kubernetes APIs and map them to external APIs.</p><p>Providers are responsible for all aspects of connecting to non-Kubernetes resources. This includes authentication, making external API calls and providing <a href=https://kubernetes.io/docs/concepts/architecture/controller/>Kubernetes Controller</a> logic for any external resources.</p><p>Examples of providers include:</p><ul><li><a href=https://github.com/upbound/provider-aws>Provider AWS</a></li><li><a href=https://github.com/upbound/provider-azure>Provider Azure</a></li><li><a href=https://github.com/upbound/provider-gcp>Provider GCP</a></li><li><a href=https://github.com/crossplane-contrib/provider-kubernetes>Provider Kubernetes</a></li></ul><div class="admonition tip d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="tip:"><use xlink:href="#check"/></svg><span class=ps-1>Tip</span></div><div class=admonition-content>Find more providers in Crossplane’s <a href=https://www.crossplane.io/registries>public package registries</a>.</div></div><p>Providers define every external resource they can create in Kubernetes as a Kubernetes API endpoint.<br>These endpoints are <a href=https://docs.crossplane.io/v1.18/concepts/managed-resources/><em>Managed Resources</em></a>.</p><h2 id=install-a-provider>Install a Provider <a class=anchor-link id=install-a-provider href=#install-a-provider aria-label="Link to this section: Install a Provider"></a></h2><p>Installing a provider creates new Kubernetes resources representing the Provider’s APIs. Installing a provider also creates a Provider pod that’s responsible for reconciling the Provider’s APIs into the Kubernetes cluster. Providers constantly watch the state of the desired managed resources and create any external resources that are missing.</p><p>Install a Provider with a Crossplane <code><highlight-term id=1731573034686229044 data-label=install data-line=2>Provider</highlight-term></code> object setting the <code><highlight-term id=1731573034686261440 data-label=install data-line=6>spec.package</highlight-term></code> value to the location of the provider package.</p><div class="admonition important d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="important:"><use xlink:href="#exclamation"/></svg><span class=ps-1>Important</span></div><div class=admonition-content><p>Beginning with Crossplane version 1.15.0 Crossplane uses the Upbound Marketplace Crossplane package registry at <code>xpkg.upbound.io</code> by default for downloading and installing packages.</p><p>Specify the full domain name with the <code>package</code> or change the default Crossplane registry with the <code>--registry</code> flag on the <a href=https://docs.crossplane.io/v1.18/concepts/pods/>Crossplane pod</a></p></div></div><p>For example, to install the <a href=https://github.com/crossplane-contrib/provider-aws>AWS Community Provider</a>,</p><div class=highlight label=install><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-0-1><a class=lnlinks href=#hl-0-1>1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>pkg.crossplane.io/v1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-2><a class=lnlinks href=#hl-0-2>2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>Provider</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-3><a class=lnlinks href=#hl-0-3>3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-4><a class=lnlinks href=#hl-0-4>4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>provider-aws</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-5><a class=lnlinks href=#hl-0-5>5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-6><a class=lnlinks href=#hl-0-6>6</a></span><span class=cl><span class=w> </span><span class=nt>package</span><span class=p>:</span><span class=w> </span><span class=l>xpkg.upbound.io/crossplane-contrib/provider-aws:v0.39.0</span><span class=w> </span></span></span></code></pre></div><p>By default, the Provider pod installs in the same namespace as Crossplane (<code>crossplane-system</code>).</p><div class="admonition note d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="note:"><use xlink:href="#info"/></svg><span class=ps-1>Note</span></div><div class=admonition-content><p>Providers are part of the <code><highlight-term id=1731573034686518667 data-label=install data-line=1>pkg.crossplane.io</highlight-term></code> group.</p><p>The <code><highlight-term id=1731573034686540061 data-label=meta-pkg data-line=1>meta.pkg.crossplane.io</highlight-term></code> group is for creating Provider packages.</p><p>Instructions on building Providers are outside of the scope of this document.<br>Read the Crossplane contributing <a href=https://github.com/crossplane/crossplane/blob/main/contributing/guide-provider-development.md>Provider Development Guide</a> for more information.</p><p>For information on the specification of Provider packages read the <a href=https://github.com/crossplane/crossplane/blob/main/contributing/specifications/xpkg.md#provider-package-requirements>Crossplane Provider Package specification</a>.</p><div class=highlight label=meta-pkg><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-0-1><a class=lnlinks href=#hl-0-1>1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>meta.pkg.crossplane.io/v1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-2><a class=lnlinks href=#hl-0-2>2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>Provider</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-3><a class=lnlinks href=#hl-0-3>3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-4><a class=lnlinks href=#hl-0-4>4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>provider-aws</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-5><a class=lnlinks href=#hl-0-5>5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-6><a class=lnlinks href=#hl-0-6>6</a></span><span class=cl><span class=w></span><span class=c># Removed for brevity</span><span class=w> </span></span></span></code></pre></div></div></div><h3 id=install-with-helm>Install with Helm <a class=anchor-link id=install-with-helm href=#install-with-helm aria-label="Link to this section: Install with Helm"></a></h3><p>Crossplane supports installing Providers during an initial Crossplane installation with the Crossplane Helm chart.</p><p>Use the <code><highlight-term id=1731573034686968468 data-label=helm data-line=5>--set provider.packages</highlight-term></code> argument with <code>helm install</code>.</p><p>For example, to install the AWS Community Provider,</p><div class=highlight label=helm><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=ln id=hl-1-1><a class=lnlinks href=#hl-1-1>1</a></span><span class=cl>helm install crossplane <span class=se>\ </span></span></span><span class=line><span class=ln id=hl-1-2><a class=lnlinks href=#hl-1-2>2</a></span><span class=cl><span class=se></span>crossplane-stable/crossplane <span class=se>\ </span></span></span><span class=line><span class=ln id=hl-1-3><a class=lnlinks href=#hl-1-3>3</a></span><span class=cl><span class=se></span>--namespace crossplane-system <span class=se>\ </span></span></span><span class=line><span class=ln id=hl-1-4><a class=lnlinks href=#hl-1-4>4</a></span><span class=cl><span class=se></span>--create-namespace <span class=se>\ </span></span></span><span class=line><span class=ln id=hl-1-5><a class=lnlinks href=#hl-1-5>5</a></span><span class=cl><span class=se></span>--set provider.packages<span class=o>=</span><span class=s1>'{xpkg.upbound.io/crossplane-contrib/provider-aws:v0.39.0}'</span> </span></span></code></pre></div><h3 id=install-offline>Install offline <a class=anchor-link id=install-offline href=#install-offline aria-label="Link to this section: Install offline"></a></h3><p>Installing Crossplane Providers offline requires a local container registry like <a href=https://goharbor.io/>Harbor</a> to host Provider packages. Crossplane only supports installing Provider packages from a container registry.</p><p>Crossplane doesn’t support installing Provider packages directly from Kubernetes volumes.</p><h3 id=installation-options>Installation options <a class=anchor-link id=installation-options href=#installation-options aria-label="Link to this section: Installation options"></a></h3><p>Providers support multiple configuration options to change installation related settings.</p><div class="admonition tip d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="tip:"><use xlink:href="#check"/></svg><span class=ps-1>Tip</span></div><div class=admonition-content><p>Crossplane supports installations with image digests instead of tags to get deterministic and repeatable installations.</p><div class=highlight label=digest><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-0-1><a class=lnlinks href=#hl-0-1>1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>pkg.crossplane.io/v1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-2><a class=lnlinks href=#hl-0-2>2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>Provider</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-3><a class=lnlinks href=#hl-0-3>3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-4><a class=lnlinks href=#hl-0-4>4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>provider-aws</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-5><a class=lnlinks href=#hl-0-5>5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-6><a class=lnlinks href=#hl-0-6>6</a></span><span class=cl><span class=w> </span><span class=nt>package</span><span class=p>:</span><span class=w> </span><span class=l>xpkg.upbound.io/crossplane-contrib/provider-aws@sha256:ee6bece46dbb54cc3f0233961f5baac317fa4e4a81b41198bdc72fc472d113d0</span><span class=w> </span></span></span></code></pre></div></div></div><h4 id=provider-pull-policy>Provider pull policy <a class=anchor-link id=provider-pull-policy href=#provider-pull-policy aria-label="Link to this section: Provider pull policy"></a></h4><p>Use a <code><highlight-term id=1731573034687387576 data-label=pullpolicy data-line=6>packagePullPolicy</highlight-term></code> to define when Crossplane should download the Provider package to the local Crossplane package cache.</p><p>The <code>packagePullPolicy</code> options are:</p><ul><li><code>IfNotPresent</code> - (<strong>default</strong>) Only download the package if it isn’t in the cache.</li><li><code>Always</code> - Check for new packages every minute and download any matching package that isn’t in the cache.</li><li><code>Never</code> - Never download the package. Packages are only installed from the local package cache.</li></ul><div class="admonition tip d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="tip:"><use xlink:href="#check"/></svg><span class=ps-1>Tip</span></div><div class=admonition-content><p>The Crossplane <code><highlight-term id=1731573034687448072 data-label=pullpolicy data-line=6>packagePullPolicy</highlight-term></code> works like the Kubernetes container image <a href=https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy>image pull policy</a>.</p><p>Crossplane supports the use of tags and package digest hashes like Kubernetes images.</p></div></div><p>For example, to <code>Always</code> download a given Provider package use the <code><highlight-term id=1731573034687572555 data-label=pullpolicy data-line=6>packagePullPolicy: Always</highlight-term></code> configuration.</p><div class=highlight label=pullpolicy copy-lines=6><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-2-1><a class=lnlinks href=#hl-2-1>1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>pkg.crossplane.io/v1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-2-2><a class=lnlinks href=#hl-2-2>2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>Provider</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-2-3><a class=lnlinks href=#hl-2-3>3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-2-4><a class=lnlinks href=#hl-2-4>4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>provider-aws</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-2-5><a class=lnlinks href=#hl-2-5>5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-2-6><a class=lnlinks href=#hl-2-6>6</a></span><span class=cl><span class=w> </span><span class=nt>packagePullPolicy</span><span class=p>:</span><span class=w> </span><span class=l>Always</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-2-7><a class=lnlinks href=#hl-2-7>7</a></span><span class=cl><span class=w></span><span class=c># Removed for brevity</span><span class=w> </span></span></span></code></pre></div><h4 id=revision-activation-policy>Revision activation policy <a class=anchor-link id=revision-activation-policy href=#revision-activation-policy aria-label="Link to this section: Revision activation policy"></a></h4><p>The <code>Active</code> package revision is the package controller actively reconciling resources.</p><p>By default Crossplane sets the most recently installed package revision as <code>Active</code>.</p><p>Control the Provider upgrade behavior with a <code><highlight-term id=1731573034687632210 data-label=revision data-line=6>revisionActivationPolicy</highlight-term></code>.</p><p>The <code><highlight-term id=1731573034687656502 data-label=revision data-line=6>revisionActivationPolicy</highlight-term></code> options are:</p><ul><li><code>Automatic</code> - (<strong>default</strong>) Automatically activate the last installed Provider.</li><li><code>Manual</code> - Don’t automatically activate a Provider.</li></ul><p>For example, to change the upgrade behavior to require manual upgrades, set <code><highlight-term id=1731573034687683038 data-label=revision data-line=6>revisionActivationPolicy: Manual</highlight-term></code>.</p><div class=highlight label=revision><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-3-1><a class=lnlinks href=#hl-3-1>1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>pkg.crossplane.io/v1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-3-2><a class=lnlinks href=#hl-3-2>2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>Provider</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-3-3><a class=lnlinks href=#hl-3-3>3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-3-4><a class=lnlinks href=#hl-3-4>4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>provider-aws</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-3-5><a class=lnlinks href=#hl-3-5>5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-3-6><a class=lnlinks href=#hl-3-6>6</a></span><span class=cl><span class=w> </span><span class=nt>revisionActivationPolicy</span><span class=p>:</span><span class=w> </span><span class=l>Manual</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-3-7><a class=lnlinks href=#hl-3-7>7</a></span><span class=cl><span class=w></span><span class=c># Removed for brevity</span><span class=w> </span></span></span></code></pre></div><h4 id=package-revision-history-limit>Package revision history limit <a class=anchor-link id=package-revision-history-limit href=#package-revision-history-limit aria-label="Link to this section: Package revision history limit"></a></h4><p>When Crossplane installs a different version of the same Provider package Crossplane creates a new <em>revision</em>.</p><p>By default Crossplane maintains one <em>Inactive</em> revision.</p><div class="admonition note d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="note:"><use xlink:href="#info"/></svg><span class=ps-1>Note</span></div><div class=admonition-content>Read the <a href=#upgrade-a-provider>Provider upgrade</a> section for more information on the use of package revisions.</div></div><p>Change the number of revisions Crossplane maintains with a Provider Package <code><highlight-term id=1731573034687841190 data-label=revHistoryLimit data-line=6>revisionHistoryLimit</highlight-term></code>.</p><p>The <code><highlight-term id=1731573034687890787 data-label=revHistoryLimit data-line=6>revisionHistoryLimit</highlight-term></code> field is an integer.<br>The default value is <code>1</code>.<br>Disable storing revisions by setting <code><highlight-term id=1731573034687993878 data-label=revHistoryLimit data-line=6>revisionHistoryLimit</highlight-term></code> to <code>0</code>.</p><p>For example, to change the default setting and store 10 revisions use <code><highlight-term id=1731573034688026088 data-label=revHistoryLimit data-line=6>revisionHistoryLimit: 10</highlight-term></code>.</p><div class=highlight label=revHistoryLimit><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-4-1><a class=lnlinks href=#hl-4-1>1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>pkg.crossplane.io/v1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-4-2><a class=lnlinks href=#hl-4-2>2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>Provider</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-4-3><a class=lnlinks href=#hl-4-3>3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-4-4><a class=lnlinks href=#hl-4-4>4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>provider-aws</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-4-5><a class=lnlinks href=#hl-4-5>5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-4-6><a class=lnlinks href=#hl-4-6>6</a></span><span class=cl><span class=w> </span><span class=nt>revisionHistoryLimit</span><span class=p>:</span><span class=w> </span><span class=m>10</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-4-7><a class=lnlinks href=#hl-4-7>7</a></span><span class=cl><span class=w></span><span class=c># Removed for brevity</span><span class=w> </span></span></span></code></pre></div><h4 id=install-a-provider-from-a-private-registry>Install a provider from a private registry <a class=anchor-link id=install-a-provider-from-a-private-registry href=#install-a-provider-from-a-private-registry aria-label="Link to this section: Install a provider from a private registry"></a></h4><p>Like Kubernetes uses <code>imagePullSecrets</code> to <a href=https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/>install images from private registries</a>, Crossplane uses <code>packagePullSecrets</code> to install Provider packages from a private registry.</p><p>Use <code><highlight-term id=1731573034688066994 data-label=pps data-line=6>packagePullSecrets</highlight-term></code> to provide a Kubernetes secret to use for authentication when downloading a Provider package.</p><div class="admonition important d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="important:"><use xlink:href="#exclamation"/></svg><span class=ps-1>Important</span></div><div class=admonition-content>The Kubernetes secret must be in the same namespace as Crossplane.</div></div><p>The <code><highlight-term id=1731573034688178147 data-label=pps data-line=6>packagePullSecrets</highlight-term></code> is a list of secrets.</p><p>For example, to use the secret named <code><highlight-term id=1731573034688231298 data-label=pps data-line=6>example-secret</highlight-term></code> configure a <code><highlight-term id=1731573034688271916 data-label=pps data-line=6>packagePullSecrets</highlight-term></code>.</p><div class=highlight label=pps><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-5-1><a class=lnlinks href=#hl-5-1>1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>pkg.crossplane.io/v1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-5-2><a class=lnlinks href=#hl-5-2>2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>Provider</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-5-3><a class=lnlinks href=#hl-5-3>3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-5-4><a class=lnlinks href=#hl-5-4>4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>provider-aws</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-5-5><a class=lnlinks href=#hl-5-5>5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-5-6><a class=lnlinks href=#hl-5-6>6</a></span><span class=cl><span class=w> </span><span class=nt>packagePullSecrets</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-5-7><a class=lnlinks href=#hl-5-7>7</a></span><span class=cl><span class=w> </span>- <span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>example-secret</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-5-8><a class=lnlinks href=#hl-5-8>8</a></span><span class=cl><span class=w></span><span class=c># Removed for brevity</span><span class=w> </span></span></span></code></pre></div><div class="admonition note d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="note:"><use xlink:href="#info"/></svg><span class=ps-1>Note</span></div><div class=admonition-content>Configured <code>packagePullSecrets</code> aren’t passed to any Provider package dependencies.</div></div><h4 id=ignore-dependencies>Ignore dependencies <a class=anchor-link id=ignore-dependencies href=#ignore-dependencies aria-label="Link to this section: Ignore dependencies"></a></h4><p>By default Crossplane installs any <a href=#manage-dependencies>dependencies</a> listed in a Provider package.</p><p>Crossplane can ignore a Provider package’s dependencies with <code><highlight-term id=1731573034688361465 data-label=pkgDep data-line=6>skipDependencyResolution</highlight-term></code>.</p><p>For example, to disable dependency resolution configure <code><highlight-term id=1731573034688387943 data-label=pkgDep data-line=6>skipDependencyResolution: true</highlight-term></code>.</p><div class=highlight label=pkgDep><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-6-1><a class=lnlinks href=#hl-6-1>1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>pkg.crossplane.io/v1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-6-2><a class=lnlinks href=#hl-6-2>2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>Provider</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-6-3><a class=lnlinks href=#hl-6-3>3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-6-4><a class=lnlinks href=#hl-6-4>4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>provider-aws</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-6-5><a class=lnlinks href=#hl-6-5>5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-6-6><a class=lnlinks href=#hl-6-6>6</a></span><span class=cl><span class=w> </span><span class=nt>skipDependencyResolution</span><span class=p>:</span><span class=w> </span><span class=kc>true</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-6-7><a class=lnlinks href=#hl-6-7>7</a></span><span class=cl><span class=w></span><span class=c># Removed for brevity</span><span class=w> </span></span></span></code></pre></div><h4 id=ignore-crossplane-version-requirements>Ignore Crossplane version requirements <a class=anchor-link id=ignore-crossplane-version-requirements href=#ignore-crossplane-version-requirements aria-label="Link to this section: Ignore Crossplane version requirements"></a></h4><p>A Provider package may require a specific or minimum Crossplane version before installing. By default, Crossplane doesn’t install a Provider if the Crossplane version doesn’t meet the required version.</p><p>Crossplane can ignore the required version with <code><highlight-term id=1731573034688442810 data-label=xpVer data-line=6>ignoreCrossplaneConstraints</highlight-term></code>.</p><p>For example, to install a Provider package into an unsupported Crossplane version, configure <code><highlight-term id=1731573034688487332 data-label=xpVer data-line=6>ignoreCrossplaneConstraints: true</highlight-term></code>.</p><div class=highlight label=xpVer><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-7-1><a class=lnlinks href=#hl-7-1>1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>pkg.crossplane.io/v1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-7-2><a class=lnlinks href=#hl-7-2>2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>Provider</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-7-3><a class=lnlinks href=#hl-7-3>3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-7-4><a class=lnlinks href=#hl-7-4>4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>provider-aws</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-7-5><a class=lnlinks href=#hl-7-5>5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-7-6><a class=lnlinks href=#hl-7-6>6</a></span><span class=cl><span class=w> </span><span class=nt>ignoreCrossplaneConstraints</span><span class=p>:</span><span class=w> </span><span class=kc>true</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-7-7><a class=lnlinks href=#hl-7-7>7</a></span><span class=cl><span class=w></span><span class=c># Removed for brevity</span><span class=w> </span></span></span></code></pre></div><h3 id=manage-dependencies>Manage dependencies <a class=anchor-link id=manage-dependencies href=#manage-dependencies aria-label="Link to this section: Manage dependencies"></a></h3><p>Providers packages may include dependencies on other packages including Configurations or other Providers.</p><p>If Crossplane can’t meet the dependencies of a Provider package the Provider reports <code>HEALTHY</code> as <code>False</code>.</p><p>For example, this installation of the Upbound AWS reference platform is <code>HEALTHY: False</code>.</p><div class=highlight copy-lines=1><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=ln id=hl-8-1><a class=lnlinks href=#hl-8-1>1</a></span><span class=cl>kubectl get providers </span></span><span class=line><span class=ln id=hl-8-2><a class=lnlinks href=#hl-8-2>2</a></span><span class=cl>NAME INSTALLED HEALTHY PACKAGE AGE </span></span><span class=line><span class=ln id=hl-8-3><a class=lnlinks href=#hl-8-3>3</a></span><span class=cl>provider-aws-s3 True False xpkg.upbound.io/upbound/provider-aws-s3:v1.17.0 12s </span></span></code></pre></div><p>To see more information on why the Provider isn’t <code>HEALTHY</code> use <code><highlight-term id=1731573034688525376 data-label=depend data-line=1>kubectl describe providerrevisions</highlight-term></code>.</p><div class=highlight copy-lines=1 label=depend><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-9-1><a class=lnlinks href=#hl-9-1> 1</a></span><span class=cl><span class=l>kubectl describe providerrevisions</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-2><a class=lnlinks href=#hl-9-2> 2</a></span><span class=cl><span class=w></span><span class=nt>Name</span><span class=p>:</span><span class=w> </span><span class=l>provider-aws-s3-92206523fff4</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-3><a class=lnlinks href=#hl-9-3> 3</a></span><span class=cl><span class=w></span><span class=nt>API Version</span><span class=p>:</span><span class=w> </span><span class=l>pkg.crossplane.io/v1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-4><a class=lnlinks href=#hl-9-4> 4</a></span><span class=cl><span class=w></span><span class=nt>Kind</span><span class=p>:</span><span class=w> </span><span class=l>ProviderRevision</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-5><a class=lnlinks href=#hl-9-5> 5</a></span><span class=cl><span class=w></span><span class=nt>Spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-6><a class=lnlinks href=#hl-9-6> 6</a></span><span class=cl><span class=w> </span><span class=nt>Desired State</span><span class=p>:</span><span class=w> </span><span class=l>Active</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-7><a class=lnlinks href=#hl-9-7> 7</a></span><span class=cl><span class=w> </span><span class=nt>Image</span><span class=p>:</span><span class=w> </span><span class=l>xpkg.upbound.io/upbound/provider-aws-s3:v1.17.0</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-8><a class=lnlinks href=#hl-9-8> 8</a></span><span class=cl><span class=w> </span><span class=nt>Revision</span><span class=p>:</span><span class=w> </span><span class=m>1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-9><a class=lnlinks href=#hl-9-9> 9</a></span><span class=cl><span class=w></span><span class=nt>Status</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-10><a class=lnlinks href=#hl-9-10>10</a></span><span class=cl><span class=w> </span><span class=nt>Conditions</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-11><a class=lnlinks href=#hl-9-11>11</a></span><span class=cl><span class=w> </span><span class=nt>Last Transition Time</span><span class=p>:</span><span class=w> </span><span class=ld>2023-10-10T21:06:39Z</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-12><a class=lnlinks href=#hl-9-12>12</a></span><span class=cl><span class=w> </span><span class=nt>Reason</span><span class=p>:</span><span class=w> </span><span class=l>UnhealthyPackageRevision</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-13><a class=lnlinks href=#hl-9-13>13</a></span><span class=cl><span class=w> </span><span class=nt>Status</span><span class=p>:</span><span class=w> </span><span class=kc>False</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-14><a class=lnlinks href=#hl-9-14>14</a></span><span class=cl><span class=w> </span><span class=nt>Type</span><span class=p>:</span><span class=w> </span><span class=l>Healthy</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-15><a class=lnlinks href=#hl-9-15>15</a></span><span class=cl><span class=w> </span><span class=nt>Controller Ref</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-16><a class=lnlinks href=#hl-9-16>16</a></span><span class=cl><span class=w> </span><span class=nt>Name</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-17><a class=lnlinks href=#hl-9-17>17</a></span><span class=cl><span class=w></span><span class=nt>Events</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-18><a class=lnlinks href=#hl-9-18>18</a></span><span class=cl><span class=w> </span><span class=l>Type Reason Age From Message</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-9-19><a class=lnlinks href=#hl-9-19>19</a></span><span class=cl><span class=w> </span>---- <span class=w> </span>------ <span class=w> </span>---- <span class=w> </span>---- <span class=w> </span>-------<span class=w> </span></span></span><span class=line><span class=ln id=hl-9-20><a class=lnlinks href=#hl-9-20>20</a></span><span class=cl><span class=w> </span><span class=nt>Warning LintPackage 41s (x3 over 47s) packages/providerrevision.pkg.crossplane.io incompatible Crossplane version</span><span class=p>:</span><span class=w> </span><span class=l>package isn't compatible with Crossplane version (v1.10.0)</span><span class=w> </span></span></span></code></pre></div><p>The <code><highlight-term id=1731573034688564194 data-label=depend data-line=17>Events</highlight-term></code> show a <code><highlight-term id=1731573034688587816 data-label=depend data-line=20>Warning</highlight-term></code> with a message that the current version of Crossplane doesn’t meet the Configuration package requirements.</p><h2 id=upgrade-a-provider>Upgrade a Provider <a class=anchor-link id=upgrade-a-provider href=#upgrade-a-provider aria-label="Link to this section: Upgrade a Provider"></a></h2><p>To upgrade an existing Provider edit the installed Provider Package by either applying a new Provider manifest or with <code>kubectl edit providers</code>.</p><p>Update the version number in the Provider’s <code>spec.package</code> and apply the change. Crossplane installs the new image and creates a new <code>ProviderRevision</code>.</p><p>The <code>ProviderRevision</code> allows Crossplane to store deprecated Provider CRDs without removing them until you decide.</p><p>View the <code>ProviderRevisions</code> with <code><highlight-term id=1731573034688610640 data-label=getPR data-line=1>kubectl get providerrevisions</highlight-term></code></p><div class=highlight label=getPR copy-lines=1><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=ln id=hl-10-1><a class=lnlinks href=#hl-10-1>1</a></span><span class=cl>kubectl get providerrevisions </span></span><span class=line><span class=ln id=hl-10-2><a class=lnlinks href=#hl-10-2>2</a></span><span class=cl>NAME HEALTHY REVISION IMAGE STATE DEP-FOUND DEP-INSTALLED AGE </span></span><span class=line><span class=ln id=hl-10-3><a class=lnlinks href=#hl-10-3>3</a></span><span class=cl>provider-aws-s3-dbc7f981d81f True <span class=m>1</span> xpkg.upbound.io/upbound/provider-aws-s3:v1.17.0 Active <span class=m>1</span> <span class=m>1</span> 10d </span></span><span class=line><span class=ln id=hl-10-4><a class=lnlinks href=#hl-10-4>4</a></span><span class=cl>provider-nop-552a394a8acc True <span class=m>2</span> xpkg.upbound.io/crossplane-contrib/provider-nop:v0.3.0 Active 11d </span></span><span class=line><span class=ln id=hl-10-5><a class=lnlinks href=#hl-10-5>5</a></span><span class=cl>provider-nop-7e62d2a1a709 True <span class=m>1</span> xpkg.upbound.io/crossplane-contrib/provider-nop:v0.2.0 Inactive 13d </span></span><span class=line><span class=ln id=hl-10-6><a class=lnlinks href=#hl-10-6>6</a></span><span class=cl>upbound-provider-family-aws-710d8cfe9f53 True <span class=m>1</span> xpkg.upbound.io/upbound/provider-family-aws:v1.17.0 Active 10d </span></span></code></pre></div><p>By default Crossplane keeps a single <code><highlight-term id=1731573034688633050 data-label=getPR data-line=5>Inactive</highlight-term></code> Provider.</p><p>Read the <a href=#package-revision-history-limit>revision history limit</a> section to change the default value.</p><p>Only a single revision of a Provider is <code><highlight-term id=1731573034688654067 data-label=getPR data-line=4>Active</highlight-term></code> at a time.</p><h2 id=remove-a-provider>Remove a Provider <a class=anchor-link id=remove-a-provider href=#remove-a-provider aria-label="Link to this section: Remove a Provider"></a></h2><p>Remove a Provider by deleting the Provider object with <code>kubectl delete provider</code>.</p><div class="admonition warning d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="warning:"><use xlink:href="#fire"/></svg><span class=ps-1>Warning</span></div><div class=admonition-content><p>Removing a Provider without first removing the Provider’s managed resources may abandon the resources. The external resources aren’t deleted.</p><p>If you remove the Provider first, you must manually delete external resources through your cloud provider. Managed resources must be manually deleted by removing their finalizers.</p><p>For more information on deleting abandoned resources read the <a href=https://docs.crossplane.io/v1.18/guides/troubleshoot-crossplane/#deleting-when-a-resource-hangs>Crossplane troubleshooting guide</a>.</p></div></div><h2 id=verify-a-provider>Verify a Provider <a class=anchor-link id=verify-a-provider href=#verify-a-provider aria-label="Link to this section: Verify a Provider"></a></h2><p>Providers install their own APIs representing the managed resources they support. Providers may also create Deployments, Service Accounts or RBAC configuration.</p><p>View the status of a Provider with</p><p><code>kubectl get providers</code></p><p>During the install a Provider report <code>INSTALLED</code> as <code>True</code> and <code>HEALTHY</code> as <code>Unknown</code>.</p><div class=highlight copy-lines=1><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=ln id=hl-11-1><a class=lnlinks href=#hl-11-1>1</a></span><span class=cl>kubectl get providers </span></span><span class=line><span class=ln id=hl-11-2><a class=lnlinks href=#hl-11-2>2</a></span><span class=cl>NAME INSTALLED HEALTHY PACKAGE AGE </span></span><span class=line><span class=ln id=hl-11-3><a class=lnlinks href=#hl-11-3>3</a></span><span class=cl>crossplane-contrib-provider-aws True Unknown xpkg.upbound.io/crossplane-contrib/provider-aws:v0.39.0 63s </span></span></code></pre></div><p>After the Provider install completes and it’s ready for use the <code>HEALTHY</code> status reports <code>True</code>.</p><div class=highlight copy-lines=1><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=ln id=hl-12-1><a class=lnlinks href=#hl-12-1>1</a></span><span class=cl>kubectl get providers </span></span><span class=line><span class=ln id=hl-12-2><a class=lnlinks href=#hl-12-2>2</a></span><span class=cl>NAME INSTALLED HEALTHY PACKAGE AGE </span></span><span class=line><span class=ln id=hl-12-3><a class=lnlinks href=#hl-12-3>3</a></span><span class=cl>crossplane-contrib-provider-aws True True xpkg.upbound.io/crossplane-contrib/provider-aws:v0.39.0 88s </span></span></code></pre></div><div class="admonition important d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="important:"><use xlink:href="#exclamation"/></svg><span class=ps-1>Important</span></div><div class=admonition-content><p>Some Providers install hundreds of Kubernetes Custom Resource Definitions (<code>CRDs</code>). This can create significant strain on undersized API Servers, impacting Provider install times.</p><p>The Crossplane community has more <a href=https://github.com/crossplane/crossplane/blob/main/design/one-pager-crd-scaling.md>details on scaling CRDs</a>.</p></div></div><h3 id=provider-conditions>Provider conditions <a class=anchor-link id=provider-conditions href=#provider-conditions aria-label="Link to this section: Provider conditions"></a></h3><p>Crossplane uses a standard set of <code>Conditions</code> for Providers.<br>View the conditions of a provider under their <code>Status</code> with <code>kubectl describe provider</code>.</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-13-1><a class=lnlinks href=#hl-13-1> 1</a></span><span class=cl><span class=l>kubectl describe provider</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-13-2><a class=lnlinks href=#hl-13-2> 2</a></span><span class=cl><span class=w></span><span class=nt>Name</span><span class=p>:</span><span class=w> </span><span class=l>my-provider</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-13-3><a class=lnlinks href=#hl-13-3> 3</a></span><span class=cl><span class=w></span><span class=nt>API Version</span><span class=p>:</span><span class=w> </span><span class=l>pkg.crossplane.io/v1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-13-4><a class=lnlinks href=#hl-13-4> 4</a></span><span class=cl><span class=w></span><span class=nt>Kind</span><span class=p>:</span><span class=w> </span><span class=l>Provider</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-13-5><a class=lnlinks href=#hl-13-5> 5</a></span><span class=cl><span class=w></span><span class=c># Removed for brevity</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-13-6><a class=lnlinks href=#hl-13-6> 6</a></span><span class=cl><span class=w></span><span class=nt>Status</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-13-7><a class=lnlinks href=#hl-13-7> 7</a></span><span class=cl><span class=w> </span><span class=nt>Conditions</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-13-8><a class=lnlinks href=#hl-13-8> 8</a></span><span class=cl><span class=w> </span><span class=nt>Reason</span><span class=p>:</span><span class=w> </span><span class=l>HealthyPackageRevision</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-13-9><a class=lnlinks href=#hl-13-9> 9</a></span><span class=cl><span class=w> </span><span class=nt>Status</span><span class=p>:</span><span class=w> </span><span class=kc>True</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-13-10><a class=lnlinks href=#hl-13-10>10</a></span><span class=cl><span class=w> </span><span class=nt>Type</span><span class=p>:</span><span class=w> </span><span class=l>Healthy</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-13-11><a class=lnlinks href=#hl-13-11>11</a></span><span class=cl><span class=w> </span><span class=nt>Reason</span><span class=p>:</span><span class=w> </span><span class=l>ActivePackageRevision</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-13-12><a class=lnlinks href=#hl-13-12>12</a></span><span class=cl><span class=w> </span><span class=nt>Status</span><span class=p>:</span><span class=w> </span><span class=kc>True</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-13-13><a class=lnlinks href=#hl-13-13>13</a></span><span class=cl><span class=w> </span><span class=nt>Type</span><span class=p>:</span><span class=w> </span><span class=l>Installed</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-13-14><a class=lnlinks href=#hl-13-14>14</a></span><span class=cl><span class=w></span><span class=c># Removed for brevity</span><span class=w> </span></span></span></code></pre></div><h4 id=types>Types <a class=anchor-link id=types href=#types aria-label="Link to this section: Types"></a></h4><p>Provider <code>Conditions</code> support two <code>Types</code>:</p><ul><li><code>Type: Installed</code> - the Provider package installed but isn’t ready for use.</li><li><code>Type: Healthy</code> - The Provider package is ready to use.</li></ul><h4 id=reasons>Reasons <a class=anchor-link id=reasons href=#reasons aria-label="Link to this section: Reasons"></a></h4><p>Each <code>Reason</code> relates to a specific <code>Type</code> and <code>Status</code>. Crossplane uses the following <code>Reasons</code> for Provider <code>Conditions</code>.</p><h5 id=inactivepackagerevision>InactivePackageRevision <a class=anchor-link id=inactivepackagerevision href=#inactivepackagerevision aria-label="Link to this section: InactivePackageRevision"></a></h5><p><code>Reason: InactivePackageRevision</code> indicates the Provider Package is using an inactive Provider Package Revision.</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-14-1><a class=lnlinks href=#hl-14-1>1</a></span><span class=cl><span class=nt>Type</span><span class=p>:</span><span class=w> </span><span class=l>Installed</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-14-2><a class=lnlinks href=#hl-14-2>2</a></span><span class=cl><span class=w></span><span class=nt>Status</span><span class=p>:</span><span class=w> </span><span class=kc>False</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-14-3><a class=lnlinks href=#hl-14-3>3</a></span><span class=cl><span class=w></span><span class=nt>Reason</span><span class=p>:</span><span class=w> </span><span class=l>InactivePackageRevision</span><span class=w> </span></span></span></code></pre></div><h5 id=activepackagerevision>ActivePackageRevision <a class=anchor-link id=activepackagerevision href=#activepackagerevision aria-label="Link to this section: ActivePackageRevision"></a></h5><p>The Provider Package is the current Package Revision, but Crossplane hasn’t finished installing the Package Revision yet.</p><div class="admonition tip d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="tip:"><use xlink:href="#check"/></svg><span class=ps-1>Tip</span></div><div class=admonition-content><p>Providers stuck in this state are because of a problem with Package Revisions.</p><p>Use <code>kubectl describe providerrevisions</code> for more details.</p></div></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-15-1><a class=lnlinks href=#hl-15-1>1</a></span><span class=cl><span class=nt>Type</span><span class=p>:</span><span class=w> </span><span class=l>Installed</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-15-2><a class=lnlinks href=#hl-15-2>2</a></span><span class=cl><span class=w></span><span class=nt>Status</span><span class=p>:</span><span class=w> </span><span class=kc>True</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-15-3><a class=lnlinks href=#hl-15-3>3</a></span><span class=cl><span class=w></span><span class=nt>Reason</span><span class=p>:</span><span class=w> </span><span class=l>ActivePackageRevision</span><span class=w> </span></span></span></code></pre></div><h5 id=healthypackagerevision>HealthyPackageRevision <a class=anchor-link id=healthypackagerevision href=#healthypackagerevision aria-label="Link to this section: HealthyPackageRevision"></a></h5><p>The Provider is fully installed and ready to use.</p><div class="admonition tip d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="tip:"><use xlink:href="#check"/></svg><span class=ps-1>Tip</span></div><div class=admonition-content><code>Reason: HealthyPackageRevision</code> is the normal state of a working Provider.</div></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-16-1><a class=lnlinks href=#hl-16-1>1</a></span><span class=cl><span class=nt>Type</span><span class=p>:</span><span class=w> </span><span class=l>Healthy</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-16-2><a class=lnlinks href=#hl-16-2>2</a></span><span class=cl><span class=w></span><span class=nt>Status</span><span class=p>:</span><span class=w> </span><span class=kc>True</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-16-3><a class=lnlinks href=#hl-16-3>3</a></span><span class=cl><span class=w></span><span class=nt>Reason</span><span class=p>:</span><span class=w> </span><span class=l>HealthyPackageRevision</span><span class=w> </span></span></span></code></pre></div><h5 id=unhealthypackagerevision>UnhealthyPackageRevision <a class=anchor-link id=unhealthypackagerevision href=#unhealthypackagerevision aria-label="Link to this section: UnhealthyPackageRevision"></a></h5><p>There was an error installing the Provider Package Revision, preventing Crossplane from installing the Provider Package.</p><div class="admonition tip d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="tip:"><use xlink:href="#check"/></svg><span class=ps-1>Tip</span></div><div class=admonition-content>Use <code>kubectl describe providerrevisions</code> for more details on why the Package Revision failed.</div></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-17-1><a class=lnlinks href=#hl-17-1>1</a></span><span class=cl><span class=nt>Type</span><span class=p>:</span><span class=w> </span><span class=l>Healthy</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-17-2><a class=lnlinks href=#hl-17-2>2</a></span><span class=cl><span class=w></span><span class=nt>Status</span><span class=p>:</span><span class=w> </span><span class=kc>False</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-17-3><a class=lnlinks href=#hl-17-3>3</a></span><span class=cl><span class=w></span><span class=nt>Reason</span><span class=p>:</span><span class=w> </span><span class=l>UnhealthyPackageRevision</span><span class=w> </span></span></span></code></pre></div><h5 id=unknownpackagerevisionhealth>UnknownPackageRevisionHealth <a class=anchor-link id=unknownpackagerevisionhealth href=#unknownpackagerevisionhealth aria-label="Link to this section: UnknownPackageRevisionHealth"></a></h5><p>The status of the Provider Package Revision is <code>Unknown</code>. The Provider Package Revision may be installing or has an issue.</p><div class="admonition tip d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="tip:"><use xlink:href="#check"/></svg><span class=ps-1>Tip</span></div><div class=admonition-content>Use <code>kubectl describe providerrevisions</code> for more details on why the Package Revision failed.</div></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-18-1><a class=lnlinks href=#hl-18-1>1</a></span><span class=cl><span class=nt>Type</span><span class=p>:</span><span class=w> </span><span class=l>Healthy</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-18-2><a class=lnlinks href=#hl-18-2>2</a></span><span class=cl><span class=w></span><span class=nt>Status</span><span class=p>:</span><span class=w> </span><span class=l>Unknown</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-18-3><a class=lnlinks href=#hl-18-3>3</a></span><span class=cl><span class=w></span><span class=nt>Reason</span><span class=p>:</span><span class=w> </span><span class=l>UnknownPackageRevisionHealth</span><span class=w> </span></span></span></code></pre></div><h2 id=configure-a-provider>Configure a Provider <a class=anchor-link id=configure-a-provider href=#configure-a-provider aria-label="Link to this section: Configure a Provider"></a></h2><p>Providers have two different types of configurations:</p><ul><li><p><em>Controller configurations</em> that change the settings of the Provider pod running inside the Kubernetes cluster. For example, setting a <code>toleration</code> on the Provider pod.</p></li><li><p><em>Provider configurations</em> that change settings used when communicating with an external provider. For example, cloud provider authentication.</p></li></ul><div class="admonition important d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="important:"><use xlink:href="#exclamation"/></svg><span class=ps-1>Important</span></div><div class=admonition-content><p>Apply <code>ControllerConfig</code> objects to Providers.</p><p>Apply <code>ProviderConfig</code> objects to managed resources.</p></div></div><h3 id=controller-configuration>Controller configuration <a class=anchor-link id=controller-configuration href=#controller-configuration aria-label="Link to this section: Controller configuration"></a></h3><div class="admonition important d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="important:"><use xlink:href="#exclamation"/></svg><span class=ps-1>Important</span></div><div class=admonition-content><p>The <code>ControllerConfig</code> type was deprecated in v1.11 and will be removed in a future release.</p><p><a href=#runtime-configuration><code>DeploymentRuntimeConfig</code></a> is the replacement for Controller configuration and is available in v1.14+.</p></div></div><p>Applying a Crossplane <code>ControllerConfig</code> to a Provider changes the settings of the Provider’s pod. The <a href=https://docs.crossplane.io/v1.18/api/#ControllerConfig-spec>Crossplane ControllerConfig schema</a> defines the supported set of ControllerConfig settings.</p><p>The most common use case for ControllerConfigs are providing <code>args</code> to a Provider’s pod enabling optional services. For example, enabling <a href=https://docs.crossplane.io/v1.18/guides/vault-as-secret-store/#enable-external-secret-stores-in-the-provider>external secret stores</a> for a Provider.</p><p>Each Provider determines their supported set of <code>args</code>.</p><h3 id=runtime-configuration>Runtime configuration <a class=anchor-link id=runtime-configuration href=#runtime-configuration aria-label="Link to this section: Runtime configuration"></a></h3><div class="admonition important d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="important:"><use xlink:href="#exclamation"/></svg><span class=ps-1>Important</span></div><div class=admonition-content><p><code>DeploymentRuntimeConfigs</code> is a beta feature.</p><p>It’s on by default, and you can disable it by passing <code>--enable-deployment-runtime-configs=false</code> to the Crossplane deployment.</p></div></div><p>Runtime configuration is a generalized mechanism for configuring the runtime for Crossplane packages with a runtime, namely <code>Providers</code> and <code>Functions</code>. It replaces the deprecated <code>ControllerConfig</code> type and is available in v1.14+.</p><p>With its default configuration, Crossplane uses Kubernetes Deployments to deploy runtime for packages, more specifically, a controller for a <code>Provider</code> or a gRPC server for a <code>Function</code>. It’s possible to configure the runtime manifest by applying a <code>DeploymentRuntimeConfig</code> and referencing it in the <code>Provider</code> or <code>Function</code> object.</p><div class="admonition note d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="note:"><use xlink:href="#info"/></svg><span class=ps-1>Note</span></div><div class=admonition-content>Different from <code>ControllerConfig</code>, <code>DeploymentRuntimeConfig</code> embed the whole Kubernetes Deployment spec, which allows for more flexibility in configuring the runtime. Refer to the <a href=https://github.com/crossplane/crossplane/blob/2c5e7f07ba9e3d83d1c85169bbde685de8514ab8/design/one-pager-package-runtime-config.md>design document</a> for more details.</div></div><p>As an example, to enable the external secret stores alpha feature for a <code>Provider</code> by adding the <code>--enable-external-secret-stores</code> argument to the controller, one can apply the following:</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-19-1><a class=lnlinks href=#hl-19-1> 1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>pkg.crossplane.io/v1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-2><a class=lnlinks href=#hl-19-2> 2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>Provider</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-3><a class=lnlinks href=#hl-19-3> 3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-4><a class=lnlinks href=#hl-19-4> 4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>provider-gcp-iam</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-5><a class=lnlinks href=#hl-19-5> 5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-6><a class=lnlinks href=#hl-19-6> 6</a></span><span class=cl><span class=w> </span><span class=nt>package</span><span class=p>:</span><span class=w> </span><span class=l>xpkg.upbound.io/upbound/provider-gcp-iam:v1.9.0</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-7><a class=lnlinks href=#hl-19-7> 7</a></span><span class=cl><span class=w> </span><span class=nt>runtimeConfigRef</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-8><a class=lnlinks href=#hl-19-8> 8</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>enable-ess</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-9><a class=lnlinks href=#hl-19-9> 9</a></span><span class=cl><span class=w></span><span class=nn>---</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-10><a class=lnlinks href=#hl-19-10>10</a></span><span class=cl><span class=w></span><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>pkg.crossplane.io/v1beta1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-11><a class=lnlinks href=#hl-19-11>11</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>DeploymentRuntimeConfig</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-12><a class=lnlinks href=#hl-19-12>12</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-13><a class=lnlinks href=#hl-19-13>13</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>enable-ess</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-14><a class=lnlinks href=#hl-19-14>14</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-15><a class=lnlinks href=#hl-19-15>15</a></span><span class=cl><span class=w> </span><span class=nt>deploymentTemplate</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-16><a class=lnlinks href=#hl-19-16>16</a></span><span class=cl><span class=w> </span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-17><a class=lnlinks href=#hl-19-17>17</a></span><span class=cl><span class=w> </span><span class=nt>selector</span><span class=p>:</span><span class=w> </span>{}<span class=w> </span></span></span><span class=line><span class=ln id=hl-19-18><a class=lnlinks href=#hl-19-18>18</a></span><span class=cl><span class=w> </span><span class=nt>template</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-19><a class=lnlinks href=#hl-19-19>19</a></span><span class=cl><span class=w> </span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-20><a class=lnlinks href=#hl-19-20>20</a></span><span class=cl><span class=w> </span><span class=nt>containers</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-21><a class=lnlinks href=#hl-19-21>21</a></span><span class=cl><span class=w> </span>- <span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>package-runtime</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-22><a class=lnlinks href=#hl-19-22>22</a></span><span class=cl><span class=w> </span><span class=nt>args</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-19-23><a class=lnlinks href=#hl-19-23>23</a></span><span class=cl><span class=w> </span>- --<span class=l>enable-external-secret-stores</span><span class=w> </span></span></span></code></pre></div><p>Please note that the packages manager uses <code>package-runtime</code> as the name of the runtime container. When you use a different container name, the package manager introduces it as a sidecar container instead of modifying the package runtime container.</p><p>The package manager is opinionated about some fields to ensure</p><p>the runtime is working and overlay them on top of the values in the runtime configuration. For example, it defaults the replica count to 1 if not set and overrides the label selectors to make sure the Deployment and Service match. It also injects any necessary environment variables, ports as well as volumes and volume mounts.</p><p>The <code>Provider</code> or <code>Functions</code>’s <code>spec.runtimeConfigRef.name</code> field defaults to value <code>default</code>, which means Crossplane uses the default runtime configuration if not specified. Crossplane ensures there is always a default runtime</p><p>configuration in the cluster, but won’t change it if it already exists. This</p><p>allows users to customize the default runtime configuration to their needs.</p><div class="admonition tip d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="tip:"><use xlink:href="#check"/></svg><span class=ps-1>Tip</span></div><div class=admonition-content><p>Since <code>DeploymentRuntimeConfig</code> uses the same schema as Kubernetes <code>Deployment</code></p><p>spec, you may need to pass empty values to bypass the schema validation. For example, if you just want to change the <code>replicas</code> field, you would need to pass the following:</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-0-1><a class=lnlinks href=#hl-0-1> 1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>pkg.crossplane.io/v1beta1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-2><a class=lnlinks href=#hl-0-2> 2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>DeploymentRuntimeConfig</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-3><a class=lnlinks href=#hl-0-3> 3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-4><a class=lnlinks href=#hl-0-4> 4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>multi-replicas</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-5><a class=lnlinks href=#hl-0-5> 5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-6><a class=lnlinks href=#hl-0-6> 6</a></span><span class=cl><span class=w> </span><span class=nt>deploymentTemplate</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-7><a class=lnlinks href=#hl-0-7> 7</a></span><span class=cl><span class=w> </span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-8><a class=lnlinks href=#hl-0-8> 8</a></span><span class=cl><span class=w> </span><span class=nt>replicas</span><span class=p>:</span><span class=w> </span><span class=m>2</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-0-9><a class=lnlinks href=#hl-0-9> 9</a></span><span class=cl><span class=w> </span><span class=nt>selector</span><span class=p>:</span><span class=w> </span>{}<span class=w> </span></span></span><span class=line><span class=ln id=hl-0-10><a class=lnlinks href=#hl-0-10>10</a></span><span class=cl><span class=w> </span><span class=nt>template</span><span class=p>:</span><span class=w> </span>{}<span class=w> </span></span></span></code></pre></div></div></div><h4 id=configuring-runtime-deployment-spec>Configuring runtime deployment spec <a class=anchor-link id=configuring-runtime-deployment-spec href=#configuring-runtime-deployment-spec aria-label="Link to this section: Configuring runtime deployment spec"></a></h4><p>Using the Deployment spec provided in the <code>DeploymentRuntimeConfig</code> as a base, the package manager builds the Deployment spec for the package runtime with the following rules:</p><ul><li>Injects the package runtime container as the first container in the <code>containers</code> array, with name <code>package-runtime</code>.</li><li>If not provided, defaults with the following:<ul><li><code>spec.replicas</code> as 1.</li><li>Image pull policy as <code>IfNotPresent</code>.</li><li>Pod Security Context as:<div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-20-1><a class=lnlinks href=#hl-20-1>1</a></span><span class=cl><span class=nt>runAsNonRoot</span><span class=p>:</span><span class=w> </span><span class=kc>true</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-20-2><a class=lnlinks href=#hl-20-2>2</a></span><span class=cl><span class=w></span><span class=nt>runAsUser</span><span class=p>:</span><span class=w> </span><span class=m>2000</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-20-3><a class=lnlinks href=#hl-20-3>3</a></span><span class=cl><span class=w></span><span class=nt>runAsGroup</span><span class=p>:</span><span class=w> </span><span class=m>2000</span><span class=w> </span></span></span></code></pre></div></li><li>Security Context for the runtime container as:<div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-21-1><a class=lnlinks href=#hl-21-1>1</a></span><span class=cl><span class=nt>allowPrivilegeEscalation</span><span class=p>:</span><span class=w> </span><span class=kc>false</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-21-2><a class=lnlinks href=#hl-21-2>2</a></span><span class=cl><span class=w></span><span class=nt>privileged</span><span class=p>:</span><span class=w> </span><span class=kc>false</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-21-3><a class=lnlinks href=#hl-21-3>3</a></span><span class=cl><span class=w></span><span class=nt>runAsGroup</span><span class=p>:</span><span class=w> </span><span class=m>2000</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-21-4><a class=lnlinks href=#hl-21-4>4</a></span><span class=cl><span class=w></span><span class=nt>runAsNonRoot</span><span class=p>:</span><span class=w> </span><span class=kc>true</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-21-5><a class=lnlinks href=#hl-21-5>5</a></span><span class=cl><span class=w></span><span class=nt>runAsUser</span><span class=p>:</span><span class=w> </span><span class=m>2000</span><span class=w> </span></span></span></code></pre></div></li></ul></li><li>Applies the following:<ul><li><strong>Sets</strong> <code>metadata.namespace</code> as Crossplane namespace.</li><li><strong>Sets</strong> <code>metadata.ownerReferences</code> such that the deployment owned by the package revision.</li><li><strong>Sets</strong> <code>spec.selectors</code> using generated labels.</li><li><strong>Sets</strong> <code>spec.serviceAccount</code> with the created <strong>Service Account</strong>.</li><li><strong>Adds</strong> pull secrets provided in the Package spec as image pull secrets, <code>spec.packagePullSecrets</code>.</li><li><strong>Sets</strong> the <strong>Image Pull Policy</strong> with the value provided in the Package spec, <code>spec.packagePullPolicy</code>.</li><li><strong>Adds</strong> necessary <strong>Ports</strong> to the runtime container.</li><li><strong>Adds</strong> necessary <strong>Environments</strong> to the runtime container.</li><li>Mounts TLS secrets by <strong>adding</strong> necessary <strong>Volumes</strong>, <strong>Volume Mounts</strong> and <strong>Environments</strong> to the runtime container.</li></ul></li></ul><h4 id=configuring-metadata-of-runtime-resources>Configuring metadata of runtime resources <a class=anchor-link id=configuring-metadata-of-runtime-resources href=#configuring-metadata-of-runtime-resources aria-label="Link to this section: Configuring metadata of runtime resources"></a></h4><p><code>DeploymentRuntimeConfig</code> also enables configuring the following metadata of Runtime resources, namely <code>Deployment</code>, <code>ServiceAccount</code> and <code>Service</code>:</p><ul><li>name</li><li>labels</li><li>annotations</li></ul><p>The following example shows how to configure the name of the ServiceAccount and the labels of the Deployment:</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-22-1><a class=lnlinks href=#hl-22-1> 1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>pkg.crossplane.io/v1beta1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-22-2><a class=lnlinks href=#hl-22-2> 2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>DeploymentRuntimeConfig</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-22-3><a class=lnlinks href=#hl-22-3> 3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-22-4><a class=lnlinks href=#hl-22-4> 4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>my-runtime-config</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-22-5><a class=lnlinks href=#hl-22-5> 5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-22-6><a class=lnlinks href=#hl-22-6> 6</a></span><span class=cl><span class=w> </span><span class=nt>deploymentTemplate</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-22-7><a class=lnlinks href=#hl-22-7> 7</a></span><span class=cl><span class=w> </span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-22-8><a class=lnlinks href=#hl-22-8> 8</a></span><span class=cl><span class=w> </span><span class=nt>labels</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-22-9><a class=lnlinks href=#hl-22-9> 9</a></span><span class=cl><span class=w> </span><span class=nt>my-label</span><span class=p>:</span><span class=w> </span><span class=l>my-value</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-22-10><a class=lnlinks href=#hl-22-10>10</a></span><span class=cl><span class=w> </span><span class=nt>serviceAccountTemplate</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-22-11><a class=lnlinks href=#hl-22-11>11</a></span><span class=cl><span class=w> </span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-22-12><a class=lnlinks href=#hl-22-12>12</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>my-service-account</span><span class=w> </span></span></span></code></pre></div><div class="admonition important d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="important:"><use xlink:href="#exclamation"/></svg><span class=ps-1>Important</span></div><div class=admonition-content><p>Setting the <code>serviceAccountTemplate.metadata.name</code> field will override the name of service account created by the package manager and used in the provider deployment. The package manager will own that service account and may conflict with other owners attempting to take ownership. A common mistake is configuring the same service account for multiple packages in this way which ends up causing frequent reconciliation loops and loads on the API server.</p><p>If you just want to use an existing service account, you should instead only set the <code>deploymentTemplate.spec.template.spec.serviceAccountName</code> field. Crossplane will then use the existing service account without taking the ownership and still take care of binding the necessary permissions.</p></div></div><h3 id=provider-configuration>Provider configuration <a class=anchor-link id=provider-configuration href=#provider-configuration aria-label="Link to this section: Provider configuration"></a></h3><p>The <code>ProviderConfig</code> determines settings the Provider uses communicating to the external provider. Each Provider determines available settings of their <code>ProviderConfig</code>.</p><p>Provider authentication is usually configured with a <code>ProviderConfig</code>. For example, to use basic key-pair authentication with Provider AWS a <code><highlight-term id=1731573034689949919 data-label=providerconfig data-line=2>ProviderConfig</highlight-term></code> <code><highlight-term id=1731573034689970565 data-label=providerconfig data-line=5>spec</highlight-term></code> defines the <code><highlight-term id=1731573034689989929 data-label=providerconfig data-line=6>credentials</highlight-term></code> and that the Provider pod should look in the Kubernetes <code><highlight-term id=1731573034690008117 data-label=providerconfig data-line=7>Secrets</highlight-term></code> objects and use the key named <code><highlight-term id=1731573034690025730 data-label=providerconfig data-line=10>aws-creds</highlight-term></code>.</p><div class=highlight label=providerconfig><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-23-1><a class=lnlinks href=#hl-23-1> 1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>aws.crossplane.io/v1beta1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-23-2><a class=lnlinks href=#hl-23-2> 2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>ProviderConfig</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-23-3><a class=lnlinks href=#hl-23-3> 3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-23-4><a class=lnlinks href=#hl-23-4> 4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>aws-provider</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-23-5><a class=lnlinks href=#hl-23-5> 5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-23-6><a class=lnlinks href=#hl-23-6> 6</a></span><span class=cl><span class=w> </span><span class=nt>credentials</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-23-7><a class=lnlinks href=#hl-23-7> 7</a></span><span class=cl><span class=w> </span><span class=nt>source</span><span class=p>:</span><span class=w> </span><span class=l>Secret</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-23-8><a class=lnlinks href=#hl-23-8> 8</a></span><span class=cl><span class=w> </span><span class=nt>secretRef</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-23-9><a class=lnlinks href=#hl-23-9> 9</a></span><span class=cl><span class=w> </span><span class=nt>namespace</span><span class=p>:</span><span class=w> </span><span class=l>crossplane-system</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-23-10><a class=lnlinks href=#hl-23-10>10</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>aws-creds</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-23-11><a class=lnlinks href=#hl-23-11>11</a></span><span class=cl><span class=w> </span><span class=nt>key</span><span class=p>:</span><span class=w> </span><span class=l>creds</span><span class=w> </span></span></span></code></pre></div><div class="admonition important d-flex flex-column mx-4 p-0"><div class=admonition-title><svg class="bi flex-shrink-0" role="img" aria-label="important:"><use xlink:href="#exclamation"/></svg><span class=ps-1>Important</span></div><div class=admonition-content><p>Authentication configuration may be different across Providers.</p><p>Read the documentation on a specific Provider for instructions on configuring authentication for that Provider.</p></div></div><p>ProviderConfig objects apply to individual Managed Resources. A single Provider can authenticate with multiple users or accounts through ProviderConfigs.</p><p>Each account’s credentials tie to a unique ProviderConfig. When creating a managed resource, attach the desired ProviderConfig.</p><p>For example, two AWS ProviderConfigs, named <code><highlight-term id=1731573034690085562 data-label=user data-line=4>user-keys</highlight-term></code> and <code><highlight-term id=1731573034690102110 data-label=admin data-line=4>admin-keys</highlight-term></code> use different Kubernetes secrets.</p><div class=highlight label=user><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-24-1><a class=lnlinks href=#hl-24-1> 1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>aws.crossplane.io/v1beta1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-24-2><a class=lnlinks href=#hl-24-2> 2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>ProviderConfig</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-24-3><a class=lnlinks href=#hl-24-3> 3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-24-4><a class=lnlinks href=#hl-24-4> 4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>user-keys</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-24-5><a class=lnlinks href=#hl-24-5> 5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-24-6><a class=lnlinks href=#hl-24-6> 6</a></span><span class=cl><span class=w> </span><span class=nt>credentials</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-24-7><a class=lnlinks href=#hl-24-7> 7</a></span><span class=cl><span class=w> </span><span class=nt>source</span><span class=p>:</span><span class=w> </span><span class=l>Secret</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-24-8><a class=lnlinks href=#hl-24-8> 8</a></span><span class=cl><span class=w> </span><span class=nt>secretRef</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-24-9><a class=lnlinks href=#hl-24-9> 9</a></span><span class=cl><span class=w> </span><span class=nt>namespace</span><span class=p>:</span><span class=w> </span><span class=l>crossplane-system</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-24-10><a class=lnlinks href=#hl-24-10>10</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>my-key</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-24-11><a class=lnlinks href=#hl-24-11>11</a></span><span class=cl><span class=w> </span><span class=nt>key</span><span class=p>:</span><span class=w> </span><span class=l>secret-key</span><span class=w> </span></span></span></code></pre></div><div class=highlight label=admin><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-25-1><a class=lnlinks href=#hl-25-1> 1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>aws.crossplane.io/v1beta1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-25-2><a class=lnlinks href=#hl-25-2> 2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>ProviderConfig</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-25-3><a class=lnlinks href=#hl-25-3> 3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-25-4><a class=lnlinks href=#hl-25-4> 4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>admin-keys</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-25-5><a class=lnlinks href=#hl-25-5> 5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-25-6><a class=lnlinks href=#hl-25-6> 6</a></span><span class=cl><span class=w> </span><span class=nt>credentials</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-25-7><a class=lnlinks href=#hl-25-7> 7</a></span><span class=cl><span class=w> </span><span class=nt>source</span><span class=p>:</span><span class=w> </span><span class=l>Secret</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-25-8><a class=lnlinks href=#hl-25-8> 8</a></span><span class=cl><span class=w> </span><span class=nt>secretRef</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-25-9><a class=lnlinks href=#hl-25-9> 9</a></span><span class=cl><span class=w> </span><span class=nt>namespace</span><span class=p>:</span><span class=w> </span><span class=l>crossplane-system</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-25-10><a class=lnlinks href=#hl-25-10>10</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>admin-key</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-25-11><a class=lnlinks href=#hl-25-11>11</a></span><span class=cl><span class=w> </span><span class=nt>key</span><span class=p>:</span><span class=w> </span><span class=l>admin-secret-key</span><span class=w> </span></span></span></code></pre></div><p>Apply the ProviderConfig when creating a managed resource.</p><p>This creates an AWS <code><highlight-term id=1731573034690118005 data-label=user-bucket data-line=2>Bucket</highlight-term></code> resource using the <code><highlight-term id=1731573034690135256 data-label=user-bucket data-line=9>user-keys</highlight-term></code> ProviderConfig.</p><div class=highlight label=user-bucket><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-26-1><a class=lnlinks href=#hl-26-1>1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>s3.aws.upbound.io/v1beta1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-26-2><a class=lnlinks href=#hl-26-2>2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>Bucket</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-26-3><a class=lnlinks href=#hl-26-3>3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-26-4><a class=lnlinks href=#hl-26-4>4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>user-bucket</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-26-5><a class=lnlinks href=#hl-26-5>5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-26-6><a class=lnlinks href=#hl-26-6>6</a></span><span class=cl><span class=w> </span><span class=nt>forProvider</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-26-7><a class=lnlinks href=#hl-26-7>7</a></span><span class=cl><span class=w> </span><span class=nt>region</span><span class=p>:</span><span class=w> </span><span class=l>us-east-2</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-26-8><a class=lnlinks href=#hl-26-8>8</a></span><span class=cl><span class=w> </span><span class=nt>providerConfigRef</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-26-9><a class=lnlinks href=#hl-26-9>9</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>user-keys</span><span class=w> </span></span></span></code></pre></div><p>This creates a second <code><highlight-term id=1731573034690150843 data-label=admin-bucket data-line=2>Bucket</highlight-term></code> resource using the <code><highlight-term id=1731573034690165942 data-label=admin-bucket data-line=9>admin-keys</highlight-term></code> ProviderConfig.</p><div class=highlight label=admin-bucket><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=ln id=hl-27-1><a class=lnlinks href=#hl-27-1>1</a></span><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>s3.aws.upbound.io/v1beta1</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-27-2><a class=lnlinks href=#hl-27-2>2</a></span><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>Bucket</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-27-3><a class=lnlinks href=#hl-27-3>3</a></span><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-27-4><a class=lnlinks href=#hl-27-4>4</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>user-bucket</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-27-5><a class=lnlinks href=#hl-27-5>5</a></span><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-27-6><a class=lnlinks href=#hl-27-6>6</a></span><span class=cl><span class=w> </span><span class=nt>forProvider</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-27-7><a class=lnlinks href=#hl-27-7>7</a></span><span class=cl><span class=w> </span><span class=nt>region</span><span class=p>:</span><span class=w> </span><span class=l>us-east-2</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-27-8><a class=lnlinks href=#hl-27-8>8</a></span><span class=cl><span class=w> </span><span class=nt>providerConfigRef</span><span class=p>:</span><span class=w> </span></span></span><span class=line><span class=ln id=hl-27-9><a class=lnlinks href=#hl-27-9>9</a></span><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>admin-keys</span><span class=w> </span></span></span></code></pre></div></div></main></div><footer class="bd-footer p-5"><div class="container text-center"><div class="row pb-5 top-row"><div class="col-lg img-col"><img src=/img/crossplane-logo.svg alt="Crossplane logo" srcset="/img/crossplane-logo.svg 1x, /img/crossplane-logo.svg 2x" width=185 height=40 decoding=async data-nimg=future loading=lazy class="d-flex crossplane-footer"></div><div class="col-lg links-col d-fill justify-content-evenly ms-5"><div class=row><div class=col-lg><a class=footer-link target=_blank href=https://twitter.com/crossplane_io>Twitter</a></div><div class=col-lg><a class=footer-link target=_blank href=https://www.youtube.com/channel/UC19FgzMBMqBro361HbE46Fw>Youtube</a></div><div class=col-lg><a class=footer-link target=_blank href="https://www.youtube.com/playlist?list=PL510POnNVaaYFuK-B_SIUrpIonCtLVOzT">Podcast</a></div><div class=col-lg><a class=footer-link target=_blank href=https://groups.google.com/g/crossplane-dev>Forum</a></div></div></div></div><div class="row pb-5"><div class="col-lg copyright-col pe-4 border-end"><p>© Crossplane Authors 2024. Documentation distributed under <a target=_blank href=https://creativecommons.org/licenses/by/4.0/>CC-BY-4.0</a>.</p><p>© 2024 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our <a target=_blank href=https://www.linuxfoundation.org/legal/trademark-usage>Trademark Usage</a> page.</p></div><div class="col-lg cncf-col ms-5"><a class=d-flex target=_blank href=https://www.cncf.io/><img alt=cncfLogo src=/img/cncf-white.webp width=702 height=114 decoding=async data-nimg=future loading=lazy class="cncf-footer py-3"></a><p class=d-flex>We are a Cloud Native Computing Foundation incubating project.</p></div></div></div></footer><script src=https://docs.crossplane.io/js/main-727bf178.bundle.min.js data-no-instant></script><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","el5517lxor")</script> <script>(function(e,t,n,s,o){e[s]=e[s]||[],e[s].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var a=t.getElementsByTagName(n)[0],i=t.createElement(n),r=s!="dataLayer"?"&l="+s:"";i.async=!0,i.src="https://www.googletagmanager.com/gtm.js?id="+o+r,a.parentNode.insertBefore(i,a)})(window,document,"script","dataLayer","GTM-WFF2NQHG")</script><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WFF2NQHG" height=0 width=0 style=display:none;visibility:hidden></iframe></noscript><script type=text/javascript>adroll_adv_id="B4XQTO44VJFVDGCGM332GU",adroll_pix_id="6ROIBHUPMVCSXN7HHIKJTK",adroll_version="2.0",function(e,t,n,s,o){e.__adroll_loaded=!0,e.adroll=e.adroll||[],e.adroll.f=["setProperties","identify","track"];var i="https://s.adroll.com/j/"+adroll_adv_id+"/roundtrip.js";for(o=0;o<e.adroll.f.length;o++)e.adroll[e.adroll.f[o]]=e.adroll[e.adroll.f[o]]||function(t){return function(){e.adroll.push([t,arguments])}}(e.adroll.f[o]);n=t.createElement("script"),s=t.getElementsByTagName("script")[0],n.async=1,n.src=i,s.parentNode.insertBefore(n,s)}(window,document),adroll.track("pageView")</script><script src=https://cdn.jsdelivr.net/npm/@docsearch/js@3></script> <script>docsearch({container:"#docSearch",appId:"9UXKYX61NK",indexName:"crossplane",apiKey:"e07e181044d561f6a4cb7261931d980a",placeholder:"Search the docs"})</script></body></html>