@@ -59,7 +59,6 @@ metadata:
5959spec :
6060 package : ghcr.io/fortra/function-pythonic:v0.0.7
6161` ` `
62-
6362## Composed Resource Dependencies
6463
6564function-pythonic automatically handles dependencies between composed resources.
@@ -253,34 +252,46 @@ selection. For now, use matchLabels and filter the results if required.
253252RequiredResources acts like a Python list to provide access to the found required resources.
254253Each resource in the list is the following RequiredResource class :
255254
256- | Field | Description |
257- | ----- | ----------- |
258- | RequiredResource.name | The required resource name |
259- | RequiredResource.observed | Low level direct access to the observed required resource |
260- | RequiredResource.apiVersion | The required resource apiVersion |
261- | RequiredResource.kind | The required resource kind |
262- | RequiredResource.metadata | The required resource metadata |
263- | RequiredResource.spec | The required resource spec |
264- | RequiredResource.data | The required resource data |
265- | RequiredResource.status | The required resource status |
266- | RequiredResource.conditions | The required resource conditions |
255+ | Field | Type | Description |
256+ | ----- | ---- | ---- ------- |
257+ | RequiredResource.name | String | The required resource name |
258+ | RequiredResource.observed | Map | Low level direct access to the observed required resource |
259+ | RequiredResource.apiVersion | String | The required resource apiVersion |
260+ | RequiredResource.kind | String | The required resource kind |
261+ | RequiredResource.metadata | Map | The required resource metadata |
262+ | RequiredResource.spec | Map | The required resource spec |
263+ | RequiredResource.data | Map | The required resource data |
264+ | RequiredResource.status | Map | The required resource status |
265+ | RequiredResource.conditions | Map | The required resource conditions |
267266
268267# ## Conditions
269268
270- The `conditions` field is a map of the resource's status conditions array, with
271- the map key being the condition type.
269+ The `BaseCompsite.conditions`, `Resource.conditions`, and `RequiredResource.conditions` fields
270+ are maps of that entity's status conditions array, with the map key being the condition type.
271+ The fields are read only for `Resource.conditions` and `RequiredResource.conditions`.
272272
273- | Field | Description |
274- | ----- | ----------- |
275- | Condition.type | The condtion type |
276- | Condition.status | RequiredResource.observed | Low level direct access to the observed required resource |
277- | RequiredResource.apiVersion | The required resource apiVersion |
278- | RequiredResource.kind | The required resource kind |
279- | RequiredResource.metadata | The required resource metadata |
280- | RequiredResource.spec | The required resource spec |
281- | RequiredResource.data | The required resource data |
282- | RequiredResource.status | The required resource status |
283- | RequiredResource.conditions | The required resource conditions |
273+ | Field | Type | Description |
274+ | ----- | ---- | ----------- |
275+ | Condition.type | String | The condtion type, or name |
276+ | Condition.status | Boolean | The condition status |
277+ | Condition.reason | String | PascalCase, machine-readable reason for this condition |
278+ | Condition.message | String | Human-readable details about the condition |
279+ | Condition.lastTransitionTime | Timestamp | Last transition time, read only |
280+ | Condition.claim | Boolean | Also apply the condition the claim |
281+
282+ # ## Events
283+
284+ The `BaseComposite.events` field is a list of events to apply to the Composite and
285+ optionally to the Claim.
286+
287+ | Field | Type | Description |
288+ | ----- | ---- | ----------- |
289+ | Event.info | Boolean | Normal informational event |
290+ | Event.warning | Boolean | Warning level event |
291+ | Event.fatal | Boolean | Fatal events also terminate composing the Composite |
292+ | Event.reason | String | PascalCase, machine-readable reason for this event |
293+ | Event.message | String | Human-readable details about the event |
294+ | Event.claim | Boolean | Also apply the event to the claim |
284295
285296# # Single use Composites
286297
@@ -301,6 +312,85 @@ spec:
301312 self.status.composite = 'Hello, World!'
302313` ` `
303314
315+ # # Quick Start Development
316+
317+ The following example demonstrates how to locally render function-python
318+ compositions. First, install the `crossplane-function-pythonic` python
319+ package into the python environment :
320+ ` ` ` shell
321+ $ pip install crossplane-function-pythonic
322+ ` ` `
323+ Next, create the following files :
324+ # ### xr.yaml
325+ ` ` ` yaml
326+ apiVersion: pythonic.fortra.com/v1alpha1
327+ kind: Hello
328+ metadata:
329+ name: world
330+ spec:
331+ who: World
332+ ` ` `
333+ # ### composition.yaml
334+ ` ` ` yaml
335+ apiVersion: apiextensions.crossplane.io/v1
336+ kind: Composition
337+ metadata:
338+ name: hellos.pythonic.fortra.com
339+ spec:
340+ compositeTypeRef:
341+ apiVersion: pythonic.fortra.com/v1alpha1
342+ kind: Hello
343+ mode: Pipeline
344+ pipeline:
345+ - step: pythonic
346+ functionRef:
347+ name: function-pythonic
348+ input:
349+ apiVersion: pythonic.fn.fortra.com/v1alpha1
350+ kind: Composite
351+ composite: |
352+ class Composite(BaseComposite):
353+ def compose(self):
354+ self.status.greeting = f"Hello, {self.spec.who}!"
355+ ` ` `
356+ # ### functions.yaml
357+ ` ` ` yaml
358+ apiVersion: pkg.crossplane.io/v1beta1
359+ kind: Function
360+ metadata:
361+ name: function-pythonic
362+ annotations:
363+ render.crossplane.io/runtime: Development
364+ spec:
365+ package: ghcr.io/fortra/function-pythonic:v0.0.7
366+ ` ` `
367+ In one terminal session, run function-pythonic :
368+ ` ` ` shell
369+ $ function-pythonic --insecure --debug
370+ [2025-08-21 15:32:37.966] grpc._cython.cygrpc [DEBUG ] Using AsyncIOEngine.POLLER as I/O engine
371+ ` ` `
372+ In another terminal session, render the Composite :
373+ ` ` ` shell
374+ $ crossplane render xr.yaml composition.yaml functions.yaml
375+ ---
376+ apiVersion: pythonic.fortra.com/v1alpha1
377+ kind: Hello
378+ metadata:
379+ name: world
380+ status:
381+ conditions:
382+ - lastTransitionTime: "2024-01-01T00:00:00Z"
383+ reason: Available
384+ status: "True"
385+ type: Ready
386+ - lastTransitionTime: "2024-01-01T00:00:00Z"
387+ message: All resources are composed
388+ reason: AllComposed
389+ status: "True"
390+ type: ResourcesComposed
391+ greeting: Hello, World!
392+ ` ` `
393+
304394# # ConfigMap Packages
305395
306396ConfigMap based python packages are enable using the `--packages` and
0 commit comments