Skip to content
This repository was archived by the owner on Dec 10, 2025. It is now read-only.

Commit 8ad70c0

Browse files
author
Patrick J. McNerthney
committed
Fix resource specific unknownsFatal, autoReady, and usages settings
1 parent b06c8e8 commit 8ad70c0

25 files changed

Lines changed: 51 additions & 35 deletions

File tree

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ spec:
2525
functionRef:
2626
name: function-pythonic
2727
input:
28-
apiVersion: pythonic.fn.crossplane.io/v1beta1
28+
apiVersion: pythonic.fn.fortra.com/v1alpha1
2929
kind: Composite
3030
composite: |
3131
class VpcComposite(BaseComposite):
@@ -57,7 +57,7 @@ kind: Function
5757
metadata:
5858
name: function-pythonic
5959
spec:
60-
package: ghcr.io/fortra/function-pythonic:v0.1.2
60+
package: ghcr.io/fortra/function-pythonic:v0.1.3
6161
```
6262
## Composed Resource Dependencies
6363
@@ -384,7 +384,7 @@ metadata:
384384
annotations:
385385
render.crossplane.io/runtime: Development
386386
spec:
387-
package: ghcr.io/fortra/function-pythonic:v0.1.2
387+
package: ghcr.io/fortra/function-pythonic:v0.1.3
388388
```
389389
In one terminal session, run function-pythonic:
390390
```shell
@@ -486,7 +486,7 @@ kind: Function
486486
metadata:
487487
name: function-pythonic
488488
spec:
489-
package: ghcr.io/fortra/function-pythonic:v0.1.2
489+
package: ghcr.io/fortra/function-pythonic:v0.1.3
490490
runtimeConfigRef:
491491
name: function-pythonic
492492
---

crossplane/pythonic/composite.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,17 @@ def __iter__(self):
140140
class Resources:
141141
def __init__(self, composite):
142142
self.__dict__['_composite'] = composite
143+
self.__dict__['_cache'] = {}
143144

144145
def __getattr__(self, key):
145146
return self[key]
146147

147148
def __getitem__(self, key):
148-
return Resource(self._composite, key)
149+
resource = self._cache.get(key)
150+
if not resource:
151+
resource = Resource(self._composite, key)
152+
self._cache[key] = resource
153+
return resource
149154

150155
def __bool__(self):
151156
return bool(self._composite.response.desired.resources)
@@ -165,13 +170,15 @@ def __setattr__(self, key, resource):
165170

166171
def __setitem__(self, key, resource):
167172
self._composite.response.desired.resources[key].resource = resource
173+
self._cache.pop(key, None)
168174

169175
def __delattr__(self, key):
170176
del self[key]
171177

172178
def __delitem__(self, key):
173179
if key in self._composite.response.desired.resources:
174180
del self._composite.response.desired.resources[key]
181+
self._cache.pop(key, None)
175182

176183

177184
class Resource:
@@ -276,12 +283,17 @@ def ready(self, ready):
276283
class Requireds:
277284
def __init__(self, composite):
278285
self._composite = composite
286+
self._cache = {}
279287

280288
def __getattr__(self, key):
281289
return self[key]
282290

283291
def __getitem__(self, key):
284-
return RequiredResources(self._composite, key)
292+
required = self._cache.get(key)
293+
if not required:
294+
required = RequiredResources(self._composite, key)
295+
self._cache[key] = required
296+
return required
285297

286298
def __bool__(self):
287299
return bool(len(self))
@@ -316,6 +328,7 @@ def __init__(self, composite, name):
316328
self.name = name
317329
self._selector = composite.response.requirements.extra_resources[name]
318330
self._resources = composite.request.extra_resources[name]
331+
self._cache = {}
319332

320333
def __call__(self, apiVersion=_notset, kind=_notset, namespace=_notset, name=_notset, labels=_notset):
321334
self._selector()
@@ -378,7 +391,11 @@ def matchLabels(self, labels):
378391
self._selector.match_labels.labels[entry[0]] = entry[1]
379392

380393
def __getitem__(self, ix):
381-
return RequiredResource(self.name, ix, self._resources.items[ix])
394+
resource = self._cache.get(ix)
395+
if not resource:
396+
resource = RequiredResource(self.name, ix, self._resources.items[ix])
397+
self._cache[ix] = resource
398+
return resource
382399

383400
def __bool__(self):
384401
return bool(self._resources.items)

crossplane/pythonic/function.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ def process_usages(self, composite):
169169
source = self.trimFullName(source)
170170
composite.logger.debug(f"Dependency: {destination} = {source}")
171171
if resource.usages or (resource.usages is None and composite.usages):
172+
apiVersion = 'protection.crossplane.io/v1beta1' if composite.metadata.namespace else 'apiextensions.crossplane.io/v1beta1'
172173
resources = {}
173174
requireds = {}
174175
for destination, source in sorted(dependencies.items()):
@@ -198,8 +199,7 @@ def process_usages(self, composite):
198199
if source.metadata.namespace:
199200
name.append(str(source.metadata.namespace))
200201
name.append(str(source.observed.metadata.name))
201-
usage = composite.resources['_'.join(name)]('apiextensions.crossplane.io/v1beta1', 'Usage')
202-
#usage = composite.resources['_'.join(name)]('protection.crossplane.io/v1beta1', 'Usage')
202+
usage = composite.resources['_'.join(name)](apiVersion, 'Usage')
203203
if resource.metadata.namespace:
204204
usage.metadata.namespace = resource.metadata.namespace
205205
usage.spec.reason = '\n'.join(dependencies)
@@ -218,8 +218,7 @@ def process_usages(self, composite):
218218
if source.metadata.namespace:
219219
name.append(str(source.metadata.namespace))
220220
name.append(str(source.metadata.name))
221-
usage = composite.resources['_'.join(name)]('apiextensions.crossplane.io/v1beta1', 'Usage')
222-
#usage = composite.resources['_'.join(name)]('protection.crossplane.io/v1beta1', 'Usage')
221+
usage = composite.resources['_'.join(name)](apiVersion, 'Usage')
223222
if resource.metadata.namespace:
224223
usage.metadata.namespace = resource.metadata.namespace
225224
usage.spec.reason = '\n'.join(dependencies)

examples/.dev/functions.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ metadata:
1010
render.crossplane.io/runtime: Development
1111
render.crossplane.io/runtime-development-target: localhost:9443
1212
spec:
13-
package: ghcr.io/fortra/function-pythonic:v0.1.2
13+
package: ghcr.io/fortra/function-pythonic:v0.1.3

examples/aks-cluster/cluster-function-pythonic.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ kind: Function
33
metadata:
44
name: function-pythonic
55
spec:
6-
package: ghcr.io/fortra/function-pythonic:v0.1.2
6+
package: ghcr.io/fortra/function-pythonic:v0.1.3
77
runtimeConfigRef:
88
name: function-pythonic
99
---

examples/aks-cluster/functions.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ metadata:
55
annotations:
66
render.crossplane.io/runtime: Development
77
spec:
8-
package: ghcr.io/fortra/function-pythonic:v0.1.2
8+
package: ghcr.io/fortra/function-pythonic:v0.1.3
99
runtimeConfigRef:
1010
name: function-pythonic

examples/eks-cluster/functions.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ metadata:
55
annotations:
66
render.crossplane.io/runtime: Development
77
spec:
8-
package: ghcr.io/fortra/function-pythonic:v0.1.2
8+
package: ghcr.io/fortra/function-pythonic:v0.1.3

examples/filing-system/function.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ kind: Function
33
metadata:
44
name: function-pythonic
55
spec:
6-
package: ghcr.io/fortra/function-pythonic:v0.1.2
6+
package: ghcr.io/fortra/function-pythonic:v0.1.3
77
runtimeConfigRef:
88
apiVersion: pkg.crossplane.io/v1beta1
99
kind: DeploymentRuntimeConfig

examples/function-go-templating/conditions/functions.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ metadata:
1515
# This tells crossplane beta render to connect to the function locally.
1616
render.crossplane.io/runtime: Development
1717
spec:
18-
package: ghcr.io/fortra/function-pythonic:v0.1.2
18+
package: ghcr.io/fortra/function-pythonic:v0.1.3
1919
---
2020
apiVersion: pkg.crossplane.io/v1beta1
2121
kind: Function

examples/function-go-templating/context/functions.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ metadata:
1515
# This tells crossplane beta render to connect to the function locally.
1616
render.crossplane.io/runtime: Development
1717
spec:
18-
package: ghcr.io/fortra/function-pythonic:v0.1.2
18+
package: ghcr.io/fortra/function-pythonic:v0.1.3
1919
---
2020
apiVersion: pkg.crossplane.io/v1beta1
2121
kind: Function

0 commit comments

Comments
 (0)