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.
Files changed (395) hide show
  1. octopize_deploy_tool-3.2.0/PKG-INFO +593 -0
  2. octopize_deploy_tool-3.2.0/README.md +560 -0
  3. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/pyproject.toml +3 -2
  4. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/__init__.py +1 -1
  5. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/apply_command.py +13 -13
  6. 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
  7. octopize_deploy_tool-3.2.0/src/octopize_avatar_deploy/application/authentik_readiness.py +706 -0
  8. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/checks.py +22 -22
  9. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/install_command.py +1 -1
  10. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/migrate_command.py +4 -3
  11. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/tasks/__init__.py +11 -1
  12. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/tasks/create_users.py +18 -14
  13. octopize_deploy_tool-3.2.0/src/octopize_avatar_deploy/application/commands/tasks/provision_admin.py +482 -0
  14. octopize_deploy_tool-3.2.0/src/octopize_avatar_deploy/application/commands/tasks/reconcile_blueprint.py +183 -0
  15. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/tasks/registry.py +27 -0
  16. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/update_command.py +20 -7
  17. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/configure_command.py +18 -11
  18. octopize_deploy_tool-3.2.0/src/octopize_avatar_deploy/application/deployment_markers.py +25 -0
  19. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/ports.py +14 -1
  20. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/start_command.py +62 -7
  21. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/_shared.py +0 -6
  22. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/update.py +4 -1
  23. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/config_resolver.py +43 -1
  24. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/control_flags.py +4 -1
  25. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/defaults.yaml +5 -4
  26. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/configure_preset.py +28 -0
  27. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/deployment_item_registry.py +30 -0
  28. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/docker_client.py +10 -2
  29. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/document_step_runner.py +7 -0
  30. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/noop_docker_client.py +2 -0
  31. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/preset_loader.py +21 -6
  32. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/resources/config.example.yaml +27 -10
  33. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/authentik_blueprint.py +9 -0
  34. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/base.py +5 -0
  35. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/logging.py +5 -0
  36. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/nginx.py +61 -4
  37. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/telemetry.py +63 -25
  38. octopize_deploy_tool-3.2.0/src/octopize_avatar_deploy/templates/.template-version +1 -0
  39. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/_env_fragment_api.template +12 -0
  40. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/api.env.template +5 -0
  41. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/authentik/octopize-avatar-blueprint.yaml +221 -0
  42. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/docker-compose.yml.template +4 -0
  43. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/version_compat.py +1 -1
  44. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/TESTING.md +33 -24
  45. octopize_deploy_tool-3.2.0/tests/e2e/conftest.py +51 -0
  46. octopize_deploy_tool-3.2.0/tests/e2e/test_lifecycle.py +602 -0
  47. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/e2e/test_migrate_start_provision_verify.py +22 -18
  48. octopize_deploy_tool-3.2.0/tests/e2e/test_update_reapplies_blueprint.py +517 -0
  49. octopize_deploy_tool-3.2.0/tests/e2e/user_disable_revokes_api_key.py +380 -0
  50. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/apply_help/output.txt +3 -4
  51. {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
  52. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/configure_help/output.txt +3 -4
  53. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/diff_help/output.txt +3 -4
  54. {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
  55. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/authentik/octopize-avatar-blueprint.yaml +221 -0
  56. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/docker-compose.yml +4 -0
  57. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_help/output.txt +1 -2
  58. {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
  59. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/authentik/octopize-avatar-blueprint.yaml +221 -0
  60. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/docker-compose.yml +4 -0
  61. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/migrate_help/output.txt +1 -2
  62. octopize_deploy_tool-3.2.0/tests/fixtures/non_interactive_no_telemetry/config.yaml +17 -0
  63. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/render_help/output.txt +1 -2
  64. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/start_help/output.txt +2 -4
  65. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/tasks_help/output.txt +2 -1
  66. octopize_deploy_tool-3.2.0/tests/fixtures/tasks_reconcile_blueprint_help/output.txt +24 -0
  67. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_help/output.txt +4 -4
  68. {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
  69. {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
  70. {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
  71. {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
  72. {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
  73. octopize_deploy_tool-3.2.0/tests/fixtures/update_interactive_diff/expected_render_output/authentik/octopize-avatar-blueprint.yaml +1959 -0
  74. {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
  75. octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/.env +101 -0
  76. octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/.needs_blueprint_reconcile +0 -0
  77. {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
  78. octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/octopize-avatar-blueprint.yaml +1959 -0
  79. octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/docker-compose.yml +580 -0
  80. octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_render_output/.env +101 -0
  81. octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/octopize-avatar-blueprint.yaml +1959 -0
  82. octopize_deploy_tool-3.2.0/tests/fixtures/update_noninteractive_clean/expected_render_output/docker-compose.yml +580 -0
  83. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/helpers/fakes.py +25 -2
  84. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/helpers/normalization.py +20 -16
  85. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/integration/test_cli_integration.py +26 -0
  86. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/integration/test_configure_command.py +94 -2
  87. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/integration/test_install_command.py +82 -3
  88. octopize_deploy_tool-3.2.0/tests/integration/test_migrate_without_tls_keys.py +242 -0
  89. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/integration/test_update_command.py +99 -1
  90. octopize_deploy_tool-3.2.0/tests/unit/infra/__init__.py +0 -0
  91. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_document_step_runner.py +81 -0
  92. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_preset_loader.py +97 -0
  93. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_logging.py +34 -1
  94. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_nginx.py +158 -0
  95. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_telemetry.py +61 -9
  96. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_apply_command.py +27 -14
  97. octopize_deploy_tool-3.2.0/tests/unit/test_authentik_login.py +356 -0
  98. octopize_deploy_tool-3.2.0/tests/unit/test_authentik_readiness.py +539 -0
  99. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_config_resolver.py +75 -0
  100. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_configure_command.py +82 -2
  101. octopize_deploy_tool-3.2.0/tests/unit/test_docs_command_references.py +145 -0
  102. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_migrate_command.py +2 -1
  103. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_preflight_checks.py +40 -13
  104. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_provision_admin.py +0 -335
  105. octopize_deploy_tool-3.2.0/tests/unit/test_reconcile_blueprint.py +149 -0
  106. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_start_command.py +136 -5
  107. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_update_command.py +11 -0
  108. octopize_deploy_tool-3.0.0/PKG-INFO +0 -838
  109. octopize_deploy_tool-3.0.0/README.md +0 -805
  110. octopize_deploy_tool-3.0.0/src/octopize_avatar_deploy/application/authentik_readiness.py +0 -434
  111. octopize_deploy_tool-3.0.0/src/octopize_avatar_deploy/templates/.template-version +0 -1
  112. octopize_deploy_tool-3.0.0/tests/e2e/test_install_start_uninstall.py +0 -251
  113. octopize_deploy_tool-3.0.0/tests/fixtures/update_interactive_diff/expected_render_output/authentik/octopize-avatar-blueprint.yaml +0 -1738
  114. octopize_deploy_tool-3.0.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/.env +0 -89
  115. octopize_deploy_tool-3.0.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/authentik/octopize-avatar-blueprint.yaml +0 -1738
  116. octopize_deploy_tool-3.0.0/tests/fixtures/update_noninteractive_clean/expected_apply_output/docker-compose.yml +0 -576
  117. octopize_deploy_tool-3.0.0/tests/fixtures/update_noninteractive_clean/expected_render_output/.env +0 -89
  118. octopize_deploy_tool-3.0.0/tests/fixtures/update_noninteractive_clean/expected_render_output/authentik/octopize-avatar-blueprint.yaml +0 -1738
  119. octopize_deploy_tool-3.0.0/tests/fixtures/update_noninteractive_clean/expected_render_output/docker-compose.yml +0 -576
  120. octopize_deploy_tool-3.0.0/tests/unit/test_authentik_readiness.py +0 -315
  121. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/.gitignore +0 -0
  122. {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
  123. {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
  124. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/infra/deployment/deployment-tool/tests/fixtures/help/output.txt +0 -0
  125. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/infra/deployment/deployment-tool/tests/fixtures/missing_subcommand/output.txt +0 -0
  126. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/__init__.py +0 -0
  127. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/_guards.py +0 -0
  128. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/authentik_env.py +0 -0
  129. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/subcommand_ports.py +0 -0
  130. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/tasks/authentik_migrate.py +0 -0
  131. {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
  132. {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
  133. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/commands/verify_command.py +0 -0
  134. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/configure_resume_policy.py +0 -0
  135. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/deployment_paths.py +0 -0
  136. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/diff_command.py +0 -0
  137. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/polling.py +0 -0
  138. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/render_command.py +0 -0
  139. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/secret_files.py +0 -0
  140. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/stop_command.py +0 -0
  141. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/uninstall_command.py +0 -0
  142. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/application/user_config.py +0 -0
  143. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/authentik_migration.py +0 -0
  144. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cert_generator.py +0 -0
  145. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/certificate_verifier.py +0 -0
  146. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/__init__.py +0 -0
  147. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/__init__.py +0 -0
  148. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/apply.py +0 -0
  149. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/configure.py +0 -0
  150. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/diff.py +0 -0
  151. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/install.py +0 -0
  152. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/migrate.py +0 -0
  153. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/render.py +0 -0
  154. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/start.py +0 -0
  155. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/stop.py +0 -0
  156. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/tasks.py +0 -0
  157. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/uninstall.py +0 -0
  158. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli/handlers/verify.py +0 -0
  159. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli_dependencies.py +0 -0
  160. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/cli_test_harness.py +0 -0
  161. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/deployment_mode.py +0 -0
  162. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/__init__.py +0 -0
  163. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/deployment_item.py +0 -0
  164. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/deployment_state.py +0 -0
  165. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/generation.py +0 -0
  166. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/placement.py +0 -0
  167. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/validation.py +0 -0
  168. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/domain/version_id.py +0 -0
  169. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/download_templates.py +0 -0
  170. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/environment.py +0 -0
  171. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/exceptions.py +0 -0
  172. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/__init__.py +0 -0
  173. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/cert_infra.py +0 -0
  174. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/current_version_resolver.py +0 -0
  175. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/env_file_reader.py +0 -0
  176. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/filesystem.py +0 -0
  177. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/filesystem_legacy_source.py +0 -0
  178. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/filesystem_user_config_scaffolder.py +0 -0
  179. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/httpx2_http_client.py +0 -0
  180. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/in_memory_state_repository.py +0 -0
  181. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/package_defaults_source.py +0 -0
  182. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/package_template_provider.py +0 -0
  183. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/package_version_provider.py +0 -0
  184. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/system_clock.py +0 -0
  185. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/yaml_config_source.py +0 -0
  186. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/infra/yaml_state_repository.py +0 -0
  187. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/input_gatherer.py +0 -0
  188. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/normalizers.py +0 -0
  189. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/output_spec.py +0 -0
  190. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/printer.py +0 -0
  191. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/public_url.py +0 -0
  192. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/renderer.py +0 -0
  193. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/resources/__init__.py +0 -0
  194. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/secret_factory.py +0 -0
  195. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/self_signed_ssl.py +0 -0
  196. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/__init__.py +0 -0
  197. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/authentik.py +0 -0
  198. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/database.py +0 -0
  199. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/email.py +0 -0
  200. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/required.py +0 -0
  201. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/service_urls.py +0 -0
  202. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/storage.py +0 -0
  203. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/steps/user.py +0 -0
  204. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/template_provisioning.py +0 -0
  205. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/.env.template +0 -0
  206. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/_env_fragment_infra.template +0 -0
  207. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/_env_fragment_web.template +0 -0
  208. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/authentik/branding/favicon.ico +0 -0
  209. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/authentik/branding/logo.png +0 -0
  210. {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
  211. {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
  212. {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
  213. {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
  214. {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
  215. {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
  216. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/authentik/translations.json +0 -0
  217. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/compose.override.yaml.template +0 -0
  218. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/nginx.conf.template +0 -0
  219. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/python_client.env.template +0 -0
  220. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/templates/web.env.template +0 -0
  221. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/tls_types.py +0 -0
  222. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/topology_urls.py +0 -0
  223. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/url_contract.py +0 -0
  224. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/src/octopize_avatar_deploy/verbosity.py +0 -0
  225. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/__init__.py +0 -0
  226. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/conftest.py +0 -0
  227. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/e2e/__init__.py +0 -0
  228. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/__init__.py +0 -0
  229. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/authentik_migration/licenses.csv +0 -0
  230. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/authentik_migration/organizations.csv +0 -0
  231. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/authentik_migration/users.csv +0 -0
  232. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/configure_happy_path/input.yaml +0 -0
  233. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/configure_happy_path/output.txt +0 -0
  234. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/diff_integration/from/.env +0 -0
  235. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/diff_integration/from/nginx/nginx.conf +0 -0
  236. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/diff_integration/output.txt +0 -0
  237. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/diff_integration/to/.env +0 -0
  238. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/diff_integration/to/docker-compose.yml +0 -0
  239. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/diff_integration/to/nginx/nginx.conf +0 -0
  240. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.env +0 -0
  241. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/admin_emails +0 -0
  242. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/authjwt_secret_key +0 -0
  243. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/clevercloud_sso_salt +0 -0
  244. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/db_admin_password +0 -0
  245. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/db_admin_user +0 -0
  246. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/db_name +0 -0
  247. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/db_password +0 -0
  248. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/db_user +0 -0
  249. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/file_jwt_secret_key +0 -0
  250. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/organization_name +0 -0
  251. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/pepper +0 -0
  252. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/e2e/legacy_deployment/.secrets/smtp_password +0 -0
  253. {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
  254. {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
  255. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/help/output.txt +0 -0
  256. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/.permissions.json +0 -0
  257. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/authentik/branding/favicon.ico +0 -0
  258. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/authentik/branding/logo.png +0 -0
  259. {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
  260. {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
  261. {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
  262. {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
  263. {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
  264. {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
  265. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/authentik/translations.json +0 -0
  266. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_apply_output/nginx/nginx.conf +0 -0
  267. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/.permissions.json +0 -0
  268. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/authentik/branding/favicon.ico +0 -0
  269. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/authentik/branding/logo.png +0 -0
  270. {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
  271. {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
  272. {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
  273. {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
  274. {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
  275. {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
  276. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/authentik/translations.json +0 -0
  277. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/install_render_output/nginx/nginx.conf +0 -0
  278. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/missing_subcommand/output.txt +0 -0
  279. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/non_interactive_complete/config.yaml +0 -0
  280. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/stop_help/output.txt +0 -0
  281. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/tasks_authentik_migrate_help/output.txt +0 -0
  282. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/tasks_create_self_signed_cert_help/output.txt +0 -0
  283. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/tasks_create_users_help/output.txt +0 -0
  284. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/tasks_provision_admin_help/output.txt +0 -0
  285. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/uninstall_help/output.txt +0 -0
  286. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/base_v1/generated_files/.env +0 -0
  287. /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
  288. {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
  289. {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
  290. {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
  291. {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
  292. {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
  293. {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
  294. {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
  295. {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
  296. {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
  297. {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
  298. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_interactive_diff/expected_render_output/.permissions.json +0 -0
  299. {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
  300. {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
  301. {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
  302. {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
  303. {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
  304. {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
  305. {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
  306. {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
  307. {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
  308. {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
  309. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/base_v1/generated_files/.env +0 -0
  310. {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
  311. {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
  312. {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
  313. {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
  314. {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
  315. {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
  316. {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
  317. {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
  318. {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
  319. {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
  320. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/update_noninteractive_clean/expected_render_output/.permissions.json +0 -0
  321. {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
  322. {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
  323. {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
  324. {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
  325. {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
  326. {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
  327. {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
  328. {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
  329. {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
  330. {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
  331. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/fixtures/verify_help/output.txt +0 -0
  332. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/helpers/__init__.py +0 -0
  333. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/helpers/fixture_dir_comparison.py +0 -0
  334. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/helpers/printers.py +0 -0
  335. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/helpers/steps.py +0 -0
  336. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/helpers/tls_fixtures.py +0 -0
  337. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/integration/__init__.py +0 -0
  338. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/integration/test_create_self_signed_cert_task.py +0 -0
  339. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/integration/test_diff_command.py +0 -0
  340. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/test_cli_harness.py +0 -0
  341. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/conftest.py +0 -0
  342. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_docker_client.py +0 -0
  343. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_filesystem.py +0 -0
  344. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_filesystem_legacy_source.py +0 -0
  345. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_httpx2_http_client.py +0 -0
  346. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_yaml_config_source.py +0 -0
  347. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/infra/test_yaml_deployment_state_repository.py +0 -0
  348. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_authentik.py +0 -0
  349. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_authentik_blueprint.py +0 -0
  350. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_database.py +0 -0
  351. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_email.py +0 -0
  352. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_required.py +0 -0
  353. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_service_urls.py +0 -0
  354. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_storage.py +0 -0
  355. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/steps/test_user.py +0 -0
  356. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_authentik_client.py +0 -0
  357. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_authentik_env.py +0 -0
  358. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_authentik_migrate_command.py +0 -0
  359. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_authentik_migrate_for_docker.py +0 -0
  360. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_authentik_migrate_parsers.py +0 -0
  361. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_authentik_migration.py +0 -0
  362. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_cert_generator.py +0 -0
  363. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_certificate_verifier.py +0 -0
  364. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_cli_verify_ssl.py +0 -0
  365. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_compare_helpers.py +0 -0
  366. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_config_resolver_consistency.py +0 -0
  367. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_create_self_signed_cert_task.py +0 -0
  368. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_create_users.py +0 -0
  369. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_deployment_item.py +0 -0
  370. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_diff_command.py +0 -0
  371. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_environment.py +0 -0
  372. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_generation.py +0 -0
  373. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_generic_prompt.py +0 -0
  374. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_input_gatherer.py +0 -0
  375. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_install_command.py +0 -0
  376. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_normalizers.py +0 -0
  377. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_output_spec.py +0 -0
  378. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_placement.py +0 -0
  379. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_polling.py +0 -0
  380. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_printer.py +0 -0
  381. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_public_url.py +0 -0
  382. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_render_command.py +0 -0
  383. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_renderer.py +0 -0
  384. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_rich_implementations.py +0 -0
  385. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_secret_factory.py +0 -0
  386. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_secret_files.py +0 -0
  387. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_select_authentik_migrate_parser.py +0 -0
  388. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_stop_command.py +0 -0
  389. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_task_registry.py +0 -0
  390. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_uninstall_command.py +0 -0
  391. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_user_config.py +0 -0
  392. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_validation.py +0 -0
  393. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_verify_command.py +0 -0
  394. {octopize_deploy_tool-3.0.0 → octopize_deploy_tool-3.2.0}/tests/unit/test_version_id.py +0 -0
  395. {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