octopize.deploy_tool 3.0.0__tar.gz → 3.2.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/PKG-INFO +593 -0
- octopize_deploy_tool-3.2.0/README.md +560 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/pyproject.toml +3 -2
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/__init__.py +1 -1
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/apply_command.py +13 -13
- octopize_deploy_tool-3.0.0/src/octopize_avatar_deploy/application/commands/tasks/provision_admin.py → octopize_deploy_tool-3.2.0/src/octopize_avatar_deploy/application/authentik_login.py +43 -438
- octopize_deploy_tool-3.2.0/src/octopize_avatar_deploy/application/authentik_readiness.py +706 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/checks.py +22 -22
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/install_command.py +1 -1
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/migrate_command.py +4 -3
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/tasks/__init__.py +11 -1
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/tasks/create_users.py +18 -14
- octopize_deploy_tool-3.2.0/src/octopize_avatar_deploy/application/commands/tasks/provision_admin.py +482 -0
- octopize_deploy_tool-3.2.0/src/octopize_avatar_deploy/application/commands/tasks/reconcile_blueprint.py +183 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/tasks/registry.py +27 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/update_command.py +20 -7
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/configure_command.py +18 -11
- octopize_deploy_tool-3.2.0/src/octopize_avatar_deploy/application/deployment_markers.py +25 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/ports.py +14 -1
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/start_command.py +62 -7
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/_shared.py +0 -6
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/update.py +4 -1
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/config_resolver.py +43 -1
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/control_flags.py +4 -1
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/defaults.yaml +5 -4
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/configure_preset.py +28 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/deployment_item_registry.py +30 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/docker_client.py +10 -2
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/document_step_runner.py +7 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/noop_docker_client.py +2 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/preset_loader.py +21 -6
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/resources/config.example.yaml +27 -10
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/authentik_blueprint.py +9 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/base.py +5 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/logging.py +5 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/nginx.py +61 -4
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/telemetry.py +63 -25
- octopize_deploy_tool-3.2.0/src/octopize_avatar_deploy/templates/.template-version +1 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/_env_fragment_api.template +12 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/api.env.template +5 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/authentik/octopize-avatar-blueprint.yaml +221 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/docker-compose.yml.template +4 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/version_compat.py +1 -1
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/TESTING.md +33 -24
- octopize_deploy_tool-3.2.0/tests/e2e/conftest.py +51 -0
- octopize_deploy_tool-3.2.0/tests/e2e/test_lifecycle.py +602 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/e2e/test_migrate_start_provision_verify.py +22 -18
- octopize_deploy_tool-3.2.0/tests/e2e/test_update_reapplies_blueprint.py +517 -0
- octopize_deploy_tool-3.2.0/tests/e2e/user_disable_revokes_api_key.py +380 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/apply_help/output.txt +3 -4
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/configure_happy_path/expected/.deployment_states/v1/deployment_state.yaml +13 -4
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/configure_help/output.txt +3 -4
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/diff_help/output.txt +3 -4
- {octopize_deploy_tool-3.0.0/tests/fixtures/update_interactive_diff/expected_render_output → octopize_deploy_tool-3.2.0/tests/fixtures/install_apply_output}/.env +12 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/authentik/octopize-avatar-blueprint.yaml +221 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/docker-compose.yml +4 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_help/output.txt +1 -2
- {octopize_deploy_tool-3.0.0/tests/fixtures/install_apply_output → octopize_deploy_tool-3.2.0/tests/fixtures/install_render_output}/.env +12 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/authentik/octopize-avatar-blueprint.yaml +221 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/docker-compose.yml +4 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/migrate_help/output.txt +1 -2
- octopize_deploy_tool-3.2.0/tests/fixtures/non_interactive_no_telemetry/config.yaml +17 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/render_help/output.txt +1 -2
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/start_help/output.txt +2 -4
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/tasks_help/output.txt +2 -1
- octopize_deploy_tool-3.2.0/tests/fixtures/tasks_reconcile_blueprint_help/output.txt +24 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_help/output.txt +4 -4
- {octopize_deploy_tool-3.0.0/tests/fixtures/install_render_output → octopize_deploy_tool-3.2.0/tests/fixtures/update_interactive_diff/expected_apply_output}/.env +12 -0
- {octopize_deploy_tool-3.0.0/tests/fixtures/update_noninteractive_clean → octopize_deploy_tool-3.2.0/tests/fixtures/update_interactive_diff}/expected_apply_output/.permissions.json +1 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/octopize-avatar-blueprint.yaml +221 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_apply_output/docker-compose.yml +4 -0
- {octopize_deploy_tool-3.0.0/tests/fixtures/update_interactive_diff/expected_apply_output → octopize_deploy_tool-3.2.0/tests/fixtures/update_interactive_diff/expected_render_output}/.env +12 -0
- octopize_deploy_tool-3.2.0/tests/fixtures/update_interactive_diff/expected_render_output/authentik/octopize-avatar-blueprint.yaml +1959 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_render_output/docker-compose.yml +4 -0
- octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/.env +101 -0
- octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/.needs_blueprint_reconcile +0 -0
- {octopize_deploy_tool-3.0.0/tests/fixtures/update_interactive_diff → octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean}/expected_apply_output/.permissions.json +1 -0
- octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/octopize-avatar-blueprint.yaml +1959 -0
- octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/docker-compose.yml +580 -0
- octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_render_output/.env +101 -0
- octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/octopize-avatar-blueprint.yaml +1959 -0
- octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_render_output/docker-compose.yml +580 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/helpers/fakes.py +25 -2
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/helpers/normalization.py +20 -16
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/integration/test_cli_integration.py +26 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/integration/test_configure_command.py +94 -2
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/integration/test_install_command.py +82 -3
- octopize_deploy_tool-3.2.0/tests/integration/test_migrate_without_tls_keys.py +242 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/integration/test_update_command.py +99 -1
- octopize_deploy_tool-3.2.0/tests/unit/infra/__init__.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_document_step_runner.py +81 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_preset_loader.py +97 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_logging.py +34 -1
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_nginx.py +158 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_telemetry.py +61 -9
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_apply_command.py +27 -14
- octopize_deploy_tool-3.2.0/tests/unit/test_authentik_login.py +356 -0
- octopize_deploy_tool-3.2.0/tests/unit/test_authentik_readiness.py +539 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_config_resolver.py +75 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_configure_command.py +82 -2
- octopize_deploy_tool-3.2.0/tests/unit/test_docs_command_references.py +145 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_migrate_command.py +2 -1
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_preflight_checks.py +40 -13
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_provision_admin.py +0 -335
- octopize_deploy_tool-3.2.0/tests/unit/test_reconcile_blueprint.py +149 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_start_command.py +136 -5
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_update_command.py +11 -0
- octopize_deploy_tool-3.0.0/PKG-INFO +0 -838
- octopize_deploy_tool-3.0.0/README.md +0 -805
- octopize_deploy_tool-3.0.0/src/octopize_avatar_deploy/application/authentik_readiness.py +0 -434
- octopize_deploy_tool-3.0.0/src/octopize_avatar_deploy/templates/.template-version +0 -1
- octopize_deploy_tool-3.0.0/tests/e2e/test_install_start_uninstall.py +0 -251
- octopize_deploy_tool-3.0.0/tests/fixtures/update_interactive_diff/expected_render_output/authentik/octopize-avatar-blueprint.yaml +0 -1738
- octopize_deploy_tool-3.0.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/.env +0 -89
- octopize_deploy_tool-3.0.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/octopize-avatar-blueprint.yaml +0 -1738
- octopize_deploy_tool-3.0.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/docker-compose.yml +0 -576
- octopize_deploy_tool-3.0.0/tests/fixtures/update_noninteractive_clean/expected_render_output/.env +0 -89
- octopize_deploy_tool-3.0.0/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/octopize-avatar-blueprint.yaml +0 -1738
- octopize_deploy_tool-3.0.0/tests/fixtures/update_noninteractive_clean/expected_render_output/docker-compose.yml +0 -576
- octopize_deploy_tool-3.0.0/tests/unit/test_authentik_readiness.py +0 -315
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/.gitignore +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/infra/deployment/deployment-tool/src/octopize_avatar_deploy/steps/user.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/infra/deployment/deployment-tool/tests/fixtures/generate_env_output_dir_error/output.txt +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/infra/deployment/deployment-tool/tests/fixtures/help/output.txt +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/infra/deployment/deployment-tool/tests/fixtures/missing_subcommand/output.txt +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/__init__.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/_guards.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/authentik_env.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/subcommand_ports.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/tasks/authentik_migrate.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/tasks/create_self_signed_cert_command.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/tasks/create_self_signed_cert_task.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/verify_command.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/configure_resume_policy.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/deployment_paths.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/diff_command.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/polling.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/render_command.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/secret_files.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/stop_command.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/uninstall_command.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/user_config.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/authentik_migration.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cert_generator.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/certificate_verifier.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/__init__.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/__init__.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/apply.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/configure.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/diff.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/install.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/migrate.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/render.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/start.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/stop.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/tasks.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/uninstall.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/verify.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli_dependencies.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli_test_harness.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/deployment_mode.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/__init__.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/deployment_item.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/deployment_state.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/generation.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/placement.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/validation.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/version_id.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/download_templates.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/environment.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/exceptions.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/__init__.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/cert_infra.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/current_version_resolver.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/env_file_reader.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/filesystem.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/filesystem_legacy_source.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/filesystem_user_config_scaffolder.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/httpx2_http_client.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/in_memory_state_repository.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/package_defaults_source.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/package_template_provider.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/package_version_provider.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/system_clock.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/yaml_config_source.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/yaml_state_repository.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/input_gatherer.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/normalizers.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/output_spec.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/printer.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/public_url.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/renderer.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/resources/__init__.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/secret_factory.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/self_signed_ssl.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/__init__.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/authentik.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/database.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/email.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/required.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/service_urls.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/storage.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/user.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/template_provisioning.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/.env.template +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/_env_fragment_infra.template +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/_env_fragment_web.template +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/authentik/branding/favicon.ico +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/authentik/branding/logo.png +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/authentik/custom-templates/email_account_confirmation.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/authentik/custom-templates/email_account_exists.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/authentik/custom-templates/email_account_invitation.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/authentik/custom-templates/email_forgotten_password.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/authentik/custom-templates/email_password_changed.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/authentik/custom-templates/email_password_reset.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/authentik/translations.json +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/compose.override.yaml.template +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/nginx.conf.template +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/python_client.env.template +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/web.env.template +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/tls_types.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/topology_urls.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/url_contract.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/verbosity.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/__init__.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/conftest.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/e2e/__init__.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/__init__.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/authentik_migration/licenses.csv +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/authentik_migration/organizations.csv +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/authentik_migration/users.csv +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/configure_happy_path/input.yaml +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/configure_happy_path/output.txt +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/diff_integration/from/.env +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/diff_integration/from/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/diff_integration/output.txt +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/diff_integration/to/.env +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/diff_integration/to/docker-compose.yml +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/diff_integration/to/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.env +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/admin_emails +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/authjwt_secret_key +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/clevercloud_sso_salt +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/db_admin_password +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/db_admin_user +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/db_name +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/db_password +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/db_user +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/file_jwt_secret_key +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/organization_name +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/pepper +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/smtp_password +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/storage_admin_access_key_id +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/storage_admin_secret_access_key +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/help/output.txt +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/.permissions.json +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/authentik/branding/favicon.ico +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/authentik/branding/logo.png +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/authentik/custom-templates/email_account_confirmation.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/authentik/custom-templates/email_account_exists.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/authentik/custom-templates/email_account_invitation.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/authentik/custom-templates/email_forgotten_password.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/authentik/custom-templates/email_password_changed.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/authentik/custom-templates/email_password_reset.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/authentik/translations.json +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/.permissions.json +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/authentik/branding/favicon.ico +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/authentik/branding/logo.png +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/authentik/custom-templates/email_account_confirmation.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/authentik/custom-templates/email_account_exists.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/authentik/custom-templates/email_account_invitation.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/authentik/custom-templates/email_forgotten_password.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/authentik/custom-templates/email_password_changed.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/authentik/custom-templates/email_password_reset.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/authentik/translations.json +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/missing_subcommand/output.txt +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/non_interactive_complete/config.yaml +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/stop_help/output.txt +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/tasks_authentik_migrate_help/output.txt +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/tasks_create_self_signed_cert_help/output.txt +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/tasks_create_users_help/output.txt +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/tasks_provision_admin_help/output.txt +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/uninstall_help/output.txt +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/base_v1/generated_files/.env +0 -0
- /octopize_deploy_tool-3.0.0/tests/unit/infra/__init__.py → /octopize_deploy_tool-3.2.0/tests/fixtures/update_interactive_diff/expected_apply_output/.needs_blueprint_reconcile +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/branding/favicon.ico +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/branding/logo.png +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/custom-templates/email_account_confirmation.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/custom-templates/email_account_exists.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/custom-templates/email_account_invitation.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/custom-templates/email_forgotten_password.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/custom-templates/email_password_changed.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/custom-templates/email_password_reset.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_apply_output/authentik/translations.json +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_apply_output/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_render_output/.permissions.json +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/branding/favicon.ico +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/branding/logo.png +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/custom-templates/email_account_confirmation.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/custom-templates/email_account_exists.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/custom-templates/email_account_invitation.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/custom-templates/email_forgotten_password.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/custom-templates/email_password_changed.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/custom-templates/email_password_reset.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_render_output/authentik/translations.json +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_render_output/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/base_v1/generated_files/.env +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/branding/favicon.ico +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/branding/logo.png +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/custom-templates/email_account_confirmation.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/custom-templates/email_account_exists.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/custom-templates/email_account_invitation.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/custom-templates/email_forgotten_password.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/custom-templates/email_password_changed.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/custom-templates/email_password_reset.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/translations.json +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_apply_output/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/.permissions.json +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/branding/favicon.ico +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/branding/logo.png +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/custom-templates/email_account_confirmation.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/custom-templates/email_account_exists.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/custom-templates/email_account_invitation.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/custom-templates/email_forgotten_password.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/custom-templates/email_password_changed.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/custom-templates/email_password_reset.html +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/translations.json +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/verify_help/output.txt +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/helpers/__init__.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/helpers/fixture_dir_comparison.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/helpers/printers.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/helpers/steps.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/helpers/tls_fixtures.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/integration/__init__.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/integration/test_create_self_signed_cert_task.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/integration/test_diff_command.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/test_cli_harness.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/conftest.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_docker_client.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_filesystem.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_filesystem_legacy_source.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_httpx2_http_client.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_yaml_config_source.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_yaml_deployment_state_repository.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_authentik.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_authentik_blueprint.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_database.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_email.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_required.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_service_urls.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_storage.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_user.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_authentik_client.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_authentik_env.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_authentik_migrate_command.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_authentik_migrate_for_docker.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_authentik_migrate_parsers.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_authentik_migration.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_cert_generator.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_certificate_verifier.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_cli_verify_ssl.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_compare_helpers.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_config_resolver_consistency.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_create_self_signed_cert_task.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_create_users.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_deployment_item.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_diff_command.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_environment.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_generation.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_generic_prompt.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_input_gatherer.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_install_command.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_normalizers.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_output_spec.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_placement.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_polling.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_printer.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_public_url.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_render_command.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_renderer.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_rich_implementations.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_secret_factory.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_secret_files.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_select_authentik_migrate_parser.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_stop_command.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_task_registry.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_uninstall_command.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_user_config.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_validation.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_verify_command.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_version_id.py +0 -0
- {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_version_validation.py +0 -0
|
@@ -0,0 +1,593 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: octopize.deploy_tool
|
|
3
|
+
Version: 3.2.0
|
|
4
|
+
Summary: Deployment configuration tool for Octopize Avatar platform
|
|
5
|
+
Project-URL: Homepage, https://octopize.io
|
|
6
|
+
Project-URL: Documentation, https://docs.octopize.io/docs/deploying/self-hosted/self_installation
|
|
7
|
+
Project-URL: Repository, https://github.com/octopize/avatar
|
|
8
|
+
Project-URL: Issues, https://github.com/octopize/avatar/issues
|
|
9
|
+
Author-email: Octopize <contact@octopize.io>
|
|
10
|
+
License: MIT
|
|
11
|
+
Keywords: avatar,configuration,deployment,octopize
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: System Administrators
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: System :: Installation/Setup
|
|
19
|
+
Classifier: Topic :: System :: Systems Administration
|
|
20
|
+
Requires-Python: >=3.13
|
|
21
|
+
Requires-Dist: certifi>=2024.0.0
|
|
22
|
+
Requires-Dist: cryptography>=49.0.0
|
|
23
|
+
Requires-Dist: httpx2>=2.4.0
|
|
24
|
+
Requires-Dist: httpx>=0.28.0
|
|
25
|
+
Requires-Dist: jinja2>=3.1.0
|
|
26
|
+
Requires-Dist: pandas>=3.0.0
|
|
27
|
+
Requires-Dist: python-dotenv>=1.2.2
|
|
28
|
+
Requires-Dist: python-on-whales>=0.76.0
|
|
29
|
+
Requires-Dist: pyyaml>=6.0
|
|
30
|
+
Requires-Dist: rich-argparse>=1.8.0
|
|
31
|
+
Requires-Dist: rich>=13.0.0
|
|
32
|
+
Description-Content-Type: text/markdown
|
|
33
|
+
|
|
34
|
+
# Octopize Avatar Deployment Tool
|
|
35
|
+
|
|
36
|
+
`octopize-deploy-tool` configures, generates and operates a self-hosted [Octopize
|
|
37
|
+
Avatar](https://octopize.io) deployment. It asks you a questionnaire, renders a complete Docker
|
|
38
|
+
Compose stack (`.env`, `docker-compose.yml`, nginx config, secrets, SSO blueprints) into a
|
|
39
|
+
versioned directory tree, and manages that stack's lifecycle. Deployment templates for each
|
|
40
|
+
release ship inside the package, so nothing is fetched at runtime.
|
|
41
|
+
|
|
42
|
+
## Requirements
|
|
43
|
+
|
|
44
|
+
On the host that will run Avatar:
|
|
45
|
+
|
|
46
|
+
- A Linux server — Ubuntu 22.04 LTS or later is recommended.
|
|
47
|
+
- `docker` (with the Compose plugin) and `curl`.
|
|
48
|
+
- The deploying user in the `docker` group — see
|
|
49
|
+
[Docker's post-installation steps](https://docs.docker.com/engine/install/linux-postinstall/).
|
|
50
|
+
- A domain name pointing at the host, plus a TLS certificate and private key for it. Both are
|
|
51
|
+
required for HTTPS; for internal or test deployments the tool can generate a self-signed
|
|
52
|
+
certificate (see [`tasks`](#tasks)).
|
|
53
|
+
- Inbound access to port `443` when TLS is enabled, or to `NGINX_HTTP_PORT` (default `8080`)
|
|
54
|
+
when it is not.
|
|
55
|
+
|
|
56
|
+
To run the CLI itself you need **Python 3.13 or newer**, or the published Docker image (see
|
|
57
|
+
[Running via Docker](#running-via-docker)). Older Python versions fail with an opaque dependency
|
|
58
|
+
resolution error.
|
|
59
|
+
|
|
60
|
+
> **Docker proxy gotcha.** If your Docker daemon or client is configured with an HTTP proxy, the
|
|
61
|
+
> Avatar containers silently fail to reach each other. Exclude the Compose subnet by adding
|
|
62
|
+
> `"noProxy": "172.18.0.0/16"` to the `proxies.default` block of `/etc/docker/daemon.json` or
|
|
63
|
+
> `~/.docker/config.json`. The setting applies to newly created containers only.
|
|
64
|
+
|
|
65
|
+
## Quick start
|
|
66
|
+
|
|
67
|
+
Install [uv](https://docs.astral.sh/uv/) if you do not have it, then run the tool straight from
|
|
68
|
+
PyPI — no permanent install needed:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
72
|
+
uvx octopize-deploy-tool --help
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Alternatively, `pip install octopize-deploy-tool` inside a virtual environment (most
|
|
76
|
+
distributions refuse installs into the system Python, per PEP 668) puts `octopize-deploy-tool` on
|
|
77
|
+
your `PATH` — the form used below. A complete first deployment:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Answer the questionnaire and generate all deployment files.
|
|
81
|
+
octopize-deploy-tool install --app-root ./app/avatar
|
|
82
|
+
# Bring the stack up.
|
|
83
|
+
octopize-deploy-tool start --app-root ./app/avatar
|
|
84
|
+
# Create the accounts your users will log in with.
|
|
85
|
+
octopize-deploy-tool tasks create-users --app-root ./app/avatar \
|
|
86
|
+
--admins admin@company.com --users alice@company.com,bob@company.com
|
|
87
|
+
# Provision the admin API key that `verify` reads.
|
|
88
|
+
octopize-deploy-tool tasks provision-admin --app-root ./app/avatar
|
|
89
|
+
# Check the API is healthy and email delivery works.
|
|
90
|
+
octopize-deploy-tool verify --app-root ./app/avatar --test-email you@company.com
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
These are the five commands the end-to-end suite runs, in this order, before tearing the
|
|
94
|
+
deployment down with `uninstall`. Two ordering constraints matter: `create-users` needs Authentik
|
|
95
|
+
to be up, and `provision-admin` must run before `verify`. Both hold once `start` has finished.
|
|
96
|
+
|
|
97
|
+
## Command reference
|
|
98
|
+
|
|
99
|
+
`--app-root` defaults to the current directory everywhere it is accepted. Every command takes
|
|
100
|
+
`--verbosity {1,2}` (`2` is verbose) except `tasks create-self-signed-cert`. The older
|
|
101
|
+
`--verbose` flag is deprecated in favour of `--verbosity 2` and is unavailable on `verify` and on
|
|
102
|
+
all `tasks` sub-commands. Every command's `--help` lists its full option set.
|
|
103
|
+
|
|
104
|
+
### Everyday commands
|
|
105
|
+
|
|
106
|
+
| Command | Use when |
|
|
107
|
+
| ----------- | --------------------------------------------------------------------------- |
|
|
108
|
+
| `install` | Setting up a new Avatar deployment for the first time |
|
|
109
|
+
| `update` | Upgrading to a newer Avatar release, or changing a configuration value |
|
|
110
|
+
| `start` | Bringing a configured deployment live, or restarting it after a host reboot |
|
|
111
|
+
| `stop` | Suspending the stack temporarily — containers and volumes are preserved |
|
|
112
|
+
| `uninstall` | Permanently destroying the deployment and all of its data |
|
|
113
|
+
| `migrate` | Importing a deployment created by hand or by an older version of this tool |
|
|
114
|
+
|
|
115
|
+
#### `install`
|
|
116
|
+
|
|
117
|
+
Runs the full questionnaire, generates every deployment file, and leaves the stack ready to
|
|
118
|
+
start. It starts nothing — run `start` afterwards.
|
|
119
|
+
|
|
120
|
+
```text
|
|
121
|
+
--app-root PATH Deployment root directory (default: current directory)
|
|
122
|
+
--from-config PATH Seed configuration from a YAML config file
|
|
123
|
+
--non-interactive Run without prompts; uses defaults or the config file
|
|
124
|
+
--verbosity {1,2} 1 = essential (default), 2 = verbose
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Before doing anything, `install` looks for Avatar Docker volumes left over from an earlier
|
|
128
|
+
deployment. If it finds any it refuses to run, in both interactive and non-interactive mode:
|
|
129
|
+
|
|
130
|
+
```text
|
|
131
|
+
⚠ Volume 'avatar_postgres_data' already exists.
|
|
132
|
+
✗ A fresh install generates new credentials, and Postgres ignores them on a volume that already
|
|
133
|
+
holds a database — the API and Authentik would not be able to start. Choose one of:
|
|
134
|
+
• Keep the data — you need the deployment that created it. Run 'update' against its app root,
|
|
135
|
+
or 'migrate --from-legacy' if it predates the versioned layout. Without its .secrets/ the
|
|
136
|
+
data cannot be read.
|
|
137
|
+
• Discard the data — run 'uninstall' against the old app root, or remove the volumes by hand:
|
|
138
|
+
docker volume rm avatar_postgres_data
|
|
139
|
+
⚠ Install aborted during pre-flight checks.
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
There is deliberately no override. A fresh install writes new secrets, but Postgres only applies
|
|
143
|
+
`POSTGRES_USER`/`POSTGRES_PASSWORD` while initialising an _empty_ data directory — on a volume
|
|
144
|
+
that already holds a cluster they are silently ignored, so nothing can authenticate and the stack
|
|
145
|
+
never comes up. The volume names are fixed, so a collision is always this deployment's own data.
|
|
146
|
+
|
|
147
|
+
The expert commands (`configure`, `render`, `apply`) do not run this check.
|
|
148
|
+
|
|
149
|
+
#### `update`
|
|
150
|
+
|
|
151
|
+
Re-runs the configuration from your current state, re-renders every file with the templates
|
|
152
|
+
bundled in the installed version of this tool, shows a diff, and applies it. Values you already
|
|
153
|
+
answered are carried forward, so you are not asked again. `--from-config PATH` layers a YAML file
|
|
154
|
+
over the current state (see [Changing a configuration
|
|
155
|
+
value](#changing-a-configuration-value)).
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
octopize-deploy-tool update --app-root ./app/avatar
|
|
159
|
+
octopize-deploy-tool start --app-root ./app/avatar # restart with the new files
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
That `start` also re-applies the Authentik blueprint, so a changed SSO configuration takes
|
|
163
|
+
effect — see [`tasks reconcile-blueprint`](#tasks-reconcile-blueprint).
|
|
164
|
+
|
|
165
|
+
If you edited anything under `generated_files/` by hand, `update` shows the diff and asks per
|
|
166
|
+
file. The default is **no** — your file is kept — and keeping any file blocks the apply, so
|
|
167
|
+
`update` exits non-zero:
|
|
168
|
+
|
|
169
|
+
```text
|
|
170
|
+
Accept new render for '.env' and discard your manual changes? [y/N]
|
|
171
|
+
⚠ .env: keeping your manual changes — apply aborted for this file.
|
|
172
|
+
⚠ One or more files were kept. Apply is blocked until conflicts are resolved.
|
|
173
|
+
Merge manually, then run: octopize-deploy-tool apply --version <vX>
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Merge your edits into the rendered copy in `.deployment_states/<vX>/generated/`, then run
|
|
177
|
+
`apply --version <vX>`. Anything that should survive future updates belongs in a config file, not
|
|
178
|
+
in `generated_files/`.
|
|
179
|
+
|
|
180
|
+
#### `start` and `stop`
|
|
181
|
+
|
|
182
|
+
`start` creates any missing Docker volumes and brings all services up. It is idempotent, so it is
|
|
183
|
+
also how you restart after a reboot or after `update`. `stop` suspends the services without
|
|
184
|
+
removing containers or volumes.
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
octopize-deploy-tool stop --app-root ./app/avatar
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
#### `uninstall`
|
|
191
|
+
|
|
192
|
+
**Destructive and irreversible.** Stops and removes all containers and networks, deletes every
|
|
193
|
+
Docker volume including the database and uploaded files, and removes `generated_files/`,
|
|
194
|
+
`.deployment_states/` and `user_config/`. You are asked to confirm first; `--force` skips the
|
|
195
|
+
prompt for scripted use, and `--non-interactive` requires `--force`.
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
octopize-deploy-tool uninstall --app-root ./app/avatar
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
#### `migrate`
|
|
202
|
+
|
|
203
|
+
Imports a deployment set up manually or with an older version of this tool. Point
|
|
204
|
+
`--from-legacy` at the directory holding the existing `.env` and `.secrets/`; values readable
|
|
205
|
+
from there are carried over and you are prompted for the rest. If `--from-legacy` is omitted the
|
|
206
|
+
tool asks for it interactively.
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
octopize-deploy-tool migrate --app-root ./app/avatar-new --from-legacy ./app/avatar-old
|
|
210
|
+
octopize-deploy-tool start --app-root ./app/avatar-new
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
> **Before migrating non-interactively**, make sure the legacy `.env` sets
|
|
214
|
+
> `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 fails with
|
|
216
|
+
> `Invalid default value for 'NGINX_SSL_CERTIFICATE_PATH'`, and `--non-interactive` offers no way
|
|
217
|
+
> to supply one.
|
|
218
|
+
|
|
219
|
+
See [Upgrading from a pre-SSO deployment](#upgrading-from-a-pre-sso-deployment) for what happens
|
|
220
|
+
to existing user accounts.
|
|
221
|
+
|
|
222
|
+
### `tasks`
|
|
223
|
+
|
|
224
|
+
One-off operational sub-commands. All are idempotent and safe to re-run.
|
|
225
|
+
|
|
226
|
+
| Task | Purpose |
|
|
227
|
+
| ------------------------- | ---------------------------------------------------------------- |
|
|
228
|
+
| `provision-admin` | Creates the Avatar API key that `verify` reads |
|
|
229
|
+
| `create-users` | Creates Authentik accounts and emails each user a setup link |
|
|
230
|
+
| `reconcile-blueprint` | Re-applies the deployed Authentik blueprint to the running stack |
|
|
231
|
+
| `create-self-signed-cert` | Generates a self-signed TLS certificate and key |
|
|
232
|
+
| `authentik-migrate` | Imports users and organizations from Avatar into Authentik SSO |
|
|
233
|
+
|
|
234
|
+
#### `tasks provision-admin`
|
|
235
|
+
|
|
236
|
+
Waits for Authentik and the Avatar API to become healthy, grants `akadmin` the admin role, logs
|
|
237
|
+
in through Authentik's flow executor, creates an Avatar API key and writes it to
|
|
238
|
+
`generated_files/.secrets/avatar_api_key`. `verify` fails without it. Re-running when the key
|
|
239
|
+
file exists is a no-op; delete the file to force a rotation.
|
|
240
|
+
|
|
241
|
+
#### `tasks reconcile-blueprint`
|
|
242
|
+
|
|
243
|
+
Forces Authentik to apply the blueprint deployed under `generated_files/authentik/` and waits for
|
|
244
|
+
that apply to succeed. `start` runs it after an `update`, so you normally never call it yourself —
|
|
245
|
+
run it if that step failed or was interrupted, which is when `start` prints this command.
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
octopize-deploy-tool tasks reconcile-blueprint --app-root ./app/avatar
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
An update changes what Authentik should be serving in two ways it cannot pick up by itself. A
|
|
252
|
+
rewritten blueprint file is invisible to the containers that are already running, because a
|
|
253
|
+
bind-mounted file stays pinned to the one they started with — so `start` recreates them after an
|
|
254
|
+
update. A changed value the blueprint reads from the environment leaves the file untouched, and
|
|
255
|
+
Authentik only re-applies a blueprint whose content changed — so the apply has to be forced.
|
|
256
|
+
Either way nothing is reported as failed, which is why this runs unprompted. Applying an
|
|
257
|
+
already-correct blueprint changes nothing.
|
|
258
|
+
|
|
259
|
+
#### `tasks create-users`
|
|
260
|
+
|
|
261
|
+
Creates accounts in Authentik using the bootstrap token from `generated_files/.env`, assigns each
|
|
262
|
+
to the right group, and sends a branded recovery email so users set their own password without
|
|
263
|
+
server-side browser access. Run it once the stack is up: the command does no readiness wait of
|
|
264
|
+
its own, so Authentik must already be running with its blueprint applied. Existing users are
|
|
265
|
+
detected and skipped.
|
|
266
|
+
|
|
267
|
+
Account creation and email delivery are independent — if the mail fails the account still exists,
|
|
268
|
+
so a re-run skips that user. `--no-email` creates accounts silently. `--authentik-url` and
|
|
269
|
+
`--authentik-token` override the values read from `.env`.
|
|
270
|
+
|
|
271
|
+
#### `tasks create-self-signed-cert`
|
|
272
|
+
|
|
273
|
+
Writes `fullchain.crt` (`0644`) and `server.key` (`0600`) for a domain, one or more IP addresses,
|
|
274
|
+
or both. At least one of `--domain` or `--ip-address` is required — with neither, the command
|
|
275
|
+
fails with `Either --domain or --ip-address must be provided.` `--output-dir` is created if
|
|
276
|
+
missing (default: current directory) and existing files are overwritten after a warning.
|
|
277
|
+
`--valid-days` defaults to 365.
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
octopize-deploy-tool tasks create-self-signed-cert \
|
|
281
|
+
--domain avatar.company.com --ip-address 192.168.1.10 --output-dir /etc/nginx/certs
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
#### `tasks authentik-migrate`
|
|
285
|
+
|
|
286
|
+
Imports users, organizations and licenses from an existing Avatar database into Authentik. For a
|
|
287
|
+
supported `migrate` you normally never run this by hand — see [Upgrading from a pre-SSO
|
|
288
|
+
deployment](#upgrading-from-a-pre-sso-deployment).
|
|
289
|
+
|
|
290
|
+
### Expert commands
|
|
291
|
+
|
|
292
|
+
`install`, `update` and `migrate` are compositions of three lower-level commands. Use them
|
|
293
|
+
directly when you want to inspect or stage a change before it goes live.
|
|
294
|
+
|
|
295
|
+
| Command | What it does |
|
|
296
|
+
| ----------- | -------------------------------------------------------------------------------- |
|
|
297
|
+
| `configure` | Answers the questionnaire, saves `.deployment_states/vX/deployment_state.yaml` |
|
|
298
|
+
| `render` | Turns a saved state into files under `.deployment_states/vX/generated/` |
|
|
299
|
+
| `apply` | Copies a rendered version into `generated_files/` and moves `currently_deployed` |
|
|
300
|
+
| `diff` | Shows what would change between two rendered versions |
|
|
301
|
+
| `verify` | Checks the running stack: API health plus a live email test |
|
|
302
|
+
|
|
303
|
+
Each `configure` run creates a new version slot, so previous answers are never overwritten.
|
|
304
|
+
Nothing you do with `configure` or `render` touches the running deployment until `apply` runs.
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
octopize-deploy-tool configure --app-root ./app/avatar --from-state v1
|
|
308
|
+
octopize-deploy-tool render --app-root ./app/avatar --latest
|
|
309
|
+
octopize-deploy-tool diff --app-root ./app/avatar deployed latest
|
|
310
|
+
octopize-deploy-tool apply --app-root ./app/avatar --version v2
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
`configure` also accepts `--from-config PATH`, `--from-legacy DIR`, `--resume` (continue an
|
|
314
|
+
interrupted session) and `--fresh` (force a new slot). `render` takes `--version vX` or
|
|
315
|
+
`--latest`; `apply` requires `--version vX`. `diff` prints a per-file unified diff and prompts
|
|
316
|
+
for each conflict exactly as `update` does; it takes positional refs — `diff v3`, `diff v2 v3`,
|
|
317
|
+
`diff deployed latest` — or raw paths via `--from` / `--to`, and exits `0` when the versions are
|
|
318
|
+
identical or every conflict was resolved, `1` when any file was skipped.
|
|
319
|
+
|
|
320
|
+
`verify` hits the Avatar API `/health/config-full-check` endpoint and sends a test email through
|
|
321
|
+
the `authentik_worker` container. `--test-email` is **required**, the stack must be running, and
|
|
322
|
+
`tasks provision-admin` must have run first — otherwise it reports `API key not found in
|
|
323
|
+
.../generated_files/.secrets/avatar_api_key. Run 'tasks provision-admin' first.` Use `--api-key`
|
|
324
|
+
to supply a key instead of reading one from disk.
|
|
325
|
+
|
|
326
|
+
## Changing a configuration value
|
|
327
|
+
|
|
328
|
+
Put the values you want to change in a YAML file and hand it to `update`. They are layered over
|
|
329
|
+
your current configuration: the keys you list win, everything else is carried forward unchanged.
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
# change.yaml holds only NGINX_SSL_CERTIFICATE_PATH and NGINX_SSL_CERTIFICATE_KEY_PATH
|
|
333
|
+
octopize-deploy-tool update --app-root ./app/avatar --from-config change.yaml
|
|
334
|
+
octopize-deploy-tool start --app-root ./app/avatar
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
Do not edit files under `generated_files/` — they are regenerated on every `update`, and an edit
|
|
338
|
+
there becomes a conflict prompt that blocks the next apply.
|
|
339
|
+
|
|
340
|
+
## Configuration file
|
|
341
|
+
|
|
342
|
+
`install` writes a commented reference to `user_config/config.example.yaml` under the app root.
|
|
343
|
+
Copy it and fill in what you need: only the keys you set are used, everything else falls back to
|
|
344
|
+
the built-in defaults. Its sections are `PUBLIC_URL` and `ENV_NAME`, then commented-out blocks for
|
|
345
|
+
TLS and nginx, SMTP, service image versions, logging and telemetry.
|
|
346
|
+
|
|
347
|
+
Two things the example does not tell you:
|
|
348
|
+
|
|
349
|
+
- **`ORGANIZATION_NAME` is missing from it** and is required. A `--non-interactive` run without it
|
|
350
|
+
stops at `ORGANIZATION_NAME is required but not provided in configuration file`. Add it
|
|
351
|
+
yourself, as below.
|
|
352
|
+
- **The TLS keys the tool reads are `NGINX_SSL_CERTIFICATE_PATH` and
|
|
353
|
+
`NGINX_SSL_CERTIFICATE_KEY_PATH`.** Use those spellings.
|
|
354
|
+
|
|
355
|
+
Storage credentials are not configurable at all — the encryption key and the S3 admin keys are
|
|
356
|
+
generated for you into `generated_files/.secrets/`.
|
|
357
|
+
|
|
358
|
+
A minimal file that installs unattended, and how to use it:
|
|
359
|
+
|
|
360
|
+
```yaml
|
|
361
|
+
PUBLIC_URL: avatar.example.com
|
|
362
|
+
ENV_NAME: company-prod
|
|
363
|
+
ORGANIZATION_NAME: MyCompany
|
|
364
|
+
NGINX_SSL_CERTIFICATE_PATH: /etc/ssl/avatar/server.crt
|
|
365
|
+
NGINX_SSL_CERTIFICATE_KEY_PATH: /etc/ssl/avatar/server.key
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
```bash
|
|
369
|
+
octopize-deploy-tool install --app-root ./app/avatar \
|
|
370
|
+
--from-config ./app/avatar/user_config/config.yaml --non-interactive
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
If exactly one `*.yaml` or `*.yml` file other than `config.example.yaml` sits in `user_config/`
|
|
374
|
+
and `--from-config` was not given, `install` and `update` behave identically: **interactively**
|
|
375
|
+
they ask whether to use it, **non-interactively** they print a notice and ignore it. Automated
|
|
376
|
+
runs should always pass `--from-config` explicitly.
|
|
377
|
+
|
|
378
|
+
## Generated files layout
|
|
379
|
+
|
|
380
|
+
```text
|
|
381
|
+
./app/avatar/
|
|
382
|
+
├── .deployment_states/
|
|
383
|
+
│ ├── currently_deployed -> v1 # symlink, moved by `apply`
|
|
384
|
+
│ └── v1/
|
|
385
|
+
│ ├── deployment_state.yaml # the answers, with the source of each value
|
|
386
|
+
│ └── generated/ # render staging area; `apply` copies out of here
|
|
387
|
+
├── user_config/ # operator-owned; never overwritten by the tool
|
|
388
|
+
│ ├── config.example.yaml
|
|
389
|
+
│ ├── config.yaml # optional, yours to create
|
|
390
|
+
│ └── hooks/ # reserved for future lifecycle hooks
|
|
391
|
+
└── generated_files/ # what Docker Compose actually uses
|
|
392
|
+
├── .env
|
|
393
|
+
├── docker-compose.yml
|
|
394
|
+
├── nginx/nginx.conf
|
|
395
|
+
├── authentik/
|
|
396
|
+
│ ├── octopize-avatar-blueprint.yaml
|
|
397
|
+
│ ├── translations.json
|
|
398
|
+
│ ├── custom-templates/
|
|
399
|
+
│ └── branding/
|
|
400
|
+
└── .secrets/ # 18 generated secret files
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
Every `update` and `migrate` adds a new version slot (`v2/`, `v3/`, …), so previous states and
|
|
404
|
+
renders stay on disk for reference and rollback.
|
|
405
|
+
|
|
406
|
+
## Running via Docker
|
|
407
|
+
|
|
408
|
+
If Python 3.13+ is unavailable, or PyPI is blocked while `quay.io` is not, use the published
|
|
409
|
+
image:
|
|
410
|
+
|
|
411
|
+
```bash
|
|
412
|
+
docker pull quay.io/octopize/deploy-tool:latest
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
Each block below is complete. Copy it as-is, changing only `avatar` (your deployment
|
|
416
|
+
directory) and any value in `<angle brackets>`. The first line reads your Compose plugin path,
|
|
417
|
+
which must be mounted at the same location inside the container.
|
|
418
|
+
|
|
419
|
+
### Install — interactive
|
|
420
|
+
|
|
421
|
+
```bash
|
|
422
|
+
export CP=$(docker info -f '{{range .ClientInfo.Plugins}}{{if eq .Name "compose"}}{{.Path}}{{end}}{{end}}')
|
|
423
|
+
docker run -it --rm --user "$(id -u):$(id -g)" --group-add "$(stat -c '%g' /var/run/docker.sock)" \
|
|
424
|
+
-v "$(pwd)/avatar:/app-root" -v /var/run/docker.sock:/var/run/docker.sock \
|
|
425
|
+
-v "$(which docker):/usr/local/bin/docker:ro" -v "$CP:$CP:ro" \
|
|
426
|
+
quay.io/octopize/deploy-tool:latest install --app-root /app-root
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
### Install — no prompts
|
|
430
|
+
|
|
431
|
+
```bash
|
|
432
|
+
export CP=$(docker info -f '{{range .ClientInfo.Plugins}}{{if eq .Name "compose"}}{{.Path}}{{end}}{{end}}')
|
|
433
|
+
docker run --rm --user "$(id -u):$(id -g)" --group-add "$(stat -c '%g' /var/run/docker.sock)" \
|
|
434
|
+
-v "$(pwd)/avatar:/app-root" -v /var/run/docker.sock:/var/run/docker.sock \
|
|
435
|
+
-v "$(which docker):/usr/local/bin/docker:ro" -v "$CP:$CP:ro" \
|
|
436
|
+
quay.io/octopize/deploy-tool:latest install --app-root /app-root \
|
|
437
|
+
--from-config /app-root/user_config/config.yaml --non-interactive
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
### Start
|
|
441
|
+
|
|
442
|
+
```bash
|
|
443
|
+
export CP=$(docker info -f '{{range .ClientInfo.Plugins}}{{if eq .Name "compose"}}{{.Path}}{{end}}{{end}}')
|
|
444
|
+
docker run --rm --user "$(id -u):$(id -g)" --group-add "$(stat -c '%g' /var/run/docker.sock)" \
|
|
445
|
+
-v "$(pwd)/avatar:/app-root" -v /var/run/docker.sock:/var/run/docker.sock \
|
|
446
|
+
-v "$(which docker):/usr/local/bin/docker:ro" -v "$CP:$CP:ro" \
|
|
447
|
+
quay.io/octopize/deploy-tool:latest start --app-root /app-root
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
### Stop
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
export CP=$(docker info -f '{{range .ClientInfo.Plugins}}{{if eq .Name "compose"}}{{.Path}}{{end}}{{end}}')
|
|
454
|
+
docker run --rm --user "$(id -u):$(id -g)" --group-add "$(stat -c '%g' /var/run/docker.sock)" \
|
|
455
|
+
-v "$(pwd)/avatar:/app-root" -v /var/run/docker.sock:/var/run/docker.sock \
|
|
456
|
+
-v "$(which docker):/usr/local/bin/docker:ro" -v "$CP:$CP:ro" \
|
|
457
|
+
quay.io/octopize/deploy-tool:latest stop --app-root /app-root
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### Verify
|
|
461
|
+
|
|
462
|
+
```bash
|
|
463
|
+
export CP=$(docker info -f '{{range .ClientInfo.Plugins}}{{if eq .Name "compose"}}{{.Path}}{{end}}{{end}}')
|
|
464
|
+
docker run --rm --user "$(id -u):$(id -g)" --group-add "$(stat -c '%g' /var/run/docker.sock)" \
|
|
465
|
+
-v "$(pwd)/avatar:/app-root" -v /var/run/docker.sock:/var/run/docker.sock \
|
|
466
|
+
-v "$(which docker):/usr/local/bin/docker:ro" -v "$CP:$CP:ro" \
|
|
467
|
+
quay.io/octopize/deploy-tool:latest verify --app-root /app-root --test-email <you@company.com>
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
### Uninstall — destroys the deployment and all its data
|
|
471
|
+
|
|
472
|
+
```bash
|
|
473
|
+
export CP=$(docker info -f '{{range .ClientInfo.Plugins}}{{if eq .Name "compose"}}{{.Path}}{{end}}{{end}}')
|
|
474
|
+
docker run -it --rm --user "$(id -u):$(id -g)" --group-add "$(stat -c '%g' /var/run/docker.sock)" \
|
|
475
|
+
-v "$(pwd)/avatar:/app-root" -v /var/run/docker.sock:/var/run/docker.sock \
|
|
476
|
+
-v "$(which docker):/usr/local/bin/docker:ro" -v "$CP:$CP:ro" \
|
|
477
|
+
quay.io/octopize/deploy-tool:latest uninstall --app-root /app-root
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
### Update
|
|
481
|
+
|
|
482
|
+
Needs no Docker access, so no socket or plugin mounts.
|
|
483
|
+
|
|
484
|
+
```bash
|
|
485
|
+
docker run -it --rm --user "$(id -u):$(id -g)" \
|
|
486
|
+
-v "$(pwd)/avatar:/app-root" \
|
|
487
|
+
quay.io/octopize/deploy-tool:latest update --app-root /app-root
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
### Migrate
|
|
491
|
+
|
|
492
|
+
Mount the old flat deployment read-only and pass its container path.
|
|
493
|
+
|
|
494
|
+
```bash
|
|
495
|
+
docker run -it --rm --user "$(id -u):$(id -g)" \
|
|
496
|
+
-v "$(pwd)/avatar-new:/app-root" -v "$(pwd)/avatar-old:/legacy:ro" \
|
|
497
|
+
quay.io/octopize/deploy-tool:latest migrate --app-root /app-root --from-legacy /legacy
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
Notes:
|
|
501
|
+
|
|
502
|
+
- **The Docker CLI is not bundled** in the image; the mounts above supply it and the Compose
|
|
503
|
+
plugin. The official binary is statically linked and works across distributions.
|
|
504
|
+
- **Anything outside the app root needs its own mount**, always passed as its container path —
|
|
505
|
+
e.g. `-v "$(pwd)/config:/input:ro"` with `--from-config /input/config.yaml`.
|
|
506
|
+
- **Enter host paths at the prompts.** Paths you type — TLS certificate, private key — are used
|
|
507
|
+
by Docker Compose on the _host_, so give the host path even though you are typing it inside a
|
|
508
|
+
container. The tool detects that it is running in a container, skips the existence check for
|
|
509
|
+
those paths and prints a notice saying so.
|
|
510
|
+
- **Anything outside the app root needs its own mount**: `-v "$(pwd)/config:/input:ro"` with
|
|
511
|
+
`--from-config /input/config.yaml`, or `-v "$(pwd)/avatar-old:/legacy:ro"` with
|
|
512
|
+
`--from-legacy /legacy` for `migrate`. Always pass the container-side path.
|
|
513
|
+
|
|
514
|
+
## Upgrading from a pre-SSO deployment
|
|
515
|
+
|
|
516
|
+
Older Avatar deployments kept users in the Avatar API database. `migrate` records that they still
|
|
517
|
+
need importing into Authentik, and **the first `start` after a `migrate` offers to do it for
|
|
518
|
+
you**: it previews every operation, asks for confirmation, and runs the import. Nothing has to be
|
|
519
|
+
run by hand.
|
|
520
|
+
|
|
521
|
+
If you decline, the same import is available later:
|
|
522
|
+
|
|
523
|
+
```bash
|
|
524
|
+
octopize-deploy-tool tasks authentik-migrate --from-docker --app-root ./app/avatar
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
`--from-docker` reads users, organizations and licenses straight from the running api container's
|
|
528
|
+
database, so there is no CSV export to produce; **the extracted data is held in memory and never
|
|
529
|
+
written to disk**. The Authentik URL and token come from `generated_files/.env`. `--dry-run`
|
|
530
|
+
previews without changing anything. Users that already carry an `authentik_id` are skipped, so the
|
|
531
|
+
import is safe to re-run.
|
|
532
|
+
|
|
533
|
+
Every run that is not a `--dry-run` does write an operation log — `migration_log.jsonl` unless
|
|
534
|
+
`--log PATH` says otherwise — recording what was attempted and how it ended.
|
|
535
|
+
`--from-log migration_log.jsonl --failed-only` replays just the failures, into
|
|
536
|
+
`migration_log_retry.jsonl` so the original is not overwritten.
|
|
537
|
+
|
|
538
|
+
If you are importing into an Authentik instance this tool did not deploy, or the api container is
|
|
539
|
+
not running, export the three tables to CSV and pass them with `--users`, `--orgs`, `--licenses`,
|
|
540
|
+
`--authentik-url` and `--authentik-token` instead. That path — the SQL to run, and how to mint an
|
|
541
|
+
Authentik API token with the right permissions — is written up in
|
|
542
|
+
[Migrating users into Authentik](https://github.com/octopize/avatar/blob/main/infra/deployment/deployment-tool/docs/authentik-migration.md).
|
|
543
|
+
|
|
544
|
+
## Troubleshooting
|
|
545
|
+
|
|
546
|
+
**Services fail to start.** Inspect the stack directly:
|
|
547
|
+
|
|
548
|
+
```bash
|
|
549
|
+
docker compose -f ./app/avatar/generated_files/docker-compose.yml ps
|
|
550
|
+
docker compose -f ./app/avatar/generated_files/docker-compose.yml logs -f
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
**Containers start but cannot reach each other.** Almost always a Docker HTTP proxy — see the
|
|
554
|
+
`noProxy` note under [Requirements](#requirements). Recreate the containers after fixing it; the
|
|
555
|
+
setting does not affect existing ones.
|
|
556
|
+
|
|
557
|
+
**`install` warns "Volume 'avatar_postgres_data' already exists".** The host still holds data from
|
|
558
|
+
a previous deployment. Use `update` to keep it or `uninstall` to destroy it. Answering `y` at the
|
|
559
|
+
prompt installs on top of it with fresh credentials that will not match that data. A
|
|
560
|
+
`--non-interactive` run does not offer the choice: it stops with `Install aborted by operator
|
|
561
|
+
during pre-flight checks.`
|
|
562
|
+
|
|
563
|
+
**`update` exits with "Apply is blocked until conflicts are resolved".** You have manual edits
|
|
564
|
+
under `generated_files/`. Merge them into `.deployment_states/<vX>/generated/` and run
|
|
565
|
+
`apply --version <vX>` — see [`update`](#update).
|
|
566
|
+
|
|
567
|
+
**`verify` reports "API key not found".** Run `tasks provision-admin` first.
|
|
568
|
+
|
|
569
|
+
**Something needs a closer look.** Add `--verbosity 2` for detailed progress and template output.
|
|
570
|
+
|
|
571
|
+
**Starting over.** `uninstall` is the supported teardown: it is confirmation-gated and removes
|
|
572
|
+
containers, volumes and deployment files together. Running `docker compose down --volumes` by
|
|
573
|
+
hand deletes the Postgres volume — and every avatar, dataset and user account in it — while
|
|
574
|
+
leaving the deployment files behind, so the two fall out of sync. Prefer `uninstall`.
|
|
575
|
+
|
|
576
|
+
## Further information
|
|
577
|
+
|
|
578
|
+
- Deployment documentation:
|
|
579
|
+
<https://docs.octopize.io/docs/deploying/self-hosted/self_installation>
|
|
580
|
+
- Package on PyPI: <https://pypi.org/project/octopize-deploy-tool/>
|
|
581
|
+
- Report a problem: <https://github.com/octopize/avatar/issues>
|
|
582
|
+
|
|
583
|
+
Reference documents live in the repository rather than in the published package, so they need
|
|
584
|
+
access to <https://github.com/octopize/avatar>:
|
|
585
|
+
|
|
586
|
+
- [Migrating users into Authentik](https://github.com/octopize/avatar/blob/main/infra/deployment/deployment-tool/docs/authentik-migration.md)
|
|
587
|
+
— CSV export path, foreign Authentik instances, API tokens
|
|
588
|
+
- [Telemetry](https://github.com/octopize/avatar/blob/main/infra/deployment/deployment-tool/docs/telemetry.md)
|
|
589
|
+
— what is sent, and how to enable, rotate or disable it
|
|
590
|
+
- [Debugging Authentik blueprints](https://github.com/octopize/avatar/blob/main/infra/deployment/deployment-tool/docs/debugging-blueprints.md)
|
|
591
|
+
— when SSO configuration does not take effect
|
|
592
|
+
- [Network topology](https://github.com/octopize/avatar/blob/main/infra/deployment/deployment-tool/docs/network-topology.md)
|
|
593
|
+
— the Compose networks and which services sit on which
|