octopize.deploy_tool 3.2.0__tar.gz → 3.3.0__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.
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/PKG-INFO +108 -27
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/README.md +106 -25
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/pyproject.toml +1 -1
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/__init__.py +1 -1
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/apply_command.py +25 -10
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/checks.py +69 -0
- octopize_deploy_tool-3.3.0/src/octopize_avatar_deploy/application/client_compatibility_report.py +157 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/commands/install_command.py +11 -1
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/commands/migrate_command.py +89 -51
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/commands/subcommand_ports.py +32 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/commands/tasks/authentik_migrate.py +73 -30
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/commands/tasks/create_self_signed_cert_task.py +2 -2
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/commands/tasks/create_users.py +2 -9
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/commands/tasks/provision_admin.py +21 -15
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/commands/tasks/reconcile_blueprint.py +2 -9
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/commands/update_command.py +86 -5
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/diff_command.py +123 -7
- octopize_deploy_tool-3.3.0/src/octopize_avatar_deploy/application/legacy_layout.py +128 -0
- octopize_deploy_tool-3.3.0/src/octopize_avatar_deploy/application/operator_owned_files.py +99 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/ports.py +8 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/start_command.py +32 -1
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli/__init__.py +14 -6
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli/_shared.py +2 -19
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli/handlers/configure.py +2 -2
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli/handlers/diff.py +2 -2
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli/handlers/install.py +14 -2
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli/handlers/migrate.py +13 -2
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli/handlers/start.py +2 -2
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli/handlers/stop.py +4 -17
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli/handlers/tasks.py +2 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli/handlers/uninstall.py +4 -17
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli/handlers/update.py +10 -2
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli/handlers/verify.py +6 -13
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli_dependencies.py +35 -10
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli_test_harness.py +10 -1
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/defaults.yaml +3 -3
- octopize_deploy_tool-3.3.0/src/octopize_avatar_deploy/domain/client_compatibility.py +109 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/domain/deployment_item.py +6 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/domain/deployment_item_registry.py +2 -0
- octopize_deploy_tool-3.3.0/src/octopize_avatar_deploy/domain/service_versions.py +96 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/filesystem_legacy_source.py +8 -4
- octopize_deploy_tool-3.3.0/src/octopize_avatar_deploy/infra/offline_http_client.py +73 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/preset_loader.py +44 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/printer.py +25 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/steps/service_urls.py +0 -9
- octopize_deploy_tool-3.3.0/src/octopize_avatar_deploy/templates/.template-version +1 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/_env_fragment_web.template +0 -1
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/docker-compose.yml.template +1 -2
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/url_contract.py +0 -6
- octopize_deploy_tool-3.3.0/src/octopize_avatar_deploy/verbosity.py +37 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/TESTING.md +2 -1
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/e2e/test_migrate_start_provision_verify.py +6 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/apply_help/output.txt +1 -3
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/configure_happy_path/expected/.deployment_states/v1/deployment_state.yaml +0 -3
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/configure_help/output.txt +1 -2
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/diff_help/output.txt +1 -2
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/help/output.txt +4 -3
- {octopize_deploy_tool-3.2.0/tests/fixtures/update_interactive_diff/expected_apply_output → octopize_deploy_tool-3.3.0/tests/fixtures/install_apply_output}/docker-compose.yml +1 -2
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_help/output.txt +2 -3
- {octopize_deploy_tool-3.2.0/tests/fixtures/update_interactive_diff/expected_render_output → octopize_deploy_tool-3.3.0/tests/fixtures/install_render_output}/docker-compose.yml +1 -2
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/migrate_help/output.txt +8 -9
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/render_help/output.txt +2 -4
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/start_help/output.txt +1 -2
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/stop_help/output.txt +1 -2
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/tasks_authentik_migrate_help/output.txt +3 -3
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/tasks_create_self_signed_cert_help/output.txt +2 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/tasks_create_users_help/output.txt +3 -3
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/tasks_provision_admin_help/output.txt +3 -3
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/tasks_reconcile_blueprint_help/output.txt +2 -3
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/uninstall_help/output.txt +0 -2
- octopize_deploy_tool-3.3.0/tests/fixtures/update_help/output.txt +23 -0
- {octopize_deploy_tool-3.2.0/tests/fixtures/install_render_output → octopize_deploy_tool-3.3.0/tests/fixtures/update_interactive_diff/expected_apply_output}/docker-compose.yml +1 -2
- {octopize_deploy_tool-3.2.0/tests/fixtures/install_apply_output → octopize_deploy_tool-3.3.0/tests/fixtures/update_interactive_diff/expected_render_output}/docker-compose.yml +1 -2
- octopize_deploy_tool-3.3.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/docker-compose.yml +579 -0
- octopize_deploy_tool-3.3.0/tests/fixtures/update_noninteractive_clean/expected_render_output/docker-compose.yml +579 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/helpers/fakes.py +65 -9
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/helpers/printers.py +37 -1
- octopize_deploy_tool-3.3.0/tests/integration/test_authentik_migrate_task.py +70 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/integration/test_cli_integration.py +55 -0
- octopize_deploy_tool-3.3.0/tests/integration/test_client_compatibility_output.py +133 -0
- octopize_deploy_tool-3.3.0/tests/integration/test_legacy_app_root.py +138 -0
- octopize_deploy_tool-3.3.0/tests/integration/test_migrate_first_run.py +133 -0
- octopize_deploy_tool-3.3.0/tests/integration/test_migrate_relative_tls_paths.py +168 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/integration/test_update_command.py +70 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/infra/test_preset_loader.py +77 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/steps/test_service_urls.py +0 -3
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_apply_command.py +121 -4
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_authentik_migrate_command.py +35 -5
- octopize_deploy_tool-3.3.0/tests/unit/test_client_compatibility.py +309 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_diff_command.py +263 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_install_command.py +41 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_migrate_command.py +151 -27
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_preflight_checks.py +84 -1
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_provision_admin.py +15 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_render_command.py +3 -0
- octopize_deploy_tool-3.3.0/tests/unit/test_service_versions.py +84 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_start_command.py +80 -3
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_update_command.py +125 -0
- octopize_deploy_tool-3.2.0/src/octopize_avatar_deploy/templates/.template-version +0 -1
- octopize_deploy_tool-3.2.0/src/octopize_avatar_deploy/verbosity.py +0 -47
- octopize_deploy_tool-3.2.0/tests/fixtures/update_help/output.txt +0 -21
- octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/docker-compose.yml +0 -580
- octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_render_output/docker-compose.yml +0 -580
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/.gitignore +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/infra/deployment/deployment-tool/src/octopize_avatar_deploy/steps/user.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/infra/deployment/deployment-tool/tests/fixtures/generate_env_output_dir_error/output.txt +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/infra/deployment/deployment-tool/tests/fixtures/help/output.txt +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/infra/deployment/deployment-tool/tests/fixtures/missing_subcommand/output.txt +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/__init__.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/_guards.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/authentik_env.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/authentik_login.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/authentik_readiness.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/commands/tasks/__init__.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/commands/tasks/create_self_signed_cert_command.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/commands/tasks/registry.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/commands/verify_command.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/configure_command.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/configure_resume_policy.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/deployment_markers.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/deployment_paths.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/polling.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/render_command.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/secret_files.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/stop_command.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/uninstall_command.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/application/user_config.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/authentik_migration.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cert_generator.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/certificate_verifier.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli/handlers/__init__.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli/handlers/apply.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/cli/handlers/render.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/config_resolver.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/control_flags.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/deployment_mode.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/domain/__init__.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/domain/configure_preset.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/domain/deployment_state.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/domain/generation.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/domain/placement.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/domain/validation.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/domain/version_id.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/download_templates.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/environment.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/exceptions.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/__init__.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/cert_infra.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/current_version_resolver.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/docker_client.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/document_step_runner.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/env_file_reader.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/filesystem.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/filesystem_user_config_scaffolder.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/httpx2_http_client.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/in_memory_state_repository.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/noop_docker_client.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/package_defaults_source.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/package_template_provider.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/package_version_provider.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/system_clock.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/yaml_config_source.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/infra/yaml_state_repository.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/input_gatherer.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/normalizers.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/output_spec.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/public_url.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/renderer.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/resources/__init__.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/resources/config.example.yaml +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/secret_factory.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/self_signed_ssl.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/steps/__init__.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/steps/authentik.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/steps/authentik_blueprint.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/steps/base.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/steps/database.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/steps/email.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/steps/logging.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/steps/nginx.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/steps/required.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/steps/storage.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/steps/telemetry.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/steps/user.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/template_provisioning.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/.env.template +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/_env_fragment_api.template +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/_env_fragment_infra.template +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/api.env.template +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/authentik/branding/favicon.ico +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/authentik/branding/logo.png +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/authentik/custom-templates/email_account_confirmation.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/authentik/custom-templates/email_account_exists.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/authentik/custom-templates/email_account_invitation.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/authentik/custom-templates/email_forgotten_password.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/authentik/custom-templates/email_password_changed.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/authentik/custom-templates/email_password_reset.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/authentik/octopize-avatar-blueprint.yaml +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/authentik/translations.json +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/compose.override.yaml.template +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/nginx.conf.template +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/python_client.env.template +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/templates/web.env.template +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/tls_types.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/topology_urls.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/src/octopize_avatar_deploy/version_compat.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/__init__.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/conftest.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/e2e/__init__.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/e2e/conftest.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/e2e/test_lifecycle.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/e2e/test_update_reapplies_blueprint.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/e2e/user_disable_revokes_api_key.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/__init__.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/authentik_migration/licenses.csv +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/authentik_migration/organizations.csv +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/authentik_migration/users.csv +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/configure_happy_path/input.yaml +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/configure_happy_path/output.txt +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/diff_integration/from/.env +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/diff_integration/from/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/diff_integration/output.txt +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/diff_integration/to/.env +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/diff_integration/to/docker-compose.yml +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/diff_integration/to/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/e2e/legacy_deployment/.env +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/e2e/legacy_deployment/.secrets/admin_emails +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/e2e/legacy_deployment/.secrets/authjwt_secret_key +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/e2e/legacy_deployment/.secrets/clevercloud_sso_salt +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/e2e/legacy_deployment/.secrets/db_admin_password +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/e2e/legacy_deployment/.secrets/db_admin_user +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/e2e/legacy_deployment/.secrets/db_name +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/e2e/legacy_deployment/.secrets/db_password +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/e2e/legacy_deployment/.secrets/db_user +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/e2e/legacy_deployment/.secrets/file_jwt_secret_key +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/e2e/legacy_deployment/.secrets/organization_name +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/e2e/legacy_deployment/.secrets/pepper +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/e2e/legacy_deployment/.secrets/smtp_password +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/e2e/legacy_deployment/.secrets/storage_admin_access_key_id +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/e2e/legacy_deployment/.secrets/storage_admin_secret_access_key +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_apply_output/.env +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_apply_output/.permissions.json +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_apply_output/authentik/branding/favicon.ico +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_apply_output/authentik/branding/logo.png +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_apply_output/authentik/custom-templates/email_account_confirmation.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_apply_output/authentik/custom-templates/email_account_exists.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_apply_output/authentik/custom-templates/email_account_invitation.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_apply_output/authentik/custom-templates/email_forgotten_password.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_apply_output/authentik/custom-templates/email_password_changed.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_apply_output/authentik/custom-templates/email_password_reset.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_apply_output/authentik/octopize-avatar-blueprint.yaml +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_apply_output/authentik/translations.json +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_apply_output/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_render_output/.env +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_render_output/.permissions.json +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_render_output/authentik/branding/favicon.ico +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_render_output/authentik/branding/logo.png +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_render_output/authentik/custom-templates/email_account_confirmation.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_render_output/authentik/custom-templates/email_account_exists.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_render_output/authentik/custom-templates/email_account_invitation.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_render_output/authentik/custom-templates/email_forgotten_password.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_render_output/authentik/custom-templates/email_password_changed.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_render_output/authentik/custom-templates/email_password_reset.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_render_output/authentik/octopize-avatar-blueprint.yaml +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_render_output/authentik/translations.json +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/install_render_output/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/missing_subcommand/output.txt +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/non_interactive_complete/config.yaml +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/non_interactive_no_telemetry/config.yaml +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/tasks_help/output.txt +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/base_v1/generated_files/.env +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_apply_output/.env +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_apply_output/.needs_blueprint_reconcile +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_apply_output/.permissions.json +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/branding/favicon.ico +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/branding/logo.png +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/custom-templates/email_account_confirmation.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/custom-templates/email_account_exists.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/custom-templates/email_account_invitation.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/custom-templates/email_forgotten_password.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/custom-templates/email_password_changed.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/custom-templates/email_password_reset.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/octopize-avatar-blueprint.yaml +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/translations.json +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_apply_output/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_render_output/.env +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_render_output/.permissions.json +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/branding/favicon.ico +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/branding/logo.png +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/custom-templates/email_account_confirmation.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/custom-templates/email_account_exists.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/custom-templates/email_account_invitation.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/custom-templates/email_forgotten_password.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/custom-templates/email_password_changed.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/custom-templates/email_password_reset.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/octopize-avatar-blueprint.yaml +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/translations.json +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_interactive_diff/expected_render_output/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/base_v1/generated_files/.env +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/.env +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/.needs_blueprint_reconcile +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/.permissions.json +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/branding/favicon.ico +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/branding/logo.png +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/custom-templates/email_account_confirmation.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/custom-templates/email_account_exists.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/custom-templates/email_account_invitation.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/custom-templates/email_forgotten_password.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/custom-templates/email_password_changed.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/custom-templates/email_password_reset.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/octopize-avatar-blueprint.yaml +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/translations.json +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/.env +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/.permissions.json +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/branding/favicon.ico +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/branding/logo.png +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/custom-templates/email_account_confirmation.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/custom-templates/email_account_exists.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/custom-templates/email_account_invitation.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/custom-templates/email_forgotten_password.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/custom-templates/email_password_changed.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/custom-templates/email_password_reset.html +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/octopize-avatar-blueprint.yaml +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/translations.json +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/fixtures/verify_help/output.txt +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/helpers/__init__.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/helpers/fixture_dir_comparison.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/helpers/normalization.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/helpers/steps.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/helpers/tls_fixtures.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/integration/__init__.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/integration/test_configure_command.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/integration/test_create_self_signed_cert_task.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/integration/test_diff_command.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/integration/test_install_command.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/integration/test_migrate_without_tls_keys.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/test_cli_harness.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/infra/__init__.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/infra/conftest.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/infra/test_docker_client.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/infra/test_document_step_runner.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/infra/test_filesystem.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/infra/test_filesystem_legacy_source.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/infra/test_httpx2_http_client.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/infra/test_yaml_config_source.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/infra/test_yaml_deployment_state_repository.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/steps/test_authentik.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/steps/test_authentik_blueprint.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/steps/test_database.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/steps/test_email.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/steps/test_logging.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/steps/test_nginx.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/steps/test_required.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/steps/test_storage.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/steps/test_telemetry.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/steps/test_user.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_authentik_client.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_authentik_env.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_authentik_login.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_authentik_migrate_for_docker.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_authentik_migrate_parsers.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_authentik_migration.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_authentik_readiness.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_cert_generator.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_certificate_verifier.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_cli_verify_ssl.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_compare_helpers.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_config_resolver.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_config_resolver_consistency.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_configure_command.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_create_self_signed_cert_task.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_create_users.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_deployment_item.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_docs_command_references.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_environment.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_generation.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_generic_prompt.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_input_gatherer.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_normalizers.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_output_spec.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_placement.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_polling.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_printer.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_public_url.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_reconcile_blueprint.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_renderer.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_rich_implementations.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_secret_factory.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_secret_files.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_select_authentik_migrate_parser.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_stop_command.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_task_registry.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_uninstall_command.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_user_config.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_validation.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_verify_command.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_version_id.py +0 -0
- {octopize_deploy_tool-3.2.0 → octopize_deploy_tool-3.3.0}/tests/unit/test_version_validation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: octopize.deploy_tool
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.3.0
|
|
4
4
|
Summary: Deployment configuration tool for Octopize Avatar platform
|
|
5
5
|
Project-URL: Homepage, https://octopize.io
|
|
6
6
|
Project-URL: Documentation, https://docs.octopize.io/docs/deploying/self-hosted/self_installation
|
|
@@ -96,21 +96,27 @@ to be up, and `provision-admin` must run before `verify`. Both hold once `start`
|
|
|
96
96
|
|
|
97
97
|
## Command reference
|
|
98
98
|
|
|
99
|
-
`--app-root` defaults to the current directory everywhere it is accepted. Every command
|
|
100
|
-
`--verbosity {1,2}
|
|
101
|
-
|
|
102
|
-
all `tasks` sub-commands. Every command's `--help` lists its full option set.
|
|
99
|
+
`--app-root` defaults to the current directory everywhere it is accepted. Every command and
|
|
100
|
+
`tasks` sub-command takes `--verbosity {1,2}`, where `1` is essential (the default) and `2` is
|
|
101
|
+
verbose. Every command's `--help` lists its full option set.
|
|
103
102
|
|
|
104
103
|
### Everyday commands
|
|
105
104
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
|
110
|
-
|
|
|
111
|
-
| `
|
|
112
|
-
| `
|
|
113
|
-
| `migrate` |
|
|
105
|
+
Which of `install`, `update` and `migrate` you need is decided by what your deployment
|
|
106
|
+
directory already contains, so the table names that rather than a term only this tool uses:
|
|
107
|
+
|
|
108
|
+
| Command | Use when |
|
|
109
|
+
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
110
|
+
| `install` | Setting up a new Avatar deployment for the first time, in an empty directory |
|
|
111
|
+
| `update` | Upgrading to a newer Avatar release, or changing a configuration value, on a deployment that already has a `.deployment_states/` directory |
|
|
112
|
+
| `migrate` | Adopting a deployment that has `.env` and `.secrets/` at its top level and no `.deployment_states/` — anything set up by hand, or by the `deploy` command of a tool older than 2.7.0 |
|
|
113
|
+
| `start` | Bringing a configured deployment live, or restarting it after a host reboot |
|
|
114
|
+
| `stop` | Suspending the stack temporarily — containers and volumes are preserved |
|
|
115
|
+
| `uninstall` | Permanently destroying the deployment and all of its data |
|
|
116
|
+
|
|
117
|
+
If you point `update` or `install` at a directory of the second shape they stop and tell you to
|
|
118
|
+
run `migrate` — running `install` there would generate a fresh configuration instead of adopting
|
|
119
|
+
the one you already have.
|
|
114
120
|
|
|
115
121
|
#### `install`
|
|
116
122
|
|
|
@@ -124,7 +130,22 @@ start. It starts nothing — run `start` afterwards.
|
|
|
124
130
|
--verbosity {1,2} 1 = essential (default), 2 = verbose
|
|
125
131
|
```
|
|
126
132
|
|
|
127
|
-
Before doing anything, `install`
|
|
133
|
+
Before doing anything, `install` checks the app root itself. If it holds `.env` and `.secrets/`
|
|
134
|
+
at the top level and no `.deployment_states/`, that is a deployment predating the versioned
|
|
135
|
+
layout, and installing over it would generate a fresh configuration rather than adopt it, so the
|
|
136
|
+
run stops:
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
✗ /app/avatar looks like a pre-versioned deployment (.env and .secrets/ at the top level, no
|
|
140
|
+
.deployment_states/). Import it once with:
|
|
141
|
+
|
|
142
|
+
octopize-deploy-tool migrate --app-root <new-app-root> --from-legacy /app/avatar
|
|
143
|
+
|
|
144
|
+
then use 'update' for subsequent releases.
|
|
145
|
+
⚠ Install aborted during pre-flight checks.
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Next, `install` looks for Avatar Docker volumes left over from an earlier
|
|
128
149
|
deployment. If it finds any it refuses to run, in both interactive and non-interactive mode:
|
|
129
150
|
|
|
130
151
|
```text
|
|
@@ -152,7 +173,9 @@ Re-runs the configuration from your current state, re-renders every file with th
|
|
|
152
173
|
bundled in the installed version of this tool, shows a diff, and applies it. Values you already
|
|
153
174
|
answered are carried forward, so you are not asked again. `--from-config PATH` layers a YAML file
|
|
154
175
|
over the current state (see [Changing a configuration
|
|
155
|
-
value](#changing-a-configuration-value)).
|
|
176
|
+
value](#changing-a-configuration-value)). It needs a `.deployment_states/` directory to read that
|
|
177
|
+
state from; against a directory that has `.env` and `.secrets/` at the top level instead, it stops
|
|
178
|
+
and points you at `migrate`.
|
|
156
179
|
|
|
157
180
|
```bash
|
|
158
181
|
octopize-deploy-tool update --app-root ./app/avatar
|
|
@@ -177,6 +200,34 @@ Merge your edits into the rendered copy in `.deployment_states/<vX>/generated/`,
|
|
|
177
200
|
`apply --version <vX>`. Anything that should survive future updates belongs in a config file, not
|
|
178
201
|
in `generated_files/`.
|
|
179
202
|
|
|
203
|
+
Two files never come from a render, so `apply` carries them across untouched rather than
|
|
204
|
+
replacing them with the copy: the API key and the two JWTs that `tasks provision-admin` writes to
|
|
205
|
+
`generated_files/.secrets/avatar_api_key`, `avatar_access_token` and `avatar_refresh_token`.
|
|
206
|
+
Anything else you leave in `generated_files/` is replaced.
|
|
207
|
+
|
|
208
|
+
#### Python client compatibility
|
|
209
|
+
|
|
210
|
+
`install`, `update` and `migrate` each deploy a specific Avatar API version, and no single python
|
|
211
|
+
client works with every one of them — so an update can break the notebooks and scripts your users
|
|
212
|
+
already have. Each of those commands ends by naming the clients that work with the version it just
|
|
213
|
+
deployed:
|
|
214
|
+
|
|
215
|
+
```text
|
|
216
|
+
Python client compatibility
|
|
217
|
+
This deployment now runs Avatar API 3.2.3.
|
|
218
|
+
Latest compatible python client: 1.28.0 (pip install 'octopize.avatar==1.28.0')
|
|
219
|
+
Clients older than 1.26.0 will stop working — tell your users before they next run a job.
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
When an `update` does not move the API version at all — a tool-only bump — this collapses to a
|
|
223
|
+
single reassuring line instead.
|
|
224
|
+
|
|
225
|
+
The table is fetched from `COMPATIBILITY_MAPPING_URL` (see
|
|
226
|
+
[`config.example.yaml`](#changing-a-configuration-value); point it at your own mirror if you are
|
|
227
|
+
air-gapped). This is advisory output: if the URL cannot be reached the command warns once and
|
|
228
|
+
carries on — a deployment never fails because a version table was unavailable. To check
|
|
229
|
+
compatibility as a hard gate, use `verify`.
|
|
230
|
+
|
|
180
231
|
#### `start` and `stop`
|
|
181
232
|
|
|
182
233
|
`start` creates any missing Docker volumes and brings all services up. It is idempotent, so it is
|
|
@@ -200,21 +251,46 @@ octopize-deploy-tool uninstall --app-root ./app/avatar
|
|
|
200
251
|
|
|
201
252
|
#### `migrate`
|
|
202
253
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
tool asks for it interactively.
|
|
254
|
+
Adopts a deployment whose directory holds `.env` and `.secrets/` at the top level and has no
|
|
255
|
+
`.deployment_states/` — anything set up by hand, or by the `deploy` command of a tool older than
|
|
256
|
+
2.7.0. Point `--from-legacy` at that directory; values readable from there are carried over and
|
|
257
|
+
you are prompted for the rest. If `--from-legacy` is omitted the tool asks for it interactively.
|
|
207
258
|
|
|
208
259
|
```bash
|
|
209
260
|
octopize-deploy-tool migrate --app-root ./app/avatar-new --from-legacy ./app/avatar-old
|
|
210
261
|
octopize-deploy-tool start --app-root ./app/avatar-new
|
|
211
262
|
```
|
|
212
263
|
|
|
264
|
+
Before applying anything, `migrate` shows you the diff between your existing directory and the new
|
|
265
|
+
render, led by the service versions that change:
|
|
266
|
+
|
|
267
|
+
```text
|
|
268
|
+
Service versions (5 changing):
|
|
269
|
+
AVATAR_API_VERSION 2.55.0 → 3.2.3
|
|
270
|
+
AVATAR_PDFGENERATOR_VERSION 0.2.0 → (removed)
|
|
271
|
+
AVATAR_WEB_VERSION 0.38.0 → 0.65.1
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Expect a large first diff — the layout itself changes, `pdfgenerator` goes away (the report
|
|
275
|
+
generator is now embedded in the API), and the services jump every release at once. Conflicts
|
|
276
|
+
default to accepting the new render, since the legacy directory is what `migrate` replaces;
|
|
277
|
+
answering "keep" for a file is still honoured and still blocks the apply.
|
|
278
|
+
|
|
279
|
+
`migrate` also creates `user_config/` under the new app root, so a migrated deployment is shaped
|
|
280
|
+
exactly like an installed one and `update --from-config` works the same way on both.
|
|
281
|
+
|
|
213
282
|
> **Before migrating non-interactively**, make sure the legacy `.env` sets
|
|
214
283
|
> `NGINX_SSL_CERTIFICATE_PATH` and `NGINX_SSL_CERTIFICATE_KEY_PATH` to paths that exist.
|
|
215
|
-
> Otherwise the run falls back to a relative built-in default and
|
|
216
|
-
>
|
|
217
|
-
> to supply one.
|
|
284
|
+
> Otherwise the run falls back to a relative built-in default and keeps it with a warning that
|
|
285
|
+
> the path is "not usable yet" — the migration completes, but nginx will not start until a
|
|
286
|
+
> certificate and key exist at those paths, and `--non-interactive` offers no way to supply one.
|
|
287
|
+
> A path _you_ set that does not exist is a hard error instead.
|
|
288
|
+
>
|
|
289
|
+
> A relative path in that `.env` — `./tls/server.fullchain.crt` — is read relative to the
|
|
290
|
+
> `--from-legacy` directory it was written for, whichever directory you run `migrate` from, and is
|
|
291
|
+
> recorded as an absolute path in the new deployment. The exception is running the tool from the
|
|
292
|
+
> Docker image, where those paths belong to the host and are recorded exactly as written; see
|
|
293
|
+
> [Running via Docker](#running-via-docker).
|
|
218
294
|
|
|
219
295
|
See [Upgrading from a pre-SSO deployment](#upgrading-from-a-pre-sso-deployment) for what happens
|
|
220
296
|
to existing user accounts.
|
|
@@ -515,8 +591,11 @@ Notes:
|
|
|
515
591
|
|
|
516
592
|
Older Avatar deployments kept users in the Avatar API database. `migrate` records that they still
|
|
517
593
|
need importing into Authentik, and **the first `start` after a `migrate` offers to do it for
|
|
518
|
-
you**: it
|
|
519
|
-
|
|
594
|
+
you**: it asks `Run it now?` and runs the import. Nothing has to be run by hand.
|
|
595
|
+
|
|
596
|
+
Add `--verbosity 2` to review before committing: the plan — every group and every user the import
|
|
597
|
+
would create — is printed, and a second prompt asks whether to go ahead with it. At the default
|
|
598
|
+
`--verbosity 1` nothing is printed beforehand, so `Run it now?` is the only question asked.
|
|
520
599
|
|
|
521
600
|
If you decline, the same import is available later:
|
|
522
601
|
|
|
@@ -527,8 +606,10 @@ octopize-deploy-tool tasks authentik-migrate --from-docker --app-root ./app/avat
|
|
|
527
606
|
`--from-docker` reads users, organizations and licenses straight from the running api container's
|
|
528
607
|
database, so there is no CSV export to produce; **the extracted data is held in memory and never
|
|
529
608
|
written to disk**. The Authentik URL and token come from `generated_files/.env`. `--dry-run`
|
|
530
|
-
|
|
531
|
-
|
|
609
|
+
prints the plan — every group and every user that would be created — and writes nothing to
|
|
610
|
+
Authentik (with `--from-docker` it still brings the stack up to read the database); a real run
|
|
611
|
+
prints that plan only under `--verbosity 2`. Users that already carry an `authentik_id` are
|
|
612
|
+
skipped, so the import is safe to re-run.
|
|
532
613
|
|
|
533
614
|
Every run that is not a `--dry-run` does write an operation log — `migration_log.jsonl` unless
|
|
534
615
|
`--log PATH` says otherwise — recording what was attempted and how it ended.
|
|
@@ -63,21 +63,27 @@ to be up, and `provision-admin` must run before `verify`. Both hold once `start`
|
|
|
63
63
|
|
|
64
64
|
## Command reference
|
|
65
65
|
|
|
66
|
-
`--app-root` defaults to the current directory everywhere it is accepted. Every command
|
|
67
|
-
`--verbosity {1,2}
|
|
68
|
-
|
|
69
|
-
all `tasks` sub-commands. Every command's `--help` lists its full option set.
|
|
66
|
+
`--app-root` defaults to the current directory everywhere it is accepted. Every command and
|
|
67
|
+
`tasks` sub-command takes `--verbosity {1,2}`, where `1` is essential (the default) and `2` is
|
|
68
|
+
verbose. Every command's `--help` lists its full option set.
|
|
70
69
|
|
|
71
70
|
### Everyday commands
|
|
72
71
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
|
77
|
-
|
|
|
78
|
-
| `
|
|
79
|
-
| `
|
|
80
|
-
| `migrate` |
|
|
72
|
+
Which of `install`, `update` and `migrate` you need is decided by what your deployment
|
|
73
|
+
directory already contains, so the table names that rather than a term only this tool uses:
|
|
74
|
+
|
|
75
|
+
| Command | Use when |
|
|
76
|
+
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
77
|
+
| `install` | Setting up a new Avatar deployment for the first time, in an empty directory |
|
|
78
|
+
| `update` | Upgrading to a newer Avatar release, or changing a configuration value, on a deployment that already has a `.deployment_states/` directory |
|
|
79
|
+
| `migrate` | Adopting a deployment that has `.env` and `.secrets/` at its top level and no `.deployment_states/` — anything set up by hand, or by the `deploy` command of a tool older than 2.7.0 |
|
|
80
|
+
| `start` | Bringing a configured deployment live, or restarting it after a host reboot |
|
|
81
|
+
| `stop` | Suspending the stack temporarily — containers and volumes are preserved |
|
|
82
|
+
| `uninstall` | Permanently destroying the deployment and all of its data |
|
|
83
|
+
|
|
84
|
+
If you point `update` or `install` at a directory of the second shape they stop and tell you to
|
|
85
|
+
run `migrate` — running `install` there would generate a fresh configuration instead of adopting
|
|
86
|
+
the one you already have.
|
|
81
87
|
|
|
82
88
|
#### `install`
|
|
83
89
|
|
|
@@ -91,7 +97,22 @@ start. It starts nothing — run `start` afterwards.
|
|
|
91
97
|
--verbosity {1,2} 1 = essential (default), 2 = verbose
|
|
92
98
|
```
|
|
93
99
|
|
|
94
|
-
Before doing anything, `install`
|
|
100
|
+
Before doing anything, `install` checks the app root itself. If it holds `.env` and `.secrets/`
|
|
101
|
+
at the top level and no `.deployment_states/`, that is a deployment predating the versioned
|
|
102
|
+
layout, and installing over it would generate a fresh configuration rather than adopt it, so the
|
|
103
|
+
run stops:
|
|
104
|
+
|
|
105
|
+
```text
|
|
106
|
+
✗ /app/avatar looks like a pre-versioned deployment (.env and .secrets/ at the top level, no
|
|
107
|
+
.deployment_states/). Import it once with:
|
|
108
|
+
|
|
109
|
+
octopize-deploy-tool migrate --app-root <new-app-root> --from-legacy /app/avatar
|
|
110
|
+
|
|
111
|
+
then use 'update' for subsequent releases.
|
|
112
|
+
⚠ Install aborted during pre-flight checks.
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Next, `install` looks for Avatar Docker volumes left over from an earlier
|
|
95
116
|
deployment. If it finds any it refuses to run, in both interactive and non-interactive mode:
|
|
96
117
|
|
|
97
118
|
```text
|
|
@@ -119,7 +140,9 @@ Re-runs the configuration from your current state, re-renders every file with th
|
|
|
119
140
|
bundled in the installed version of this tool, shows a diff, and applies it. Values you already
|
|
120
141
|
answered are carried forward, so you are not asked again. `--from-config PATH` layers a YAML file
|
|
121
142
|
over the current state (see [Changing a configuration
|
|
122
|
-
value](#changing-a-configuration-value)).
|
|
143
|
+
value](#changing-a-configuration-value)). It needs a `.deployment_states/` directory to read that
|
|
144
|
+
state from; against a directory that has `.env` and `.secrets/` at the top level instead, it stops
|
|
145
|
+
and points you at `migrate`.
|
|
123
146
|
|
|
124
147
|
```bash
|
|
125
148
|
octopize-deploy-tool update --app-root ./app/avatar
|
|
@@ -144,6 +167,34 @@ Merge your edits into the rendered copy in `.deployment_states/<vX>/generated/`,
|
|
|
144
167
|
`apply --version <vX>`. Anything that should survive future updates belongs in a config file, not
|
|
145
168
|
in `generated_files/`.
|
|
146
169
|
|
|
170
|
+
Two files never come from a render, so `apply` carries them across untouched rather than
|
|
171
|
+
replacing them with the copy: the API key and the two JWTs that `tasks provision-admin` writes to
|
|
172
|
+
`generated_files/.secrets/avatar_api_key`, `avatar_access_token` and `avatar_refresh_token`.
|
|
173
|
+
Anything else you leave in `generated_files/` is replaced.
|
|
174
|
+
|
|
175
|
+
#### Python client compatibility
|
|
176
|
+
|
|
177
|
+
`install`, `update` and `migrate` each deploy a specific Avatar API version, and no single python
|
|
178
|
+
client works with every one of them — so an update can break the notebooks and scripts your users
|
|
179
|
+
already have. Each of those commands ends by naming the clients that work with the version it just
|
|
180
|
+
deployed:
|
|
181
|
+
|
|
182
|
+
```text
|
|
183
|
+
Python client compatibility
|
|
184
|
+
This deployment now runs Avatar API 3.2.3.
|
|
185
|
+
Latest compatible python client: 1.28.0 (pip install 'octopize.avatar==1.28.0')
|
|
186
|
+
Clients older than 1.26.0 will stop working — tell your users before they next run a job.
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
When an `update` does not move the API version at all — a tool-only bump — this collapses to a
|
|
190
|
+
single reassuring line instead.
|
|
191
|
+
|
|
192
|
+
The table is fetched from `COMPATIBILITY_MAPPING_URL` (see
|
|
193
|
+
[`config.example.yaml`](#changing-a-configuration-value); point it at your own mirror if you are
|
|
194
|
+
air-gapped). This is advisory output: if the URL cannot be reached the command warns once and
|
|
195
|
+
carries on — a deployment never fails because a version table was unavailable. To check
|
|
196
|
+
compatibility as a hard gate, use `verify`.
|
|
197
|
+
|
|
147
198
|
#### `start` and `stop`
|
|
148
199
|
|
|
149
200
|
`start` creates any missing Docker volumes and brings all services up. It is idempotent, so it is
|
|
@@ -167,21 +218,46 @@ octopize-deploy-tool uninstall --app-root ./app/avatar
|
|
|
167
218
|
|
|
168
219
|
#### `migrate`
|
|
169
220
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
tool asks for it interactively.
|
|
221
|
+
Adopts a deployment whose directory holds `.env` and `.secrets/` at the top level and has no
|
|
222
|
+
`.deployment_states/` — anything set up by hand, or by the `deploy` command of a tool older than
|
|
223
|
+
2.7.0. Point `--from-legacy` at that directory; values readable from there are carried over and
|
|
224
|
+
you are prompted for the rest. If `--from-legacy` is omitted the tool asks for it interactively.
|
|
174
225
|
|
|
175
226
|
```bash
|
|
176
227
|
octopize-deploy-tool migrate --app-root ./app/avatar-new --from-legacy ./app/avatar-old
|
|
177
228
|
octopize-deploy-tool start --app-root ./app/avatar-new
|
|
178
229
|
```
|
|
179
230
|
|
|
231
|
+
Before applying anything, `migrate` shows you the diff between your existing directory and the new
|
|
232
|
+
render, led by the service versions that change:
|
|
233
|
+
|
|
234
|
+
```text
|
|
235
|
+
Service versions (5 changing):
|
|
236
|
+
AVATAR_API_VERSION 2.55.0 → 3.2.3
|
|
237
|
+
AVATAR_PDFGENERATOR_VERSION 0.2.0 → (removed)
|
|
238
|
+
AVATAR_WEB_VERSION 0.38.0 → 0.65.1
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Expect a large first diff — the layout itself changes, `pdfgenerator` goes away (the report
|
|
242
|
+
generator is now embedded in the API), and the services jump every release at once. Conflicts
|
|
243
|
+
default to accepting the new render, since the legacy directory is what `migrate` replaces;
|
|
244
|
+
answering "keep" for a file is still honoured and still blocks the apply.
|
|
245
|
+
|
|
246
|
+
`migrate` also creates `user_config/` under the new app root, so a migrated deployment is shaped
|
|
247
|
+
exactly like an installed one and `update --from-config` works the same way on both.
|
|
248
|
+
|
|
180
249
|
> **Before migrating non-interactively**, make sure the legacy `.env` sets
|
|
181
250
|
> `NGINX_SSL_CERTIFICATE_PATH` and `NGINX_SSL_CERTIFICATE_KEY_PATH` to paths that exist.
|
|
182
|
-
> Otherwise the run falls back to a relative built-in default and
|
|
183
|
-
>
|
|
184
|
-
> to supply one.
|
|
251
|
+
> Otherwise the run falls back to a relative built-in default and keeps it with a warning that
|
|
252
|
+
> the path is "not usable yet" — the migration completes, but nginx will not start until a
|
|
253
|
+
> certificate and key exist at those paths, and `--non-interactive` offers no way to supply one.
|
|
254
|
+
> A path _you_ set that does not exist is a hard error instead.
|
|
255
|
+
>
|
|
256
|
+
> A relative path in that `.env` — `./tls/server.fullchain.crt` — is read relative to the
|
|
257
|
+
> `--from-legacy` directory it was written for, whichever directory you run `migrate` from, and is
|
|
258
|
+
> recorded as an absolute path in the new deployment. The exception is running the tool from the
|
|
259
|
+
> Docker image, where those paths belong to the host and are recorded exactly as written; see
|
|
260
|
+
> [Running via Docker](#running-via-docker).
|
|
185
261
|
|
|
186
262
|
See [Upgrading from a pre-SSO deployment](#upgrading-from-a-pre-sso-deployment) for what happens
|
|
187
263
|
to existing user accounts.
|
|
@@ -482,8 +558,11 @@ Notes:
|
|
|
482
558
|
|
|
483
559
|
Older Avatar deployments kept users in the Avatar API database. `migrate` records that they still
|
|
484
560
|
need importing into Authentik, and **the first `start` after a `migrate` offers to do it for
|
|
485
|
-
you**: it
|
|
486
|
-
|
|
561
|
+
you**: it asks `Run it now?` and runs the import. Nothing has to be run by hand.
|
|
562
|
+
|
|
563
|
+
Add `--verbosity 2` to review before committing: the plan — every group and every user the import
|
|
564
|
+
would create — is printed, and a second prompt asks whether to go ahead with it. At the default
|
|
565
|
+
`--verbosity 1` nothing is printed beforehand, so `Run it now?` is the only question asked.
|
|
487
566
|
|
|
488
567
|
If you decline, the same import is available later:
|
|
489
568
|
|
|
@@ -494,8 +573,10 @@ octopize-deploy-tool tasks authentik-migrate --from-docker --app-root ./app/avat
|
|
|
494
573
|
`--from-docker` reads users, organizations and licenses straight from the running api container's
|
|
495
574
|
database, so there is no CSV export to produce; **the extracted data is held in memory and never
|
|
496
575
|
written to disk**. The Authentik URL and token come from `generated_files/.env`. `--dry-run`
|
|
497
|
-
|
|
498
|
-
|
|
576
|
+
prints the plan — every group and every user that would be created — and writes nothing to
|
|
577
|
+
Authentik (with `--from-docker` it still brings the stack up to read the database); a real run
|
|
578
|
+
prints that plan only under `--verbosity 2`. Users that already carry an `authentik_id` are
|
|
579
|
+
skipped, so the import is safe to re-run.
|
|
499
580
|
|
|
500
581
|
Every run that is not a `--dry-run` does write an operation log — `migration_log.jsonl` unless
|
|
501
582
|
`--log PATH` says otherwise — recording what was attempted and how it ended.
|
|
@@ -17,6 +17,10 @@ from pathlib import Path
|
|
|
17
17
|
from octopize_avatar_deploy.application._guards import CommandError, run_guarded
|
|
18
18
|
from octopize_avatar_deploy.application.deployment_markers import DeploymentMarker
|
|
19
19
|
from octopize_avatar_deploy.application.deployment_paths import DeploymentPaths
|
|
20
|
+
from octopize_avatar_deploy.application.operator_owned_files import (
|
|
21
|
+
capture_operator_owned_files,
|
|
22
|
+
restore_operator_owned_files,
|
|
23
|
+
)
|
|
20
24
|
from octopize_avatar_deploy.application.ports import DirectoryCopier, FileWriter, SymlinkUpdater
|
|
21
25
|
from octopize_avatar_deploy.application.secret_files import relax_deployed_secrets
|
|
22
26
|
from octopize_avatar_deploy.domain.version_id import VersionId
|
|
@@ -75,8 +79,9 @@ class ApplyCommand:
|
|
|
75
79
|
versioned ``generated/`` directory to ``generated_files/``.
|
|
76
80
|
symlink_updater: Port that creates or replaces the
|
|
77
81
|
``currently_deployed`` symlink.
|
|
78
|
-
file_writer: Port used to
|
|
79
|
-
|
|
82
|
+
file_writer: Port used to carry the operator-owned files across the copy
|
|
83
|
+
(see :mod:`~application.operator_owned_files`) and to write the
|
|
84
|
+
marker files requested via ``args.markers``.
|
|
80
85
|
|
|
81
86
|
"""
|
|
82
87
|
|
|
@@ -100,12 +105,15 @@ class ApplyCommand:
|
|
|
100
105
|
2. Parse the target version label.
|
|
101
106
|
3. Confirm that ``render`` has been run for this version (the
|
|
102
107
|
``generated/`` directory exists).
|
|
103
|
-
4.
|
|
108
|
+
4. Read the operator-owned files under ``generated_files/`` that no
|
|
109
|
+
version slot contains (see :mod:`~application.operator_owned_files`).
|
|
110
|
+
5. Copy ``.deployment_states/vX/generated/`` → ``generated_files/``
|
|
104
111
|
(full recursive copy — not a symlink — so operator edits in
|
|
105
|
-
``generated_files/`` never affect the versioned reference)
|
|
106
|
-
|
|
107
|
-
6.
|
|
108
|
-
7.
|
|
112
|
+
``generated_files/`` never affect the versioned reference), then
|
|
113
|
+
write the operator-owned files back.
|
|
114
|
+
6. Update ``.deployment_states/currently_deployed`` symlink → ``vX``.
|
|
115
|
+
7. Write the requested marker files, if any.
|
|
116
|
+
8. Return a result.
|
|
109
117
|
|
|
110
118
|
Args:
|
|
111
119
|
args: Apply command arguments.
|
|
@@ -135,15 +143,22 @@ class ApplyCommand:
|
|
|
135
143
|
f"Run 'render --version {version.label}' first."
|
|
136
144
|
)
|
|
137
145
|
|
|
138
|
-
# 3.
|
|
146
|
+
# 3. Read the files no version slot contains, so the copy cannot destroy
|
|
147
|
+
# them (see application.operator_owned_files).
|
|
148
|
+
preserved = capture_operator_owned_files(self._file_writer, paths.generated_files_dir)
|
|
149
|
+
|
|
150
|
+
# 4. Copy generated/ → generated_files/, then put those files back.
|
|
139
151
|
self._directory_copier.copy(paths.generated_dir, paths.generated_files_dir)
|
|
152
|
+
restore_operator_owned_files(self._file_writer, paths.generated_files_dir, preserved)
|
|
140
153
|
# Relax deployed secrets so Docker Compose can read them as the container UID.
|
|
141
154
|
relax_deployed_secrets(self._directory_copier, paths.generated_files_dir)
|
|
142
155
|
|
|
143
|
-
#
|
|
156
|
+
# 5. Update currently_deployed symlink.
|
|
144
157
|
self._symlink_updater.update_symlink(paths.currently_deployed_symlink, paths.version_dir)
|
|
145
158
|
|
|
146
|
-
#
|
|
159
|
+
# 6. Write the markers handed to `start`, opt-in only (see docs/adr/0002).
|
|
160
|
+
# After the copy, like the operator-owned files above and for the same
|
|
161
|
+
# reason: the copy would otherwise wipe them.
|
|
147
162
|
if args.markers:
|
|
148
163
|
self._file_writer.write(
|
|
149
164
|
paths.generated_files_dir, {marker.value: b"" for marker in args.markers}
|
|
@@ -22,6 +22,13 @@ from dataclasses import dataclass, field
|
|
|
22
22
|
from pathlib import Path
|
|
23
23
|
from typing import Literal, Protocol
|
|
24
24
|
|
|
25
|
+
from octopize_avatar_deploy.application.legacy_layout import (
|
|
26
|
+
PathProbe,
|
|
27
|
+
deployed_working_copy_message,
|
|
28
|
+
is_deployed_working_copy,
|
|
29
|
+
is_legacy_layout,
|
|
30
|
+
legacy_layout_message,
|
|
31
|
+
)
|
|
25
32
|
from octopize_avatar_deploy.application.ports import (
|
|
26
33
|
DeploymentStateRepository,
|
|
27
34
|
DockerClient,
|
|
@@ -85,6 +92,68 @@ class Check(Protocol):
|
|
|
85
92
|
...
|
|
86
93
|
|
|
87
94
|
|
|
95
|
+
# ---------------------------------------------------------------------------
|
|
96
|
+
# LegacyLayoutCheck
|
|
97
|
+
# ---------------------------------------------------------------------------
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
@dataclass
|
|
101
|
+
class LegacyLayoutCheckResult:
|
|
102
|
+
"""Result of the pre-versioned layout pre-flight check.
|
|
103
|
+
|
|
104
|
+
Attributes:
|
|
105
|
+
aborted: ``True`` if *app_root* holds a pre-versioned deployment, which
|
|
106
|
+
``install`` must never write over.
|
|
107
|
+
|
|
108
|
+
"""
|
|
109
|
+
|
|
110
|
+
aborted: bool
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
class LegacyLayoutCheck:
|
|
114
|
+
"""Refuse to install over a directory that is already somebody's deployment.
|
|
115
|
+
|
|
116
|
+
Two shapes are refused. A pre-versioned deployment, where ``install``
|
|
117
|
+
would generate a fresh configuration rather than adopt the existing one, is
|
|
118
|
+
pointed at ``migrate --from-legacy``. A modern deployment's own
|
|
119
|
+
``generated_files/`` — which has the same flat shape and is where operators
|
|
120
|
+
spend their time, since it holds ``docker-compose.yml`` — is pointed one
|
|
121
|
+
level up at its real root. Runs before :class:`VolumeCheck` so the
|
|
122
|
+
directory the operator can see is reported before the Docker state.
|
|
123
|
+
|
|
124
|
+
Args:
|
|
125
|
+
path_probe: Port answering :meth:`exists` (the ``Filesystem`` adapter in
|
|
126
|
+
production, a stub in tests).
|
|
127
|
+
printer: Port for error output.
|
|
128
|
+
|
|
129
|
+
"""
|
|
130
|
+
|
|
131
|
+
def __init__(self, path_probe: PathProbe, printer: Printer) -> None:
|
|
132
|
+
self._path_probe = path_probe
|
|
133
|
+
self._printer = printer
|
|
134
|
+
|
|
135
|
+
def run(self, app_root: Path) -> LegacyLayoutCheckResult:
|
|
136
|
+
"""Abort when *app_root* is a legacy flat deployment.
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
app_root: Operator's working directory (the deployment root).
|
|
140
|
+
|
|
141
|
+
Returns:
|
|
142
|
+
:class:`LegacyLayoutCheckResult` with the abort flag set when the
|
|
143
|
+
directory must be migrated rather than installed over.
|
|
144
|
+
|
|
145
|
+
"""
|
|
146
|
+
if is_deployed_working_copy(self._path_probe, app_root):
|
|
147
|
+
self._printer.print_error(deployed_working_copy_message(app_root))
|
|
148
|
+
return LegacyLayoutCheckResult(aborted=True)
|
|
149
|
+
|
|
150
|
+
if not is_legacy_layout(self._path_probe, app_root):
|
|
151
|
+
return LegacyLayoutCheckResult(aborted=False)
|
|
152
|
+
|
|
153
|
+
self._printer.print_error(legacy_layout_message(app_root))
|
|
154
|
+
return LegacyLayoutCheckResult(aborted=True)
|
|
155
|
+
|
|
156
|
+
|
|
88
157
|
# ---------------------------------------------------------------------------
|
|
89
158
|
# VolumeCheck
|
|
90
159
|
# ---------------------------------------------------------------------------
|