@@ -9,6 +9,10 @@ import {
99 getDesiredComposedResources ,
1010 getDesiredCompositeResource ,
1111 getObservedCompositeResource ,
12+ getObservedComposedResources ,
13+ getCondition ,
14+ hasCapability ,
15+ Capability ,
1216 type FunctionHandler ,
1317 type Logger ,
1418} from '@crossplane-org/function-sdk-typescript' ;
@@ -54,6 +58,15 @@ export class Function implements FunctionHandler {
5458 let rsp = to ( req ) ;
5559
5660 try {
61+ // Example: Check Crossplane capabilities
62+ // hasCapability() allows checking what features are supported by the Crossplane version
63+ // Starting with 2.2.0 Crossplane added the ability to download schemas.
64+ const capabilities = {
65+ requiredResources : hasCapability ( req , Capability . CAPABILITY_REQUIRED_RESOURCES ) ,
66+ requiredSchemas : hasCapability ( req , Capability . CAPABILITY_REQUIRED_SCHEMAS ) ,
67+ } ;
68+ logger ?. info ( { capabilities } , 'Crossplane capabilities detected' ) ;
69+
5770 // Get our Observed Composite
5871 const observedComposite = getObservedCompositeResource ( req ) ;
5972 logger ?. debug ( { observedComposite } , 'Observed composite resource' ) ;
@@ -210,6 +223,23 @@ export class Function implements FunctionHandler {
210223
211224 desiredComposed [ 'deployment' ] = fromModel ( deployment ) ;
212225
226+ // Example: Check the conditions of the observed deployment
227+ // getCondition() extracts status conditions and returns "Unknown" if not found
228+ const observedComposed = getObservedComposedResources ( req ) ;
229+ const observedDeployment = observedComposed [ 'deployment' ] ;
230+ if ( observedDeployment ?. resource ) {
231+ const availableCondition = getCondition ( observedDeployment . resource , 'Available' ) ;
232+ const progressingCondition = getCondition ( observedDeployment . resource , 'Progressing' ) ;
233+ logger ?. info (
234+ {
235+ deployment : observedDeployment . resource . metadata ?. name ,
236+ available : availableCondition . status ,
237+ progressing : progressingCondition . status ,
238+ } ,
239+ 'Deployment conditions'
240+ ) ;
241+ }
242+
213243 // Create Ingress if config is provided
214244 if ( ingressConfig && Object . keys ( ingressConfig ) . length > 0 ) {
215245 const ingress = new Ingress ( {
0 commit comments