crossplane-function-pythonic 0.5.0__tar.gz → 0.6.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/.gitignore +1 -0
  2. crossplane_function_pythonic-0.5.0/README.md → crossplane_function_pythonic-0.6.1/PKG-INFO +137 -14
  3. crossplane_function_pythonic-0.5.0/PKG-INFO → crossplane_function_pythonic-0.6.1/README.md +110 -40
  4. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/crossplane/pythonic/__about__.py +1 -1
  5. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/crossplane/pythonic/composite.py +157 -3
  6. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/crossplane/pythonic/function.py +21 -6
  7. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/crossplane/pythonic/grpc.py +26 -4
  8. crossplane_function_pythonic-0.6.1/crossplane/pythonic/packages.py +180 -0
  9. crossplane_function_pythonic-0.6.1/crossplane/pythonic/proto/v1/run_function.proto +436 -0
  10. crossplane_function_pythonic-0.6.1/crossplane/pythonic/proto/v1/run_function_pb2.py +129 -0
  11. crossplane_function_pythonic-0.6.1/crossplane/pythonic/proto/v1/run_function_pb2.pyi +306 -0
  12. crossplane_function_pythonic-0.6.1/crossplane/pythonic/proto/v1/run_function_pb2_grpc.py +101 -0
  13. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/crossplane/pythonic/protobuf.py +28 -0
  14. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/crossplane/pythonic/render.py +107 -10
  15. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/aks-cluster/cluster-function-pythonic.yaml +1 -1
  16. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/context/composition.yaml +1 -1
  17. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/context/resources.yaml +1 -1
  18. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/pyproject.toml +30 -16
  19. crossplane_function_pythonic-0.5.0/crossplane/pythonic/packages.py +0 -148
  20. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/LICENSE +0 -0
  21. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/crossplane/pythonic/__init__.py +0 -0
  22. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/crossplane/pythonic/__main__.py +0 -0
  23. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/crossplane/pythonic/auto_ready.py +0 -0
  24. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/crossplane/pythonic/command.py +0 -0
  25. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/crossplane/pythonic/main.py +0 -0
  26. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/crossplane/pythonic/version.py +0 -0
  27. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/aks-cluster/README.md +0 -0
  28. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/aks-cluster/aks/kubernetescluster.py +0 -0
  29. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/aks-cluster/aks/resourcegroup.py +0 -0
  30. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/aks-cluster/composition.yaml +0 -0
  31. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/aks-cluster/definition.yaml +0 -0
  32. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/aks-cluster/install.sh +0 -0
  33. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/aks-cluster/kustomization.yaml +0 -0
  34. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/aks-cluster/providers.yaml +0 -0
  35. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/aks-cluster/render.sh +0 -0
  36. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/aks-cluster/xr.yaml +0 -0
  37. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/connection-details-composition/composition.yaml +0 -0
  38. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/connection-details-composition/definition.yaml +0 -0
  39. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/connection-details-composition/observed.yaml +0 -0
  40. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/connection-details-composition/render.sh +0 -0
  41. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/connection-details-composition/resources.yaml +0 -0
  42. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/connection-details-composition/xr.yaml +0 -0
  43. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/connections/composition.yaml +0 -0
  44. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/connections/observed.yaml +0 -0
  45. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/connections/render.sh +0 -0
  46. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/connections/resources.yaml +0 -0
  47. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/connections/xr.yaml +0 -0
  48. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/eks-cluster/composition-v2.yaml +0 -0
  49. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/eks-cluster/composition.yaml +0 -0
  50. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/eks-cluster/definition.yaml +0 -0
  51. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/eks-cluster/render-v2.sh +0 -0
  52. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/eks-cluster/render.sh +0 -0
  53. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/eks-cluster/xr.yaml +0 -0
  54. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/filing-system/README.md +0 -0
  55. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/filing-system/composition.yaml +0 -0
  56. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/filing-system/definition.yaml +0 -0
  57. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/filing-system/kustomization.yaml +0 -0
  58. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/filing-system/runtime.yaml +0 -0
  59. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/filing-system/vcluster.py +0 -0
  60. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/filing-system/vcluster.yaml +0 -0
  61. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/conditions/composition.yaml +0 -0
  62. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/conditions/render.sh +0 -0
  63. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/conditions/xr.yaml +0 -0
  64. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/conditions/xrd.yaml +0 -0
  65. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/context/render.sh +0 -0
  66. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/context/xr.yaml +0 -0
  67. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/context/xrd.yaml +0 -0
  68. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/fromYaml/composition.yaml +0 -0
  69. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/fromYaml/render.sh +0 -0
  70. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/fromYaml/xr.yaml +0 -0
  71. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/getComposedResource/composition.yaml +0 -0
  72. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/getComposedResource/observed.yaml +0 -0
  73. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/getComposedResource/render.sh +0 -0
  74. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/getComposedResource/xr.yaml +0 -0
  75. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/getCompositeResource/composition.yaml +0 -0
  76. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/getCompositeResource/render.sh +0 -0
  77. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/getCompositeResource/xr.yaml +0 -0
  78. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/getCredentialData/composition.yaml +0 -0
  79. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/getCredentialData/render.sh +0 -0
  80. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/getCredentialData/resources.yaml +0 -0
  81. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/getCredentialData/xr.yaml +0 -0
  82. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/getResourceCondition/composition.yaml +0 -0
  83. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/getResourceCondition/observed.yaml +0 -0
  84. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/getResourceCondition/render.sh +0 -0
  85. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/getResourceCondition/xr.yaml +0 -0
  86. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/include/composition.yaml +0 -0
  87. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/include/render.sh +0 -0
  88. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/include/xr.yaml +0 -0
  89. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/toYaml/composition.yaml +0 -0
  90. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/toYaml/render.sh +0 -0
  91. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/functions/toYaml/xr.yaml +0 -0
  92. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/inline/composition.yaml +0 -0
  93. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/inline/render.sh +0 -0
  94. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/inline/xr.yaml +0 -0
  95. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/recursive/composition-real.yaml +0 -0
  96. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/recursive/composition.yaml +0 -0
  97. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/recursive/render.sh +0 -0
  98. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/recursive/xr.yaml +0 -0
  99. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/required-resources/composition.yaml +0 -0
  100. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/required-resources/render.sh +0 -0
  101. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/required-resources/resources.yaml +0 -0
  102. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-go-templating/required-resources/xr.yaml +0 -0
  103. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-sequencer/composition.yaml +0 -0
  104. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-sequencer/observed.yaml +0 -0
  105. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-sequencer/render.sh +0 -0
  106. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-sequencer/sequencer.py +0 -0
  107. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/function-sequencer/xr.yaml +0 -0
  108. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/get-started-app/composition.yaml +0 -0
  109. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/get-started-app/definition.yaml +0 -0
  110. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/get-started-app/observed.yaml +0 -0
  111. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/get-started-app/render.sh +0 -0
  112. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/get-started-app/xr.yaml +0 -0
  113. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/helm-copy-secret/composition.yaml +0 -0
  114. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/helm-copy-secret/kustomization.yaml +0 -0
  115. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/helm-copy-secret/render.sh +0 -0
  116. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/helm-copy-secret/vcluster.py +0 -0
  117. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/helm-copy-secret/xr.yaml +0 -0
  118. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/helm-copy-secret/xrd.yaml +0 -0
  119. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/import-existing-vpc/README.md +0 -0
  120. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/import-existing-vpc/composition.yaml +0 -0
  121. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/import-existing-vpc/definition.yaml +0 -0
  122. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/import-existing-vpc/observed.yaml +0 -0
  123. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/import-existing-vpc/provider-ec2.yaml +0 -0
  124. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/import-existing-vpc/render.sh +0 -0
  125. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/import-existing-vpc/xr.yaml +0 -0
  126. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/inlined/composition.yaml +0 -0
  127. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/inlined/definition.yaml +0 -0
  128. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/inlined/render.sh +0 -0
  129. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/inlined/xr.yaml +0 -0
  130. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/run-all.sh +0 -0
  131. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/usages-extra/composition.yaml +0 -0
  132. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/usages-extra/observed.yaml +0 -0
  133. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/usages-extra/render.sh +0 -0
  134. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/usages-extra/resources.yaml +0 -0
  135. {crossplane_function_pythonic-0.5.0 → crossplane_function_pythonic-0.6.1}/examples/usages-extra/xr.yaml +0 -0
@@ -212,6 +212,7 @@ __marimo__/
212
212
 
213
213
  # function-pythonic
214
214
  crossplane/pythonic/__version__.py
215
+ crossplane/pythonic/proto/v1/run_function_pb2*
215
216
  pocs/
216
217
  pythonic-packages/
217
218
  tests/protobuf/pytest_pb2*
@@ -1,3 +1,30 @@
1
+ Metadata-Version: 2.4
2
+ Name: crossplane-function-pythonic
3
+ Version: 0.6.1
4
+ Summary: A Python centric Crossplane Function
5
+ Project-URL: Documentation, https://github.com/crossplane-contrib/function-pythonic#readme
6
+ Project-URL: Issues, https://github.com/crossplane-contrib/function-pythonic/issues
7
+ Project-URL: Source, https://github.com/crossplane-contrib/function-pythonic
8
+ Author-email: Patrick J McNerthney <pat@mcnerthney.com>
9
+ License-Expression: Apache-2.0
10
+ License-File: LICENSE
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Programming Language :: Python
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
16
+ Requires-Python: <3.15,>=3.12
17
+ Requires-Dist: grpcio==1.80.0
18
+ Requires-Dist: inflect==7.5.0
19
+ Requires-Dist: kr8s==0.20.15
20
+ Requires-Dist: protobuf==7.35.0
21
+ Requires-Dist: pyyaml==6.0.3
22
+ Provides-Extra: packages
23
+ Requires-Dist: kopf==1.44.5; extra == 'packages'
24
+ Provides-Extra: pip-install
25
+ Requires-Dist: pip==26.1.1; extra == 'pip-install'
26
+ Description-Content-Type: text/markdown
27
+
1
28
  # function-pythonic
2
29
 
3
30
  ## Introduction
@@ -57,7 +84,7 @@ kind: Function
57
84
  metadata:
58
85
  name: function-pythonic
59
86
  spec:
60
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.4.2
87
+ package: xpkg.crossplane.io/crossplane-contrib/function-pythonic:v0.6.0
61
88
  ```
62
89
 
63
90
  ### Crossplane V1
@@ -69,7 +96,7 @@ kind: Function
69
96
  metadata:
70
97
  name: function-pythonic
71
98
  spec:
72
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.4.2
99
+ package: xpkg.crossplane.io/crossplane-contrib/function-pythonic:v0.6.0
73
100
  runtimeConfigRef:
74
101
  name: function-pythonic
75
102
  --
@@ -266,6 +293,7 @@ The BaseComposite class provides the following fields for manipulating the Compo
266
293
  | self.metadata | Map | The composite observed metadata |
267
294
  | self.spec | Map | The composite observed spec |
268
295
  | self.status | Map | The composite desired and observed status, read from observed if not in desired |
296
+ | self.output | Map | The step output, only used during Operations |
269
297
  | self.conditions | Conditions | The composite desired and observed conditions, read from observed if not in desired |
270
298
  | self.results | Results | Returned results applied to the Composite and optionally on the Claim |
271
299
  | self.connectionSecret | Map | The name, namespace, and resourceName to use when generating the connection secret in Crossplane v2 |
@@ -280,17 +308,31 @@ The BaseComposite also provides access to the following Crossplane Function leve
280
308
  | self.request | Message | Low level direct access to the RunFunctionRequest message |
281
309
  | self.response | Message | Low level direct access to the RunFunctionResponse message |
282
310
  | self.logger | Logger | Python logger to log messages to the running function stdout |
311
+ | self.capabilities | Capabilities | This Crossplane version's Capabilities |
283
312
  | self.parameters | Map | The configured step parameters |
284
313
  | self.ttl | Integer | Get or set the response TTL, in seconds |
285
314
  | self.credentials | Credentials | The request credentials |
286
315
  | self.context | Map | The response context, initialized from the request context |
287
316
  | self.environment | Map | The response environment, initialized from the request context environment |
288
317
  | self.requireds | Requireds | Request and read additional local Kubernetes resources |
318
+ | self.schemas | Schemas | Request and read CustomResourceDefinition schemas |
289
319
  | self.resources | Resources | Define and process composed resources |
290
320
  | self.usages| Boolean | Generate Crossplane Usages for resource dependencies, default False |
291
321
  | self.autoReady | Boolean | Perform auto ready processing on all composed resources, default True |
292
322
  | self.unknownsFatal | Boolean | Terminate the composition if already created resources are assigned unknown values, default False |
293
323
 
324
+ ### Capabiities
325
+
326
+ The Capabilities of the Crossplane version calling function-pythonic.
327
+
328
+ | Field | Type | Description |
329
+ | ----- | ---- | ----------- |
330
+ | bool(Capabilities) | Boolean | Whether or not the Crossplane version supports Capabilities |
331
+ | Capabiities.requireds | Boolean | Functions can return required resources and Crossplane will fetch the required resources |
332
+ | Capabiities.credentials | Boolean | Functions can receive credentials from secrets specified in the Composition |
333
+ | Capabiities.conditions | Boolean | Functions can return status conditions to be applied to the XR and optionally its claim |
334
+ | Capabiities.schemas | Boolean | Functions can request OpenAPI schemas and Crossplane will return them |
335
+
294
336
  ### Composed Resources
295
337
 
296
338
  Creating and accessing composed resources is performed using the `BaseComposite.resources` field.
@@ -324,7 +366,7 @@ Resource class:
324
366
 
325
367
  Creating and accessing required resources is performed using the `BaseComposite.requireds` field.
326
368
  `BaseComposite.requireds` is a dictionary of the required resources whose key is the required
327
- resource name. The value returned when getting a required resource from BaseComposite is the
369
+ schema name. The value returned when getting a required resource from BaseComposite is the
328
370
  following RequiredResources class:
329
371
 
330
372
  | Field | Type | Description |
@@ -337,9 +379,6 @@ following RequiredResources class:
337
379
  | RequiredResources.matchName | String | The names to match when returning the required resources |
338
380
  | RequiredResources.matchLabels | Map | The labels to match when returning the required resources |
339
381
 
340
- The current version of crossplane-sdk-python used by function-pythonic does not support namespace
341
- selection. For now, use matchLabels and filter the results if required.
342
-
343
382
  RequiredResources acts like a Python list to provide access to the found required resources.
344
383
  Each resource in the list is the following RequiredResource class:
345
384
 
@@ -356,6 +395,22 @@ Each resource in the list is the following RequiredResource class:
356
395
  | RequiredResource.conditions | Map | The required resource conditions |
357
396
  | RequiredResource.connection | Map | The required resource connection details |
358
397
 
398
+ ### Required Schemas
399
+
400
+ Creating and accessing required schemas is performed using the `BaseComposite.schemas` field.
401
+ `BaseComposite.schemas` is a dictionary of the required schema whose key is the required
402
+ resource name. The value returned when getting a required resource from BaseComposite is the
403
+ following Schema class:
404
+
405
+ | Field | Type | Description |
406
+ | ----- | ---- | ----------- |
407
+ | Schema(apiVersion,kind) | Schema | Reset the required schema and set the optional parameters |
408
+ | Schema.name | String | The required schema name |
409
+ | Schema.apiVersion | String | The required schema selector apiVersion |
410
+ | Schema.kind | String | The required schema selector kind |
411
+ | Schema.\_\_getitem\_\_ | Map | The required schema openAPIV3Schema |
412
+ | Schema.\_\_getattr\_\_ | Map | The required schema openAPIV3Schema |
413
+
359
414
  ### Conditions
360
415
 
361
416
  The `BaseComposite.conditions`, `Resource.conditions`, and `RequiredResource.conditions` fields
@@ -474,7 +529,7 @@ $ function-pythonic render --help
474
529
  usage: Crossplane Function Pythonic render [-h] [--debug] [--log-name-width WIDTH] [--logger-level LOGGER=LEVEL] [--python-path DIRECTORY]
475
530
  [--render-unknowns] [--allow-oversize-protos] [--crossplane-v1] [--kube-context CONTEXT]
476
531
  [--context-files KEY=PATH] [--context-values KEY=VALUE] [--observed-resources PATH]
477
- [--required-resources PATH] [--secret-store PATH] [--include-full-xr] [--include-connection-xr]
532
+ [--required-resources PATH] [--required-schemas PATH] [--include-full-xr] [--include-connection-xr]
478
533
  [--include-function-results] [--include-context]
479
534
  COMPOSITE [COMPOSITION]
480
535
 
@@ -506,8 +561,8 @@ options:
506
561
  A YAML file or directory of YAML files specifying the observed state of composed resources.
507
562
  --required-resources, -e PATH
508
563
  A YAML file or directory of YAML files specifying required resources to pass to the Function pipeline.
509
- --secret-store, -s PATH
510
- A YAML file or directory of YAML files specifying Secrets to use to resolve connections and credentials.
564
+ --required-schemas, -s PATH
565
+ A JSON file or directory of JSON files specifying required schemas to pass to the Function pipeline.
511
566
  --include-full-xr, -x
512
567
  Include a direct copy of the input XR's spedc and metadata fields in the rendered output.
513
568
  --include-connection-xr
@@ -576,9 +631,15 @@ status:
576
631
  Most of the examples contain a `render.sh` command which uses `function-pythonic render` to
577
632
  render the example.
578
633
 
579
- ## ConfigMap Packages
634
+ ## Shared Python Packages
635
+
636
+ Python packages and modules can be added to the function-pythonic runtime
637
+ by including the python code in any of the following resources: ConfigMap,
638
+ Secret, EnvironmentConfig, or Composition
580
639
 
581
- ConfigMap based python packages are enable using the `--packages` and
640
+ ### ConfigMap Packages
641
+
642
+ ConfigMap based python packages are enable using the `--packages-configmaps` and
582
643
  `--packages-namespace` command line options. ConfigMaps with the label
583
644
  `function-pythonic.package` will be incorporated in the python path at
584
645
  the location configured in the label value. For example, the following
@@ -640,7 +701,7 @@ data:
640
701
  composite: example.pythonic.features.FeatureOneComposite
641
702
  ...
642
703
  ```
643
- This requires enabling the the packages support using the `--packages` command
704
+ This requires enabling the the packages support using the `--packages-configmaps` command
644
705
  line option in the DeploymentRuntimeConfig and configuring the required
645
706
  Kubernetes RBAC permissions. For example:
646
707
  ```yaml
@@ -649,7 +710,7 @@ kind: Function
649
710
  metadata:
650
711
  name: function-pythonic
651
712
  spec:
652
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.4.2
713
+ package: xpkg.crossplane.io/crossplane-contrib/function-pythonic:v0.6.0
653
714
  runtimeConfigRef:
654
715
  name: function-pythonic
655
716
  ---
@@ -711,9 +772,71 @@ ClusterRole permissions. The `--packages-namespace` command line option will res
711
772
  to only using the supplied namespace. This option can be invoked multiple times.
712
773
  The above RBAC permission can then be per namespace RBAC Role permissions.
713
774
 
775
+ ### Secret Packages
776
+
714
777
  Secrets can also be used in an identical manner as ConfigMaps by enabling the
715
778
  `--packages-secrets` command line option. Secrets permissions need to be
716
- added to the above RBAC configuration.
779
+ added to the above RBAC configuration. Secret based python packages also enable
780
+ provisioning files with binary data.
781
+
782
+ ### EnvironmentConfig Packages
783
+
784
+ EnvironmentConfig based provisioning enable an entire package and module
785
+ directory structure. Use the `--packages-environmentconfigs` command line option
786
+ and configure the ClusterRole RBAC access.
787
+ ```yaml
788
+ apiVersion: apiextensions.crossplane.io/v1beta1
789
+ kind: EnvironmentConfig
790
+ metadata:
791
+ name: test
792
+ labels:
793
+ function-pythonic.package: 'true'
794
+ data:
795
+ arootpackage:
796
+ asubpackage:
797
+ bmodule.py: |
798
+ def hello(where):
799
+ return f"Hello, {where}!"
800
+ amodule.py: |
801
+ def goodby(where):
802
+ return f"Goodby, {where}!"
803
+ ```
804
+ ### Composition Packages
805
+
806
+ Composition based provisioning works just like EnvironmentConfig where a
807
+ directory structure is created. Use the `--packages-compositions` command line option
808
+ and configure the ClusterRole RBAC access. The main reason to use Composition
809
+ based provision is because Compositions can be included in a Crossplane
810
+ Configuration Package.
811
+ ```yaml
812
+ apiVersion: apiextensions.crossplane.io/v1
813
+ kind: Composition
814
+ metadata:
815
+ labels:
816
+ function-pythonic.package: 'true'
817
+ name: test
818
+ spec:
819
+ compositeTypeRef:
820
+ apiVersion: code.pythoni.com/v1alpha1
821
+ kind: Code
822
+ mode: Pipeline
823
+ pipeline:
824
+ - step: render
825
+ functionRef:
826
+ name: function-pythonic
827
+ input:
828
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
829
+ kind: Composite
830
+ packages:
831
+ arootpackage:
832
+ asubpackage:
833
+ bmodule.py: |
834
+ def hello(where):
835
+ return f"Hello, {where}!"
836
+ amodule.py: |
837
+ def goodby(where):
838
+ return f"Goodby, {where}!"
839
+ ```
717
840
 
718
841
  ## Step Parameters
719
842
 
@@ -1,29 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: crossplane-function-pythonic
3
- Version: 0.5.0
4
- Summary: A Python centric Crossplane Function
5
- Project-URL: Documentation, https://github.com/crossplane-contrib/function-pythonic#readme
6
- Project-URL: Issues, https://github.com/crossplane-contrib/function-pythonic/issues
7
- Project-URL: Source, https://github.com/crossplane-contrib/function-pythonic
8
- Author-email: Patrick J McNerthney <pat@mcnerthney.com>
9
- License-Expression: Apache-2.0
10
- License-File: LICENSE
11
- Classifier: Development Status :: 4 - Beta
12
- Classifier: Programming Language :: Python
13
- Classifier: Programming Language :: Python :: 3.12
14
- Classifier: Programming Language :: Python :: 3.13
15
- Classifier: Programming Language :: Python :: 3.14
16
- Requires-Python: <3.15,>=3.12
17
- Requires-Dist: crossplane-function-sdk-python==0.11.0
18
- Requires-Dist: inflect==7.5.0
19
- Requires-Dist: kr8s==0.20.15
20
- Requires-Dist: pyyaml==6.0.3
21
- Provides-Extra: packages
22
- Requires-Dist: kopf==1.43.0; extra == 'packages'
23
- Provides-Extra: pip-install
24
- Requires-Dist: pip==26.0.1; extra == 'pip-install'
25
- Description-Content-Type: text/markdown
26
-
27
1
  # function-pythonic
28
2
 
29
3
  ## Introduction
@@ -83,7 +57,7 @@ kind: Function
83
57
  metadata:
84
58
  name: function-pythonic
85
59
  spec:
86
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.4.2
60
+ package: xpkg.crossplane.io/crossplane-contrib/function-pythonic:v0.6.0
87
61
  ```
88
62
 
89
63
  ### Crossplane V1
@@ -95,7 +69,7 @@ kind: Function
95
69
  metadata:
96
70
  name: function-pythonic
97
71
  spec:
98
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.4.2
72
+ package: xpkg.crossplane.io/crossplane-contrib/function-pythonic:v0.6.0
99
73
  runtimeConfigRef:
100
74
  name: function-pythonic
101
75
  --
@@ -292,6 +266,7 @@ The BaseComposite class provides the following fields for manipulating the Compo
292
266
  | self.metadata | Map | The composite observed metadata |
293
267
  | self.spec | Map | The composite observed spec |
294
268
  | self.status | Map | The composite desired and observed status, read from observed if not in desired |
269
+ | self.output | Map | The step output, only used during Operations |
295
270
  | self.conditions | Conditions | The composite desired and observed conditions, read from observed if not in desired |
296
271
  | self.results | Results | Returned results applied to the Composite and optionally on the Claim |
297
272
  | self.connectionSecret | Map | The name, namespace, and resourceName to use when generating the connection secret in Crossplane v2 |
@@ -306,17 +281,31 @@ The BaseComposite also provides access to the following Crossplane Function leve
306
281
  | self.request | Message | Low level direct access to the RunFunctionRequest message |
307
282
  | self.response | Message | Low level direct access to the RunFunctionResponse message |
308
283
  | self.logger | Logger | Python logger to log messages to the running function stdout |
284
+ | self.capabilities | Capabilities | This Crossplane version's Capabilities |
309
285
  | self.parameters | Map | The configured step parameters |
310
286
  | self.ttl | Integer | Get or set the response TTL, in seconds |
311
287
  | self.credentials | Credentials | The request credentials |
312
288
  | self.context | Map | The response context, initialized from the request context |
313
289
  | self.environment | Map | The response environment, initialized from the request context environment |
314
290
  | self.requireds | Requireds | Request and read additional local Kubernetes resources |
291
+ | self.schemas | Schemas | Request and read CustomResourceDefinition schemas |
315
292
  | self.resources | Resources | Define and process composed resources |
316
293
  | self.usages| Boolean | Generate Crossplane Usages for resource dependencies, default False |
317
294
  | self.autoReady | Boolean | Perform auto ready processing on all composed resources, default True |
318
295
  | self.unknownsFatal | Boolean | Terminate the composition if already created resources are assigned unknown values, default False |
319
296
 
297
+ ### Capabiities
298
+
299
+ The Capabilities of the Crossplane version calling function-pythonic.
300
+
301
+ | Field | Type | Description |
302
+ | ----- | ---- | ----------- |
303
+ | bool(Capabilities) | Boolean | Whether or not the Crossplane version supports Capabilities |
304
+ | Capabiities.requireds | Boolean | Functions can return required resources and Crossplane will fetch the required resources |
305
+ | Capabiities.credentials | Boolean | Functions can receive credentials from secrets specified in the Composition |
306
+ | Capabiities.conditions | Boolean | Functions can return status conditions to be applied to the XR and optionally its claim |
307
+ | Capabiities.schemas | Boolean | Functions can request OpenAPI schemas and Crossplane will return them |
308
+
320
309
  ### Composed Resources
321
310
 
322
311
  Creating and accessing composed resources is performed using the `BaseComposite.resources` field.
@@ -350,7 +339,7 @@ Resource class:
350
339
 
351
340
  Creating and accessing required resources is performed using the `BaseComposite.requireds` field.
352
341
  `BaseComposite.requireds` is a dictionary of the required resources whose key is the required
353
- resource name. The value returned when getting a required resource from BaseComposite is the
342
+ schema name. The value returned when getting a required resource from BaseComposite is the
354
343
  following RequiredResources class:
355
344
 
356
345
  | Field | Type | Description |
@@ -363,9 +352,6 @@ following RequiredResources class:
363
352
  | RequiredResources.matchName | String | The names to match when returning the required resources |
364
353
  | RequiredResources.matchLabels | Map | The labels to match when returning the required resources |
365
354
 
366
- The current version of crossplane-sdk-python used by function-pythonic does not support namespace
367
- selection. For now, use matchLabels and filter the results if required.
368
-
369
355
  RequiredResources acts like a Python list to provide access to the found required resources.
370
356
  Each resource in the list is the following RequiredResource class:
371
357
 
@@ -382,6 +368,22 @@ Each resource in the list is the following RequiredResource class:
382
368
  | RequiredResource.conditions | Map | The required resource conditions |
383
369
  | RequiredResource.connection | Map | The required resource connection details |
384
370
 
371
+ ### Required Schemas
372
+
373
+ Creating and accessing required schemas is performed using the `BaseComposite.schemas` field.
374
+ `BaseComposite.schemas` is a dictionary of the required schema whose key is the required
375
+ resource name. The value returned when getting a required resource from BaseComposite is the
376
+ following Schema class:
377
+
378
+ | Field | Type | Description |
379
+ | ----- | ---- | ----------- |
380
+ | Schema(apiVersion,kind) | Schema | Reset the required schema and set the optional parameters |
381
+ | Schema.name | String | The required schema name |
382
+ | Schema.apiVersion | String | The required schema selector apiVersion |
383
+ | Schema.kind | String | The required schema selector kind |
384
+ | Schema.\_\_getitem\_\_ | Map | The required schema openAPIV3Schema |
385
+ | Schema.\_\_getattr\_\_ | Map | The required schema openAPIV3Schema |
386
+
385
387
  ### Conditions
386
388
 
387
389
  The `BaseComposite.conditions`, `Resource.conditions`, and `RequiredResource.conditions` fields
@@ -500,7 +502,7 @@ $ function-pythonic render --help
500
502
  usage: Crossplane Function Pythonic render [-h] [--debug] [--log-name-width WIDTH] [--logger-level LOGGER=LEVEL] [--python-path DIRECTORY]
501
503
  [--render-unknowns] [--allow-oversize-protos] [--crossplane-v1] [--kube-context CONTEXT]
502
504
  [--context-files KEY=PATH] [--context-values KEY=VALUE] [--observed-resources PATH]
503
- [--required-resources PATH] [--secret-store PATH] [--include-full-xr] [--include-connection-xr]
505
+ [--required-resources PATH] [--required-schemas PATH] [--include-full-xr] [--include-connection-xr]
504
506
  [--include-function-results] [--include-context]
505
507
  COMPOSITE [COMPOSITION]
506
508
 
@@ -532,8 +534,8 @@ options:
532
534
  A YAML file or directory of YAML files specifying the observed state of composed resources.
533
535
  --required-resources, -e PATH
534
536
  A YAML file or directory of YAML files specifying required resources to pass to the Function pipeline.
535
- --secret-store, -s PATH
536
- A YAML file or directory of YAML files specifying Secrets to use to resolve connections and credentials.
537
+ --required-schemas, -s PATH
538
+ A JSON file or directory of JSON files specifying required schemas to pass to the Function pipeline.
537
539
  --include-full-xr, -x
538
540
  Include a direct copy of the input XR's spedc and metadata fields in the rendered output.
539
541
  --include-connection-xr
@@ -602,9 +604,15 @@ status:
602
604
  Most of the examples contain a `render.sh` command which uses `function-pythonic render` to
603
605
  render the example.
604
606
 
605
- ## ConfigMap Packages
607
+ ## Shared Python Packages
608
+
609
+ Python packages and modules can be added to the function-pythonic runtime
610
+ by including the python code in any of the following resources: ConfigMap,
611
+ Secret, EnvironmentConfig, or Composition
606
612
 
607
- ConfigMap based python packages are enable using the `--packages` and
613
+ ### ConfigMap Packages
614
+
615
+ ConfigMap based python packages are enable using the `--packages-configmaps` and
608
616
  `--packages-namespace` command line options. ConfigMaps with the label
609
617
  `function-pythonic.package` will be incorporated in the python path at
610
618
  the location configured in the label value. For example, the following
@@ -666,7 +674,7 @@ data:
666
674
  composite: example.pythonic.features.FeatureOneComposite
667
675
  ...
668
676
  ```
669
- This requires enabling the the packages support using the `--packages` command
677
+ This requires enabling the the packages support using the `--packages-configmaps` command
670
678
  line option in the DeploymentRuntimeConfig and configuring the required
671
679
  Kubernetes RBAC permissions. For example:
672
680
  ```yaml
@@ -675,7 +683,7 @@ kind: Function
675
683
  metadata:
676
684
  name: function-pythonic
677
685
  spec:
678
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.4.2
686
+ package: xpkg.crossplane.io/crossplane-contrib/function-pythonic:v0.6.0
679
687
  runtimeConfigRef:
680
688
  name: function-pythonic
681
689
  ---
@@ -737,9 +745,71 @@ ClusterRole permissions. The `--packages-namespace` command line option will res
737
745
  to only using the supplied namespace. This option can be invoked multiple times.
738
746
  The above RBAC permission can then be per namespace RBAC Role permissions.
739
747
 
748
+ ### Secret Packages
749
+
740
750
  Secrets can also be used in an identical manner as ConfigMaps by enabling the
741
751
  `--packages-secrets` command line option. Secrets permissions need to be
742
- added to the above RBAC configuration.
752
+ added to the above RBAC configuration. Secret based python packages also enable
753
+ provisioning files with binary data.
754
+
755
+ ### EnvironmentConfig Packages
756
+
757
+ EnvironmentConfig based provisioning enable an entire package and module
758
+ directory structure. Use the `--packages-environmentconfigs` command line option
759
+ and configure the ClusterRole RBAC access.
760
+ ```yaml
761
+ apiVersion: apiextensions.crossplane.io/v1beta1
762
+ kind: EnvironmentConfig
763
+ metadata:
764
+ name: test
765
+ labels:
766
+ function-pythonic.package: 'true'
767
+ data:
768
+ arootpackage:
769
+ asubpackage:
770
+ bmodule.py: |
771
+ def hello(where):
772
+ return f"Hello, {where}!"
773
+ amodule.py: |
774
+ def goodby(where):
775
+ return f"Goodby, {where}!"
776
+ ```
777
+ ### Composition Packages
778
+
779
+ Composition based provisioning works just like EnvironmentConfig where a
780
+ directory structure is created. Use the `--packages-compositions` command line option
781
+ and configure the ClusterRole RBAC access. The main reason to use Composition
782
+ based provision is because Compositions can be included in a Crossplane
783
+ Configuration Package.
784
+ ```yaml
785
+ apiVersion: apiextensions.crossplane.io/v1
786
+ kind: Composition
787
+ metadata:
788
+ labels:
789
+ function-pythonic.package: 'true'
790
+ name: test
791
+ spec:
792
+ compositeTypeRef:
793
+ apiVersion: code.pythoni.com/v1alpha1
794
+ kind: Code
795
+ mode: Pipeline
796
+ pipeline:
797
+ - step: render
798
+ functionRef:
799
+ name: function-pythonic
800
+ input:
801
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
802
+ kind: Composite
803
+ packages:
804
+ arootpackage:
805
+ asubpackage:
806
+ bmodule.py: |
807
+ def hello(where):
808
+ return f"Hello, {where}!"
809
+ amodule.py: |
810
+ def goodby(where):
811
+ return f"Goodby, {where}!"
812
+ ```
743
813
 
744
814
  ## Step Parameters
745
815
 
@@ -1,2 +1,2 @@
1
1
  # This is set at build time, using "hatch version"
2
- __version__ = "0.5.0"
2
+ __version__ = "0.6.1"