infrahub-server 1.3.2__py3-none-any.whl → 1.3.3__py3-none-any.whl
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.
- infrahub/cli/db.py +194 -13
- infrahub/core/branch/enums.py +8 -0
- infrahub/core/branch/models.py +28 -5
- infrahub/core/branch/tasks.py +5 -7
- infrahub/core/diff/coordinator.py +32 -34
- infrahub/core/diff/diff_locker.py +26 -0
- infrahub/core/graph/__init__.py +1 -1
- infrahub/core/initialization.py +4 -3
- infrahub/core/merge.py +31 -16
- infrahub/core/migrations/graph/__init__.py +24 -0
- infrahub/core/migrations/graph/m012_convert_account_generic.py +4 -3
- infrahub/core/migrations/graph/m013_convert_git_password_credential.py +4 -3
- infrahub/core/migrations/graph/m032_cleanup_orphaned_branch_relationships.py +105 -0
- infrahub/core/migrations/graph/m033_deduplicate_relationship_vertices.py +97 -0
- infrahub/core/node/__init__.py +3 -0
- infrahub/core/node/resource_manager/ip_address_pool.py +5 -3
- infrahub/core/node/resource_manager/ip_prefix_pool.py +7 -4
- infrahub/core/node/resource_manager/number_pool.py +3 -1
- infrahub/core/node/standard.py +4 -0
- infrahub/core/query/branch.py +25 -56
- infrahub/core/query/node.py +78 -24
- infrahub/core/query/relationship.py +11 -8
- infrahub/core/relationship/model.py +10 -5
- infrahub/dependencies/builder/diff/coordinator.py +3 -0
- infrahub/dependencies/builder/diff/locker.py +8 -0
- infrahub/graphql/mutations/main.py +7 -2
- infrahub/graphql/mutations/tasks.py +2 -0
- {infrahub_server-1.3.2.dist-info → infrahub_server-1.3.3.dist-info}/METADATA +1 -1
- {infrahub_server-1.3.2.dist-info → infrahub_server-1.3.3.dist-info}/RECORD +35 -30
- infrahub_testcontainers/container.py +1 -1
- infrahub_testcontainers/docker-compose-cluster.test.yml +3 -0
- infrahub_testcontainers/docker-compose.test.yml +1 -0
- {infrahub_server-1.3.2.dist-info → infrahub_server-1.3.3.dist-info}/LICENSE.txt +0 -0
- {infrahub_server-1.3.2.dist-info → infrahub_server-1.3.3.dist-info}/WHEEL +0 -0
- {infrahub_server-1.3.2.dist-info → infrahub_server-1.3.3.dist-info}/entry_points.txt +0 -0
infrahub/core/query/node.py
CHANGED
|
@@ -10,6 +10,7 @@ from typing import TYPE_CHECKING, Any, AsyncIterator, Generator
|
|
|
10
10
|
from infrahub import config
|
|
11
11
|
from infrahub.core import registry
|
|
12
12
|
from infrahub.core.constants import (
|
|
13
|
+
GLOBAL_BRANCH_NAME,
|
|
13
14
|
AttributeDBNodeType,
|
|
14
15
|
RelationshipDirection,
|
|
15
16
|
RelationshipHierarchyDirection,
|
|
@@ -128,7 +129,7 @@ class NodeCreateAllQuery(NodeQuery):
|
|
|
128
129
|
|
|
129
130
|
raise_error_if_empty: bool = True
|
|
130
131
|
|
|
131
|
-
async def query_init(self, db: InfrahubDatabase, **kwargs) -> None: # noqa: ARG002
|
|
132
|
+
async def query_init(self, db: InfrahubDatabase, **kwargs) -> None: # noqa: ARG002, PLR0915
|
|
132
133
|
at = self.at or self.node._at
|
|
133
134
|
self.params["uuid"] = self.node.id
|
|
134
135
|
self.params["branch"] = self.branch.name
|
|
@@ -151,11 +152,19 @@ class NodeCreateAllQuery(NodeQuery):
|
|
|
151
152
|
else:
|
|
152
153
|
attributes.append(attr_data)
|
|
153
154
|
|
|
155
|
+
deepest_branch_name = self.branch.name
|
|
156
|
+
deepest_branch_level = self.branch.hierarchy_level
|
|
154
157
|
relationships: list[RelationshipCreateData] = []
|
|
155
158
|
for rel_name in self.node._relationships:
|
|
156
159
|
rel_manager: RelationshipManager = getattr(self.node, rel_name)
|
|
157
160
|
for rel in rel_manager._relationships:
|
|
158
|
-
|
|
161
|
+
rel_create_data = await rel.get_create_data(db=db, at=at)
|
|
162
|
+
if rel_create_data.peer_branch_level > deepest_branch_level or (
|
|
163
|
+
deepest_branch_name == GLOBAL_BRANCH_NAME and rel_create_data.peer_branch == registry.default_branch
|
|
164
|
+
):
|
|
165
|
+
deepest_branch_name = rel_create_data.peer_branch
|
|
166
|
+
deepest_branch_level = rel_create_data.peer_branch_level
|
|
167
|
+
relationships.append(rel_create_data)
|
|
159
168
|
|
|
160
169
|
self.params["attrs"] = [attr.model_dump() for attr in attributes]
|
|
161
170
|
self.params["attrs_iphost"] = [attr.model_dump() for attr in attributes_iphost]
|
|
@@ -216,6 +225,8 @@ class NodeCreateAllQuery(NodeQuery):
|
|
|
216
225
|
CREATE (a)-[:HAS_VALUE { branch: attr.branch, branch_level: attr.branch_level, status: attr.status, from: $at }]->(av)
|
|
217
226
|
MERGE (ip:Boolean { value: attr.is_protected })
|
|
218
227
|
MERGE (iv:Boolean { value: attr.is_visible })
|
|
228
|
+
WITH a, ip, iv
|
|
229
|
+
LIMIT 1
|
|
219
230
|
CREATE (a)-[:IS_PROTECTED { branch: attr.branch, branch_level: attr.branch_level, status: attr.status, from: $at }]->(ip)
|
|
220
231
|
CREATE (a)-[:IS_VISIBLE { branch: attr.branch, branch_level: attr.branch_level, status: attr.status, from: $at }]->(iv)
|
|
221
232
|
FOREACH ( prop IN attr.source_prop |
|
|
@@ -230,9 +241,8 @@ class NodeCreateAllQuery(NodeQuery):
|
|
|
230
241
|
|
|
231
242
|
attrs_iphost_query = """
|
|
232
243
|
WITH distinct n
|
|
233
|
-
UNWIND $attrs_iphost AS
|
|
234
|
-
CALL (n,
|
|
235
|
-
WITH n, attr_iphost AS attr
|
|
244
|
+
UNWIND $attrs_iphost AS attr
|
|
245
|
+
CALL (n, attr) {
|
|
236
246
|
CREATE (a:Attribute { uuid: attr.uuid, name: attr.name, branch_support: attr.branch_support })
|
|
237
247
|
CREATE (n)-[:HAS_ATTRIBUTE { branch: attr.branch, branch_level: attr.branch_level, status: attr.status, from: $at }]->(a)
|
|
238
248
|
MERGE (av:AttributeValue:AttributeIPHost { %(iphost_prop)s })
|
|
@@ -241,6 +251,8 @@ class NodeCreateAllQuery(NodeQuery):
|
|
|
241
251
|
CREATE (a)-[:HAS_VALUE { branch: attr.branch, branch_level: attr.branch_level, status: attr.status, from: $at }]->(av)
|
|
242
252
|
MERGE (ip:Boolean { value: attr.is_protected })
|
|
243
253
|
MERGE (iv:Boolean { value: attr.is_visible })
|
|
254
|
+
WITH a, ip, iv
|
|
255
|
+
LIMIT 1
|
|
244
256
|
CREATE (a)-[:IS_PROTECTED { branch: attr.branch, branch_level: attr.branch_level, status: attr.status, from: $at }]->(ip)
|
|
245
257
|
CREATE (a)-[:IS_VISIBLE { branch: attr.branch, branch_level: attr.branch_level, status: attr.status, from: $at }]->(iv)
|
|
246
258
|
FOREACH ( prop IN attr.source_prop |
|
|
@@ -256,9 +268,8 @@ class NodeCreateAllQuery(NodeQuery):
|
|
|
256
268
|
|
|
257
269
|
attrs_ipnetwork_query = """
|
|
258
270
|
WITH distinct n
|
|
259
|
-
UNWIND $attrs_ipnetwork AS
|
|
260
|
-
CALL (n,
|
|
261
|
-
WITH n, attr_ipnetwork AS attr
|
|
271
|
+
UNWIND $attrs_ipnetwork AS attr
|
|
272
|
+
CALL (n, attr) {
|
|
262
273
|
CREATE (a:Attribute { uuid: attr.uuid, name: attr.name, branch_support: attr.branch_support })
|
|
263
274
|
CREATE (n)-[:HAS_ATTRIBUTE { branch: attr.branch, branch_level: attr.branch_level, status: attr.status, from: $at }]->(a)
|
|
264
275
|
MERGE (av:AttributeValue:AttributeIPNetwork { %(ipnetwork_prop)s })
|
|
@@ -267,6 +278,8 @@ class NodeCreateAllQuery(NodeQuery):
|
|
|
267
278
|
CREATE (a)-[:HAS_VALUE { branch: attr.branch, branch_level: attr.branch_level, status: attr.status, from: $at }]->(av)
|
|
268
279
|
MERGE (ip:Boolean { value: attr.is_protected })
|
|
269
280
|
MERGE (iv:Boolean { value: attr.is_visible })
|
|
281
|
+
WITH a, ip, iv
|
|
282
|
+
LIMIT 1
|
|
270
283
|
CREATE (a)-[:IS_PROTECTED { branch: attr.branch, branch_level: attr.branch_level, status: attr.status, from: $at }]->(ip)
|
|
271
284
|
CREATE (a)-[:IS_VISIBLE { branch: attr.branch, branch_level: attr.branch_level, status: attr.status, from: $at }]->(iv)
|
|
272
285
|
FOREACH ( prop IN attr.source_prop |
|
|
@@ -280,16 +293,55 @@ class NodeCreateAllQuery(NodeQuery):
|
|
|
280
293
|
}
|
|
281
294
|
""" % {"ipnetwork_prop": ", ".join(ipnetwork_prop_list)}
|
|
282
295
|
|
|
296
|
+
deepest_branch = await registry.get_branch(db=db, branch=deepest_branch_name)
|
|
297
|
+
branch_filter, branch_params = deepest_branch.get_query_filter_path(at=self.at)
|
|
298
|
+
self.params.update(branch_params)
|
|
299
|
+
self.params["global_branch_name"] = GLOBAL_BRANCH_NAME
|
|
300
|
+
self.params["default_branch_name"] = registry.default_branch
|
|
301
|
+
|
|
302
|
+
dest_node_subquery = """
|
|
303
|
+
CALL (rel) {
|
|
304
|
+
MATCH (dest_node:Node { uuid: rel.destination_id })-[r:IS_PART_OF]->(root:Root)
|
|
305
|
+
WHERE (
|
|
306
|
+
// if the relationship is on a branch, use the regular filter
|
|
307
|
+
(rel.peer_branch_level = 2 AND %(branch_filter)s)
|
|
308
|
+
// simplified filter for the global branch
|
|
309
|
+
OR (
|
|
310
|
+
rel.peer_branch_level = 1
|
|
311
|
+
AND rel.peer_branch = $global_branch_name
|
|
312
|
+
AND r.branch = $global_branch_name
|
|
313
|
+
AND r.from <= $at AND (r.to IS NULL or r.to > $at)
|
|
314
|
+
)
|
|
315
|
+
// simplified filter for the default branch
|
|
316
|
+
OR (
|
|
317
|
+
rel.peer_branch_level = 1 AND
|
|
318
|
+
rel.peer_branch = $default_branch_name AND
|
|
319
|
+
r.branch IN [$default_branch_name, $global_branch_name]
|
|
320
|
+
AND r.from <= $at AND (r.to IS NULL or r.to > $at)
|
|
321
|
+
)
|
|
322
|
+
)
|
|
323
|
+
// r.status is a tie-breaker when there are nodes with the same UUID added/deleted at the same time
|
|
324
|
+
ORDER BY r.branch_level DESC, r.from DESC, r.status ASC
|
|
325
|
+
WITH dest_node, r
|
|
326
|
+
LIMIT 1
|
|
327
|
+
WITH dest_node, r
|
|
328
|
+
WHERE r.status = "active"
|
|
329
|
+
RETURN dest_node
|
|
330
|
+
}
|
|
331
|
+
""" % {"branch_filter": branch_filter}
|
|
332
|
+
|
|
283
333
|
rels_bidir_query = """
|
|
284
334
|
WITH distinct n
|
|
285
335
|
UNWIND $rels_bidir AS rel
|
|
286
|
-
|
|
287
|
-
|
|
336
|
+
%(dest_node_subquery)s
|
|
337
|
+
CALL (n, rel, dest_node) {
|
|
288
338
|
CREATE (rl:Relationship { uuid: rel.uuid, name: rel.name, branch_support: rel.branch_support })
|
|
289
339
|
CREATE (n)-[:IS_RELATED %(rel_prop)s ]->(rl)
|
|
290
|
-
CREATE (
|
|
340
|
+
CREATE (dest_node)-[:IS_RELATED %(rel_prop)s ]->(rl)
|
|
291
341
|
MERGE (ip:Boolean { value: rel.is_protected })
|
|
292
342
|
MERGE (iv:Boolean { value: rel.is_visible })
|
|
343
|
+
WITH rl, ip, iv
|
|
344
|
+
LIMIT 1
|
|
293
345
|
CREATE (rl)-[:IS_PROTECTED { branch: rel.branch, branch_level: rel.branch_level, status: rel.status, from: $at }]->(ip)
|
|
294
346
|
CREATE (rl)-[:IS_VISIBLE { branch: rel.branch, branch_level: rel.branch_level, status: rel.status, from: $at }]->(iv)
|
|
295
347
|
FOREACH ( prop IN rel.source_prop |
|
|
@@ -301,19 +353,20 @@ class NodeCreateAllQuery(NodeQuery):
|
|
|
301
353
|
CREATE (rl)-[:HAS_OWNER { branch: rel.branch, branch_level: rel.branch_level, status: rel.status, from: $at }]->(peer)
|
|
302
354
|
)
|
|
303
355
|
}
|
|
304
|
-
""" % {"rel_prop": rel_prop_str}
|
|
356
|
+
""" % {"rel_prop": rel_prop_str, "dest_node_subquery": dest_node_subquery}
|
|
305
357
|
|
|
306
358
|
rels_out_query = """
|
|
307
359
|
WITH distinct n
|
|
308
|
-
UNWIND $rels_out AS
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
MERGE (d:Node { uuid: rel.destination_id })
|
|
360
|
+
UNWIND $rels_out AS rel
|
|
361
|
+
%(dest_node_subquery)s
|
|
362
|
+
CALL (n, rel, dest_node) {
|
|
312
363
|
CREATE (rl:Relationship { uuid: rel.uuid, name: rel.name, branch_support: rel.branch_support })
|
|
313
364
|
CREATE (n)-[:IS_RELATED %(rel_prop)s ]->(rl)
|
|
314
|
-
CREATE (
|
|
365
|
+
CREATE (dest_node)<-[:IS_RELATED %(rel_prop)s ]-(rl)
|
|
315
366
|
MERGE (ip:Boolean { value: rel.is_protected })
|
|
316
367
|
MERGE (iv:Boolean { value: rel.is_visible })
|
|
368
|
+
WITH rl, ip, iv
|
|
369
|
+
LIMIT 1
|
|
317
370
|
CREATE (rl)-[:IS_PROTECTED { branch: rel.branch, branch_level: rel.branch_level, status: rel.status, from: $at }]->(ip)
|
|
318
371
|
CREATE (rl)-[:IS_VISIBLE { branch: rel.branch, branch_level: rel.branch_level, status: rel.status, from: $at }]->(iv)
|
|
319
372
|
FOREACH ( prop IN rel.source_prop |
|
|
@@ -325,19 +378,20 @@ class NodeCreateAllQuery(NodeQuery):
|
|
|
325
378
|
CREATE (rl)-[:HAS_OWNER { branch: rel.branch, branch_level: rel.branch_level, status: rel.status, from: $at }]->(peer)
|
|
326
379
|
)
|
|
327
380
|
}
|
|
328
|
-
""" % {"rel_prop": rel_prop_str}
|
|
381
|
+
""" % {"rel_prop": rel_prop_str, "dest_node_subquery": dest_node_subquery}
|
|
329
382
|
|
|
330
383
|
rels_in_query = """
|
|
331
384
|
WITH distinct n
|
|
332
|
-
UNWIND $rels_in AS
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
MERGE (d:Node { uuid: rel.destination_id })
|
|
385
|
+
UNWIND $rels_in AS rel
|
|
386
|
+
%(dest_node_subquery)s
|
|
387
|
+
CALL (n, rel, dest_node) {
|
|
336
388
|
CREATE (rl:Relationship { uuid: rel.uuid, name: rel.name, branch_support: rel.branch_support })
|
|
337
389
|
CREATE (n)<-[:IS_RELATED %(rel_prop)s ]-(rl)
|
|
338
|
-
CREATE (
|
|
390
|
+
CREATE (dest_node)-[:IS_RELATED %(rel_prop)s ]->(rl)
|
|
339
391
|
MERGE (ip:Boolean { value: rel.is_protected })
|
|
340
392
|
MERGE (iv:Boolean { value: rel.is_visible })
|
|
393
|
+
WITH rl, ip, iv
|
|
394
|
+
LIMIT 1
|
|
341
395
|
CREATE (rl)-[:IS_PROTECTED { branch: rel.branch, branch_level: rel.branch_level, status: rel.status, from: $at }]->(ip)
|
|
342
396
|
CREATE (rl)-[:IS_VISIBLE { branch: rel.branch, branch_level: rel.branch_level, status: rel.status, from: $at }]->(iv)
|
|
343
397
|
FOREACH ( prop IN rel.source_prop |
|
|
@@ -349,7 +403,7 @@ class NodeCreateAllQuery(NodeQuery):
|
|
|
349
403
|
CREATE (rl)-[:HAS_OWNER { branch: rel.branch, branch_level: rel.branch_level, status: rel.status, from: $at }]->(peer)
|
|
350
404
|
)
|
|
351
405
|
}
|
|
352
|
-
""" % {"rel_prop": rel_prop_str}
|
|
406
|
+
""" % {"rel_prop": rel_prop_str, "dest_node_subquery": dest_node_subquery}
|
|
353
407
|
|
|
354
408
|
query = f"""
|
|
355
409
|
MATCH (root:Root)
|
|
@@ -206,16 +206,18 @@ class RelationshipQuery(Query):
|
|
|
206
206
|
self.params["source_id"] = self.source_id or self.source.get_id()
|
|
207
207
|
if source_branch.is_global or source_branch.is_default:
|
|
208
208
|
source_query_match = """
|
|
209
|
-
MATCH (s:Node { uuid: $source_id })
|
|
209
|
+
MATCH (s:Node { uuid: $source_id })-[source_e:IS_PART_OF {branch: $source_branch, status: "active"}]->(:Root)
|
|
210
|
+
WHERE source_e.from <= $at AND (source_e.to IS NULL OR source_e.to > $at)
|
|
210
211
|
OPTIONAL MATCH (s)-[delete_edge:IS_PART_OF {status: "deleted", branch: $source_branch}]->(:Root)
|
|
211
212
|
WHERE delete_edge.from <= $at
|
|
212
213
|
WITH *, s WHERE delete_edge IS NULL
|
|
213
214
|
"""
|
|
214
215
|
self.params["source_branch"] = source_branch.name
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
216
|
+
else:
|
|
217
|
+
source_filter, source_filter_params = source_branch.get_query_filter_path(
|
|
218
|
+
at=self.at, variable_name="r", params_prefix="src_"
|
|
219
|
+
)
|
|
220
|
+
source_query_match = """
|
|
219
221
|
MATCH (s:Node { uuid: $source_id })
|
|
220
222
|
CALL (s) {
|
|
221
223
|
MATCH (s)-[r:IS_PART_OF]->(:Root)
|
|
@@ -225,15 +227,16 @@ class RelationshipQuery(Query):
|
|
|
225
227
|
LIMIT 1
|
|
226
228
|
}
|
|
227
229
|
WITH *, s WHERE s_is_active = TRUE
|
|
228
|
-
|
|
229
|
-
|
|
230
|
+
""" % {"source_filter": source_filter}
|
|
231
|
+
self.params.update(source_filter_params)
|
|
230
232
|
self.add_to_query(source_query_match)
|
|
231
233
|
|
|
232
234
|
def add_dest_match_to_query(self, destination_branch: Branch, destination_id: str) -> None:
|
|
233
235
|
self.params["destination_id"] = destination_id
|
|
234
236
|
if destination_branch.is_global or destination_branch.is_default:
|
|
235
237
|
destination_query_match = """
|
|
236
|
-
MATCH (d:Node { uuid: $destination_id })
|
|
238
|
+
MATCH (d:Node { uuid: $destination_id })-[dest_e:IS_PART_OF {branch: $destination_branch, status: "active"}]->(:Root)
|
|
239
|
+
WHERE dest_e.from <= $at AND (dest_e.to IS NULL OR dest_e.to > $at)
|
|
237
240
|
OPTIONAL MATCH (d)-[delete_edge:IS_PART_OF {status: "deleted", branch: $destination_branch}]->(:Root)
|
|
238
241
|
WHERE delete_edge.from <= $at
|
|
239
242
|
WITH *, d WHERE delete_edge IS NULL
|
|
@@ -63,9 +63,11 @@ class RelationshipCreateData(BaseModel):
|
|
|
63
63
|
uuid: str
|
|
64
64
|
name: str
|
|
65
65
|
destination_id: str
|
|
66
|
-
branch: str
|
|
66
|
+
branch: str
|
|
67
67
|
branch_level: int
|
|
68
68
|
branch_support: str | None = None
|
|
69
|
+
peer_branch: str
|
|
70
|
+
peer_branch_level: int
|
|
69
71
|
direction: str
|
|
70
72
|
status: str
|
|
71
73
|
is_protected: bool
|
|
@@ -420,7 +422,7 @@ class Relationship(FlagPropertyMixin, NodePropertyMixin):
|
|
|
420
422
|
)
|
|
421
423
|
await delete_query.execute(db=db)
|
|
422
424
|
|
|
423
|
-
async def resolve(self, db: InfrahubDatabase) -> None:
|
|
425
|
+
async def resolve(self, db: InfrahubDatabase, at: Timestamp | None = None) -> None:
|
|
424
426
|
"""Resolve the peer of the relationship."""
|
|
425
427
|
|
|
426
428
|
if self._peer is not None:
|
|
@@ -470,7 +472,7 @@ class Relationship(FlagPropertyMixin, NodePropertyMixin):
|
|
|
470
472
|
if hfid_str:
|
|
471
473
|
data_from_pool["identifier"] = f"hfid={hfid_str} rel={self.name}"
|
|
472
474
|
|
|
473
|
-
assigned_peer: Node = await pool.get_resource(db=db, branch=self.branch, **data_from_pool) # type: ignore[attr-defined]
|
|
475
|
+
assigned_peer: Node = await pool.get_resource(db=db, branch=self.branch, at=at, **data_from_pool) # type: ignore[attr-defined]
|
|
474
476
|
await self.set_peer(value=assigned_peer)
|
|
475
477
|
self.set_source(value=pool.id)
|
|
476
478
|
|
|
@@ -526,16 +528,19 @@ class Relationship(FlagPropertyMixin, NodePropertyMixin):
|
|
|
526
528
|
|
|
527
529
|
return response
|
|
528
530
|
|
|
529
|
-
async def get_create_data(self, db: InfrahubDatabase) -> RelationshipCreateData:
|
|
531
|
+
async def get_create_data(self, db: InfrahubDatabase, at: Timestamp | None = None) -> RelationshipCreateData:
|
|
530
532
|
branch = self.get_branch_based_on_support_type()
|
|
531
533
|
|
|
532
|
-
await self.resolve(db=db)
|
|
534
|
+
await self.resolve(db=db, at=at)
|
|
533
535
|
|
|
534
536
|
peer = await self.get_peer(db=db)
|
|
537
|
+
peer_branch = peer.get_branch()
|
|
535
538
|
data = RelationshipCreateData(
|
|
536
539
|
uuid=str(UUIDT()),
|
|
537
540
|
name=self.schema.get_identifier(),
|
|
538
541
|
branch=branch.name,
|
|
542
|
+
peer_branch=peer_branch.name,
|
|
543
|
+
peer_branch_level=peer_branch.hierarchy_level,
|
|
539
544
|
destination_id=peer.id,
|
|
540
545
|
status="active",
|
|
541
546
|
direction=self.schema.direction.value,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from infrahub.core.diff.coordinator import DiffCoordinator
|
|
2
|
+
from infrahub.dependencies.builder.diff.locker import DiffLockerDependency
|
|
2
3
|
from infrahub.dependencies.interface import DependencyBuilder, DependencyBuilderContext
|
|
3
4
|
|
|
4
5
|
from .calculator import DiffCalculatorDependency
|
|
@@ -15,6 +16,7 @@ class DiffCoordinatorDependency(DependencyBuilder[DiffCoordinator]):
|
|
|
15
16
|
@classmethod
|
|
16
17
|
def build(cls, context: DependencyBuilderContext) -> DiffCoordinator:
|
|
17
18
|
return DiffCoordinator(
|
|
19
|
+
db=context.db,
|
|
18
20
|
diff_repo=DiffRepositoryDependency.build(context=context),
|
|
19
21
|
diff_calculator=DiffCalculatorDependency.build(context=context),
|
|
20
22
|
diff_combiner=DiffCombinerDependency.build(context=context),
|
|
@@ -23,4 +25,5 @@ class DiffCoordinatorDependency(DependencyBuilder[DiffCoordinator]):
|
|
|
23
25
|
labels_enricher=DiffLabelsEnricherDependency.build(context=context),
|
|
24
26
|
data_check_synchronizer=DiffDataCheckSynchronizerDependency.build(context=context),
|
|
25
27
|
conflict_transferer=DiffConflictTransfererDependency.build(context=context),
|
|
28
|
+
diff_locker=DiffLockerDependency.build(context=context),
|
|
26
29
|
)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
from infrahub.core.diff.diff_locker import DiffLocker
|
|
2
|
+
from infrahub.dependencies.interface import DependencyBuilder, DependencyBuilderContext
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class DiffLockerDependency(DependencyBuilder[DiffLocker]):
|
|
6
|
+
@classmethod
|
|
7
|
+
def build(cls, context: DependencyBuilderContext) -> DiffLocker: # noqa: ARG003
|
|
8
|
+
return DiffLocker()
|
|
@@ -376,8 +376,13 @@ class InfrahubMutationMixin:
|
|
|
376
376
|
return updated_obj, mutation, False
|
|
377
377
|
|
|
378
378
|
try:
|
|
379
|
-
|
|
380
|
-
|
|
379
|
+
# This is a hack to avoid sitatuions where a node has an attribute or relationship called "pop"
|
|
380
|
+
# which would have overridden the `pop` method of the InputObjectType object and as such would have
|
|
381
|
+
# caused an error when trying to call `data.pop("hfid", None)`.
|
|
382
|
+
# TypeError: 'NoneType' object is not callable
|
|
383
|
+
data._pop = dict.pop.__get__(data, dict)
|
|
384
|
+
data._pop("hfid", None) # `hfid` is invalid for creation.
|
|
385
|
+
created_obj, mutation = await cls.mutate_create(info=info, data=data, branch=branch)
|
|
381
386
|
return created_obj, mutation, True
|
|
382
387
|
except HFIDViolatedError as exc:
|
|
383
388
|
# Only the HFID constraint has been violated, it means the node exists and we can update without rerunning constraints
|
|
@@ -6,6 +6,7 @@ from infrahub.context import InfrahubContext # noqa: TC001 needed for prefect
|
|
|
6
6
|
from infrahub.core import registry
|
|
7
7
|
from infrahub.core.branch import Branch
|
|
8
8
|
from infrahub.core.diff.coordinator import DiffCoordinator
|
|
9
|
+
from infrahub.core.diff.diff_locker import DiffLocker
|
|
9
10
|
from infrahub.core.diff.merger.merger import DiffMerger
|
|
10
11
|
from infrahub.core.diff.repository.repository import DiffRepository
|
|
11
12
|
from infrahub.core.merge import BranchMerger
|
|
@@ -50,6 +51,7 @@ async def merge_branch_mutation(branch: str, context: InfrahubContext, service:
|
|
|
50
51
|
diff_merger=diff_merger,
|
|
51
52
|
diff_repository=diff_repository,
|
|
52
53
|
source_branch=obj,
|
|
54
|
+
diff_locker=DiffLocker(),
|
|
53
55
|
service=service,
|
|
54
56
|
)
|
|
55
57
|
candidate_schema = merger.get_candidate_schema()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: infrahub-server
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.3
|
|
4
4
|
Summary: Infrahub is taking a new approach to Infrastructure Management by providing a new generation of datastore to organize and control all the data that defines how an infrastructure should run.
|
|
5
5
|
License: AGPL-3.0-only
|
|
6
6
|
Author: OpsMill
|
|
@@ -38,7 +38,7 @@ infrahub/branch/triggers.py,sha256=4sywoEX79fY2NkaGe6tTHnmytf4k6gXDm2FJHkkRJOw,7
|
|
|
38
38
|
infrahub/cli/__init__.py,sha256=zQjE9zMrwAmk_4qb5mbUgNi06g3HKvrPwQvJLQmv9JY,1814
|
|
39
39
|
infrahub/cli/constants.py,sha256=CoCeTMnfsA3j7ArdLKLZK4VPxOM7ls17qpxGJmND0m8,129
|
|
40
40
|
infrahub/cli/context.py,sha256=20CJj_D1VhigR9uhTDPHiVHnV7vzsgK8v-uLKs06kzA,398
|
|
41
|
-
infrahub/cli/db.py,sha256=
|
|
41
|
+
infrahub/cli/db.py,sha256=7EEgiqcTtnejeHPC-m5iD4dnmtA22P-JSzvZ9Tcb5ho,36070
|
|
42
42
|
infrahub/cli/events.py,sha256=nJmowQgTxRs6qaT41A71Ei9jm6qtYaL2amAT5TA1H_k,1726
|
|
43
43
|
infrahub/cli/git_agent.py,sha256=ajT9-kdd3xLIysOPe8GqZyCDMkpNyhqfWjBg9HPWVcg,5240
|
|
44
44
|
infrahub/cli/patch.py,sha256=ztOkWyo0l_Wo0WX10bvSqGZibKzowrwx82oi69cjwkY,6018
|
|
@@ -60,8 +60,9 @@ infrahub/core/__init__.py,sha256=z6EJBZyCYCBqinoBtX9li6BTBbbGV8WCkE_4CrEsmDA,104
|
|
|
60
60
|
infrahub/core/account.py,sha256=s8ZC7J8rtEvQZQjbVuiKMlPhl6aQjtAjbZhBejLC0X8,26182
|
|
61
61
|
infrahub/core/attribute.py,sha256=stmJ_dOr7rFTXzH80keuE64f6y3K3393GiSYeOaay3s,44257
|
|
62
62
|
infrahub/core/branch/__init__.py,sha256=h0oIj0gHp1xI-N1cYW8_N6VZ81CBOmLuiUt5cS5nKuk,49
|
|
63
|
-
infrahub/core/branch/
|
|
64
|
-
infrahub/core/branch/
|
|
63
|
+
infrahub/core/branch/enums.py,sha256=vGnaTCzikvMcLikKN25TJ8uCmhnD448dp1ve1_tLjwQ,186
|
|
64
|
+
infrahub/core/branch/models.py,sha256=q8n1KNNPQ3bwz_cMJ_GwGsjF1FPcpazwdUYr6x4Gg-w,20296
|
|
65
|
+
infrahub/core/branch/tasks.py,sha256=cbTNpie9j7YROT2ZlHoSmI6cO-j_3SwAxSo5soa-rG0,20788
|
|
65
66
|
infrahub/core/changelog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
66
67
|
infrahub/core/changelog/diff.py,sha256=0BxCpsgJ-38x5BBz5XDtAvc9FPy82M0NlzXl8nQ-c70,13752
|
|
67
68
|
infrahub/core/changelog/models.py,sha256=UgfJdOFUkMmjeUKe1mPCO7WE3jNENw0UJU3LWFf20HQ,29920
|
|
@@ -85,8 +86,9 @@ infrahub/core/diff/combiner.py,sha256=qL4WQsphB2sVnncgskSG_QcJBqBHjaK0vWU_apeTn-
|
|
|
85
86
|
infrahub/core/diff/conflict_transferer.py,sha256=LZCuS9Dbr4yBf-bd3RF-9cPnaOvVWiU3KBmmwxbRZl0,3968
|
|
86
87
|
infrahub/core/diff/conflicts_enricher.py,sha256=x6qiZOXO2A3BQ2Fm78apJ4WA7HLzPO84JomJfcyuyDg,12552
|
|
87
88
|
infrahub/core/diff/conflicts_extractor.py,sha256=HysGoyNy9qMxfQ0Lh4AVZsRpHUBpezQNUa8cteVLb2k,9715
|
|
88
|
-
infrahub/core/diff/coordinator.py,sha256=
|
|
89
|
+
infrahub/core/diff/coordinator.py,sha256=vWOkxMof3oyUH_ulR37wV1hFbFNS5_NZWdyYgGUY7F4,27376
|
|
89
90
|
infrahub/core/diff/data_check_synchronizer.py,sha256=HcbYEIe-70MBiSR6P0AmAwgY9aFxYCJktxOiRcJaxj8,9241
|
|
91
|
+
infrahub/core/diff/diff_locker.py,sha256=b4F0rUQln1iK2zwMrJ-2l-1cM782HFut7wUgqZ63W1g,1066
|
|
90
92
|
infrahub/core/diff/enricher/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
91
93
|
infrahub/core/diff/enricher/aggregated.py,sha256=-LnAeNKDo6mifjL3d3ylCg1A9dTZJBySngWPeF7DfrY,793
|
|
92
94
|
infrahub/core/diff/enricher/cardinality_one.py,sha256=dKgoc0-9RwXG7N1zQc3S49eNZokvi5NzH7YFF3ag4RQ,6796
|
|
@@ -133,11 +135,11 @@ infrahub/core/diff/repository/deserializer.py,sha256=bhN9ao8HxqKyRz273QGLNV9z9_S
|
|
|
133
135
|
infrahub/core/diff/repository/repository.py,sha256=x3QP9VmBVYBOVtf3IZUyzXqCd8sSfmHTqVoYlAOdGao,26006
|
|
134
136
|
infrahub/core/diff/tasks.py,sha256=7_k-ZNcJZsiDp-xCZvCQfPJjg0xRxpaGTiVVNuRPfBI,3322
|
|
135
137
|
infrahub/core/enums.py,sha256=qGbhRVoH43Xi0iDkUfWdQiKapJbLT9UKsCobFk_paIk,491
|
|
136
|
-
infrahub/core/graph/__init__.py,sha256=
|
|
138
|
+
infrahub/core/graph/__init__.py,sha256=m7vJ3Rt8r-fp5kVRMnaC3wx0irufSEsanqxvUo7-bXc,19
|
|
137
139
|
infrahub/core/graph/constraints.py,sha256=lmuzrKDFoeSKRiLtycB9PXi6zhMYghczKrPYvfWyy90,10396
|
|
138
140
|
infrahub/core/graph/index.py,sha256=IHLP-zPRp7HJYLGHMRDRXQp8RC69ztP10Tr5NcL2j4Y,1736
|
|
139
141
|
infrahub/core/graph/schema.py,sha256=FmEPPb1XOFv3nnS_XJCuUqlp8HsStX5A2frHjlhoqvE,10105
|
|
140
|
-
infrahub/core/initialization.py,sha256=
|
|
142
|
+
infrahub/core/initialization.py,sha256=2lHOS9U9H567HiJlEgblEUE-cEH9VDfu1tgw_hBeb5c,20815
|
|
141
143
|
infrahub/core/integrity/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
142
144
|
infrahub/core/integrity/object_conflict/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
143
145
|
infrahub/core/integrity/object_conflict/conflict_recorder.py,sha256=gDOx-Ohle0GxfsNm-FEaBMipaQLMxMVg3BoAHEhuK5E,6125
|
|
@@ -150,9 +152,9 @@ infrahub/core/ipam/size.py,sha256=Iu7cVvN9MkilyG_AGvYm3g3dSDesKRVdDh_AKH7yAqk,61
|
|
|
150
152
|
infrahub/core/ipam/tasks.py,sha256=TUoP6WZjQkd7DdGLxKnBVVH4SxTHkH2xmJCU8nRWqH8,1483
|
|
151
153
|
infrahub/core/ipam/utilization.py,sha256=d-zpXCaWsHgJxBLopCDd7y4sJYvHcIzzpYhbTMIgH74,6733
|
|
152
154
|
infrahub/core/manager.py,sha256=NaUuSY7Veesa67epQRuQ2TJD0-ooUSnvNRIUZCntV3g,47576
|
|
153
|
-
infrahub/core/merge.py,sha256=
|
|
155
|
+
infrahub/core/merge.py,sha256=2TiPC3fAHkhZCl8RARPzLj_Us47OBGHAp6txgCbWopU,11238
|
|
154
156
|
infrahub/core/migrations/__init__.py,sha256=syPb3-Irf11dXCHgbT0UdmTnEBbpf4wXJ3m8ADYXDpk,1175
|
|
155
|
-
infrahub/core/migrations/graph/__init__.py,sha256=
|
|
157
|
+
infrahub/core/migrations/graph/__init__.py,sha256=bSl8EKD5eeWeXdcGoWT50AK4K-tIptr90l3cX51Ae3w,3808
|
|
156
158
|
infrahub/core/migrations/graph/m001_add_version_to_graph.py,sha256=YcLN6cFjE6IGheXR4Ujb6CcyY8bJ7WE289hcKJaENOc,1515
|
|
157
159
|
infrahub/core/migrations/graph/m002_attribute_is_default.py,sha256=wB6f2N_ChTvGajqHD-OWCG5ahRMDhhXZuwo79ieq_II,1036
|
|
158
160
|
infrahub/core/migrations/graph/m003_relationship_parent_optional.py,sha256=Aya-s98XfE9C7YluOwEjilwgnjaBnZxp27w_Xdv_NmU,2330
|
|
@@ -164,8 +166,8 @@ infrahub/core/migrations/graph/m008_add_human_friendly_id.py,sha256=7zswLvod5iTp
|
|
|
164
166
|
infrahub/core/migrations/graph/m009_add_generate_profile_attr.py,sha256=7FfjKyVYOebU51SeRtRYkTWKX26SBQx2dfofi7TiQQ8,1346
|
|
165
167
|
infrahub/core/migrations/graph/m010_add_generate_profile_attr_generic.py,sha256=M4Orq480PzwBEz85QZqdBh-1arJdIwXNwnPA6cWy5Yg,1366
|
|
166
168
|
infrahub/core/migrations/graph/m011_remove_profile_relationship_schema.py,sha256=TYQ1jXNucLIBbqLS35nUb_72OmMspXexSSW83Ax0oEw,1980
|
|
167
|
-
infrahub/core/migrations/graph/m012_convert_account_generic.py,sha256=
|
|
168
|
-
infrahub/core/migrations/graph/m013_convert_git_password_credential.py,sha256=
|
|
169
|
+
infrahub/core/migrations/graph/m012_convert_account_generic.py,sha256=NT7JI47xWaWf8zLVyw4LE8uyjjdMQGui_7lqt8xrvlI,11086
|
|
170
|
+
infrahub/core/migrations/graph/m013_convert_git_password_credential.py,sha256=6OM7gKbjRXz9yDxFUXKsG1uv-0B9u7KrwIQAO_D0MHA,12819
|
|
169
171
|
infrahub/core/migrations/graph/m014_remove_index_attr_value.py,sha256=Amds1gl8YtNIekU0tSXpHzdfk8UFqChC2LOLfnQ1YTM,1441
|
|
170
172
|
infrahub/core/migrations/graph/m015_diff_format_update.py,sha256=fMnUja-VgKbCxtx4Rh3PnA_s3iidaYunJWEkw0AD51w,1169
|
|
171
173
|
infrahub/core/migrations/graph/m016_diff_delete_bug_fix.py,sha256=FpeGlCdRN8why_6P8ijR4-hFTbE-m95lDNfBwNet1TU,1177
|
|
@@ -184,6 +186,8 @@ infrahub/core/migrations/graph/m028_delete_diffs.py,sha256=c2FyUkbeuXfmsNxzcG11b
|
|
|
184
186
|
infrahub/core/migrations/graph/m029_duplicates_cleanup.py,sha256=DpOwTMzkdi9-kha-UI6DzzJ_6qWen9kdCl_6j2IimV4,28278
|
|
185
187
|
infrahub/core/migrations/graph/m030_illegal_edges.py,sha256=Saz7QmUqwuLiBtSBdQf54E1Bj3hz0k9KAOQ-pwPBH4g,2797
|
|
186
188
|
infrahub/core/migrations/graph/m031_check_number_attributes.py,sha256=s3sVoKIkrZAMVZtWWH8baJW42UCAePp5nMUKy5FDSiM,4944
|
|
189
|
+
infrahub/core/migrations/graph/m032_cleanup_orphaned_branch_relationships.py,sha256=AEc91iCtHWsNvhSuqZGLAn7wL5FWhiqM73OSwIeB7_0,3535
|
|
190
|
+
infrahub/core/migrations/graph/m033_deduplicate_relationship_vertices.py,sha256=EHsNyYEPYzqMybgrMefvE9tw-WUWmnh9ZF8FMVRl2wQ,3735
|
|
187
191
|
infrahub/core/migrations/query/__init__.py,sha256=JoWOUWlV6IzwxWxObsfCnAAKUOHJkE7dZlOsfB64ZEo,876
|
|
188
192
|
infrahub/core/migrations/query/attribute_add.py,sha256=LlhkIfVOR3TFSUJEV_4kU5JBKXsWwTsRiX1ySUPe4TU,3655
|
|
189
193
|
infrahub/core/migrations/query/attribute_rename.py,sha256=onb9Nanht1Tz47JgneAcFsuhqqvPS6dvI2nNjRupLLo,6892
|
|
@@ -202,7 +206,7 @@ infrahub/core/migrations/schema/placeholder_dummy.py,sha256=3T3dBwC_ZyehOJr2KRKF
|
|
|
202
206
|
infrahub/core/migrations/schema/tasks.py,sha256=x6c_5N0pcQ_lTH5Vaqg2_MwlQ08I35BdX-8NhRDozBE,4165
|
|
203
207
|
infrahub/core/migrations/shared.py,sha256=e7HEBijWhG46UN8ODjSmxvGeK8KAQ3Twnj2q1dvb2m0,6983
|
|
204
208
|
infrahub/core/models.py,sha256=aqsqO2cP0MndeX6KZk4NEBmeIy6dE7Ob9UqsmjTIAtA,26149
|
|
205
|
-
infrahub/core/node/__init__.py,sha256=
|
|
209
|
+
infrahub/core/node/__init__.py,sha256=2kwQEV4yV71WPgFF88B1JsHaoIjZL_kry8Oc_SQaci4,41803
|
|
206
210
|
infrahub/core/node/base.py,sha256=BAowVRCK_WC50yXym1kCyUppJDJnrODGU5uoj1s0Yd4,2564
|
|
207
211
|
infrahub/core/node/constraints/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
208
212
|
infrahub/core/node/constraints/attribute_uniqueness.py,sha256=9MThTmuqZ7RgK71ZZARlw1k1x3ARn1U67g2_Gatd6rE,2099
|
|
@@ -213,22 +217,22 @@ infrahub/core/node/delete_validator.py,sha256=mj_HQXkTeP_A3po65-R5bCJnDM9CmFFmcU
|
|
|
213
217
|
infrahub/core/node/ipam.py,sha256=NWb3TUlVQOGAzq1VvDwISLh61HML0jnalsJ7QojqGwQ,2669
|
|
214
218
|
infrahub/core/node/permissions.py,sha256=uQzQ62IHcSly6fzPre0nQzlrkCIKzH4HyQkODKB3ZWM,2207
|
|
215
219
|
infrahub/core/node/resource_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
216
|
-
infrahub/core/node/resource_manager/ip_address_pool.py,sha256
|
|
217
|
-
infrahub/core/node/resource_manager/ip_prefix_pool.py,sha256=
|
|
218
|
-
infrahub/core/node/resource_manager/number_pool.py,sha256=
|
|
219
|
-
infrahub/core/node/standard.py,sha256=
|
|
220
|
+
infrahub/core/node/resource_manager/ip_address_pool.py,sha256=i7N6zEsvJQr1GUi9AH2Cj5HrrII04NNNwd15fgfGSw0,4939
|
|
221
|
+
infrahub/core/node/resource_manager/ip_prefix_pool.py,sha256=B-9lyqLlVsgDHIEvs9MP3-xb_GqMuF-khdCmRbGVjU4,5173
|
|
222
|
+
infrahub/core/node/resource_manager/number_pool.py,sha256=ifmvEhpqvtVpKAlQkam5A9qGualECwiVtCAFnzQVpAY,3931
|
|
223
|
+
infrahub/core/node/standard.py,sha256=gvAY-1UWj4lUc8tqVZ8AqOFhCR5rhR--gI25g5AOD8o,7284
|
|
220
224
|
infrahub/core/path.py,sha256=CTSnW6OcvnGNqTcOUZcVOMDSB4PLmeGYpY9U84uv9r8,6181
|
|
221
225
|
infrahub/core/property.py,sha256=rwsqeaIvCMkHfJYl4WfsNPAS7KS0POo5rAN7vAprXGA,5102
|
|
222
226
|
infrahub/core/protocols.py,sha256=BDXKAT4QxMbPFnuRqIdhGJB8VY5jPpCkqdGK_li9fFU,12282
|
|
223
227
|
infrahub/core/protocols_base.py,sha256=cEi6giHtEUmaD0JWfDfWHJhEv_6wjaBA3oJRJCbvc6Q,3411
|
|
224
228
|
infrahub/core/query/__init__.py,sha256=2qIMaODLwJ6pK6BUd5vODTlA15Aecf5I8_-J44UlCso,23089
|
|
225
229
|
infrahub/core/query/attribute.py,sha256=DzwbElgTaZs6-nBYGmnDpBr9n0lmUPK3p7eyI30Snh8,11783
|
|
226
|
-
infrahub/core/query/branch.py,sha256=
|
|
230
|
+
infrahub/core/query/branch.py,sha256=B3QEqpwbJrs_8juWQPaHrdwLNJR-1tSkvMuixCFFdt4,3680
|
|
227
231
|
infrahub/core/query/delete.py,sha256=7tPP1qtNV6QGYtmgE1RKsuQ9oxENnMTVkttLvJ2PiKg,1927
|
|
228
232
|
infrahub/core/query/diff.py,sha256=DOtPHIu45Yp8wvj8wp16me9E3AK7wVcVfzS2_LIZn2k,35952
|
|
229
233
|
infrahub/core/query/ipam.py,sha256=0glfVQmcKqMvNyK4GU_zRl2O9pjl7JBeavyE8VC-De4,28234
|
|
230
|
-
infrahub/core/query/node.py,sha256=
|
|
231
|
-
infrahub/core/query/relationship.py,sha256=
|
|
234
|
+
infrahub/core/query/node.py,sha256=Rq0jR8Pbs7rPkPMCXnwHFp5Dcl8iLpgrFl4UFRfJ5is,67646
|
|
235
|
+
infrahub/core/query/relationship.py,sha256=B0nmXq12XPm-_caCEPq7TpARFwLR9__Io7Hffgm7bfM,47876
|
|
232
236
|
infrahub/core/query/resource_manager.py,sha256=wT1sfY8A3E60jBVIB4UCE5lkOeNINnvE-XIbmZAJ8C8,12713
|
|
233
237
|
infrahub/core/query/standard_node.py,sha256=mPBXyqk4RzoWRUX4NoojoVi8zk-sJ03GmzmUaWqOgSI,4825
|
|
234
238
|
infrahub/core/query/subquery.py,sha256=UE071w3wccdU_dtKLV-7mdeQ53DKXjPmNxDV0zd5Tpg,7588
|
|
@@ -244,7 +248,7 @@ infrahub/core/relationship/constraints/peer_kind.py,sha256=Bropiav4y6r0iU2KfWJ_k
|
|
|
244
248
|
infrahub/core/relationship/constraints/peer_parent.py,sha256=z7elpC8xS_ovAF28Haq-RNpFtTEiUehzowiDgYGT68U,2343
|
|
245
249
|
infrahub/core/relationship/constraints/peer_relatives.py,sha256=Ye79l7njaWxZkU2chTOaptIjvKBIawsNCl0IQxCTDtM,2737
|
|
246
250
|
infrahub/core/relationship/constraints/profiles_kind.py,sha256=nEZPGtGcmelZ1Nb8EPcQ-7_zCLCNIYwwWbU6C9fLj5E,2464
|
|
247
|
-
infrahub/core/relationship/model.py,sha256=
|
|
251
|
+
infrahub/core/relationship/model.py,sha256=YGoC-aJm5vtnSAxrpkJbPgHZ3JjFEfoRTBAwI2co458,47251
|
|
248
252
|
infrahub/core/root.py,sha256=8ZLSOtnmjQcrjqX2vxNO-AGopEUArmBPo_X5NeZBdP0,416
|
|
249
253
|
infrahub/core/schema/__init__.py,sha256=Q8kzfcX7zhpHThTBoQMMjcXG95DdHcfOWT4poS0QJEY,4035
|
|
250
254
|
infrahub/core/schema/attribute_parameters.py,sha256=-c8Gh8mHaQk6rZXvBz7VcicRQ8l1Ijmk3BxoxPFAQrc,6336
|
|
@@ -378,7 +382,7 @@ infrahub/dependencies/builder/diff/combiner.py,sha256=lD8qWsIAvNO9XnT1hI13E4HYzc
|
|
|
378
382
|
infrahub/dependencies/builder/diff/conflict_transferer.py,sha256=faslY7GQsx1MekKgluq4z8MbtWbK_Zn5HuPzFWTAaH8,490
|
|
379
383
|
infrahub/dependencies/builder/diff/conflicts_enricher.py,sha256=8SpiV01TK3oPK0kujUHrj7cqc-CGecD7nVCrFCZ05mE,379
|
|
380
384
|
infrahub/dependencies/builder/diff/conflicts_extractor.py,sha256=LL_Tvsp-I6R1q9IxCB9OhsF4FJV29PylUSGtLGLGEDQ,398
|
|
381
|
-
infrahub/dependencies/builder/diff/coordinator.py,sha256=
|
|
385
|
+
infrahub/dependencies/builder/diff/coordinator.py,sha256=lKxqMLEr-NubbdcN5J0C9jFIdhqHE4Z2NtQxlXwQoo8,1650
|
|
382
386
|
infrahub/dependencies/builder/diff/data_check_conflict_recorder.py,sha256=ABMNwa0H6uo-WW_EjhFXMEdFkIJ2e6cBY9yPuiGbhUE,683
|
|
383
387
|
infrahub/dependencies/builder/diff/data_check_synchronizer.py,sha256=k8mc4yAd7hczXajaMfw9yQ04b3qtqD1Jm5G4uDbmNNc,890
|
|
384
388
|
infrahub/dependencies/builder/diff/deserializer.py,sha256=bC4ixLHGFtvIPKcSZpKwyGL9HjmS9ZSnjbMjJm4fT50,518
|
|
@@ -391,6 +395,7 @@ infrahub/dependencies/builder/diff/enricher/labels.py,sha256=EZy4OWEGbb1OUhARD0S
|
|
|
391
395
|
infrahub/dependencies/builder/diff/enricher/path_identifier.py,sha256=Pv31HAzacLkkV1p5lra5Kg9epAWp_uTjLVAqAMCpEUw,423
|
|
392
396
|
infrahub/dependencies/builder/diff/enricher/summary_counts.py,sha256=_UDSkEC1VHeL2-6Ra4DdOoklHEu_xmAI8-119V8Y_cU,420
|
|
393
397
|
infrahub/dependencies/builder/diff/ipam_diff_parser.py,sha256=ZFEMMXWe0x8gr2gyPFuHfto9DtZZSUbZisragYKOhvs,639
|
|
398
|
+
infrahub/dependencies/builder/diff/locker.py,sha256=_3OgiDyBh3MNH5wKOQvTKT17lXyy09KlE7QmGvVSU5I,333
|
|
394
399
|
infrahub/dependencies/builder/diff/parent_node_adder.py,sha256=-2xmB8SDPwqeCFGQMt8lQ-NVNFPzQKtdihFXG6lw4e8,384
|
|
395
400
|
infrahub/dependencies/builder/diff/repository.py,sha256=Z3-61TcDJyl8Am7yD-h5a0S0A6aTXl2asDnMKqE3oBE,478
|
|
396
401
|
infrahub/dependencies/builder/ip/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -471,7 +476,7 @@ infrahub/graphql/mutations/diff_conflict.py,sha256=JngQfyKXCVlmtlqQ_VyabmrOEDOEK
|
|
|
471
476
|
infrahub/graphql/mutations/generator.py,sha256=Ulw4whZm8Gc8lJjwfUFoFSsR0cOUliFKl87Oca4B9O0,3579
|
|
472
477
|
infrahub/graphql/mutations/graphql_query.py,sha256=mp_O2byChneCihUrEAFEiIAgJ1gW9WrgtwPetUQmkJw,3562
|
|
473
478
|
infrahub/graphql/mutations/ipam.py,sha256=wIN8OcTNCHVy32YgatWZi2Of-snFYBd4wlxOAJvE-AY,15961
|
|
474
|
-
infrahub/graphql/mutations/main.py,sha256=
|
|
479
|
+
infrahub/graphql/mutations/main.py,sha256=DB7UvTPopMOGH2jX6SG-bX7NUi3aF4AKiu5UeM20zL4,20787
|
|
475
480
|
infrahub/graphql/mutations/menu.py,sha256=u2UbOA-TFDRcZRGFkgYTmpGxN2IAUgOvJXd7SnsufyI,3708
|
|
476
481
|
infrahub/graphql/mutations/models.py,sha256=ilkSLr8OxVO9v3Ra_uDyUTJT9qPOmdPMqQbuWIydJMo,264
|
|
477
482
|
infrahub/graphql/mutations/node_getter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -484,7 +489,7 @@ infrahub/graphql/mutations/relationship.py,sha256=mFZHn949a48w7MRt-L2iO1St9FwJdX
|
|
|
484
489
|
infrahub/graphql/mutations/repository.py,sha256=Whrt1uYWt7Ro6omJYN8zc3D-poZ6bOBrpBHIG4odAmo,11316
|
|
485
490
|
infrahub/graphql/mutations/resource_manager.py,sha256=DvnmfXmS9bNYXjtgedGTKPdJmtdaCbM5qxl0OJ-t1yQ,11342
|
|
486
491
|
infrahub/graphql/mutations/schema.py,sha256=vOwP8SIcQxamhP_JwbeXPG5iOEwxHhHawgqU6bD-4us,12897
|
|
487
|
-
infrahub/graphql/mutations/tasks.py,sha256=
|
|
492
|
+
infrahub/graphql/mutations/tasks.py,sha256=IEiT27e6SRJ56OEznWE3r03JfQmyEdxCYBBaVEuHVLU,3898
|
|
488
493
|
infrahub/graphql/mutations/webhook.py,sha256=IW_WPpBRySd-mpbkuGnR28VpU9naM2bLZBjJOaAGuH4,4777
|
|
489
494
|
infrahub/graphql/parser.py,sha256=Du1003gL9Bq5niPZE0PT5zB5Sq9Ub2qWJaqf1SnVVck,8603
|
|
490
495
|
infrahub/graphql/permissions.py,sha256=ADPyCSZcli0PLgGrtO-EsEJjRuvlk9orYhJO06IE_NI,1022
|
|
@@ -790,9 +795,9 @@ infrahub_sdk/uuidt.py,sha256=Tz-4nHkJwbi39UT3gaIe2wJeZNAoBqf6tm3sw7LZbXc,2155
|
|
|
790
795
|
infrahub_sdk/yaml.py,sha256=9X02RrknjCuu_NwgQTv9jZspDCw0EBaP6jhbLIjhpmM,5143
|
|
791
796
|
infrahub_testcontainers/__init__.py,sha256=oPpmesGgYBSdKTg1L37FGwYBeao1EHury5SJGul-CT8,216
|
|
792
797
|
infrahub_testcontainers/constants.py,sha256=mZ4hLvcf4rKk9wC7EId4MQxAY0sk4V99deB04N0J2bg,85
|
|
793
|
-
infrahub_testcontainers/container.py,sha256=
|
|
794
|
-
infrahub_testcontainers/docker-compose-cluster.test.yml,sha256=
|
|
795
|
-
infrahub_testcontainers/docker-compose.test.yml,sha256=
|
|
798
|
+
infrahub_testcontainers/container.py,sha256=jwNLuqTJ_cNbBlXVXjIl2YeOIfpCetO3RSjpO3g4SrI,19510
|
|
799
|
+
infrahub_testcontainers/docker-compose-cluster.test.yml,sha256=Sz6k_1ywvlA2kGzhc9ASDp9PSpPMUAupjfOGWwHNAHs,12222
|
|
800
|
+
infrahub_testcontainers/docker-compose.test.yml,sha256=jvS8k4U5ngxBzLmvGEn1n1MA1L75DD0PoiFyOdO2Lr4,8620
|
|
796
801
|
infrahub_testcontainers/haproxy.cfg,sha256=QUkG2Xu-hKoknPOeYKAkBT_xJH6U9CfIS0DTMFZJsnk,1305
|
|
797
802
|
infrahub_testcontainers/helpers.py,sha256=3HAygJJmU1vBrD63Abiau6BGypYEeysTqRb6nkcmw7g,4573
|
|
798
803
|
infrahub_testcontainers/host.py,sha256=Z4_gGoGKKeM_HGVS7SdYL1FTNGyLBk8wzicdSKHpfmM,1486
|
|
@@ -801,8 +806,8 @@ infrahub_testcontainers/models.py,sha256=ASYyvl7d_WQz_i7y8-3iab9hwwmCl3OCJavqVbe
|
|
|
801
806
|
infrahub_testcontainers/performance_test.py,sha256=hvwiy6tc_lWniYqGkqfOXVGAmA_IV15VOZqbiD9ezno,6149
|
|
802
807
|
infrahub_testcontainers/plugin.py,sha256=I3RuZQ0dARyKHuqCf0y1Yj731P2Mwf3BJUehRJKeWrs,5645
|
|
803
808
|
infrahub_testcontainers/prometheus.yml,sha256=610xQEyj3xuVJMzPkC4m1fRnCrjGpiRBrXA2ytCLa54,599
|
|
804
|
-
infrahub_server-1.3.
|
|
805
|
-
infrahub_server-1.3.
|
|
806
|
-
infrahub_server-1.3.
|
|
807
|
-
infrahub_server-1.3.
|
|
808
|
-
infrahub_server-1.3.
|
|
809
|
+
infrahub_server-1.3.3.dist-info/LICENSE.txt,sha256=TfPDBt3ar0uv_f9cqCDMZ5rIzW3CY8anRRd4PkL6ejs,34522
|
|
810
|
+
infrahub_server-1.3.3.dist-info/METADATA,sha256=WjJ19ZRCILDLKyfqCVPoDH3a-XRbvmGhGNdQDWbbXyo,8205
|
|
811
|
+
infrahub_server-1.3.3.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
812
|
+
infrahub_server-1.3.3.dist-info/entry_points.txt,sha256=UXIeFWDsrV-4IllNvUEd6KieYGzQfn9paga2YyABOQI,393
|
|
813
|
+
infrahub_server-1.3.3.dist-info/RECORD,,
|
|
@@ -141,7 +141,7 @@ class InfrahubDockerCompose(DockerCompose):
|
|
|
141
141
|
"INFRAHUB_TESTING_DOCKER_ENTRYPOINT": f"gunicorn --config community/backend/infrahub/serve/gunicorn_config.py -w {os.environ.get('INFRAHUB_TESTING_WEB_CONCURRENCY', 4)} --logger-class infrahub.serve.log.GunicornLogger infrahub_enterprise.server:app", # noqa: E501
|
|
142
142
|
"INFRAHUB_TESTING_WORKFLOW_DEFAULT_WORKER_TYPE": "infrahubentasync",
|
|
143
143
|
"INFRAHUB_TESTING_PREFECT_UI_ENABLED": "false",
|
|
144
|
-
"NEO4J_DOCKER_IMAGE": "neo4j:
|
|
144
|
+
"NEO4J_DOCKER_IMAGE": "neo4j:2025.03.0-enterprise",
|
|
145
145
|
}
|
|
146
146
|
)
|
|
147
147
|
|
|
@@ -91,6 +91,7 @@ services:
|
|
|
91
91
|
start_period: 3s
|
|
92
92
|
ports:
|
|
93
93
|
- ${INFRAHUB_TESTING_DATABASE_PORT:-0}:6362
|
|
94
|
+
- ${INFRAHUB_TESTING_DATABASE_BOLT_PORT:-0}:7687
|
|
94
95
|
- ${INFRAHUB_TESTING_DATABASE_UI_PORT:-0}:7474
|
|
95
96
|
|
|
96
97
|
database-core2:
|
|
@@ -126,6 +127,7 @@ services:
|
|
|
126
127
|
com.github.job: "${JOB_NAME:-unknown}"
|
|
127
128
|
ports:
|
|
128
129
|
- "${INFRAHUB_TESTING_DATABASE_PORT:-0}:6363"
|
|
130
|
+
- ${INFRAHUB_TESTING_DATABASE_BOLT_PORT:-0}:7687
|
|
129
131
|
|
|
130
132
|
database-core3:
|
|
131
133
|
deploy:
|
|
@@ -160,6 +162,7 @@ services:
|
|
|
160
162
|
com.github.job: "${JOB_NAME:-unknown}"
|
|
161
163
|
ports:
|
|
162
164
|
- "${INFRAHUB_TESTING_DATABASE_PORT:-0}:6364"
|
|
165
|
+
- ${INFRAHUB_TESTING_DATABASE_BOLT_PORT:-0}:7687
|
|
163
166
|
|
|
164
167
|
task-manager:
|
|
165
168
|
image: "${INFRAHUB_TESTING_DOCKER_IMAGE}:${INFRAHUB_TESTING_IMAGE_VERSION}"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|