infrahub-server 1.2.0rc0__py3-none-any.whl → 1.2.1__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/api/dependencies.py +6 -6
- infrahub/api/diff/validation_models.py +7 -7
- infrahub/api/schema.py +1 -1
- infrahub/artifacts/models.py +5 -3
- infrahub/artifacts/tasks.py +3 -5
- infrahub/cli/__init__.py +13 -9
- infrahub/cli/constants.py +3 -0
- infrahub/cli/db.py +165 -183
- infrahub/cli/upgrade.py +146 -0
- infrahub/computed_attribute/gather.py +185 -0
- infrahub/computed_attribute/models.py +240 -12
- infrahub/computed_attribute/tasks.py +77 -441
- infrahub/computed_attribute/triggers.py +13 -47
- infrahub/config.py +43 -32
- infrahub/context.py +14 -0
- infrahub/core/account.py +4 -4
- infrahub/core/attribute.py +58 -58
- infrahub/core/branch/tasks.py +74 -22
- infrahub/core/changelog/diff.py +95 -36
- infrahub/core/changelog/models.py +217 -43
- infrahub/core/constants/__init__.py +28 -0
- infrahub/core/constants/infrahubkind.py +2 -0
- infrahub/core/constants/schema.py +2 -0
- infrahub/core/constraint/node/runner.py +9 -8
- infrahub/core/diff/branch_differ.py +10 -10
- infrahub/core/diff/enricher/cardinality_one.py +5 -0
- infrahub/core/diff/enricher/hierarchy.py +17 -4
- infrahub/core/diff/enricher/labels.py +5 -0
- infrahub/core/diff/enricher/path_identifier.py +4 -0
- infrahub/core/diff/ipam_diff_parser.py +4 -5
- infrahub/core/diff/model/diff.py +27 -27
- infrahub/core/diff/model/path.py +32 -9
- infrahub/core/diff/parent_node_adder.py +78 -0
- infrahub/core/diff/payload_builder.py +13 -2
- infrahub/core/diff/query/filters.py +2 -2
- infrahub/core/diff/query/merge.py +20 -17
- infrahub/core/diff/query/save.py +188 -182
- infrahub/core/diff/query/summary_counts_enricher.py +51 -4
- infrahub/core/diff/query_parser.py +4 -4
- infrahub/core/diff/repository/deserializer.py +8 -3
- infrahub/core/diff/repository/repository.py +156 -38
- infrahub/core/diff/tasks.py +4 -4
- infrahub/core/graph/__init__.py +1 -1
- infrahub/core/graph/index.py +3 -0
- infrahub/core/initialization.py +1 -10
- infrahub/core/ipam/constants.py +3 -4
- infrahub/core/ipam/reconciler.py +12 -12
- infrahub/core/ipam/utilization.py +10 -13
- infrahub/core/manager.py +36 -36
- infrahub/core/merge.py +7 -7
- infrahub/core/migrations/__init__.py +2 -3
- infrahub/core/migrations/graph/__init__.py +12 -3
- infrahub/core/migrations/graph/m017_add_core_profile.py +1 -5
- infrahub/core/migrations/graph/m018_uniqueness_nulls.py +4 -4
- infrahub/core/migrations/graph/m019_restore_rels_to_time.py +256 -0
- infrahub/core/migrations/graph/m020_duplicate_edges.py +160 -0
- infrahub/core/migrations/graph/m021_missing_hierarchy_merge.py +51 -0
- infrahub/core/migrations/graph/m022_add_generate_template_attr.py +48 -0
- infrahub/core/migrations/graph/m023_deduplicate_cardinality_one_relationships.py +96 -0
- infrahub/core/migrations/query/attribute_add.py +2 -2
- infrahub/core/migrations/query/node_duplicate.py +43 -26
- infrahub/core/migrations/query/schema_attribute_update.py +2 -2
- infrahub/core/migrations/schema/models.py +19 -4
- infrahub/core/migrations/schema/node_remove.py +26 -12
- infrahub/core/migrations/schema/tasks.py +2 -2
- infrahub/core/migrations/shared.py +16 -16
- infrahub/core/models.py +15 -6
- infrahub/core/node/__init__.py +43 -39
- infrahub/core/node/base.py +2 -4
- infrahub/core/node/constraints/attribute_uniqueness.py +2 -2
- infrahub/core/node/constraints/grouped_uniqueness.py +99 -47
- infrahub/core/node/constraints/interface.py +1 -2
- infrahub/core/node/delete_validator.py +3 -5
- infrahub/core/node/ipam.py +4 -4
- infrahub/core/node/permissions.py +7 -7
- infrahub/core/node/resource_manager/ip_address_pool.py +6 -6
- infrahub/core/node/resource_manager/ip_prefix_pool.py +6 -6
- infrahub/core/node/resource_manager/number_pool.py +3 -3
- infrahub/core/path.py +12 -12
- infrahub/core/property.py +11 -11
- infrahub/core/protocols.py +7 -0
- infrahub/core/protocols_base.py +21 -21
- infrahub/core/query/__init__.py +33 -33
- infrahub/core/query/attribute.py +6 -4
- infrahub/core/query/diff.py +3 -3
- infrahub/core/query/node.py +82 -32
- infrahub/core/query/relationship.py +228 -40
- infrahub/core/query/resource_manager.py +2 -0
- infrahub/core/query/standard_node.py +3 -3
- infrahub/core/query/subquery.py +9 -9
- infrahub/core/registry.py +13 -15
- infrahub/core/relationship/constraints/count.py +3 -4
- infrahub/core/relationship/constraints/peer_kind.py +3 -4
- infrahub/core/relationship/constraints/profiles_kind.py +2 -2
- infrahub/core/relationship/model.py +51 -59
- infrahub/core/schema/attribute_schema.py +16 -8
- infrahub/core/schema/basenode_schema.py +105 -44
- infrahub/core/schema/computed_attribute.py +3 -3
- infrahub/core/schema/definitions/core/__init__.py +147 -0
- infrahub/core/schema/definitions/core/account.py +171 -0
- infrahub/core/schema/definitions/core/artifact.py +136 -0
- infrahub/core/schema/definitions/core/builtin.py +24 -0
- infrahub/core/schema/definitions/core/check.py +68 -0
- infrahub/core/schema/definitions/core/core.py +17 -0
- infrahub/core/schema/definitions/core/generator.py +100 -0
- infrahub/core/schema/definitions/core/graphql_query.py +79 -0
- infrahub/core/schema/definitions/core/group.py +108 -0
- infrahub/core/schema/definitions/core/ipam.py +193 -0
- infrahub/core/schema/definitions/core/lineage.py +19 -0
- infrahub/core/schema/definitions/core/menu.py +48 -0
- infrahub/core/schema/definitions/core/permission.py +163 -0
- infrahub/core/schema/definitions/core/profile.py +18 -0
- infrahub/core/schema/definitions/core/propose_change.py +97 -0
- infrahub/core/schema/definitions/core/propose_change_comment.py +193 -0
- infrahub/core/schema/definitions/core/propose_change_validator.py +328 -0
- infrahub/core/schema/definitions/core/repository.py +286 -0
- infrahub/core/schema/definitions/core/resource_pool.py +170 -0
- infrahub/core/schema/definitions/core/template.py +27 -0
- infrahub/core/schema/definitions/core/transform.py +96 -0
- infrahub/core/schema/definitions/core/webhook.py +134 -0
- infrahub/core/schema/definitions/internal.py +16 -16
- infrahub/core/schema/dropdown.py +3 -4
- infrahub/core/schema/generated/attribute_schema.py +15 -18
- infrahub/core/schema/generated/base_node_schema.py +12 -14
- infrahub/core/schema/generated/node_schema.py +3 -5
- infrahub/core/schema/generated/relationship_schema.py +9 -11
- infrahub/core/schema/generic_schema.py +2 -2
- infrahub/core/schema/manager.py +20 -9
- infrahub/core/schema/node_schema.py +4 -2
- infrahub/core/schema/relationship_schema.py +14 -6
- infrahub/core/schema/schema_branch.py +292 -144
- infrahub/core/schema/schema_branch_computed.py +41 -4
- infrahub/core/task/task.py +3 -3
- infrahub/core/task/user_task.py +15 -15
- infrahub/core/timestamp.py +3 -3
- infrahub/core/utils.py +20 -18
- infrahub/core/validators/__init__.py +1 -3
- infrahub/core/validators/aggregated_checker.py +2 -2
- infrahub/core/validators/attribute/choices.py +2 -2
- infrahub/core/validators/attribute/enum.py +2 -2
- infrahub/core/validators/attribute/kind.py +2 -2
- infrahub/core/validators/attribute/length.py +2 -2
- infrahub/core/validators/attribute/optional.py +2 -2
- infrahub/core/validators/attribute/regex.py +2 -2
- infrahub/core/validators/attribute/unique.py +2 -2
- infrahub/core/validators/checks_runner.py +25 -2
- infrahub/core/validators/determiner.py +1 -3
- infrahub/core/validators/interface.py +6 -2
- infrahub/core/validators/model.py +22 -3
- infrahub/core/validators/models/validate_migration.py +17 -4
- infrahub/core/validators/node/attribute.py +2 -2
- infrahub/core/validators/node/generate_profile.py +2 -2
- infrahub/core/validators/node/hierarchy.py +3 -5
- infrahub/core/validators/node/inherit_from.py +27 -5
- infrahub/core/validators/node/relationship.py +2 -2
- infrahub/core/validators/relationship/count.py +4 -4
- infrahub/core/validators/relationship/optional.py +2 -2
- infrahub/core/validators/relationship/peer.py +2 -2
- infrahub/core/validators/shared.py +2 -2
- infrahub/core/validators/tasks.py +8 -0
- infrahub/core/validators/uniqueness/checker.py +22 -21
- infrahub/core/validators/uniqueness/index.py +2 -2
- infrahub/core/validators/uniqueness/model.py +11 -11
- infrahub/database/__init__.py +27 -22
- infrahub/database/metrics.py +7 -1
- infrahub/dependencies/builder/constraint/grouped/node_runner.py +1 -3
- infrahub/dependencies/builder/diff/deserializer.py +3 -1
- infrahub/dependencies/builder/diff/enricher/hierarchy.py +3 -1
- infrahub/dependencies/builder/diff/parent_node_adder.py +8 -0
- infrahub/dependencies/component/registry.py +2 -2
- infrahub/events/__init__.py +25 -2
- infrahub/events/artifact_action.py +64 -0
- infrahub/events/branch_action.py +33 -22
- infrahub/events/generator.py +71 -0
- infrahub/events/group_action.py +51 -21
- infrahub/events/models.py +18 -19
- infrahub/events/node_action.py +88 -37
- infrahub/events/repository_action.py +5 -18
- infrahub/events/schema_action.py +4 -9
- infrahub/events/utils.py +16 -0
- infrahub/events/validator_action.py +55 -0
- infrahub/exceptions.py +32 -24
- infrahub/generators/models.py +2 -3
- infrahub/generators/tasks.py +24 -4
- infrahub/git/base.py +7 -7
- infrahub/git/integrator.py +48 -24
- infrahub/git/models.py +101 -9
- infrahub/git/repository.py +3 -3
- infrahub/git/tasks.py +408 -6
- infrahub/git/utils.py +48 -0
- infrahub/git/worktree.py +1 -2
- infrahub/git_credential/askpass.py +1 -2
- infrahub/graphql/analyzer.py +12 -0
- infrahub/graphql/app.py +13 -15
- infrahub/graphql/context.py +39 -0
- infrahub/graphql/initialization.py +3 -0
- infrahub/graphql/loaders/node.py +2 -12
- infrahub/graphql/loaders/peers.py +77 -0
- infrahub/graphql/loaders/shared.py +13 -0
- infrahub/graphql/manager.py +17 -19
- infrahub/graphql/mutations/artifact_definition.py +5 -5
- infrahub/graphql/mutations/branch.py +26 -1
- infrahub/graphql/mutations/computed_attribute.py +9 -5
- infrahub/graphql/mutations/diff.py +23 -11
- infrahub/graphql/mutations/diff_conflict.py +5 -0
- infrahub/graphql/mutations/generator.py +83 -0
- infrahub/graphql/mutations/graphql_query.py +5 -5
- infrahub/graphql/mutations/ipam.py +54 -74
- infrahub/graphql/mutations/main.py +195 -132
- infrahub/graphql/mutations/menu.py +7 -7
- infrahub/graphql/mutations/models.py +2 -4
- infrahub/graphql/mutations/node_getter/by_default_filter.py +10 -10
- infrahub/graphql/mutations/node_getter/by_hfid.py +1 -3
- infrahub/graphql/mutations/node_getter/by_id.py +1 -3
- infrahub/graphql/mutations/node_getter/interface.py +1 -2
- infrahub/graphql/mutations/proposed_change.py +7 -7
- infrahub/graphql/mutations/relationship.py +93 -19
- infrahub/graphql/mutations/repository.py +8 -8
- infrahub/graphql/mutations/resource_manager.py +3 -3
- infrahub/graphql/mutations/schema.py +19 -4
- infrahub/graphql/mutations/webhook.py +137 -0
- infrahub/graphql/parser.py +4 -4
- infrahub/graphql/permissions.py +1 -10
- infrahub/graphql/queries/diff/tree.py +19 -14
- infrahub/graphql/queries/event.py +5 -2
- infrahub/graphql/queries/ipam.py +2 -2
- infrahub/graphql/queries/relationship.py +2 -2
- infrahub/graphql/queries/search.py +2 -2
- infrahub/graphql/resolvers/many_relationship.py +264 -0
- infrahub/graphql/resolvers/resolver.py +13 -110
- infrahub/graphql/schema.py +2 -0
- infrahub/graphql/subscription/graphql_query.py +2 -0
- infrahub/graphql/types/context.py +12 -0
- infrahub/graphql/types/event.py +84 -17
- infrahub/graphql/types/node.py +2 -2
- infrahub/graphql/utils.py +2 -2
- infrahub/groups/ancestors.py +29 -0
- infrahub/groups/parsers.py +107 -0
- infrahub/lock.py +20 -20
- infrahub/menu/constants.py +0 -1
- infrahub/menu/generator.py +9 -21
- infrahub/menu/menu.py +17 -38
- infrahub/menu/models.py +117 -16
- infrahub/menu/repository.py +111 -0
- infrahub/menu/utils.py +5 -8
- infrahub/message_bus/__init__.py +11 -13
- infrahub/message_bus/messages/__init__.py +1 -21
- infrahub/message_bus/messages/check_generator_run.py +3 -3
- infrahub/message_bus/messages/finalize_validator_execution.py +3 -0
- infrahub/message_bus/messages/proposed_change/request_proposedchange_refreshartifacts.py +6 -0
- infrahub/message_bus/messages/request_generatordefinition_check.py +2 -0
- infrahub/message_bus/messages/send_echo_request.py +1 -1
- infrahub/message_bus/operations/__init__.py +1 -10
- infrahub/message_bus/operations/check/__init__.py +2 -2
- infrahub/message_bus/operations/check/generator.py +1 -0
- infrahub/message_bus/operations/event/__init__.py +2 -2
- infrahub/message_bus/operations/event/worker.py +0 -3
- infrahub/message_bus/operations/finalize/validator.py +51 -1
- infrahub/message_bus/operations/requests/__init__.py +0 -2
- infrahub/message_bus/operations/requests/generator_definition.py +21 -23
- infrahub/message_bus/operations/requests/proposed_change.py +14 -10
- infrahub/permissions/globals.py +15 -0
- infrahub/pools/number.py +2 -4
- infrahub/proposed_change/models.py +3 -0
- infrahub/proposed_change/tasks.py +58 -45
- infrahub/pytest_plugin.py +13 -10
- infrahub/server.py +2 -3
- infrahub/services/__init__.py +2 -2
- infrahub/services/adapters/cache/__init__.py +4 -6
- infrahub/services/adapters/cache/nats.py +4 -5
- infrahub/services/adapters/cache/redis.py +3 -7
- infrahub/services/adapters/event/__init__.py +1 -1
- infrahub/services/adapters/message_bus/__init__.py +3 -3
- infrahub/services/adapters/message_bus/local.py +2 -2
- infrahub/services/adapters/message_bus/nats.py +4 -4
- infrahub/services/adapters/message_bus/rabbitmq.py +4 -4
- infrahub/services/adapters/workflow/local.py +2 -2
- infrahub/services/component.py +5 -5
- infrahub/services/protocols.py +7 -7
- infrahub/services/scheduler.py +1 -3
- infrahub/task_manager/event.py +102 -9
- infrahub/task_manager/models.py +27 -7
- infrahub/tasks/artifact.py +7 -6
- infrahub/telemetry/__init__.py +0 -0
- infrahub/telemetry/constants.py +9 -0
- infrahub/telemetry/database.py +86 -0
- infrahub/telemetry/models.py +65 -0
- infrahub/telemetry/task_manager.py +77 -0
- infrahub/{tasks/telemetry.py → telemetry/tasks.py} +49 -56
- infrahub/telemetry/utils.py +11 -0
- infrahub/trace.py +4 -4
- infrahub/transformations/tasks.py +2 -2
- infrahub/trigger/catalogue.py +4 -6
- infrahub/trigger/constants.py +0 -8
- infrahub/trigger/models.py +54 -5
- infrahub/trigger/setup.py +90 -0
- infrahub/trigger/tasks.py +35 -84
- infrahub/utils.py +11 -1
- infrahub/validators/__init__.py +0 -0
- infrahub/validators/events.py +42 -0
- infrahub/validators/tasks.py +41 -0
- infrahub/webhook/gather.py +17 -0
- infrahub/webhook/models.py +176 -44
- infrahub/webhook/tasks.py +154 -155
- infrahub/webhook/triggers.py +31 -7
- infrahub/workers/infrahub_async.py +2 -2
- infrahub/workers/utils.py +2 -2
- infrahub/workflows/catalogue.py +86 -35
- infrahub/workflows/initialization.py +8 -2
- infrahub/workflows/models.py +27 -1
- infrahub/workflows/utils.py +10 -1
- infrahub_sdk/client.py +35 -8
- infrahub_sdk/config.py +3 -0
- infrahub_sdk/context.py +13 -0
- infrahub_sdk/ctl/branch.py +3 -2
- infrahub_sdk/ctl/cli_commands.py +5 -1
- infrahub_sdk/ctl/utils.py +0 -16
- infrahub_sdk/exceptions.py +12 -0
- infrahub_sdk/generator.py +4 -1
- infrahub_sdk/graphql.py +45 -13
- infrahub_sdk/node.py +71 -22
- infrahub_sdk/protocols.py +21 -8
- infrahub_sdk/protocols_base.py +32 -11
- infrahub_sdk/query_groups.py +6 -35
- infrahub_sdk/schema/__init__.py +55 -26
- infrahub_sdk/schema/main.py +8 -0
- infrahub_sdk/task/__init__.py +11 -0
- infrahub_sdk/task/constants.py +3 -0
- infrahub_sdk/task/exceptions.py +25 -0
- infrahub_sdk/task/manager.py +551 -0
- infrahub_sdk/task/models.py +74 -0
- infrahub_sdk/testing/schemas/animal.py +9 -0
- infrahub_sdk/timestamp.py +142 -33
- infrahub_sdk/utils.py +29 -1
- {infrahub_server-1.2.0rc0.dist-info → infrahub_server-1.2.1.dist-info}/METADATA +8 -6
- {infrahub_server-1.2.0rc0.dist-info → infrahub_server-1.2.1.dist-info}/RECORD +349 -293
- {infrahub_server-1.2.0rc0.dist-info → infrahub_server-1.2.1.dist-info}/entry_points.txt +1 -0
- infrahub_testcontainers/constants.py +2 -0
- infrahub_testcontainers/container.py +157 -12
- infrahub_testcontainers/docker-compose.test.yml +31 -6
- infrahub_testcontainers/helpers.py +18 -73
- infrahub_testcontainers/host.py +41 -0
- infrahub_testcontainers/measurements.py +93 -0
- infrahub_testcontainers/models.py +38 -0
- infrahub_testcontainers/performance_test.py +166 -0
- infrahub_testcontainers/plugin.py +136 -0
- infrahub_testcontainers/prometheus.yml +30 -0
- infrahub/core/schema/definitions/core.py +0 -2286
- infrahub/message_bus/messages/check_repository_checkdefinition.py +0 -20
- infrahub/message_bus/messages/check_repository_mergeconflicts.py +0 -16
- infrahub/message_bus/messages/check_repository_usercheck.py +0 -26
- infrahub/message_bus/messages/event_branch_create.py +0 -11
- infrahub/message_bus/messages/event_branch_delete.py +0 -11
- infrahub/message_bus/messages/event_branch_rebased.py +0 -9
- infrahub/message_bus/messages/event_node_mutated.py +0 -15
- infrahub/message_bus/messages/event_schema_update.py +0 -9
- infrahub/message_bus/messages/request_repository_checks.py +0 -12
- infrahub/message_bus/messages/request_repository_userchecks.py +0 -18
- infrahub/message_bus/operations/check/repository.py +0 -293
- infrahub/message_bus/operations/event/node.py +0 -20
- infrahub/message_bus/operations/event/schema.py +0 -17
- infrahub/message_bus/operations/requests/repository.py +0 -133
- infrahub/webhook/constants.py +0 -1
- {infrahub_server-1.2.0rc0.dist-info → infrahub_server-1.2.1.dist-info}/LICENSE.txt +0 -0
- {infrahub_server-1.2.0rc0.dist-info → infrahub_server-1.2.1.dist-info}/WHEEL +0 -0
|
@@ -1,58 +1,22 @@
|
|
|
1
|
+
from infrahub.events.branch_action import BranchDeletedEvent
|
|
2
|
+
from infrahub.events.repository_action import CommitUpdatedEvent
|
|
3
|
+
from infrahub.events.schema_action import SchemaUpdatedEvent
|
|
1
4
|
from infrahub.trigger.models import BuiltinTriggerDefinition, EventTrigger, ExecuteWorkflow
|
|
2
5
|
from infrahub.workflows.catalogue import (
|
|
3
|
-
|
|
4
|
-
COMPUTED_ATTRIBUTE_SETUP,
|
|
6
|
+
COMPUTED_ATTRIBUTE_SETUP_JINJA2,
|
|
5
7
|
COMPUTED_ATTRIBUTE_SETUP_PYTHON,
|
|
6
8
|
)
|
|
7
9
|
|
|
8
|
-
TRIGGER_COMPUTED_ATTRIBUTE_PYTHON_SETUP_BRANCH = BuiltinTriggerDefinition(
|
|
9
|
-
name="computed-attribute-python-setup-on-branch-creation",
|
|
10
|
-
previous_names={"Trigger-schema-update-event"},
|
|
11
|
-
description="Trigger actions on branch create event",
|
|
12
|
-
trigger=EventTrigger(events={"infrahub.branch.created"}),
|
|
13
|
-
actions=[
|
|
14
|
-
ExecuteWorkflow(
|
|
15
|
-
name=COMPUTED_ATTRIBUTE_SETUP_PYTHON.name,
|
|
16
|
-
parameters={
|
|
17
|
-
"branch_name": "{{ event.resource['infrahub.branch.name'] }}",
|
|
18
|
-
"trigger_updates": False,
|
|
19
|
-
"context": {
|
|
20
|
-
"__prefect_kind": "json",
|
|
21
|
-
"value": {"__prefect_kind": "jinja", "template": "{{ event.payload['context'] | tojson }}"},
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
)
|
|
25
|
-
],
|
|
26
|
-
)
|
|
27
|
-
|
|
28
10
|
TRIGGER_COMPUTED_ATTRIBUTE_PYTHON_SETUP_COMMIT = BuiltinTriggerDefinition(
|
|
29
11
|
name="computed-attribute-python-setup-on-commit",
|
|
30
|
-
|
|
31
|
-
trigger=EventTrigger(events={"infrahub.repository.update_commit"}),
|
|
12
|
+
trigger=EventTrigger(events={CommitUpdatedEvent.event_name}),
|
|
32
13
|
actions=[
|
|
33
14
|
ExecuteWorkflow(
|
|
34
|
-
|
|
15
|
+
workflow=COMPUTED_ATTRIBUTE_SETUP_PYTHON,
|
|
35
16
|
parameters={
|
|
36
17
|
"branch_name": "{{ event.resource['infrahub.branch.name'] }}",
|
|
37
18
|
"commit": "{{ event.payload['commit'] }}",
|
|
38
|
-
"
|
|
39
|
-
"__prefect_kind": "json",
|
|
40
|
-
"value": {"__prefect_kind": "jinja", "template": "{{ event.payload['context'] | tojson }}"},
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
)
|
|
44
|
-
],
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
TRIGGER_COMPUTED_ATTRIBUTE_PYTHON_CLEAN_BRANCH = BuiltinTriggerDefinition(
|
|
48
|
-
name="computed-attribute-python-cleanup-on-branch-deletion",
|
|
49
|
-
description="Trigger actions on branch delete event",
|
|
50
|
-
trigger=EventTrigger(events={"infrahub.branch.deleted"}),
|
|
51
|
-
actions=[
|
|
52
|
-
ExecuteWorkflow(
|
|
53
|
-
name=COMPUTED_ATTRIBUTE_REMOVE_PYTHON.name,
|
|
54
|
-
parameters={
|
|
55
|
-
"branch_name": "{{ event.resource['infrahub.branch.name'] }}",
|
|
19
|
+
"event_name": "{{ event.event }}",
|
|
56
20
|
"context": {
|
|
57
21
|
"__prefect_kind": "json",
|
|
58
22
|
"value": {"__prefect_kind": "jinja", "template": "{{ event.payload['context'] | tojson }}"},
|
|
@@ -63,13 +27,14 @@ TRIGGER_COMPUTED_ATTRIBUTE_PYTHON_CLEAN_BRANCH = BuiltinTriggerDefinition(
|
|
|
63
27
|
)
|
|
64
28
|
|
|
65
29
|
TRIGGER_COMPUTED_ATTRIBUTE_ALL_SCHEMA = BuiltinTriggerDefinition(
|
|
66
|
-
name="computed-attribute-
|
|
67
|
-
trigger=EventTrigger(events={
|
|
30
|
+
name="computed-attribute-setup-all",
|
|
31
|
+
trigger=EventTrigger(events={SchemaUpdatedEvent.event_name, BranchDeletedEvent.event_name}),
|
|
68
32
|
actions=[
|
|
69
33
|
ExecuteWorkflow(
|
|
70
|
-
|
|
34
|
+
workflow=COMPUTED_ATTRIBUTE_SETUP_JINJA2,
|
|
71
35
|
parameters={
|
|
72
36
|
"branch_name": "{{ event.resource['infrahub.branch.name'] }}",
|
|
37
|
+
"event_name": "{{ event.event }}",
|
|
73
38
|
"context": {
|
|
74
39
|
"__prefect_kind": "json",
|
|
75
40
|
"value": {"__prefect_kind": "jinja", "template": "{{ event.payload['context'] | tojson }}"},
|
|
@@ -77,9 +42,10 @@ TRIGGER_COMPUTED_ATTRIBUTE_ALL_SCHEMA = BuiltinTriggerDefinition(
|
|
|
77
42
|
},
|
|
78
43
|
),
|
|
79
44
|
ExecuteWorkflow(
|
|
80
|
-
|
|
45
|
+
workflow=COMPUTED_ATTRIBUTE_SETUP_PYTHON,
|
|
81
46
|
parameters={
|
|
82
47
|
"branch_name": "{{ event.resource['infrahub.branch.name'] }}",
|
|
48
|
+
"event_name": "{{ event.event }}",
|
|
83
49
|
"context": {
|
|
84
50
|
"__prefect_kind": "json",
|
|
85
51
|
"value": {"__prefect_kind": "jinja", "template": "{{ event.payload['context'] | tojson }}"},
|
infrahub/config.py
CHANGED
|
@@ -6,7 +6,7 @@ import sys
|
|
|
6
6
|
from dataclasses import dataclass
|
|
7
7
|
from enum import Enum
|
|
8
8
|
from pathlib import Path
|
|
9
|
-
from typing import TYPE_CHECKING, Any
|
|
9
|
+
from typing import TYPE_CHECKING, Any
|
|
10
10
|
|
|
11
11
|
import toml
|
|
12
12
|
from infrahub_sdk.utils import generate_uuid
|
|
@@ -140,7 +140,7 @@ class MainSettings(BaseSettings):
|
|
|
140
140
|
default=Path("/opt/infrahub/docs/build/search-index.json"),
|
|
141
141
|
description="Full path of saved json containing pre-indexed documentation",
|
|
142
142
|
)
|
|
143
|
-
internal_address:
|
|
143
|
+
internal_address: str | None = Field(default=None)
|
|
144
144
|
allow_anonymous_access: bool = Field(
|
|
145
145
|
default=True, description="Indicates if the system allows anonymous read access"
|
|
146
146
|
)
|
|
@@ -153,10 +153,15 @@ class MainSettings(BaseSettings):
|
|
|
153
153
|
default=["infrahub.permissions.LocalPermissionBackend"],
|
|
154
154
|
description="List of modules to handle permissions, they will be run in the given order",
|
|
155
155
|
)
|
|
156
|
-
public_url:
|
|
156
|
+
public_url: str | None = Field(
|
|
157
157
|
default=None,
|
|
158
158
|
description="Define the public URL of the Infrahub, might be required for OAuth2 and OIDC depending on your infrastructure.",
|
|
159
159
|
)
|
|
160
|
+
schema_strict_mode: bool = Field(
|
|
161
|
+
default=True,
|
|
162
|
+
description="Enable strict schema validation. When set to `False`, "
|
|
163
|
+
"`human_friendly_id` schema fields should not necessarily target a unique combination of peer attributes.",
|
|
164
|
+
)
|
|
160
165
|
|
|
161
166
|
@field_validator("docs_index_path", mode="before")
|
|
162
167
|
@classmethod
|
|
@@ -231,10 +236,10 @@ class DatabaseSettings(BaseSettings):
|
|
|
231
236
|
password: str = "admin"
|
|
232
237
|
address: str = "localhost"
|
|
233
238
|
port: int = 7687
|
|
234
|
-
database:
|
|
239
|
+
database: str | None = Field(default=None, pattern=VALID_DATABASE_NAME_REGEX, description="Name of the database")
|
|
235
240
|
tls_enabled: bool = Field(default=False, description="Indicates if TLS is enabled for the connection")
|
|
236
241
|
tls_insecure: bool = Field(default=False, description="Indicates if TLS certificates are verified")
|
|
237
|
-
tls_ca_file:
|
|
242
|
+
tls_ca_file: str | None = Field(default=None, description="File path to CA cert or bundle in PEM format")
|
|
238
243
|
query_size_limit: int = Field(
|
|
239
244
|
default=5_000,
|
|
240
245
|
ge=1,
|
|
@@ -249,6 +254,12 @@ class DatabaseSettings(BaseSettings):
|
|
|
249
254
|
retry_limit: int = Field(
|
|
250
255
|
default=3, description="Maximum number of times a transient issue in a transaction should be retried."
|
|
251
256
|
)
|
|
257
|
+
max_concurrent_queries: int = Field(
|
|
258
|
+
default=0, ge=0, description="Maximum number of concurrent queries that can run (0 means unlimited)."
|
|
259
|
+
)
|
|
260
|
+
max_concurrent_queries_delay: float = Field(
|
|
261
|
+
default=0.01, ge=0, description="Delay to add when max_concurrent_queries is reached."
|
|
262
|
+
)
|
|
252
263
|
|
|
253
264
|
@property
|
|
254
265
|
def database_name(self) -> str:
|
|
@@ -271,12 +282,12 @@ class BrokerSettings(BaseSettings):
|
|
|
271
282
|
enable: bool = True
|
|
272
283
|
tls_enabled: bool = Field(default=False, description="Indicates if TLS is enabled for the connection")
|
|
273
284
|
tls_insecure: bool = Field(default=False, description="Indicates if TLS certificates are verified")
|
|
274
|
-
tls_ca_file:
|
|
285
|
+
tls_ca_file: str | None = Field(default=None, description="File path to CA cert or bundle in PEM format")
|
|
275
286
|
username: str = "infrahub"
|
|
276
287
|
password: str = "infrahub"
|
|
277
288
|
address: str = "localhost"
|
|
278
|
-
port:
|
|
279
|
-
rabbitmq_http_port:
|
|
289
|
+
port: int | None = Field(default=None, ge=1, le=65535, description="Specified if running on a non default port.")
|
|
290
|
+
rabbitmq_http_port: int | None = Field(default=None, ge=1, le=65535)
|
|
280
291
|
namespace: str = "infrahub"
|
|
281
292
|
maximum_message_retries: int = Field(
|
|
282
293
|
default=10, description="The maximum number of retries that are attempted for failed messages"
|
|
@@ -299,7 +310,7 @@ class CacheSettings(BaseSettings):
|
|
|
299
310
|
model_config = SettingsConfigDict(env_prefix="INFRAHUB_CACHE_")
|
|
300
311
|
enable: bool = True
|
|
301
312
|
address: str = "localhost"
|
|
302
|
-
port:
|
|
313
|
+
port: int | None = Field(
|
|
303
314
|
default=None, ge=1, le=65535, description="Specified if running on a non default port (6379)"
|
|
304
315
|
)
|
|
305
316
|
database: int = Field(default=0, ge=0, le=15, description="Id of the database to use")
|
|
@@ -308,7 +319,7 @@ class CacheSettings(BaseSettings):
|
|
|
308
319
|
password: str = ""
|
|
309
320
|
tls_enabled: bool = Field(default=False, description="Indicates if TLS is enabled for the connection")
|
|
310
321
|
tls_insecure: bool = Field(default=False, description="Indicates if TLS certificates are verified")
|
|
311
|
-
tls_ca_file:
|
|
322
|
+
tls_ca_file: str | None = Field(default=None, description="File path to CA cert or bundle in PEM format")
|
|
312
323
|
|
|
313
324
|
@property
|
|
314
325
|
def service_port(self) -> int:
|
|
@@ -322,7 +333,7 @@ class WorkflowSettings(BaseSettings):
|
|
|
322
333
|
model_config = SettingsConfigDict(env_prefix="INFRAHUB_WORKFLOW_")
|
|
323
334
|
enable: bool = True
|
|
324
335
|
address: str = "localhost"
|
|
325
|
-
port:
|
|
336
|
+
port: int | None = Field(default=None, ge=1, le=65535, description="Specified if running on a non default port.")
|
|
326
337
|
tls_enabled: bool = Field(default=False, description="Indicates if TLS is enabled for the connection")
|
|
327
338
|
driver: WorkflowDriver = WorkflowDriver.WORKER
|
|
328
339
|
default_worker_type: str = "infrahubasync"
|
|
@@ -437,10 +448,10 @@ class InitialSettings(BaseSettings):
|
|
|
437
448
|
default="main",
|
|
438
449
|
description="Defines the name of the default branch within Infrahub, can only be set once during initialization of the system.",
|
|
439
450
|
)
|
|
440
|
-
admin_token:
|
|
451
|
+
admin_token: str | None = Field(default=None, description="An optional initial token for the admin account.")
|
|
441
452
|
admin_password: str = Field(default="infrahub", description="The initial password for the admin user")
|
|
442
|
-
agent_token:
|
|
443
|
-
agent_password:
|
|
453
|
+
agent_token: str | None = Field(default=None, description="An optional initial token for a git-agent account.")
|
|
454
|
+
agent_password: str | None = Field(
|
|
444
455
|
default=None, description="An optional initial password for a git-agent account."
|
|
445
456
|
)
|
|
446
457
|
|
|
@@ -501,9 +512,9 @@ class SecurityOIDCProvider2(SecurityOIDCSettings):
|
|
|
501
512
|
class SecurityOIDCProviderSettings(BaseModel):
|
|
502
513
|
"""This class is meant to facilitate configuration of OIDC providers when loading configuration from a infrahub.toml file."""
|
|
503
514
|
|
|
504
|
-
google:
|
|
505
|
-
provider1:
|
|
506
|
-
provider2:
|
|
515
|
+
google: SecurityOIDCGoogle | None = Field(default=None)
|
|
516
|
+
provider1: SecurityOIDCProvider1 | None = Field(default=None)
|
|
517
|
+
provider2: SecurityOIDCProvider2 | None = Field(default=None)
|
|
507
518
|
|
|
508
519
|
|
|
509
520
|
class SecurityOAuth2BaseSettings(BaseSettings):
|
|
@@ -549,9 +560,9 @@ class SecurityOAuth2Google(SecurityOAuth2Settings):
|
|
|
549
560
|
class SecurityOAuth2ProviderSettings(BaseModel):
|
|
550
561
|
"""This class is meant to facilitate configuration of OAuth2 providers when loading configuration from a infrahub.toml file."""
|
|
551
562
|
|
|
552
|
-
google:
|
|
553
|
-
provider1:
|
|
554
|
-
provider2:
|
|
563
|
+
google: SecurityOAuth2Google | None = Field(default=None)
|
|
564
|
+
provider1: SecurityOAuth2Provider1 | None = Field(default=None)
|
|
565
|
+
provider2: SecurityOAuth2Provider2 | None = Field(default=None)
|
|
555
566
|
|
|
556
567
|
|
|
557
568
|
class MiscellaneousSettings(BaseSettings):
|
|
@@ -567,9 +578,9 @@ class MiscellaneousSettings(BaseSettings):
|
|
|
567
578
|
class RemoteLoggingSettings(BaseSettings):
|
|
568
579
|
model_config = SettingsConfigDict(env_prefix="INFRAHUB_LOGGING_REMOTE_")
|
|
569
580
|
enable: bool = False
|
|
570
|
-
frontend_dsn:
|
|
571
|
-
api_server_dsn:
|
|
572
|
-
git_agent_dsn:
|
|
581
|
+
frontend_dsn: str | None = None
|
|
582
|
+
api_server_dsn: str | None = None
|
|
583
|
+
git_agent_dsn: str | None = None
|
|
573
584
|
|
|
574
585
|
|
|
575
586
|
class LoggingSettings(BaseSettings):
|
|
@@ -579,8 +590,8 @@ class LoggingSettings(BaseSettings):
|
|
|
579
590
|
class AnalyticsSettings(BaseSettings):
|
|
580
591
|
model_config = SettingsConfigDict(env_prefix="INFRAHUB_ANALYTICS_")
|
|
581
592
|
enable: bool = True
|
|
582
|
-
address:
|
|
583
|
-
api_key:
|
|
593
|
+
address: str | None = None
|
|
594
|
+
api_key: str | None = None
|
|
584
595
|
|
|
585
596
|
|
|
586
597
|
class ExperimentalFeaturesSettings(BaseSettings):
|
|
@@ -707,19 +718,19 @@ class TraceSettings(BaseSettings):
|
|
|
707
718
|
exporter_protocol: TraceTransportProtocol = Field(
|
|
708
719
|
default=TraceTransportProtocol.GRPC, description="Protocol to be used for exporting traces"
|
|
709
720
|
)
|
|
710
|
-
exporter_endpoint:
|
|
721
|
+
exporter_endpoint: str | None = Field(default=None, description="OTLP endpoint for exporting traces")
|
|
711
722
|
|
|
712
723
|
|
|
713
724
|
@dataclass
|
|
714
725
|
class Override:
|
|
715
|
-
message_bus:
|
|
716
|
-
cache:
|
|
717
|
-
workflow:
|
|
726
|
+
message_bus: InfrahubMessageBus | None = None
|
|
727
|
+
cache: InfrahubCache | None = None
|
|
728
|
+
workflow: InfrahubWorkflow | None = None
|
|
718
729
|
|
|
719
730
|
|
|
720
731
|
@dataclass
|
|
721
732
|
class ConfiguredSettings:
|
|
722
|
-
settings:
|
|
733
|
+
settings: Settings | None = None
|
|
723
734
|
|
|
724
735
|
def initialize(self, config_file: Path | str | None = None) -> None:
|
|
725
736
|
"""Initialize the settings if they have not been initialized."""
|
|
@@ -840,7 +851,7 @@ class Settings(BaseSettings):
|
|
|
840
851
|
experimental_features: ExperimentalFeaturesSettings = ExperimentalFeaturesSettings()
|
|
841
852
|
|
|
842
853
|
|
|
843
|
-
def load(config_file_name: Path | str = "infrahub.toml", config_data:
|
|
854
|
+
def load(config_file_name: Path | str = "infrahub.toml", config_data: dict[str, Any] | None = None) -> Settings:
|
|
844
855
|
"""Load configuration.
|
|
845
856
|
|
|
846
857
|
Configuration is loaded from a config file in toml format that contains the settings,
|
|
@@ -860,7 +871,7 @@ def load(config_file_name: Path | str = "infrahub.toml", config_data: Optional[d
|
|
|
860
871
|
return Settings()
|
|
861
872
|
|
|
862
873
|
|
|
863
|
-
def load_and_exit(config_file_name: Path | str = "infrahub.toml", config_data:
|
|
874
|
+
def load_and_exit(config_file_name: Path | str = "infrahub.toml", config_data: dict[str, Any] | None = None) -> None:
|
|
864
875
|
"""Calls load, but wraps it in a try except block.
|
|
865
876
|
|
|
866
877
|
This is done to handle a ValidationError which is raised when settings are specified but invalid.
|
infrahub/context.py
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from infrahub_sdk.context import ContextAccount, RequestContext
|
|
1
4
|
from pydantic import BaseModel, Field
|
|
2
5
|
from typing_extensions import Self
|
|
3
6
|
|
|
4
7
|
from infrahub.auth import AccountSession
|
|
5
8
|
from infrahub.core.branch import Branch
|
|
9
|
+
from infrahub.core.constants import GLOBAL_BRANCH_NAME
|
|
6
10
|
|
|
7
11
|
|
|
8
12
|
class ParentEvent(BaseModel):
|
|
@@ -21,6 +25,10 @@ class BranchContext(BaseModel):
|
|
|
21
25
|
name: str
|
|
22
26
|
id: str | None = None
|
|
23
27
|
|
|
28
|
+
@property
|
|
29
|
+
def is_global(self) -> bool:
|
|
30
|
+
return self.name == GLOBAL_BRANCH_NAME
|
|
31
|
+
|
|
24
32
|
|
|
25
33
|
class InfrahubContext(BaseModel):
|
|
26
34
|
branch: BranchContext
|
|
@@ -37,3 +45,9 @@ class InfrahubContext(BaseModel):
|
|
|
37
45
|
self.event.id = id
|
|
38
46
|
else:
|
|
39
47
|
self.event = EventContext(name=name, id=id)
|
|
48
|
+
|
|
49
|
+
def to_event(self) -> dict[str, Any]:
|
|
50
|
+
return self.model_dump(mode="json")
|
|
51
|
+
|
|
52
|
+
def to_request_context(self) -> RequestContext:
|
|
53
|
+
return RequestContext(account=ContextAccount(id=self.account.account_id))
|
infrahub/core/account.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import TYPE_CHECKING, Any
|
|
4
|
+
from typing import TYPE_CHECKING, Any
|
|
5
5
|
|
|
6
6
|
from typing_extensions import Self
|
|
7
7
|
|
|
@@ -570,14 +570,14 @@ class AccountTokenValidateQuery(Query):
|
|
|
570
570
|
|
|
571
571
|
self.return_labels = ["at", "av", "acc"]
|
|
572
572
|
|
|
573
|
-
def get_account_name(self) ->
|
|
573
|
+
def get_account_name(self) -> str | None:
|
|
574
574
|
"""Return the account name that matched the query or None."""
|
|
575
575
|
if result := self.get_result():
|
|
576
576
|
return result.get("av").get("value")
|
|
577
577
|
|
|
578
578
|
return None
|
|
579
579
|
|
|
580
|
-
def get_account_id(self) ->
|
|
580
|
+
def get_account_id(self) -> str | None:
|
|
581
581
|
"""Return the account id that matched the query or a None."""
|
|
582
582
|
if result := self.get_result():
|
|
583
583
|
return result.get("acc").get("uuid")
|
|
@@ -585,7 +585,7 @@ class AccountTokenValidateQuery(Query):
|
|
|
585
585
|
return None
|
|
586
586
|
|
|
587
587
|
|
|
588
|
-
async def validate_token(token: str, db: InfrahubDatabase, branch:
|
|
588
|
+
async def validate_token(token: str, db: InfrahubDatabase, branch: Branch | str | None = None) -> str | None:
|
|
589
589
|
branch = await registry.get_branch(db=db, branch=branch)
|
|
590
590
|
query = await AccountTokenValidateQuery.init(db=db, branch=branch, token=token)
|
|
591
591
|
await query.execute(db=db)
|