├── .config ├── constraints.txt ├── dictionary.txt ├── pydoclint-baseline.txt ├── requirements-docs.in ├── requirements-test.in └── requirements.in ├── .darglint ├── .env ├── .flake8 ├── .git_archival.txt ├── .gitattributes ├── .github ├── CODEOWNERS ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── documentation_report.md │ ├── feature_request.md │ └── security_bug_report.md ├── SECURITY.md ├── chronographer.yml ├── dependabot.yml ├── images │ └── test_tree_view.png ├── release-drafter.yml └── workflows │ ├── ack.yml │ ├── push.yml │ ├── release.yml │ └── tox.yml ├── .gitignore ├── .markdownlint.yaml ├── .pre-commit-config.yaml ├── .prettierignore ├── .prettierrc.yml ├── .readthedocs.yml ├── .sonarcloud.properties ├── .taplo.toml ├── .vscode ├── extensions.json ├── launch.json └── settings.json ├── .yamllint ├── CHANGELOG.md ├── LICENSE ├── MANIFEST.in ├── README.md ├── ansible.cfg ├── codecov.yml ├── cspell.config.yaml ├── docs ├── .generated │ └── .gitignore ├── _ext │ └── regenerate_docs.py ├── contributing │ ├── community.md │ ├── guidelines.md │ ├── images │ │ └── test_tree_view.png │ └── security.md ├── faq.md ├── index.md ├── installation.md ├── settings.md └── subcommands.md ├── licenses ├── LICENSE.asottile_tm_tokenize.all.txt ├── LICENSE.dark_vs.json.txt ├── LICENSE.source.json.json.txt ├── LICENSE.source.shell.json.txt ├── LICENSE.source.yaml.json.txt ├── LICENSE.text.html.basic.json.txt ├── LICENSE.text.html.derivative.json.txt ├── LICENSE.text.html.markdown.json.txt └── LICENSE.text.log.json.txt ├── mkdocs.yml ├── pyproject.toml ├── src └── ansible_navigator │ ├── __init__.py │ ├── __main__.py │ ├── _version.pyi │ ├── _version_doc_cache.py │ ├── action_base.py │ ├── action_defs.py │ ├── action_runner.py │ ├── actions │ ├── __init__.py │ ├── _actions.py │ ├── back.py │ ├── builder.py │ ├── collections.py │ ├── config.py │ ├── doc.py │ ├── exec.py │ ├── filter.py │ ├── help_doc.py │ ├── images.py │ ├── inventory.py │ ├── lint.py │ ├── log.py │ ├── open_file.py │ ├── quit.py │ ├── refresh.py │ ├── replay.py │ ├── rerun.py │ ├── run.py │ ├── sample_form.py │ ├── sample_notification.py │ ├── sample_working.py │ ├── save.py │ ├── select.py │ ├── serialize_json.py │ ├── serialize_yaml.py │ ├── settings.py │ ├── stdout.py │ ├── template.py │ ├── welcome.py │ └── write_file.py │ ├── app_public.py │ ├── cli.py │ ├── command_runner │ ├── __init__.py │ └── command_runner.py │ ├── configuration_subsystem │ ├── __init__.py │ ├── configurator.py │ ├── definitions.py │ ├── defs_presentable.py │ ├── navigator_configuration.py │ ├── navigator_post_processor.py │ ├── parser.py │ ├── transform.py │ └── utils.py │ ├── constants.py │ ├── content_defs.py │ ├── data │ ├── __init__.py │ ├── ansible-navigator.json │ ├── catalog_collections.py │ ├── grammar │ │ ├── JSON.tmLanguage.json │ │ ├── html-derivative.tmLanguage.json │ │ ├── html.tmLanguage.json │ │ ├── log.tmLanguage.json │ │ ├── markdown.tmLanguage.json │ │ ├── shell-unix-bash.tmLanguage.json │ │ ├── source.json.json │ │ ├── source.shell.json │ │ ├── source.yaml.json │ │ ├── text.html.basic.json │ │ ├── text.html.derivative.json │ │ ├── text.html.markdown.json │ │ ├── text.log.json │ │ └── yaml.tmLanguage.json │ ├── help.md │ ├── image_introspect.py │ ├── images_dockerfile │ ├── python_latest.sh │ ├── settings-sample.template.yml │ ├── settings-schema.partial.json │ ├── themes │ │ ├── dark_vs.json │ │ └── terminal_colors.json │ └── welcome.md │ ├── diagnostics.py │ ├── image_manager │ ├── __init__.py │ ├── inspector.py │ ├── introspector.py │ └── puller.py │ ├── initialization.py │ ├── logger.py │ ├── py.typed │ ├── runner │ ├── __init__.py │ ├── ansible_config.py │ ├── ansible_doc.py │ ├── ansible_inventory.py │ ├── base.py │ ├── command.py │ ├── command_async.py │ └── command_base.py │ ├── steps.py │ ├── tm_tokenize │ ├── LICENSE │ ├── __init__.py │ ├── _types.py │ ├── compiler.py │ ├── fchainmap.py │ ├── grammars.py │ ├── reg.py │ ├── region.py │ ├── rules.py │ ├── state.py │ ├── tokenize.py │ └── utils.py │ ├── ui_framework │ ├── __init__.py │ ├── colorize.py │ ├── curses_defs.py │ ├── curses_window.py │ ├── field_button.py │ ├── field_checks.py │ ├── field_curses_information.py │ ├── field_information.py │ ├── field_option.py │ ├── field_radio.py │ ├── field_text.py │ ├── field_working.py │ ├── form.py │ ├── form_defs.py │ ├── form_handler_button.py │ ├── form_handler_information.py │ ├── form_handler_options.py │ ├── form_handler_text.py │ ├── form_handler_working.py │ ├── form_utils.py │ ├── menu_builder.py │ ├── sentinels.py │ ├── ui.py │ ├── ui_config.py │ ├── ui_constants.py │ ├── utils.py │ └── validators.py │ ├── utils │ ├── __init__.py │ ├── ansi.py │ ├── compatibility.py │ ├── definitions.py │ ├── dict_merge.py │ ├── dot_paths.py │ ├── functions.py │ ├── json_schema.py │ ├── key_value_store.py │ ├── packaged_data.py │ ├── print.py │ ├── serialize.py │ └── version_migration │ │ ├── __init__.py │ │ ├── definitions.py │ │ ├── migrate.py │ │ ├── settings_file.py │ │ └── v1_v2_settings_file.py │ └── version.py ├── tests ├── __init__.py ├── conftest.py ├── defaults.py ├── fixtures │ ├── ansible.cfg │ ├── common │ │ ├── builder │ │ │ └── test_ee │ │ │ │ └── execution-environment.yml │ │ ├── collections │ │ │ └── ansible_collections │ │ │ │ └── company_name │ │ │ │ ├── coll_1 │ │ │ │ ├── galaxy.yml │ │ │ │ ├── playbooks │ │ │ │ │ └── playbook_1.yaml │ │ │ │ ├── plugins │ │ │ │ │ ├── filter │ │ │ │ │ │ ├── coll_1.py │ │ │ │ │ │ └── filter_1.yml │ │ │ │ │ ├── lookup │ │ │ │ │ │ └── lookup_1.py │ │ │ │ │ └── modules │ │ │ │ │ │ └── mod_1.py │ │ │ │ └── roles │ │ │ │ │ ├── role_full │ │ │ │ │ ├── README.md │ │ │ │ │ ├── defaults │ │ │ │ │ │ └── main.yml │ │ │ │ │ └── meta │ │ │ │ │ │ ├── argument_specs.yml │ │ │ │ │ │ └── main.yml │ │ │ │ │ ├── role_minimum │ │ │ │ │ ├── README.md │ │ │ │ │ └── meta │ │ │ │ │ │ └── main.yml │ │ │ │ │ └── role_missing │ │ │ │ │ └── _README.md │ │ │ │ └── coll_2 │ │ │ │ ├── galaxy.yml │ │ │ │ └── plugins │ │ │ │ ├── lookup │ │ │ │ └── lookup_2.py │ │ │ │ └── modules │ │ │ │ └── mod_2.py │ │ └── module_1.py │ ├── integration │ │ ├── actions │ │ │ ├── builder │ │ │ │ └── test_stdout_tmux.py │ │ │ │ │ └── test │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 2.json │ │ │ │ │ ├── 3.json │ │ │ │ │ ├── 4.json │ │ │ │ │ ├── 5.json │ │ │ │ │ ├── 6.json │ │ │ │ │ └── 7.json │ │ │ ├── collections │ │ │ │ ├── test_direct_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 14.json │ │ │ │ │ │ ├── 15.json │ │ │ │ │ │ ├── 16.json │ │ │ │ │ │ ├── 17.json │ │ │ │ │ │ ├── 18.json │ │ │ │ │ │ ├── 19.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 20.json │ │ │ │ │ │ ├── 21.json │ │ │ │ │ │ ├── 22.json │ │ │ │ │ │ ├── 23.json │ │ │ │ │ │ ├── 24.json │ │ │ │ │ │ ├── 25.json │ │ │ │ │ │ ├── 26.json │ │ │ │ │ │ ├── 27.json │ │ │ │ │ │ ├── 28.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_direct_interactive_ee_with_volmount.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 14.json │ │ │ │ │ │ ├── 15.json │ │ │ │ │ │ ├── 16.json │ │ │ │ │ │ ├── 17.json │ │ │ │ │ │ ├── 18.json │ │ │ │ │ │ ├── 19.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 20.json │ │ │ │ │ │ ├── 21.json │ │ │ │ │ │ ├── 22.json │ │ │ │ │ │ ├── 23.json │ │ │ │ │ │ ├── 24.json │ │ │ │ │ │ ├── 25.json │ │ │ │ │ │ ├── 26.json │ │ │ │ │ │ ├── 27.json │ │ │ │ │ │ ├── 28.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_direct_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 14.json │ │ │ │ │ │ ├── 15.json │ │ │ │ │ │ ├── 16.json │ │ │ │ │ │ ├── 17.json │ │ │ │ │ │ ├── 18.json │ │ │ │ │ │ ├── 19.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 20.json │ │ │ │ │ │ ├── 21.json │ │ │ │ │ │ ├── 22.json │ │ │ │ │ │ ├── 23.json │ │ │ │ │ │ ├── 24.json │ │ │ │ │ │ ├── 25.json │ │ │ │ │ │ ├── 26.json │ │ │ │ │ │ ├── 27.json │ │ │ │ │ │ ├── 28.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_welcome_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 14.json │ │ │ │ │ │ ├── 15.json │ │ │ │ │ │ ├── 16.json │ │ │ │ │ │ ├── 17.json │ │ │ │ │ │ ├── 18.json │ │ │ │ │ │ ├── 19.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 20.json │ │ │ │ │ │ ├── 21.json │ │ │ │ │ │ ├── 22.json │ │ │ │ │ │ ├── 23.json │ │ │ │ │ │ ├── 24.json │ │ │ │ │ │ ├── 25.json │ │ │ │ │ │ ├── 26.json │ │ │ │ │ │ ├── 27.json │ │ │ │ │ │ ├── 28.json │ │ │ │ │ │ ├── 29.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ └── test_welcome_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 10.json │ │ │ │ │ ├── 11.json │ │ │ │ │ ├── 12.json │ │ │ │ │ ├── 13.json │ │ │ │ │ ├── 14.json │ │ │ │ │ ├── 15.json │ │ │ │ │ ├── 16.json │ │ │ │ │ ├── 17.json │ │ │ │ │ ├── 18.json │ │ │ │ │ ├── 19.json │ │ │ │ │ ├── 2.json │ │ │ │ │ ├── 20.json │ │ │ │ │ ├── 21.json │ │ │ │ │ ├── 22.json │ │ │ │ │ ├── 23.json │ │ │ │ │ ├── 24.json │ │ │ │ │ ├── 25.json │ │ │ │ │ ├── 26.json │ │ │ │ │ ├── 27.json │ │ │ │ │ ├── 28.json │ │ │ │ │ ├── 29.json │ │ │ │ │ ├── 3.json │ │ │ │ │ ├── 4.json │ │ │ │ │ ├── 5.json │ │ │ │ │ ├── 6.json │ │ │ │ │ ├── 7.json │ │ │ │ │ ├── 8.json │ │ │ │ │ └── 9.json │ │ │ ├── config │ │ │ │ ├── ansible.cfg │ │ │ │ ├── test_direct_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ └── 8.json │ │ │ │ ├── test_direct_interactive_ee_using_cfg.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ └── 1.json │ │ │ │ ├── test_direct_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ └── 8.json │ │ │ │ ├── test_stdout_tmux.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_welcome_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_welcome_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_welcome_interactive_param_use.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ └── 3.json │ │ │ │ ├── test_welcome_interactive_specified_config.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ └── 3.json │ │ │ │ └── using_ansible_cfg │ │ │ │ │ └── ansible.cfg │ │ │ ├── doc │ │ │ │ ├── test_direct_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── filter_doc_pass │ │ │ │ │ │ └── 0.json │ │ │ │ │ │ ├── lookup_doc_pass │ │ │ │ │ │ └── 0.json │ │ │ │ │ │ ├── module_doc_fail │ │ │ │ │ │ └── 0.json │ │ │ │ │ │ └── module_doc_pass │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ └── 1.json │ │ │ │ ├── test_direct_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── filter_doc_pass │ │ │ │ │ │ └── 0.json │ │ │ │ │ │ ├── lookup_doc_pass │ │ │ │ │ │ └── 0.json │ │ │ │ │ │ ├── module_doc_fail │ │ │ │ │ │ └── 0.json │ │ │ │ │ │ └── module_doc_pass │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ └── 1.json │ │ │ │ ├── test_stdout.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── filter_doc_with_ee │ │ │ │ │ │ └── 0.json │ │ │ │ │ │ ├── filter_doc_without_ee │ │ │ │ │ │ └── 0.json │ │ │ │ │ │ ├── lookup_doc_with_ee │ │ │ │ │ │ └── 0.json │ │ │ │ │ │ ├── lookup_doc_without_ee │ │ │ │ │ │ └── 0.json │ │ │ │ │ │ ├── module_doc_with_ee │ │ │ │ │ │ └── 0.json │ │ │ │ │ │ └── module_doc_without_ee │ │ │ │ │ │ └── 0.json │ │ │ │ ├── test_welcome_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── filter_doc_pass │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ └── 1.json │ │ │ │ │ │ ├── lookup_doc_pass │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ └── 1.json │ │ │ │ │ │ ├── module_doc_fail │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ └── 1.json │ │ │ │ │ │ └── module_doc_pass │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ └── 2.json │ │ │ │ └── test_welcome_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ ├── filter_doc_pass │ │ │ │ │ ├── 0.json │ │ │ │ │ └── 1.json │ │ │ │ │ ├── lookup_doc_pass │ │ │ │ │ ├── 0.json │ │ │ │ │ └── 1.json │ │ │ │ │ ├── module_doc_fail │ │ │ │ │ ├── 0.json │ │ │ │ │ └── 1.json │ │ │ │ │ └── module_doc_pass │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ └── 2.json │ │ │ ├── exec │ │ │ │ ├── ansible-navigator.yaml │ │ │ │ ├── test_stdout_cli.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ └── 3.json │ │ │ │ ├── test_stdout_config_cli.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ └── 3.json │ │ │ │ ├── test_stdout_config_file.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ └── 2.json │ │ │ │ ├── test_stdout_file.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ └── 2.json │ │ │ │ └── test_stdout_vault.py │ │ │ │ │ └── test │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 2.json │ │ │ │ │ ├── 3.json │ │ │ │ │ ├── 4.json │ │ │ │ │ └── 5.json │ │ │ ├── images │ │ │ │ ├── test_direct_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_direct_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_stdout_tmux.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ └── 4.json │ │ │ │ ├── test_welcome_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 14.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ └── test_welcome_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 10.json │ │ │ │ │ ├── 11.json │ │ │ │ │ ├── 12.json │ │ │ │ │ ├── 13.json │ │ │ │ │ ├── 14.json │ │ │ │ │ ├── 2.json │ │ │ │ │ ├── 3.json │ │ │ │ │ ├── 4.json │ │ │ │ │ ├── 5.json │ │ │ │ │ ├── 6.json │ │ │ │ │ ├── 7.json │ │ │ │ │ ├── 8.json │ │ │ │ │ └── 9.json │ │ │ ├── inventory │ │ │ │ ├── ansible-navigator.yml │ │ │ │ ├── ansible_inventory │ │ │ │ │ ├── group_vars │ │ │ │ │ │ └── group01 │ │ │ │ │ │ │ └── main.yml │ │ │ │ │ ├── host_vars │ │ │ │ │ │ ├── host0101 │ │ │ │ │ │ │ └── test.yml │ │ │ │ │ │ ├── host0201 │ │ │ │ │ │ │ └── test.yml │ │ │ │ │ │ └── host0301 │ │ │ │ │ │ │ └── test.yml │ │ │ │ │ └── inventory.yml │ │ │ │ ├── broken_inventory.ini │ │ │ │ ├── broken_inventory.yml │ │ │ │ ├── test_direct_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 14.json │ │ │ │ │ │ ├── 15.json │ │ │ │ │ │ ├── 16.json │ │ │ │ │ │ ├── 17.json │ │ │ │ │ │ ├── 18.json │ │ │ │ │ │ ├── 19.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 20.json │ │ │ │ │ │ ├── 21.json │ │ │ │ │ │ ├── 22.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_direct_interactive_ee_errors.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ └── 4.json │ │ │ │ ├── test_direct_interactive_ee_using_cfg.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ └── 1.json │ │ │ │ ├── test_direct_interactive_ee_using_plugin.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ └── 1.json │ │ │ │ ├── test_direct_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 14.json │ │ │ │ │ │ ├── 15.json │ │ │ │ │ │ ├── 16.json │ │ │ │ │ │ ├── 17.json │ │ │ │ │ │ ├── 18.json │ │ │ │ │ │ ├── 19.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 20.json │ │ │ │ │ │ ├── 21.json │ │ │ │ │ │ ├── 22.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_direct_interactive_noee_errors.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ └── 4.json │ │ │ │ ├── test_direct_interactive_noee_using_cfg.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ └── 1.json │ │ │ │ ├── test_direct_interactive_noee_using_plugin.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ └── 1.json │ │ │ │ ├── test_stdout_tmux.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ └── 5.json │ │ │ │ ├── test_welcome_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 14.json │ │ │ │ │ │ ├── 15.json │ │ │ │ │ │ ├── 16.json │ │ │ │ │ │ ├── 17.json │ │ │ │ │ │ ├── 18.json │ │ │ │ │ │ ├── 19.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 20.json │ │ │ │ │ │ ├── 21.json │ │ │ │ │ │ ├── 22.json │ │ │ │ │ │ ├── 23.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_welcome_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 14.json │ │ │ │ │ │ ├── 15.json │ │ │ │ │ │ ├── 16.json │ │ │ │ │ │ ├── 17.json │ │ │ │ │ │ ├── 18.json │ │ │ │ │ │ ├── 19.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 20.json │ │ │ │ │ │ ├── 21.json │ │ │ │ │ │ ├── 22.json │ │ │ │ │ │ ├── 23.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── using_ansible_cfg │ │ │ │ │ ├── ansible.cfg │ │ │ │ │ └── inventory.yml │ │ │ │ └── using_plugin │ │ │ │ │ ├── ansible.cfg │ │ │ │ │ ├── collections │ │ │ │ │ └── ansible_collections │ │ │ │ │ │ └── test │ │ │ │ │ │ └── test │ │ │ │ │ │ └── plugins │ │ │ │ │ │ └── inventory │ │ │ │ │ │ └── test.py │ │ │ │ │ └── test_inventory.yml │ │ │ ├── lint │ │ │ │ ├── borked │ │ │ │ │ ├── playbook.yml │ │ │ │ │ └── roles │ │ │ │ │ │ ├── uh-huh │ │ │ │ │ │ └── tasks │ │ │ │ │ │ │ └── main.yml │ │ │ │ │ │ └── yep │ │ │ │ │ │ └── tasks │ │ │ │ │ │ └── main.yml │ │ │ │ ├── no_errors │ │ │ │ │ ├── playbook.yml │ │ │ │ │ └── roles │ │ │ │ │ │ └── no-errors-here │ │ │ │ │ │ └── tasks │ │ │ │ │ │ └── main.yml │ │ │ │ ├── test_direct_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ └── 2.json │ │ │ │ ├── test_direct_interactive_no_errors_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ └── 0.json │ │ │ │ ├── test_direct_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ └── 2.json │ │ │ │ ├── test_stdout_tmux.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ └── 1.json │ │ │ │ ├── test_welcome_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ └── 3.json │ │ │ │ └── test_welcome_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 2.json │ │ │ │ │ └── 3.json │ │ │ ├── replay │ │ │ │ ├── ansible-navigator.yml │ │ │ │ ├── playbook-artifact.json │ │ │ │ ├── test_direct_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ └── 6.json │ │ │ │ ├── test_direct_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ └── 6.json │ │ │ │ ├── test_welcome_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ └── 7.json │ │ │ │ └── test_welcome_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 2.json │ │ │ │ │ ├── 3.json │ │ │ │ │ ├── 4.json │ │ │ │ │ ├── 5.json │ │ │ │ │ ├── 6.json │ │ │ │ │ └── 7.json │ │ │ ├── run │ │ │ │ ├── inventory │ │ │ │ ├── site.yaml │ │ │ │ ├── test_direct_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_direct_interactive_ee_collection.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_direct_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_direct_interactive_noee_collection.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_stdout_tmux.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_welcome_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 14.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_welcome_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 10.json │ │ │ │ │ │ ├── 11.json │ │ │ │ │ │ ├── 12.json │ │ │ │ │ │ ├── 13.json │ │ │ │ │ │ ├── 14.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── using_ansible_cfg │ │ │ │ │ ├── ansible.cfg │ │ │ │ │ ├── inventory.yml │ │ │ │ │ └── site.yml │ │ │ │ └── vars │ │ │ │ │ └── external_vars.yaml │ │ │ ├── run_unicode │ │ │ │ ├── inventory │ │ │ │ ├── site.yaml │ │ │ │ ├── test_direct_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ ├── test_direct_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ └── test_stdout_tmux.py │ │ │ │ │ └── test │ │ │ │ │ ├── 0.json │ │ │ │ │ └── 1.json │ │ │ ├── settings │ │ │ │ ├── test_direct_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ └── 8.json │ │ │ │ ├── test_direct_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ └── 8.json │ │ │ │ ├── test_stdout_tmux.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ └── 6.json │ │ │ │ ├── test_welcome_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ ├── 5.json │ │ │ │ │ │ ├── 6.json │ │ │ │ │ │ ├── 7.json │ │ │ │ │ │ ├── 8.json │ │ │ │ │ │ └── 9.json │ │ │ │ └── test_welcome_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 2.json │ │ │ │ │ ├── 3.json │ │ │ │ │ ├── 4.json │ │ │ │ │ ├── 5.json │ │ │ │ │ ├── 6.json │ │ │ │ │ ├── 7.json │ │ │ │ │ ├── 8.json │ │ │ │ │ └── 9.json │ │ │ ├── stdout │ │ │ │ ├── ansible-navigator.yml │ │ │ │ ├── site.yml │ │ │ │ ├── test_direct_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ └── 4.json │ │ │ │ ├── test_direct_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ └── 4.json │ │ │ │ ├── test_welcome_interactive_ee.py │ │ │ │ │ └── test │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ ├── 3.json │ │ │ │ │ │ ├── 4.json │ │ │ │ │ │ └── 5.json │ │ │ │ └── test_welcome_interactive_noee.py │ │ │ │ │ └── test │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 2.json │ │ │ │ │ ├── 3.json │ │ │ │ │ ├── 4.json │ │ │ │ │ └── 5.json │ │ │ └── templar │ │ │ │ ├── test_direct_interactive_ee.py │ │ │ │ └── test │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 10.json │ │ │ │ │ ├── 2.json │ │ │ │ │ ├── 3.json │ │ │ │ │ ├── 4.json │ │ │ │ │ ├── 5.json │ │ │ │ │ ├── 6.json │ │ │ │ │ ├── 7.json │ │ │ │ │ ├── 8.json │ │ │ │ │ └── 9.json │ │ │ │ ├── test_direct_interactive_ee_readme.py │ │ │ │ └── test │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 2.json │ │ │ │ │ ├── 3.json │ │ │ │ │ ├── 4.json │ │ │ │ │ ├── 5.json │ │ │ │ │ └── 6.json │ │ │ │ ├── test_direct_interactive_noee.py │ │ │ │ └── test │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 10.json │ │ │ │ │ ├── 2.json │ │ │ │ │ ├── 3.json │ │ │ │ │ ├── 4.json │ │ │ │ │ ├── 5.json │ │ │ │ │ ├── 6.json │ │ │ │ │ ├── 7.json │ │ │ │ │ ├── 8.json │ │ │ │ │ └── 9.json │ │ │ │ ├── test_welcome_interactive_ee.py │ │ │ │ └── test │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 10.json │ │ │ │ │ ├── 11.json │ │ │ │ │ ├── 2.json │ │ │ │ │ ├── 3.json │ │ │ │ │ ├── 4.json │ │ │ │ │ ├── 5.json │ │ │ │ │ ├── 6.json │ │ │ │ │ ├── 7.json │ │ │ │ │ ├── 8.json │ │ │ │ │ └── 9.json │ │ │ │ └── test_welcome_interactive_noee.py │ │ │ │ └── test │ │ │ │ ├── 0.json │ │ │ │ ├── 1.json │ │ │ │ ├── 10.json │ │ │ │ ├── 11.json │ │ │ │ ├── 2.json │ │ │ │ ├── 3.json │ │ │ │ ├── 4.json │ │ │ │ ├── 5.json │ │ │ │ ├── 6.json │ │ │ │ ├── 7.json │ │ │ │ ├── 8.json │ │ │ │ └── 9.json │ │ ├── ansible-navigator_empty.yml │ │ ├── execution_environment │ │ │ ├── ansible-navigator_disable_ee.yml │ │ │ ├── ansible-navigator_empty.yml │ │ │ ├── inventory.yml │ │ │ └── site.yml │ │ ├── execution_environment_image │ │ │ ├── ansible-navigator_empty.yml │ │ │ ├── ansible-navigator_set_ee_image.yml │ │ │ ├── inventory.yml │ │ │ └── site.yml │ │ ├── pass_environment_variable │ │ │ ├── ansible-navigator.yml │ │ │ ├── ansible-navigator_empty.yml │ │ │ ├── inventory.yml │ │ │ └── site.yml │ │ ├── set_environment_variable │ │ │ ├── ansible-navigator.yml │ │ │ ├── ansible-navigator_empty.yml │ │ │ ├── inventory.yml │ │ │ └── site.yml │ │ ├── stdout_exit_codes │ │ │ └── site.yml │ │ └── version_migration │ │ │ ├── ansible-navigator.v1 │ │ │ ├── ansible-navigator_1.1.json │ │ │ ├── ansible-navigator_1.1.yaml │ │ │ ├── ansible-navigator_1.1_corrected.json │ │ │ ├── ansible-navigator_1.1_corrected.yaml │ │ │ ├── ansible-navigator_all.yml │ │ │ ├── ansible-navigator_all_corrected.yml │ │ │ ├── ansible-navigator_some.yml │ │ │ └── ansible-navigator_some_corrected.yml │ └── unit │ │ ├── cli │ │ ├── ansible-navigator.yml │ │ └── ansible-navigator_empty.yml │ │ └── configuration_subsystem │ │ ├── ansible-navigator.yml │ │ ├── ansible-navigator_broken.yml │ │ ├── ansible-navigator_empty.yml │ │ ├── ansible-navigator_no_app.yml │ │ ├── ansible-navigator_not_bool.yml │ │ └── ansible-navigator_unknown_key.yml ├── integration │ ├── __init__.py │ ├── _action_run_test.py │ ├── _cli2runner.py │ ├── _common.py │ ├── _interactions.py │ ├── _tmux_session.py │ ├── actions │ │ ├── __init__.py │ │ ├── builder │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ └── test_stdout_tmux.py │ │ ├── collections │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── test_direct_interactive_ee.py │ │ │ ├── test_direct_interactive_ee_with_volmount.py │ │ │ ├── test_direct_interactive_noee.py │ │ │ ├── test_mode_stdout.py │ │ │ ├── test_welcome_interactive_ee.py │ │ │ └── test_welcome_interactive_noee.py │ │ ├── config │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── test_direct_interactive_ee.py │ │ │ ├── test_direct_interactive_ee_using_cfg.py │ │ │ ├── test_direct_interactive_noee.py │ │ │ ├── test_stdout_tmux.py │ │ │ ├── test_welcome_interactive_ee.py │ │ │ ├── test_welcome_interactive_noee.py │ │ │ ├── test_welcome_interactive_param_use.py │ │ │ └── test_welcome_interactive_specified_config.py │ │ ├── doc │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── test_direct_interactive_ee.py │ │ │ ├── test_direct_interactive_noee.py │ │ │ ├── test_stdout.py │ │ │ ├── test_stdout_subprocess.py │ │ │ ├── test_welcome_interactive_ee.py │ │ │ └── test_welcome_interactive_noee.py │ │ ├── exec │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── test_stdout_cli.py │ │ │ ├── test_stdout_file.py │ │ │ └── test_stdout_vault.py │ │ ├── images │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── test_direct_interactive_ee.py │ │ │ ├── test_direct_interactive_noee.py │ │ │ ├── test_stdout_tmux.py │ │ │ ├── test_welcome_interactive_ee.py │ │ │ └── test_welcome_interactive_noee.py │ │ ├── inventory │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── test_direct_interactive_ee.py │ │ │ ├── test_direct_interactive_ee_errors.py │ │ │ ├── test_direct_interactive_ee_using_cfg.py │ │ │ ├── test_direct_interactive_ee_using_plugin.py │ │ │ ├── test_direct_interactive_noee.py │ │ │ ├── test_direct_interactive_noee_errors.py │ │ │ ├── test_direct_interactive_noee_using_cfg.py │ │ │ ├── test_direct_interactive_noee_using_plugin.py │ │ │ ├── test_stdout_tmux.py │ │ │ ├── test_welcome_interactive_ee.py │ │ │ └── test_welcome_interactive_noee.py │ │ ├── lint │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── test_direct_interactive_ee.py │ │ │ ├── test_direct_interactive_no_errors_ee.py │ │ │ ├── test_direct_interactive_noee.py │ │ │ ├── test_stdout_tmux.py │ │ │ ├── test_welcome_interactive_ee.py │ │ │ └── test_welcome_interactive_noee.py │ │ ├── replay │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── test_direct_interactive_ee.py │ │ │ ├── test_direct_interactive_noee.py │ │ │ ├── test_welcome_interactive_ee.py │ │ │ └── test_welcome_interactive_noee.py │ │ ├── run │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── test_direct_interactive_ee.py │ │ │ ├── test_direct_interactive_ee_collection.py │ │ │ ├── test_direct_interactive_noee.py │ │ │ ├── test_direct_interactive_noee_collection.py │ │ │ ├── test_stdout_tmux.py │ │ │ ├── test_welcome_interactive_ee.py │ │ │ └── test_welcome_interactive_noee.py │ │ ├── run_unicode │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── test_direct_interactive_ee.py │ │ │ ├── test_direct_interactive_noee.py │ │ │ ├── test_stdout_tmux.py │ │ │ ├── test_welcome_interactive_ee.py │ │ │ └── test_welcome_interactive_noee.py │ │ ├── settings │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── test_direct_interactive_ee.py │ │ │ ├── test_direct_interactive_noee.py │ │ │ ├── test_stdout_tmux.py │ │ │ ├── test_welcome_interactive_ee.py │ │ │ └── test_welcome_interactive_noee.py │ │ ├── stdout │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── test_direct_interactive_ee.py │ │ │ ├── test_direct_interactive_noee.py │ │ │ ├── test_welcome_interactive_ee.py │ │ │ └── test_welcome_interactive_noee.py │ │ └── templar │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── test_direct_interactive_ee.py │ │ │ ├── test_direct_interactive_ee_readme.py │ │ │ ├── test_direct_interactive_noee.py │ │ │ ├── test_welcome_interactive_ee.py │ │ │ └── test_welcome_interactive_noee.py │ ├── conftest.py │ ├── diagnostics │ │ ├── __init__.py │ │ └── test_from_cli.py │ ├── settings_from_cli │ │ ├── __init__.py │ │ └── test_json_schema_errors.py │ ├── test_execution_environment.py │ ├── test_execution_environment_image.py │ ├── test_pass_environment_variable.py │ ├── test_set_environment_variable.py │ ├── test_stdout_exit_codes.py │ └── version_migration │ │ ├── __init__.py │ │ └── test_v1_v2_settings.py ├── smoke │ └── no_test_dependencies.py └── unit │ ├── __init__.py │ ├── actions │ ├── __init__.py │ ├── collections │ │ └── test_collection_doc_cache_path.py │ ├── run │ │ ├── __init__.py │ │ ├── test_artifact.py │ │ └── test_runner_async.py │ ├── settings │ │ ├── __init__.py │ │ └── test_settings.py │ ├── test_config.py │ ├── test_exec.py │ └── test_inventory.py │ ├── configuration_subsystem │ ├── __init__.py │ ├── conftest.py │ ├── data.py │ ├── defaults.py │ ├── post_processors │ │ ├── __init__.py │ │ ├── test_execution_environment_volume_mounts.py │ │ ├── test_inventory.py │ │ ├── test_playbook_artifact_save_as.py │ │ └── test_time_zone.py │ ├── test_ansible_config_parse.py │ ├── test_broken_settings.py │ ├── test_configurator.py │ ├── test_container_engine_auto.py │ ├── test_entries_sanity.py │ ├── test_fixture_sanity.py │ ├── test_internals.py │ ├── test_invalid_params.py │ ├── test_json_schema.py │ ├── test_mode_subcommand_action.py │ ├── test_navigator_post_processor.py │ ├── test_posix_message_queue.py │ ├── test_precedence.py │ ├── test_presentable.py │ ├── test_previous_cli.py │ ├── test_sample_configurations.py │ ├── test_settings_effective.py │ ├── test_settings_sample.py │ ├── test_settings_sources.py │ └── utils.py │ ├── image_manager │ ├── __init__.py │ └── test_image_puller.py │ ├── logger │ ├── __init__.py │ ├── test_append.py │ └── test_time_zone.py │ ├── runner │ └── __init__.py │ ├── test_catalog_collections.py │ ├── test_circular_imports.py │ ├── test_cli.py │ ├── test_image_introspection.py │ ├── test_typestep.py │ ├── ui_framework │ ├── __init__.py │ ├── test_colorize.py │ └── test_progress_bar.py │ └── utils │ ├── __init__.py │ ├── conftest.py │ ├── test_dict_merge.py │ ├── test_dockerfile.py │ ├── test_dot_paths.py │ ├── test_functions.py │ ├── test_key_value_store.py │ ├── test_serialize_dataclass.py │ ├── test_serialize_yaml.py │ └── test_unserializable.py ├── tools └── report-coverage └── tox.ini /.config/requirements-docs.in: -------------------------------------------------------------------------------- 1 | mkdocs-ansible >= 24.3.0 2 | -------------------------------------------------------------------------------- /.config/requirements-test.in: -------------------------------------------------------------------------------- 1 | ansible-core 2 | coverage-enable-subprocess 3 | coverage[toml]>=7.4.3 4 | darglint 5 | flake8-docstrings 6 | libtmux>=0.36.0 7 | pre-commit 8 | pytest-env 9 | pytest-mock 10 | pytest-plus # implements PYTEST_REQPASS 11 | pytest-subtests 12 | pytest-xdist 13 | -------------------------------------------------------------------------------- /.config/requirements.in: -------------------------------------------------------------------------------- 1 | ansible-builder >=3.0.0 2 | ansible-runner >=2.3.1, <3 3 | ansible-lint >=6.19.0 4 | jinja2 5 | jsonschema 6 | onigurumacffi >=1.1.0, <2 7 | pyyaml 8 | setuptools >= 63.1.0; python_version >= '3.11' 9 | tzdata 10 | -------------------------------------------------------------------------------- /.darglint: -------------------------------------------------------------------------------- 1 | [darglint] 2 | # NOTE: All `darglint` styles except for `sphinx` hit ridiculously low 3 | # NOTE: performance on some of the in-project Python modules. 4 | # Refs: 5 | # * https://github.com/terrencepreilly/darglint/issues/186 6 | docstring_style = sphinx 7 | strictness = full 8 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | # Should be loaded automatically by mise/asdf/direnv. This file does not 2 | # support the full shell syntax. 3 | # 4 | # PWD is supposed to be the directory container the .env file based on the 5 | # specs. This trick should isolate our testing from user environment. 6 | ANSIBLE_HOME=$PWD/.ansible 7 | ANSIBLE_CONFIG=$PWD/ansible.cfg 8 | ANSIBLE_NAVIGATOR_CONFIG=/dev/null 9 | 10 | # pytest-plus checks that we do not pass yet 11 | PYTEST_CHECK_TEST_DUPLICATE=0 12 | PYTEST_CHECK_TEST_ID_REGEX=0 13 | PYTEST_MAX_TEST_ID_LENGTH=0 14 | -------------------------------------------------------------------------------- /.git_archival.txt: -------------------------------------------------------------------------------- 1 | # The name of this file is hardcoded in the setuptools_scm_git_archive 2 | # package as the source of ref-name replacement when converting tags to 3 | # version information. See the __init__.py file for the package. 4 | # When the archive is built this file will contain the 5 | # %D ref names without the " (", ")" wrapping. 6 | # Documented as a placeholder if git-log 7 | 8 | # The contents of this file can be tested for a dictionary returned 9 | # >>> from setuptools_scm.utils import data_from_mime 10 | # >>> data_from_mime(".git_archival.txt") 11 | # A dict of key-value pairs of the below should be returned. 12 | 13 | ref-names: HEAD -> main 14 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Needed for setuptools-scm-git-archive 2 | # It instructs git to expand placeholder when adding the 3 | # .git_archival.txt file to an archive. 4 | .git_archival.txt export-subst 5 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @ansible/devtools 2 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Community Code of Conduct 2 | 3 | Please see the official 4 | [Ansible Community Code of Conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html). 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "📝 Documentation Report" 3 | about: Ask us about docs 4 | labels: documentation, new 5 | --- 6 | 7 | 12 | 13 | ##### ISSUE TYPE 14 | 15 | - Doc issue 16 | 17 | ##### SUMMARY 18 | 19 | 20 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "✨ Feature request" 3 | about: Suggest an idea for this project 4 | labels: enhancement, new 5 | --- 6 | 7 | 12 | 13 | ##### ISSUE TYPE 14 | 15 | - Feature Idea 16 | 17 | ##### SUMMARY 18 | 19 | 20 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/security_bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F525 Security bug report" 3 | about: How to report security vulnerabilities 4 | labels: new 5 | --- 6 | 7 | For all security related bugs, email security@ansible.com instead of using this 8 | issue tracker and you will receive a prompt response. 9 | 10 | For more information on the Ansible community's practices regarding responsible 11 | disclosure, see https://www.ansible.com/security 12 | -------------------------------------------------------------------------------- /.github/SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Ansible Navigator does not backport security fixes only applying them to the 6 | main branch and making the next patch release in the stream. 7 | 8 | ## Reporting a Vulnerability 9 | 10 | We encourage responsible disclosure practices for security vulnerabilities. 11 | Please read our [policies for reporting bugs] [bug reports policy] if you want 12 | to report a security issue that might affect Ansible. 13 | 14 | [bug reports policy]: 15 | https://docs.ansible.com/ansible/devel/community/reporting_bugs_and_features.html#reporting-a-bug 16 | -------------------------------------------------------------------------------- /.github/chronographer.yml: -------------------------------------------------------------------------------- 1 | --- 2 | enforce_name: 3 | suffix: .md 4 | exclude: 5 | humans: 6 | - pyup-bot 7 | -------------------------------------------------------------------------------- /.github/images/test_tree_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansible/ansible-navigator/e155a5d0c88d94aa2f11d535df8c1201e3e2f0e3/.github/images/test_tree_view.png -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | # see https://github.com/ansible-community/devtools 2 | _extends: ansible-community/devtools 3 | -------------------------------------------------------------------------------- /.github/workflows/ack.yml: -------------------------------------------------------------------------------- 1 | # See https://github.com/ansible-community/devtools/blob/main/.github/workflows/ack.yml 2 | name: ack 3 | on: 4 | pull_request_target: 5 | types: [opened, labeled, unlabeled, synchronize] 6 | 7 | jobs: 8 | ack: 9 | uses: ansible/team-devtools/.github/workflows/ack.yml@main 10 | secrets: inherit 11 | -------------------------------------------------------------------------------- /.github/workflows/push.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: push 3 | on: 4 | push: 5 | branches: 6 | - main 7 | - "releases/**" 8 | - "stable/**" 9 | 10 | jobs: 11 | ack: 12 | uses: ansible/team-devtools/.github/workflows/push.yml@main 13 | -------------------------------------------------------------------------------- /.markdownlint.yaml: -------------------------------------------------------------------------------- 1 | default: true 2 | 3 | # We rely on prettier to do the rewrapping of long lines. 4 | MD013: false 5 | 6 | # See https://github.com/prettier/prettier/issues/14515 7 | MD030: 8 | ol_single: 2 9 | ol_multi: 2 10 | 11 | # Apparently complains about use of '!!! notice' 12 | MD046: false 13 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Stuff we don't want priettier to ever to look into 2 | .git/ 3 | .tox/ 4 | .mypy_cache/ 5 | build/ 6 | 7 | # Environments 8 | .env 9 | .venv 10 | env/ 11 | venv/ 12 | ENV/ 13 | env.bak/ 14 | venv.bak/ 15 | 16 | # Tracked but not manually edited 17 | tests/fixtures/integration/actions/**/*.json 18 | tests/fixtures/integration/version_migration/*.json 19 | tests/fixtures/integration/version_migration/*.yml 20 | tests/fixtures/integration/version_migration/*.yaml 21 | 22 | src/ansible_navigator/data/grammar/**/*.json 23 | 24 | # Tracked but manually formatted 25 | src/ansible_navigator/data/help.md 26 | src/ansible_navigator/data/welcome.md 27 | 28 | # generated 29 | src/ansible_navigator/data/ansible-navigator.json 30 | 31 | # WIP 32 | CHANGELOG.md 33 | README.md 34 | 35 | # mkdocs 36 | site/ 37 | docs/.generated 38 | -------------------------------------------------------------------------------- /.prettierrc.yml: -------------------------------------------------------------------------------- 1 | overrides: 2 | - files: "*.md" 3 | options: 4 | proseWrap: always 5 | -------------------------------------------------------------------------------- /.readthedocs.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: 2 3 | 4 | mkdocs: 5 | fail_on_warning: true 6 | configuration: mkdocs.yml 7 | 8 | build: 9 | os: ubuntu-24.04 10 | tools: 11 | python: "3.11" 12 | commands: 13 | - pip install --user tox 14 | - python3 -m tox -e docs -- build --strict --site-dir=_readthedocs/html/ 15 | python: 16 | install: 17 | - method: pip 18 | path: tox 19 | - method: pip 20 | path: . 21 | extra_requirements: 22 | - docs 23 | submodules: 24 | include: all 25 | recursive: true 26 | -------------------------------------------------------------------------------- /.sonarcloud.properties: -------------------------------------------------------------------------------- 1 | sonar.python.version=3.10, 3.11, 3.12, 3.13 2 | sonar.sources=src/ 3 | sonar.tests=tests/ 4 | -------------------------------------------------------------------------------- /.taplo.toml: -------------------------------------------------------------------------------- 1 | [formatting] 2 | # cspell: disable-next-line 3 | # compatibility between toml-sort-fix pre-commit hook and panekj.even-betterer-toml extension 4 | align_comments = false 5 | array_trailing_comma = false 6 | compact_arrays = true 7 | compact_entries = false 8 | compact_inline_tables = true 9 | inline_table_expand = false 10 | reorder_keys = true 11 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "charliermarsh.ruff", 4 | "esbenp.prettier-vscode", 5 | "gruntfuggly.triggertaskonsave", 6 | "markis.code-coverage", 7 | "ms-python.debugpy", 8 | "ms-python.mypy-type-checker", 9 | "ms-python.pylint", 10 | "ms-python.python", 11 | "sonarsource.sonarlint-vscode", 12 | "streetsidesoftware.code-spell-checker", 13 | "tamasfe.even-better-toml" 14 | ], 15 | "unwantedRecommendations": ["ms-python.black-formatter"] 16 | } 17 | -------------------------------------------------------------------------------- /.yamllint: -------------------------------------------------------------------------------- 1 | ignore: | 2 | .tox 3 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to Ansible Navigator will be documented in this file. 4 | 5 | Please see the [release notes](https://github.com/ansible/ansible-navigator/releases) 6 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | recursive-include src/ansible_navigator/data * 2 | prune tests 3 | -------------------------------------------------------------------------------- /ansible.cfg: -------------------------------------------------------------------------------- 1 | # User during testing to ensure local user config does not affect testing 2 | -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | --- 2 | coverage: 3 | status: 4 | patch: true # we want github annotations 5 | # The given ignore files are either not tested/tracked currently or cannot be tested at all 6 | # therefore adding them to the ignore list 7 | ignore: 8 | - "src/ansible_navigator/actions" 9 | - "src/ansible_navigator/data/catalog_collections.py" 10 | - "src/ansible_navigator/version.py" 11 | -------------------------------------------------------------------------------- /docs/.generated/.gitignore: -------------------------------------------------------------------------------- 1 | *.* 2 | -------------------------------------------------------------------------------- /docs/contributing/guidelines.md: -------------------------------------------------------------------------------- 1 | ../../.github/CONTRIBUTING.md -------------------------------------------------------------------------------- /docs/contributing/images/test_tree_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansible/ansible-navigator/e155a5d0c88d94aa2f11d535df8c1201e3e2f0e3/docs/contributing/images/test_tree_view.png -------------------------------------------------------------------------------- /docs/contributing/security.md: -------------------------------------------------------------------------------- 1 | ../../.github/SECURITY.md -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # Ansible Navigator Documentation 2 | 3 | `ansible-navigator` is a command-line tool and a text-based user interface (TUI) 4 | for creating, reviewing, running and troubleshooting Ansible content, including 5 | inventories, playbooks, collections, documentation and container images 6 | (execution environments). 7 | 8 | A demo of the interface can be found [on YouTube][yt demo]. 9 | 10 | [yt demo]: https://www.youtube.com/watch?v=J9PBKi8ydi4 11 | 12 | To learn how to easily start leveraging the container technology with 13 | `ansible-navigator`, see the 14 | [Getting started with Execution Environments guide](https://docs.ansible.com/ansible/devel/getting_started_ee/index.html). 15 | 16 | - [Installation](installation.md) 17 | - [Settings](settings.md) 18 | - [Subcommands](subcommands.md) 19 | - [FAQ](faq.md) 20 | 21 | Contributions 22 | 23 | - [Code Of Conduct](contributing/community.md) 24 | - [Security](contributing/security.md) 25 | - [Guidelines](contributing/guidelines.md) 26 | -------------------------------------------------------------------------------- /licenses/LICENSE.text.html.basic.json.txt: -------------------------------------------------------------------------------- 1 | Permission to copy, use, modify, sell and distribute this 2 | software is granted. This software is provided "as is" without 3 | express or implied warranty, and with no claim as to its 4 | suitability for any purpose. 5 | -------------------------------------------------------------------------------- /licenses/LICENSE.text.html.derivative.json.txt: -------------------------------------------------------------------------------- 1 | Permission to copy, use, modify, sell and distribute this 2 | software is granted. This software is provided "as is" without 3 | express or implied warranty, and with no claim as to its 4 | suitability for any purpose. 5 | -------------------------------------------------------------------------------- /src/ansible_navigator/__init__.py: -------------------------------------------------------------------------------- 1 | """The ansible-navigator application.""" 2 | -------------------------------------------------------------------------------- /src/ansible_navigator/__main__.py: -------------------------------------------------------------------------------- 1 | """A runpy entry point for ansible-navigator. 2 | 3 | This makes it possible to invoke CLI 4 | via :command:`python3 -m ansible_navigator`. 5 | """ 6 | 7 | from .cli import main 8 | 9 | 10 | if __name__ == "__main__": 11 | main() 12 | -------------------------------------------------------------------------------- /src/ansible_navigator/_version.pyi: -------------------------------------------------------------------------------- 1 | """Stub (interface) file for ``_version.py``. 2 | 3 | Provides type hint PEP 484 information for the ``_version.py`` 4 | file because it is generated by setuptools_scm and may 5 | not exist when type checking is done and will not 6 | contain type hint information. 7 | """ # noqa: PYI021 8 | 9 | version: str 10 | -------------------------------------------------------------------------------- /src/ansible_navigator/_version_doc_cache.py: -------------------------------------------------------------------------------- 1 | """Version information for ansible-navigator collection doc cache. 2 | 3 | Note: 4 | ``__version_collection_doc_cache__``: 5 | 6 | Indicates the version of the schema of the collection doc cache 7 | this is checked during initialization, if the version of the cache 8 | differs from below, the cache will be rebuilt. This should be 9 | incremented when the schema changes and need not correspond to the 10 | application version, although keeping the major in sync is probably 11 | not a bad idea to minimize the amount of stale docs in the user's cache 12 | """ 13 | 14 | __version_collection_doc_cache__ = "1.1" 15 | -------------------------------------------------------------------------------- /src/ansible_navigator/action_defs.py: -------------------------------------------------------------------------------- 1 | """Pre-defined objects used by actions.""" 2 | 3 | from __future__ import annotations 4 | 5 | from typing import NamedTuple 6 | 7 | 8 | class RunReturn(NamedTuple): 9 | """The base return object for any action's run method.""" 10 | 11 | #: A message to display immediately before exiting 12 | message: str 13 | #: The return code for the for the process 14 | return_code: int 15 | 16 | 17 | class RunInteractiveReturn(RunReturn): 18 | """The return object for an action's run interactive method.""" 19 | 20 | 21 | class RunStdoutReturn(RunReturn): 22 | """The return object for an action's run stdout method.""" 23 | 24 | 25 | ActionReturn = RunReturn | RunInteractiveReturn | RunStdoutReturn 26 | -------------------------------------------------------------------------------- /src/ansible_navigator/actions/replay.py: -------------------------------------------------------------------------------- 1 | """Replay subcommand implementation. 2 | 3 | A stub, the logic is used from ``:run``, only here as a place 4 | to put the kegex. 5 | """ 6 | 7 | from . import _actions as actions 8 | from .run import Action as BaseAction 9 | 10 | 11 | @actions.register 12 | class Action(BaseAction): 13 | """``:replay`` command implementation.""" 14 | 15 | KEGEX = r"""(?x) 16 | ^ 17 | (?Prep(?:lay)? 18 | (\s(?P\S+))?) 19 | $""" 20 | -------------------------------------------------------------------------------- /src/ansible_navigator/app_public.py: -------------------------------------------------------------------------------- 1 | """A carrier for app internals. 2 | 3 | This will be shared with other actions and is immutable. 4 | """ 5 | 6 | from __future__ import annotations 7 | 8 | from typing import TYPE_CHECKING 9 | from typing import NamedTuple 10 | 11 | 12 | if TYPE_CHECKING: 13 | from collections.abc import Callable 14 | 15 | from .configuration_subsystem.definitions import ApplicationConfiguration 16 | from .steps import Steps 17 | 18 | 19 | class AppPublic(NamedTuple): 20 | """A carrier class for app internals. 21 | 22 | This will be shared with other actions and is immutable. 23 | """ 24 | 25 | # Quoted due to https://github.com/sphinx-doc/sphinx/issues/10400 26 | args: ApplicationConfiguration 27 | name: str 28 | rerun: Callable[[], None] 29 | stdout: list[str] 30 | steps: Steps 31 | update: Callable[..., None] 32 | write_artifact: Callable[..., None] 33 | -------------------------------------------------------------------------------- /src/ansible_navigator/command_runner/__init__.py: -------------------------------------------------------------------------------- 1 | """Command_runner.""" 2 | 3 | from .command_runner import Command 4 | from .command_runner import CommandRunner 5 | 6 | 7 | __all__ = ( 8 | "Command", 9 | "CommandRunner", 10 | ) 11 | -------------------------------------------------------------------------------- /src/ansible_navigator/configuration_subsystem/__init__.py: -------------------------------------------------------------------------------- 1 | """The configuration subsystem for Ansible Navigator.""" 2 | 3 | from .configurator import Configurator 4 | from .definitions import Constants 5 | from .definitions import SettingsEntry 6 | from .definitions import SettingsFileType 7 | from .definitions import SettingsSchemaType 8 | from .defs_presentable import PresentableSettingsEntries 9 | from .defs_presentable import PresentableSettingsEntry 10 | from .navigator_configuration import NavigatorConfiguration 11 | from .transform import to_effective 12 | from .transform import to_presentable 13 | from .transform import to_sample 14 | from .transform import to_schema 15 | from .transform import to_sources 16 | 17 | 18 | __all__ = ( 19 | "Configurator", 20 | "Constants", 21 | "NavigatorConfiguration", 22 | "PresentableSettingsEntries", 23 | "PresentableSettingsEntry", 24 | "SettingsEntry", 25 | "SettingsFileType", 26 | "SettingsSchemaType", 27 | "to_effective", 28 | "to_presentable", 29 | "to_sample", 30 | "to_schema", 31 | "to_sources", 32 | ) 33 | -------------------------------------------------------------------------------- /src/ansible_navigator/constants.py: -------------------------------------------------------------------------------- 1 | """Constants for ansible-navigator.""" 2 | 3 | import importlib.resources as importlib_resources 4 | 5 | from ansible_navigator.utils.compatibility import Traversable 6 | 7 | 8 | PKG_NAME: str = "ansible_navigator" 9 | DATA_DIR: Traversable = importlib_resources.files(PKG_NAME).joinpath("data") 10 | 11 | THEME_DIR: Traversable = DATA_DIR.joinpath("themes") 12 | THEME_NAME: str = "dark_vs.json" 13 | THEME_PATH: Traversable = THEME_DIR.joinpath(THEME_NAME) 14 | 15 | TERMINAL_COLORS: str = "terminal_colors.json" 16 | TERMINAL_COLORS_PATH: Traversable = THEME_DIR.joinpath(TERMINAL_COLORS) 17 | 18 | GRAMMAR_DIR: Traversable = DATA_DIR.joinpath("grammar") 19 | -------------------------------------------------------------------------------- /src/ansible_navigator/data/__init__.py: -------------------------------------------------------------------------------- 1 | """Ansible navigator setting schema file.""" 2 | -------------------------------------------------------------------------------- /src/ansible_navigator/data/grammar/source.json.json: -------------------------------------------------------------------------------- 1 | JSON.tmLanguage.json -------------------------------------------------------------------------------- /src/ansible_navigator/data/grammar/source.shell.json: -------------------------------------------------------------------------------- 1 | shell-unix-bash.tmLanguage.json -------------------------------------------------------------------------------- /src/ansible_navigator/data/grammar/source.yaml.json: -------------------------------------------------------------------------------- 1 | yaml.tmLanguage.json -------------------------------------------------------------------------------- /src/ansible_navigator/data/grammar/text.html.basic.json: -------------------------------------------------------------------------------- 1 | html.tmLanguage.json -------------------------------------------------------------------------------- /src/ansible_navigator/data/grammar/text.html.derivative.json: -------------------------------------------------------------------------------- 1 | html-derivative.tmLanguage.json -------------------------------------------------------------------------------- /src/ansible_navigator/data/grammar/text.html.markdown.json: -------------------------------------------------------------------------------- 1 | markdown.tmLanguage.json -------------------------------------------------------------------------------- /src/ansible_navigator/data/grammar/text.log.json: -------------------------------------------------------------------------------- 1 | log.tmLanguage.json -------------------------------------------------------------------------------- /src/ansible_navigator/data/images_dockerfile: -------------------------------------------------------------------------------- 1 | # This file is structured like a multi stage build 2 | 3 | # The names ('as') need to correspond the the ImageEntry enum in utils/package_data.py 4 | FROM ghcr.io/ansible/community-ansible-dev-tools:latest as DEFAULT_EE 5 | 6 | # This is also hard coded in tests/fixtures/integration/execution_environment_image/ansible-navigator_set_ee_image.yml 7 | FROM quay.io/fedora/python-313:latest as SMALL_IMAGE 8 | 9 | FROM registry.hub.docker.com/library/alpine:latest as PULLABLE_IMAGE 10 | -------------------------------------------------------------------------------- /src/ansible_navigator/data/python_latest.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Find the latest Python version installed 4 | find_latest_python() { 5 | # Get all python executables in the PATH and sort them 6 | PYTHON_EXECUTABLE=$(compgen -c python | grep -E '^python[0-9]+(\.[0-9]+)?$' | sort -V | tail -n 1) 7 | 8 | # Check if any Python executable was found 9 | if [[ -z "$PYTHON_EXECUTABLE" ]]; then 10 | echo "No Python executable found on the system." 11 | return 1 12 | fi 13 | 14 | return 0 15 | } 16 | 17 | # Use the latest Python executable 18 | run_with_latest_python() { 19 | find_latest_python 20 | if [[ $? -ne 0 ]]; then 21 | exit 1 22 | fi 23 | 24 | # Run a Python script or use the Python shell 25 | "$PYTHON_EXECUTABLE" "$@" 26 | } 27 | 28 | # Pass arguments to the script 29 | run_with_latest_python "$@" 30 | -------------------------------------------------------------------------------- /src/ansible_navigator/data/themes/terminal_colors.json: -------------------------------------------------------------------------------- 1 | { 2 | "terminal.ansiBlack": "#000000", 3 | "terminal.ansiRed": "#cd3131", 4 | "terminal.ansiGreen": "#0DBC79", 5 | "terminal.ansiYellow": "#e5e510", 6 | "terminal.ansiBlue": "#2472c8", 7 | "terminal.ansiMagenta": "#bc3fbc", 8 | "terminal.ansiCyan": "#11a8cd", 9 | "terminal.ansiWhite": "#e5e5e5", 10 | "terminal.ansiBrightBlack": "#666666", 11 | "terminal.ansiBrightRed": "#f14c4c", 12 | "terminal.ansiBrightGreen": "#23d18b", 13 | "terminal.ansiBrightYellow": "#f5f543", 14 | "terminal.ansiBrightBlue": "#d670d6", 15 | "terminal.ansiBrightMagenta": "#d670d6", 16 | "terminal.ansiBrightCyan": "#29b8db", 17 | "terminal.ansiBrightWhite": "#e5e5e5" 18 | } 19 | -------------------------------------------------------------------------------- /src/ansible_navigator/image_manager/__init__.py: -------------------------------------------------------------------------------- 1 | """Image manager.""" 2 | 3 | from .inspector import inspect_all 4 | from .puller import ImagePuller 5 | 6 | 7 | __all__ = ( 8 | "ImagePuller", 9 | "inspect_all", 10 | ) 11 | -------------------------------------------------------------------------------- /src/ansible_navigator/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansible/ansible-navigator/e155a5d0c88d94aa2f11d535df8c1201e3e2f0e3/src/ansible_navigator/py.typed -------------------------------------------------------------------------------- /src/ansible_navigator/runner/__init__.py: -------------------------------------------------------------------------------- 1 | """Public entry points for the runner api.""" 2 | 3 | from .ansible_config import AnsibleConfig 4 | from .ansible_doc import AnsibleDoc 5 | from .ansible_inventory import AnsibleInventory 6 | from .command import Command 7 | from .command_async import CommandAsync 8 | 9 | 10 | __all__ = ( 11 | "AnsibleConfig", 12 | "AnsibleDoc", 13 | "AnsibleInventory", 14 | "Command", 15 | "CommandAsync", 16 | ) 17 | -------------------------------------------------------------------------------- /src/ansible_navigator/runner/command.py: -------------------------------------------------------------------------------- 1 | """Herein lies the ability to have ansible-runner run a command in a synchronous manner.""" 2 | 3 | from __future__ import annotations 4 | 5 | from ansible_runner import run_command 6 | 7 | from .command_base import CommandBase 8 | 9 | 10 | class Command(CommandBase): 11 | """A runner wrapper.""" 12 | 13 | def run(self) -> tuple[str, str, int]: 14 | """Run command. 15 | 16 | Returns: 17 | Output, error, and error code 18 | """ 19 | self.generate_run_command_args() 20 | out, err, ret_code = run_command(**self._runner_args) 21 | return out, err, ret_code 22 | -------------------------------------------------------------------------------- /src/ansible_navigator/tm_tokenize/__init__.py: -------------------------------------------------------------------------------- 1 | """Initialization file for the tokenization subsystem.""" 2 | -------------------------------------------------------------------------------- /src/ansible_navigator/tm_tokenize/_types.py: -------------------------------------------------------------------------------- 1 | from typing import TYPE_CHECKING 2 | 3 | 4 | if TYPE_CHECKING: 5 | from typing import Protocol # python3.9+ 6 | else: 7 | Protocol = object 8 | 9 | __all__ = ("Protocol",) 10 | -------------------------------------------------------------------------------- /src/ansible_navigator/tm_tokenize/region.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from typing import NamedTuple 4 | 5 | 6 | Scope = tuple[str, ...] 7 | 8 | Regions = tuple["Region", ...] 9 | 10 | 11 | class Region(NamedTuple): 12 | start: int 13 | end: int 14 | scope: Scope 15 | -------------------------------------------------------------------------------- /src/ansible_navigator/tm_tokenize/utils.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from re import Match # noqa: F401 4 | from typing import TypeVar 5 | 6 | 7 | T = TypeVar("T") 8 | 9 | 10 | def uniquely_constructed(t: T) -> T: 11 | """Avoid tuple.__hash__ for "singleton" constructed objects.""" 12 | t.__hash__ = object.__hash__ # type: ignore[assignment] 13 | return t 14 | -------------------------------------------------------------------------------- /src/ansible_navigator/ui_framework/form_defs.py: -------------------------------------------------------------------------------- 1 | """Common form definitions.""" 2 | 3 | from __future__ import annotations 4 | 5 | from enum import Enum 6 | 7 | from .sentinels import Unknown 8 | 9 | 10 | FieldValidationState = Unknown | bool 11 | FieldValidationStates = list[FieldValidationState] 12 | 13 | 14 | class FormType(Enum): 15 | """Indicates the form type.""" 16 | 17 | FORM = "A full input form" 18 | NOTIFICATION = "A text box with a dismiss button" 19 | WORKING = "Used when something might take a bit, no buttons" 20 | -------------------------------------------------------------------------------- /src/ansible_navigator/ui_framework/ui_config.py: -------------------------------------------------------------------------------- 1 | """Object to hold basic UI settings.""" 2 | 3 | from dataclasses import dataclass 4 | 5 | from ansible_navigator.utils.compatibility import Traversable 6 | 7 | 8 | @dataclass 9 | class UIConfig: 10 | """Object to hold basic UI settings. 11 | 12 | Used to determine properties about rendering things. An instance of this 13 | class gets threaded throughout most of the UI system, so it can be used for 14 | fairly global things, such as "should we render color, ever?" 15 | """ 16 | 17 | #: Indicates coloring is enabled or disabled 18 | color: bool 19 | #: Indicates if the curses colors have been initialized 20 | colors_initialized: bool 21 | #: The path to the grammar directory 22 | grammar_dir: Traversable 23 | #: Indicates if terminal support for OSC4 is enabled 24 | osc4: bool 25 | #: The path to the 16 terminal color map 26 | terminal_colors_path: Traversable 27 | #: The path to the theme file 28 | theme_path: Traversable 29 | -------------------------------------------------------------------------------- /src/ansible_navigator/utils/__init__.py: -------------------------------------------------------------------------------- 1 | """General utilities use by many subsystems.""" 2 | -------------------------------------------------------------------------------- /src/ansible_navigator/utils/compatibility.py: -------------------------------------------------------------------------------- 1 | """Conditional imports related to python versions.""" 2 | 3 | import importlib.metadata as importlib_metadata 4 | import sys 5 | 6 | 7 | # https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases 8 | from typing import TypeAlias 9 | 10 | 11 | if sys.version_info < (3, 11): 12 | from importlib.abc import Traversable 13 | else: 14 | from importlib.resources.abc import Traversable 15 | 16 | 17 | __all__ = ["Traversable", "TypeAlias", "importlib_metadata"] 18 | -------------------------------------------------------------------------------- /src/ansible_navigator/utils/version_migration/__init__.py: -------------------------------------------------------------------------------- 1 | """Perform migrations between major versions.""" 2 | -------------------------------------------------------------------------------- /src/ansible_navigator/version.py: -------------------------------------------------------------------------------- 1 | """Ansible-navigator version information.""" 2 | 3 | try: 4 | from ._version import version as __version__ 5 | except ImportError: # pragma: no branch 6 | try: 7 | from importlib.metadata import version 8 | 9 | __version__ = version("ansible-navigator") 10 | except Exception: # noqa: BLE001 11 | # this is the fallback SemVer version picked by setuptools_scm when tag 12 | # information is not available. 13 | __version__ = "0.1.dev1" 14 | 15 | __all__ = ("__version__",) 16 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- 1 | """All tests.""" 2 | -------------------------------------------------------------------------------- /tests/fixtures/ansible.cfg: -------------------------------------------------------------------------------- 1 | [defaults] 2 | timeout = 350 3 | -------------------------------------------------------------------------------- /tests/fixtures/common/builder/test_ee/execution-environment.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: 3 3 | 4 | images: 5 | base_image: 6 | name: quay.io/fedora/python-313:latest 7 | 8 | dependencies: 9 | ansible_core: 10 | package_pip: ansible-core 11 | 12 | ansible_runner: 13 | package_pip: ansible-runner 14 | 15 | galaxy: 16 | collections: 17 | - ansible.utils 18 | 19 | python: 20 | - ansible-lint 21 | additional_build_steps: 22 | append_final: 23 | - RUN echo "Hello from EE" 24 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_1/galaxy.yml: -------------------------------------------------------------------------------- 1 | --- 2 | authors: 3 | - Ansible team (ansible-navigator) 4 | license_file: LICENSE 5 | name: coll_1 6 | namespace: company_name 7 | readme: README.md 8 | version: 1.0.0 9 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_1/playbooks/playbook_1.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: run integration test play-1 3 | hosts: localhost 4 | connection: local 5 | gather_facts: false 6 | tasks: 7 | - name: debug print play-1 task-1 8 | debug: 9 | msg: "This is play-1 task-1" 10 | 11 | - name: debug print play-1 task-2 12 | debug: 13 | msg: "This is play-1 task-2" 14 | 15 | - name: run integration test play-2 16 | hosts: localhost 17 | connection: local 18 | gather_facts: false 19 | tasks: 20 | - name: debug print play-2 task-1 21 | debug: 22 | msg: "This is play-2 task-1" 23 | 24 | - name: debug print play-2 task-2 25 | debug: 26 | msg: "This is play-2 task-2" 27 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_1/plugins/filter/coll_1.py: -------------------------------------------------------------------------------- 1 | """An ansible test filter plugin.""" 2 | 3 | from typing import Any 4 | 5 | 6 | def filter_1() -> None: 7 | """Convert strings to Candlepin labels.""" 8 | return 9 | 10 | 11 | # ---- Ansible filters ---- 12 | class FilterModule: 13 | """Coll_1 filter.""" 14 | 15 | def filters(self) -> dict[str, Any]: 16 | """Convert an arbitrary string to a valid Candlepin label. 17 | 18 | Returns: 19 | converted Candlepin label 20 | """ 21 | return { 22 | "filter_1": filter_1, 23 | } 24 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_1/plugins/filter/filter_1.yml: -------------------------------------------------------------------------------- 1 | DOCUMENTATION: 2 | name: filter_1 3 | author: test 4 | version_added: "1.0.0" 5 | short_description: This is test filter plugin 6 | description: 7 | - This is test filter plugin 8 | notes: 9 | - This is a dummy filter plugin 10 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_1/plugins/lookup/lookup_1.py: -------------------------------------------------------------------------------- 1 | """An ansible test lookup plugin.""" 2 | 3 | DOCUMENTATION = """ 4 | name: lookup_1 5 | author: test 6 | plugin_type: lookup 7 | version_added: "1.0.0" 8 | short_description: This is test lookup plugin 9 | description: 10 | - This is test lookup plugin 11 | options: 12 | foo: 13 | description: 14 | - Dummy option I(foo) 15 | type: str 16 | required: True 17 | bar: 18 | description: 19 | - Dummy option I(bar) 20 | default: candidate 21 | type: str 22 | notes: 23 | - This is a dummy lookup plugin 24 | """ 25 | 26 | EXAMPLES = """ 27 | - name: Retrieve a value deep inside a using a path 28 | ansible.builtin.set_fact: 29 | value: "{{ lookup('company_name.coll_1.lookup_1', var1, var2) }}" 30 | """ 31 | 32 | RETURN = """ 33 | _raw: 34 | description: 35 | - One or more zero-based indices of the matching list items. 36 | """ 37 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_1/plugins/modules/mod_1.py: -------------------------------------------------------------------------------- 1 | """An ansible test module.""" 2 | 3 | DOCUMENTATION = """ 4 | module: mod_1 5 | author: 6 | - test 7 | short_description: This is a test module 8 | description: 9 | - This is a test module 10 | version_added: 1.0.0 11 | options: 12 | foo: 13 | description: 14 | - Dummy option I(foo) 15 | type: str 16 | bar: 17 | description: 18 | - Dummy option I(bar) 19 | default: candidate 20 | type: str 21 | choices: 22 | - candidate 23 | - running 24 | aliases: 25 | - bam 26 | notes: 27 | - This is a dummy module 28 | """ 29 | 30 | EXAMPLES = """ 31 | - name: test task-1 32 | company_name.coll_1.mod_1: 33 | foo: somevalue 34 | bar: candidate 35 | """ 36 | 37 | RETURN = """ 38 | baz: 39 | description: test return 1 40 | returned: success 41 | type: list 42 | sample: ['a','b'] 43 | """ 44 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_1/roles/role_full/README.md: -------------------------------------------------------------------------------- 1 | # Role full 2 | 3 | This is a role with: 4 | 5 | - defaults/main.yml 6 | - meta/argument_spec.yml 7 | - meta/main.yml 8 | - README.md 9 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_1/roles/role_full/defaults/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | role_full_bool: True 3 | role_full_int: 42 4 | role_full_str: Test string 5 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_1/roles/role_full/meta/argument_specs.yml: -------------------------------------------------------------------------------- 1 | --- 2 | argument_specs: 3 | # roles/role_full/tasks/main.yml entry point 4 | main: 5 | short_description: The main entry point for the role_full role. 6 | options: 7 | role_full_int: 8 | description: "The integer value, defaulting to 42." 9 | default: 42 10 | required: false 11 | type: "int" 12 | 13 | role_full_str: 14 | description: "The string value" 15 | required: true 16 | type: "str" 17 | 18 | # roles/role_full/tasks/alternate.yml entry point 19 | alternate: 20 | short_description: The alternate entry point for the role_full role. 21 | options: 22 | role_full_int: 23 | description: "The integer value, defaulting to 1024." 24 | default: 1024 25 | required: false 26 | type: "int" 27 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_1/roles/role_full/meta/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | galaxy_info: 3 | author: Ansible team (ansible-navigator) 4 | description: Complete sample role. 5 | company: Ansible 6 | license: LICENSE 7 | min_ansible_version: 2.9.0 8 | galaxy_tags: ["tag_1", "tag_2"] 9 | platforms: 10 | - name: eos 11 | versions: 12 | - all 13 | dependencies: [] 14 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_1/roles/role_minimum/README.md: -------------------------------------------------------------------------------- 1 | # Role minimum 2 | 3 | This is a role with: 4 | 5 | - meta/main.yml 6 | - README.md 7 | 8 | This is a role without: 9 | 10 | - defaults/main.yml 11 | - meta/argument_spec.yml 12 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_1/roles/role_minimum/meta/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | galaxy_info: 3 | author: Ansible team (ansible-navigator) 4 | description: Minimal sample role. 5 | company: Ansible 6 | license: LICENSE 7 | min_ansible_version: 2.9.0 8 | galaxy_tags: ["tag_1", "tag_2"] 9 | platforms: 10 | - name: eos 11 | versions: 12 | - all 13 | dependencies: [] 14 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_1/roles/role_missing/_README.md: -------------------------------------------------------------------------------- 1 | # Role missing 2 | 3 | This is a role without: 4 | 5 | - defaults/main.yml 6 | - meta/argument_spec.yml 7 | - meta/main.yml 8 | - README.md 9 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_2/galaxy.yml: -------------------------------------------------------------------------------- 1 | --- 2 | authors: 3 | - Ansible team (ansible-navigator) 4 | license_file: LICENSE 5 | name: coll_2 6 | namespace: company_name 7 | readme: README.md 8 | version: 2.0.0 9 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_2/plugins/lookup/lookup_2.py: -------------------------------------------------------------------------------- 1 | """An ansible test lookup plugin.""" 2 | 3 | DOCUMENTATION = """ 4 | name: lookup_2 5 | author: test 6 | plugin_type: lookup 7 | version_added: "2.0.0" 8 | short_description: This is test lookup plugin 9 | description: 10 | - This is test lookup plugin 11 | options: 12 | foo: 13 | description: 14 | - Dummy option I(foo) 15 | type: str 16 | required: True 17 | bar: 18 | description: 19 | - Dummy option I(bar) 20 | default: candidate 21 | type: str 22 | notes: 23 | - This is a dummy lookup plugin 24 | """ 25 | 26 | EXAMPLES = """ 27 | - name: Retrieve a value deep inside a using a path 28 | ansible.builtin.set_fact: 29 | value: "{{ lookup('company_name.coll_2.lookup_2', var1, var2) }}" 30 | """ 31 | 32 | RETURN = """ 33 | _raw: 34 | description: 35 | - One or more zero-based indices of the matching list items. 36 | """ 37 | -------------------------------------------------------------------------------- /tests/fixtures/common/collections/ansible_collections/company_name/coll_2/plugins/modules/mod_2.py: -------------------------------------------------------------------------------- 1 | """An ansible test module.""" 2 | 3 | DOCUMENTATION = """ 4 | module: mod_2 5 | author: 6 | - test 7 | short_description: This is a test module 8 | description: 9 | - This is a test module 10 | version_added: 2.0.0 11 | options: 12 | foo: 13 | description: 14 | - Dummy option I(foo) 15 | type: str 16 | bar: 17 | description: 18 | - Dummy option I(bar) 19 | default: candidate 20 | type: str 21 | choices: 22 | - candidate 23 | - running 24 | aliases: 25 | - bam 26 | notes: 27 | - This is a dummy module 28 | """ 29 | 30 | EXAMPLES = """ 31 | - name: test task-1 32 | company_name.coll_2.mod_2: 33 | foo: somevalue 34 | bar: candidate 35 | """ 36 | 37 | RETURN = """ 38 | baz: 39 | description: test return 1 40 | returned: success 41 | type: list 42 | sample: ['a','b'] 43 | """ 44 | -------------------------------------------------------------------------------- /tests/fixtures/common/module_1.py: -------------------------------------------------------------------------------- 1 | """An ansible test module.""" 2 | 3 | DOCUMENTATION = r""" 4 | --- 5 | module: vcenter_mod 6 | short_description: Gather info vCenter extensions 7 | description: 8 | - This module can be used to gather information about vCenter extension. 9 | author: 10 | - test 11 | extends_documentation_fragment: 12 | - community.vmware.vmware.documentation 13 | """ 14 | 15 | EXAMPLES = "Example usage here." 16 | RETURN = "This function returns a value." 17 | METADATA = "Author: John Doe" 18 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/collections/test_direct_interactive_ee.py/test/13.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[13]", 3 | "index": 13, 4 | "comment": "Browse company_name.coll_2 plugins window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Company name.coll 2 Type Added Deprecated Description", 12 | "0│lookup_2 lookup 2.0.0 False This is test lookup plugin", 13 | "1│mod_2 module 2.0.0 False This is a test module", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/collections/test_direct_interactive_ee.py/test/15.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[15]", 3 | "index": 15, 4 | "comment": "Back to browse company_name.coll_2 plugins window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Company name.coll 2 Type Added Deprecated Description", 12 | "0│lookup_2 lookup 2.0.0 False This is test lookup plugin", 13 | "1│mod_2 module 2.0.0 False This is a test module", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/collections/test_direct_interactive_ee.py/test/17.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[17]", 3 | "index": 17, 4 | "comment": "Back to browse company_name.coll_2 plugins window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Company name.coll 2 Type Added Deprecated Description", 12 | "0│lookup_2 lookup 2.0.0 False This is test lookup plugin", 13 | "1│mod_2 module 2.0.0 False This is a test module", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/collections/test_direct_interactive_ee_with_volmount.py/test/13.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[13]", 3 | "index": 13, 4 | "comment": "Browse company_name.coll_2 plugins window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Company name.coll 2 Type Added Deprecated Description", 12 | "0│lookup_2 lookup 2.0.0 False This is test lookup plugin", 13 | "1│mod_2 module 2.0.0 False This is a test module", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/collections/test_direct_interactive_ee_with_volmount.py/test/15.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[15]", 3 | "index": 15, 4 | "comment": "Back to browse company_name.coll_2 plugins window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Company name.coll 2 Type Added Deprecated Description", 12 | "0│lookup_2 lookup 2.0.0 False This is test lookup plugin", 13 | "1│mod_2 module 2.0.0 False This is a test module", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/collections/test_direct_interactive_ee_with_volmount.py/test/17.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[17]", 3 | "index": 17, 4 | "comment": "Back to browse company_name.coll_2 plugins window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Company name.coll 2 Type Added Deprecated Description", 12 | "0│lookup_2 lookup 2.0.0 False This is test lookup plugin", 13 | "1│mod_2 module 2.0.0 False This is a test module", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/collections/test_direct_interactive_noee.py/test/13.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[13]", 3 | "index": 13, 4 | "comment": "Browse company_name.coll_2 plugins window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Company name.coll 2 Type Added Deprecated Description", 12 | "0│lookup_2 lookup 2.0.0 False This is test lookup plugin", 13 | "1│mod_2 module 2.0.0 False This is a test module", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/collections/test_direct_interactive_noee.py/test/15.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[15]", 3 | "index": 15, 4 | "comment": "Back to browse company_name.coll_2 plugins window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Company name.coll 2 Type Added Deprecated Description", 12 | "0│lookup_2 lookup 2.0.0 False This is test lookup plugin", 13 | "1│mod_2 module 2.0.0 False This is a test module", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/collections/test_direct_interactive_noee.py/test/17.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[17]", 3 | "index": 17, 4 | "comment": "Back to browse company_name.coll_2 plugins window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Company name.coll 2 Type Added Deprecated Description", 12 | "0│lookup_2 lookup 2.0.0 False This is test lookup plugin", 13 | "1│mod_2 module 2.0.0 False This is a test module", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/collections/test_welcome_interactive_ee.py/test/14.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[14]", 3 | "index": 14, 4 | "comment": "Browse company_name.coll_2 plugins window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Company name.coll 2 Type Added Deprecated Description", 12 | "0│lookup_2 lookup 2.0.0 False This is test lookup plugin", 13 | "1│mod_2 module 2.0.0 False This is a test module", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/collections/test_welcome_interactive_ee.py/test/16.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[16]", 3 | "index": 16, 4 | "comment": "Back to browse company_name.coll_2 plugins window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Company name.coll 2 Type Added Deprecated Description", 12 | "0│lookup_2 lookup 2.0.0 False This is test lookup plugin", 13 | "1│mod_2 module 2.0.0 False This is a test module", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/collections/test_welcome_interactive_ee.py/test/18.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[18]", 3 | "index": 18, 4 | "comment": "Back to browse company_name.coll_2 plugins window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Company name.coll 2 Type Added Deprecated Description", 12 | "0│lookup_2 lookup 2.0.0 False This is test lookup plugin", 13 | "1│mod_2 module 2.0.0 False This is a test module", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/collections/test_welcome_interactive_noee.py/test/14.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[14]", 3 | "index": 14, 4 | "comment": "Browse company_name.coll_2 plugins window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Company name.coll 2 Type Added Deprecated Description", 12 | "0│lookup_2 lookup 2.0.0 False This is test lookup plugin", 13 | "1│mod_2 module 2.0.0 False This is a test module", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/collections/test_welcome_interactive_noee.py/test/16.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[16]", 3 | "index": 16, 4 | "comment": "Back to browse company_name.coll_2 plugins window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Company name.coll 2 Type Added Deprecated Description", 12 | "0│lookup_2 lookup 2.0.0 False This is test lookup plugin", 13 | "1│mod_2 module 2.0.0 False This is a test module", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/collections/test_welcome_interactive_noee.py/test/18.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[18]", 3 | "index": 18, 4 | "comment": "Back to browse company_name.coll_2 plugins window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Company name.coll 2 Type Added Deprecated Description", 12 | "0│lookup_2 lookup 2.0.0 False This is test lookup plugin", 13 | "1│mod_2 module 2.0.0 False This is a test module", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/config/ansible.cfg: -------------------------------------------------------------------------------- 1 | [defaults] 2 | yaml_valid_extensions = .os2 3 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/config/test_direct_interactive_ee.py/test/5.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[5]", 3 | "index": 5, 4 | "comment": "filter off screen value", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│Yaml filename extensions True default ['.yml', '.yaml', '.json']", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/config/test_direct_interactive_ee.py/test/7.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[7]", 3 | "index": 7, 4 | "comment": "return to filtered list", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│Yaml filename extensions True default ['.yml', '.yaml', '.json']", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/config/test_direct_interactive_noee.py/test/5.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[5]", 3 | "index": 5, 4 | "comment": "filter off screen value", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│Yaml filename extensions True default ['.yml', '.yaml', '.json']", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/config/test_direct_interactive_noee.py/test/7.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[7]", 3 | "index": 7, 4 | "comment": "return to filtered list", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│Yaml filename extensions True default ['.yml', '.yaml', '.json']", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/config/test_welcome_interactive_ee.py/test/6.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[6]", 3 | "index": 6, 4 | "comment": "filter off screen value", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│Yaml filename extensions True default ['.yml', '.yaml', '.json']", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/config/test_welcome_interactive_ee.py/test/8.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[8]", 3 | "index": 8, 4 | "comment": "return to filtered list", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│Yaml filename extensions True default ['.yml', '.yaml', '.json']", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/config/test_welcome_interactive_noee.py/test/6.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[6]", 3 | "index": 6, 4 | "comment": "filter off screen value", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│Yaml filename extensions True default ['.yml', '.yaml', '.json']", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/config/test_welcome_interactive_noee.py/test/8.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[8]", 3 | "index": 8, 4 | "comment": "return to filtered list", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│Yaml filename extensions True default ['.yml', '.yaml', '.json']", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/config/using_ansible_cfg/ansible.cfg: -------------------------------------------------------------------------------- 1 | [defaults] 2 | forks = 42 3 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/doc/test_direct_interactive_ee.py/test/module_doc_fail/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[0-/Users/user/github/ansible-navigator/venv/bin/python3 -m ansible_navigator doc testorg.coll_1.doesnotexist --execution-environment true --ce docker-ansible-navigator doc wrong plugin name-module_doc_fail-expected_in_output0]", 3 | "index": 0, 4 | "comment": "ansible-navigator doc wrong plugin name", 5 | "output": [ 6 | "TESTORG.COLL_1.DOESNOTEXIST (MODULE)", 7 | "0│---", 8 | "1│execution_environment_errors:", 9 | "2│- '[WARNING]: module testorg.coll_1.doesnotexist not found in: /home/runner/.ansib'", 10 | "3│- le/plugins/modules:/usr/share/ansible/plugins/modules:/usr/local/lib/python3.8/", 11 | "4│- site-packages/ansible/modules", 12 | "^f/PgUp page up ^b/PgDn page down ↑↓ scroll esc back :help help" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/doc/test_direct_interactive_ee.py/test/module_doc_pass/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1]", 3 | "index": 1, 4 | "comment": "load examples", 5 | "output": [ 6 | "0│", 7 | "1│- name: test task-1", 8 | "2│ company_name.coll_1.mod_1:", 9 | "3│ foo: somevalue", 10 | "4│ bar: candidate", 11 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/doc/test_direct_interactive_noee.py/test/module_doc_fail/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[0-/Users/user/github/ansible-navigator/venv/bin/python3 -m ansible_navigator doc testorg.coll_1.doesnotexist --execution-environment false-ansible-navigator doc wrong plugin name-module_doc_fail-expected_in_output0]", 3 | "index": 0, 4 | "comment": "ansible-navigator doc wrong plugin name", 5 | "output": [ 6 | "TESTORG.COLL_1.DOESNOTEXIST (MODULE)", 7 | "0│---", 8 | "1│local_errors:", 9 | "2│- '[WARNING]: module testorg.coll_1.doesnotexist not found in: /Users/user/.an'", 10 | "3│- sible/plugins/modules:/usr/share/ansible/plugins/modules:/Users/user/Librar", 11 | "4│- y/Python/3.8/lib/python/site-packages/ansible/modules", 12 | "^f/PgUp page up ^b/PgDn page down ↑↓ scroll esc back :help help" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/doc/test_direct_interactive_noee.py/test/module_doc_pass/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1]", 3 | "index": 1, 4 | "comment": "load examples", 5 | "output": [ 6 | "0│", 7 | "1│- name: test task-1", 8 | "2│ company_name.coll_1.mod_1:", 9 | "3│ foo: somevalue", 10 | "4│ bar: candidate", 11 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/doc/test_welcome_interactive_ee.py/test/module_doc_fail/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1-:doc testorg.coll_1.doesnotexist-ansible-navigator doc wrong plugin name-module_doc_fail-expected_in_output1]", 3 | "index": 1, 4 | "comment": "ansible-navigator doc wrong plugin name", 5 | "output": [ 6 | "TESTORG.COLL_1.DOESNOTEXIST (MODULE)", 7 | "0│---", 8 | "1│execution_environment_errors:", 9 | "2│- '[WARNING]: module testorg.coll_1.doesnotexist not found in: /home/runner/.ansib'", 10 | "3│- le/plugins/modules:/usr/share/ansible/plugins/modules:/usr/local/lib/python3.8/", 11 | "4│- site-packages/ansible/modules", 12 | "^f/PgUp page up ^b/PgDn page down ↑↓ scroll esc back :help help" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/doc/test_welcome_interactive_ee.py/test/module_doc_pass/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[2]", 3 | "index": 2, 4 | "comment": "load examples", 5 | "output": [ 6 | "0│", 7 | "1│- name: test task-1", 8 | "2│ company_name.coll_1.mod_1:", 9 | "3│ foo: somevalue", 10 | "4│ bar: candidate", 11 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/doc/test_welcome_interactive_noee.py/test/module_doc_fail/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1-:doc testorg.coll_1.doesnotexist-ansible-navigator doc wrong plugin name-module_doc_fail-expected_in_output1]", 3 | "index": 1, 4 | "comment": "ansible-navigator doc wrong plugin name", 5 | "output": [ 6 | "TESTORG.COLL_1.DOESNOTEXIST (MODULE)", 7 | "0│---", 8 | "1│local_errors:", 9 | "2│- '[WARNING]: module testorg.coll_1.doesnotexist not found in: /Users/user/.an'", 10 | "3│- sible/plugins/modules:/usr/share/ansible/plugins/modules:/Users/user/Librar", 11 | "4│- y/Python/3.8/lib/python/site-packages/ansible/modules", 12 | "^f/PgUp page up ^b/PgDn page down ↑↓ scroll esc back :help help" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/doc/test_welcome_interactive_noee.py/test/module_doc_pass/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[2]", 3 | "index": 2, 4 | "comment": "load examples", 5 | "output": [ 6 | "0│", 7 | "1│- name: test task-1", 8 | "2│ company_name.coll_1.mod_1:", 9 | "3│ foo: somevalue", 10 | "4│ bar: candidate", 11 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/ansible-navigator.yaml: -------------------------------------------------------------------------------- 1 | ansible-navigator: 2 | execution-environment: 3 | environment-variables: 4 | set: 5 | ANSIBLE_COLLECTIONS_PATHS: /tmp/collections 6 | exec: 7 | command: echo test_data_from_config 8 | shell: False 9 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_cli.py/test/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[0]", 3 | "index": 0, 4 | "comment": "exec echo with ee", 5 | "additional_information": { 6 | "present": [ 7 | "bash", 8 | "test_data_from_cli" 9 | ], 10 | "absent": [ 11 | "Error" 12 | ], 13 | "compared_fixture": false 14 | }, 15 | "output": [ 16 | "test_data_from_cli", 17 | "(venv) bash$" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_cli.py/test/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[2]", 3 | "index": 2, 4 | "comment": "exec echo check path via shell", 5 | "additional_information": { 6 | "present": [ 7 | "/sbin" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", 14 | "(venv) bash$" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_cli.py/test/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[3]", 3 | "index": 3, 4 | "comment": "exec echo check no path via shell", 5 | "additional_information": { 6 | "present": [ 7 | "$PATH" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "$PATH", 14 | "(venv) bash$" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_config_cli.py/test/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[exec echo with ee clear && ansible-navigator exec 'echo test_data_from_cli' --ee True --ll debug --mode stdout]", 3 | "index": 0, 4 | "comment": "exec echo with ee", 5 | "additional_information": { 6 | "present": [ 7 | "bash", 8 | "test_data_from_cli" 9 | ], 10 | "absent": [ 11 | "ERROR" 12 | ], 13 | "compared_fixture": false 14 | }, 15 | "output": [ 16 | "test_data_from_cli", 17 | "(venv) bash-5.1$" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_config_cli.py/test/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[exec echo check path via shell clear && ansible-navigator exec 'echo $PATH' --ee True --ll debug --mode stdout]", 3 | "index": 2, 4 | "comment": "exec echo check path via shell", 5 | "additional_information": { 6 | "present": [ 7 | "/sbin" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", 14 | "(venv) bash-5.1$" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_config_cli.py/test/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[exec echo check no path via shell clear && ansible-navigator exec 'echo $PATH' --exshell false --ee True --ll debug --mode stdout]", 3 | "index": 3, 4 | "comment": "exec echo check no path via shell", 5 | "additional_information": { 6 | "present": [ 7 | "$PATH" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "$PATH", 14 | "(venv) bash-5.1$" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_config_file.py/test/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[exec echo with ee clear && ansible-navigator exec --ee True --ll debug --mode stdout]", 3 | "index": 0, 4 | "comment": "exec echo with ee", 5 | "additional_information": { 6 | "present": [ 7 | "bash", 8 | "test_data_from_config" 9 | ], 10 | "absent": [ 11 | "ERROR" 12 | ], 13 | "compared_fixture": false 14 | }, 15 | "output": [ 16 | "test_data_from_config", 17 | "(venv) bash-5.1$" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_config_file.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[exec echo check no path via shell clear && ansible-navigator exec '/usr/bin/echo $PATH' --ee True --ll debug --mode stdout]", 3 | "index": 1, 4 | "comment": "exec echo check no path via shell", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [ 8 | "/sbin" 9 | ], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "$PATH", 14 | "(venv) bash-5.1$" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_file.py/test/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[0]", 3 | "index": 0, 4 | "comment": "exec echo with ee", 5 | "additional_information": { 6 | "present": [ 7 | "bash", 8 | "test_data_from_config" 9 | ], 10 | "absent": [ 11 | "ERROR" 12 | ], 13 | "compared_fixture": false 14 | }, 15 | "output": [ 16 | "test_data_from_config", 17 | "(venv) bash$" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_file.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1]", 3 | "index": 1, 4 | "comment": "exec echo check no path via shell", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [ 8 | "/sbin" 9 | ], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "$PATH", 14 | "(venv) bash$" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_vault.py/test/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[0]", 3 | "index": 0, 4 | "comment": "Vault variation", 5 | "additional_information": { 6 | "present": [ 7 | "a_password_file was not found" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "[WARNING]: Error getting vault password file (default): The vault password file /home/user/github/ansible-navigator/a_password_file was not found", 14 | "ERROR! The vault password file /home/user/github/ansible-navigator/a_password_file was not found", 15 | "(venv) bash$" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_vault.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1]", 3 | "index": 1, 4 | "comment": "Vault variation", 5 | "additional_information": { 6 | "present": [ 7 | "a_password_file was not found" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "[WARNING]: Error getting vault password file (default): The vault password file /home/user/github/ansible-navigator/a_password_file was not found", 14 | "ERROR! The vault password file /home/user/github/ansible-navigator/a_password_file was not found", 15 | "(venv) bash$" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_vault.py/test/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[2]", 3 | "index": 2, 4 | "comment": "Vault variation", 5 | "additional_information": { 6 | "present": [ 7 | "a_password_file was not found" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "[WARNING]: Error getting vault password file (default): The vault password file /home/user/github/ansible-navigator/a_password_file was not found", 14 | "ERROR! The vault password file /home/user/github/ansible-navigator/a_password_file was not found", 15 | "(venv) bash$" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_vault.py/test/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[3]", 3 | "index": 3, 4 | "comment": "Vault variation", 5 | "additional_information": { 6 | "present": [ 7 | "a_password_file was not found" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "[WARNING]: Error getting vault password file (default): The vault password file /home/user/github/ansible-navigator/a_password_file was not found", 14 | "ERROR! The vault password file /home/user/github/ansible-navigator/a_password_file was not found", 15 | "(venv) bash$" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_vault.py/test/4.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[4]", 3 | "index": 4, 4 | "comment": "Vault variation", 5 | "additional_information": { 6 | "present": [ 7 | "a_password_file was not found" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "[WARNING]: Error getting vault password file (default): The vault password file /home/user/github/ansible-navigator/a_password_file was not found", 14 | "ERROR! The vault password file /home/user/github/ansible-navigator/a_password_file was not found", 15 | "(venv) bash$" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/exec/test_stdout_vault.py/test/5.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[5]", 3 | "index": 5, 4 | "comment": "Vault variation", 5 | "additional_information": { 6 | "present": [ 7 | "a_password_file was not found" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "[WARNING]: Error getting vault password file (default): The vault password file /home/user/github/ansible-navigator/a_password_file was not found", 14 | "ERROR! The vault password file /home/user/github/ansible-navigator/a_password_file was not found", 15 | "(venv) bash$" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/images/test_direct_interactive_ee.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[01]", 3 | "index": 1, 4 | "comment": "filter for community-ansible-dev-tools", 5 | "additional_information": { 6 | "present": [ 7 | "community-ansible-dev-tools" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | " Image Tag Execution environment Created Size", 14 | "0│community-ansible-dev-tools latest True some time ago 1.36 GB", 15 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/images/test_direct_interactive_ee.py/test/7.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[07]", 3 | "index": 7, 4 | "comment": "goto Ansible information", 5 | "additional_information": { 6 | "present": [ 7 | "collections:" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "Image: community-ansible-dev-tools:latest (primary) (Information about ansible and ansible collections)", 14 | " 0│---", 15 | " 1│ansible:", 16 | " 2│ collections:", 17 | " 3│ details:", 18 | " 4│ ansible.netcommon: 7.1.0", 19 | " 5│ ansible.posix: 1.6.2", 20 | " 6│ ansible.scm: 3.0.0", 21 | " 7│ ansible.utils: 5.1.2", 22 | " 8│ version:", 23 | " 9│ details: ansible [core 2.17.6]", 24 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/images/test_direct_interactive_noee.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[01]", 3 | "index": 1, 4 | "comment": "filter for community-ansible-dev-tools", 5 | "additional_information": { 6 | "present": [ 7 | "community-ansible-dev-tools" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | " Image Tag Execution environment Created Size", 14 | "0│community-ansible-dev-tools latest True some time ago 1.36 GB", 15 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/images/test_direct_interactive_noee.py/test/7.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[07]", 3 | "index": 7, 4 | "comment": "goto Ansible information", 5 | "additional_information": { 6 | "present": [ 7 | "collections:" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "Image: community-ansible-dev-tools:latest (primary) (Information about ansible and ansible collections)", 14 | " 0│---", 15 | " 1│ansible:", 16 | " 2│ collections:", 17 | " 3│ details:", 18 | " 4│ ansible.netcommon: 7.1.0", 19 | " 5│ ansible.posix: 1.6.2", 20 | " 6│ ansible.scm: 3.0.0", 21 | " 7│ ansible.utils: 5.1.2", 22 | " 8│ version:", 23 | " 9│ details: ansible [core 2.17.6]", 24 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/images/test_stdout_tmux.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[step1]", 3 | "index": 1, 4 | "comment": "print all details to stdout", 5 | "additional_information": { 6 | "present": [ 7 | "ansible_collections", 8 | "ansible_version", 9 | "image_name: ghcr.io/ansible/community-ansible-dev-tools:latest", 10 | "os_release", 11 | "python_packages", 12 | "python_version", 13 | "redhat_release", 14 | "system_packages" 15 | ], 16 | "absent": [], 17 | "compared_fixture": false 18 | }, 19 | "output": [ 20 | "ansible_collections:", 21 | "ansible_version:", 22 | "environment_variables:", 23 | "image_name: ghcr.io/ansible/community-ansible-dev-tools:latest", 24 | "os_release:", 25 | "python_packages:", 26 | "python_version:", 27 | "redhat_release:", 28 | "system_packages:", 29 | "(venv) bash$" 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/images/test_stdout_tmux.py/test/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[step2]", 3 | "index": 2, 4 | "comment": "print all details to stdout", 5 | "additional_information": { 6 | "present": [ 7 | "ansible_collections", 8 | "ansible_version", 9 | "image_name: ghcr.io/ansible/community-ansible-dev-tools:latest" 10 | ], 11 | "absent": [ 12 | "os_release", 13 | "python_packages", 14 | "python_version", 15 | "redhat_release", 16 | "system_packages" 17 | ], 18 | "compared_fixture": false 19 | }, 20 | "output": [ 21 | "ansible_collections:", 22 | "ansible_version:", 23 | "image_name: ghcr.io/ansible/community-ansible-dev-tools:latest", 24 | "(venv) bash$" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/images/test_welcome_interactive_ee.py/test/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[02]", 3 | "index": 2, 4 | "comment": "filter for community-ansible-dev-tools", 5 | "additional_information": { 6 | "present": [ 7 | "community-ansible-dev-tools" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | " Image Tag Execution environment Created Size", 14 | "0│community-ansible-dev-tools latest True some time ago 1.36 GB", 15 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/images/test_welcome_interactive_ee.py/test/8.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[08]", 3 | "index": 8, 4 | "comment": "goto Ansible information", 5 | "additional_information": { 6 | "present": [ 7 | "collections:" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "Image: community-ansible-dev-tools:latest (primary) (Information about ansible and ansible collections)", 14 | " 0│---", 15 | " 1│ansible:", 16 | " 2│ collections:", 17 | " 3│ details:", 18 | " 4│ ansible.netcommon: 7.1.0", 19 | " 5│ ansible.posix: 1.6.2", 20 | " 6│ ansible.scm: 3.0.0", 21 | " 7│ ansible.utils: 5.1.2", 22 | " 8│ version:", 23 | " 9│ details: ansible [core 2.17.6]", 24 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/images/test_welcome_interactive_noee.py/test/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[02]", 3 | "index": 2, 4 | "comment": "filter for community-ansible-dev-tools", 5 | "additional_information": { 6 | "present": [ 7 | "community-ansible-dev-tools" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | " Image Tag Execution environment Created Size", 14 | "0│community-ansible-dev-tools latest True some time ago 1.36 GB", 15 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/images/test_welcome_interactive_noee.py/test/8.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[08]", 3 | "index": 8, 4 | "comment": "goto Ansible information", 5 | "additional_information": { 6 | "present": [ 7 | "collections:" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "Image: community-ansible-dev-tools:latest (primary) (Information about ansible and ansible collections)", 14 | " 0│---", 15 | " 1│ansible:", 16 | " 2│ collections:", 17 | " 3│ details:", 18 | " 4│ ansible.netcommon: 7.1.0", 19 | " 5│ ansible.posix: 1.6.2", 20 | " 6│ ansible.scm: 3.0.0", 21 | " 7│ ansible.utils: 5.1.2", 22 | " 8│ version:", 23 | " 9│ details: ansible [core 2.17.6]", 24 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/ansible-navigator.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: 3 | inventory-columns: 4 | - ansible_network_os 5 | - ansible_network_cli_ssh_type 6 | - ansible_connection 7 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/ansible_inventory/group_vars/group01/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | group01_foo: group01_bar 3 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/ansible_inventory/host_vars/host0101/test.yml: -------------------------------------------------------------------------------- 1 | --- 2 | host0101_foo: host0101_bar 3 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/ansible_inventory/host_vars/host0201/test.yml: -------------------------------------------------------------------------------- 1 | --- 2 | host0201_foo: host0201_bar 3 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/ansible_inventory/host_vars/host0301/test.yml: -------------------------------------------------------------------------------- 1 | --- 2 | host0301_foo: host0301_bar 3 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/ansible_inventory/inventory.yml: -------------------------------------------------------------------------------- 1 | hosts: 2 | children: 3 | group01: 4 | hosts: 5 | host0101: 6 | ansible_host: host0101.test.com 7 | vars: 8 | ansible_become: True 9 | ansible_network_os: org.coll.nos 10 | ansible_connection: ansible.netcommon.network_cli 11 | group02: 12 | hosts: 13 | host0201: 14 | ansible_host: host0201.test.com 15 | vars: 16 | ansible_become: True 17 | ansible_become_pass: test 18 | group03: 19 | hosts: 20 | host0301: 21 | ansible_host: host0301.test.com 22 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/broken_inventory.ini: -------------------------------------------------------------------------------- 1 | [default] one 2 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/broken_inventory.yml: -------------------------------------------------------------------------------- 1 | - hosts: bogus 2 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_direct_interactive_ee.py/test/12.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[12]", 3 | "index": 12, 4 | "comment": "host0301 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0301]", 12 | "0│---", 13 | "1│ansible_host: host0301.test.com", 14 | "2│host0301_foo: host0301_bar", 15 | "3│inventory_hostname: host0301", 16 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_direct_interactive_ee.py/test/20.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[20]", 3 | "index": 20, 4 | "comment": "host0201 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0201]", 12 | "0│---", 13 | "1│ansible_become: true", 14 | "2│ansible_become_pass: test", 15 | "3│ansible_host: host0201.test.com", 16 | "4│host0201_foo: host0201_bar", 17 | "5│inventory_hostname: host0201", 18 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back - previous + next [0-9] goto :help help" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_direct_interactive_ee.py/test/22.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[22]", 3 | "index": 22, 4 | "comment": "host0301 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0301]", 12 | "0│---", 13 | "1│ansible_host: host0301.test.com", 14 | "2│host0301_foo: host0301_bar", 15 | "3│inventory_hostname: host0301", 16 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back - previous + next [0-9] goto :help help" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_direct_interactive_ee.py/test/8.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[08]", 3 | "index": 8, 4 | "comment": "host0201 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0201]", 12 | "0│---", 13 | "1│ansible_become: true", 14 | "2│ansible_become_pass: test", 15 | "3│ansible_host: host0201.test.com", 16 | "4│host0201_foo: host0201_bar", 17 | "5│inventory_hostname: host0201", 18 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_direct_interactive_ee_errors.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1]", 3 | "index": 1, 4 | "comment": "exit", 5 | "additional_information": { 6 | "present": [ 7 | "exited" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 14 | "echo exited", 15 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 16 | "exited", 17 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_direct_interactive_ee_errors.py/test/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[3]", 3 | "index": 3, 4 | "comment": "exit", 5 | "additional_information": { 6 | "present": [ 7 | "exited" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 14 | "echo exited", 15 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 16 | "exited", 17 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_direct_interactive_noee.py/test/12.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[12]", 3 | "index": 12, 4 | "comment": "host0301 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0301]", 12 | "0│---", 13 | "1│ansible_host: host0301.test.com", 14 | "2│host0301_foo: host0301_bar", 15 | "3│inventory_hostname: host0301", 16 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_direct_interactive_noee.py/test/20.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[20]", 3 | "index": 20, 4 | "comment": "host0201 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0201]", 12 | "0│---", 13 | "1│ansible_become: true", 14 | "2│ansible_become_pass: test", 15 | "3│ansible_host: host0201.test.com", 16 | "4│host0201_foo: host0201_bar", 17 | "5│inventory_hostname: host0201", 18 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back - previous + next [0-9] goto :help help" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_direct_interactive_noee.py/test/22.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[22]", 3 | "index": 22, 4 | "comment": "host0301 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0301]", 12 | "0│---", 13 | "1│ansible_host: host0301.test.com", 14 | "2│host0301_foo: host0301_bar", 15 | "3│inventory_hostname: host0301", 16 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back - previous + next [0-9] goto :help help" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_direct_interactive_noee.py/test/8.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[08]", 3 | "index": 8, 4 | "comment": "host0201 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0201]", 12 | "0│---", 13 | "1│ansible_become: true", 14 | "2│ansible_become_pass: test", 15 | "3│ansible_host: host0201.test.com", 16 | "4│host0201_foo: host0201_bar", 17 | "5│inventory_hostname: host0201", 18 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_direct_interactive_noee_errors.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1]", 3 | "index": 1, 4 | "comment": "exit", 5 | "additional_information": { 6 | "present": [ 7 | "exited" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 14 | "echo exited", 15 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 16 | "exited", 17 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_direct_interactive_noee_errors.py/test/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[3]", 3 | "index": 3, 4 | "comment": "exit", 5 | "additional_information": { 6 | "present": [ 7 | "exited" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 14 | "echo exited", 15 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 16 | "exited", 17 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_welcome_interactive_ee.py/test/13.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[13]", 3 | "index": 13, 4 | "comment": "host0301 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0301]", 12 | "0│---", 13 | "1│ansible_host: host0301.test.com", 14 | "2│host0301_foo: host0301_bar", 15 | "3│inventory_hostname: host0301", 16 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_welcome_interactive_ee.py/test/21.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[21]", 3 | "index": 21, 4 | "comment": "host0201 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0201]", 12 | "0│---", 13 | "1│ansible_become: true", 14 | "2│ansible_become_pass: test", 15 | "3│ansible_host: host0201.test.com", 16 | "4│host0201_foo: host0201_bar", 17 | "5│inventory_hostname: host0201", 18 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back - previous + next [0-9] goto :help help" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_welcome_interactive_ee.py/test/23.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[23]", 3 | "index": 23, 4 | "comment": "host0301 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0301]", 12 | "0│---", 13 | "1│ansible_host: host0301.test.com", 14 | "2│host0301_foo: host0301_bar", 15 | "3│inventory_hostname: host0301", 16 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back - previous + next [0-9] goto :help help" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_welcome_interactive_ee.py/test/9.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[09]", 3 | "index": 9, 4 | "comment": "host0201 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0201]", 12 | "0│---", 13 | "1│ansible_become: true", 14 | "2│ansible_become_pass: test", 15 | "3│ansible_host: host0201.test.com", 16 | "4│host0201_foo: host0201_bar", 17 | "5│inventory_hostname: host0201", 18 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_welcome_interactive_noee.py/test/13.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[13]", 3 | "index": 13, 4 | "comment": "host0301 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0301]", 12 | "0│---", 13 | "1│ansible_host: host0301.test.com", 14 | "2│host0301_foo: host0301_bar", 15 | "3│inventory_hostname: host0301", 16 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_welcome_interactive_noee.py/test/21.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[21]", 3 | "index": 21, 4 | "comment": "host0201 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0201]", 12 | "0│---", 13 | "1│ansible_become: true", 14 | "2│ansible_become_pass: test", 15 | "3│ansible_host: host0201.test.com", 16 | "4│host0201_foo: host0201_bar", 17 | "5│inventory_hostname: host0201", 18 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back - previous + next [0-9] goto :help help" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_welcome_interactive_noee.py/test/23.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[23]", 3 | "index": 23, 4 | "comment": "host0301 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0301]", 12 | "0│---", 13 | "1│ansible_host: host0301.test.com", 14 | "2│host0301_foo: host0301_bar", 15 | "3│inventory_hostname: host0301", 16 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back - previous + next [0-9] goto :help help" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/test_welcome_interactive_noee.py/test/9.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[09]", 3 | "index": 9, 4 | "comment": "host0201 detail window", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | "[host0201]", 12 | "0│---", 13 | "1│ansible_become: true", 14 | "2│ansible_become_pass: test", 15 | "3│ansible_host: host0201.test.com", 16 | "4│host0201_foo: host0201_bar", 17 | "5│inventory_hostname: host0201", 18 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/using_ansible_cfg/ansible.cfg: -------------------------------------------------------------------------------- 1 | [defaults] 2 | 3 | inventory = ./inventory.yml 4 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/using_ansible_cfg/inventory.yml: -------------------------------------------------------------------------------- 1 | all: 2 | hosts: 3 | from.ansible.cfg: 4 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/using_plugin/ansible.cfg: -------------------------------------------------------------------------------- 1 | [inventory] 2 | enable_plugins = test.test.test 3 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/inventory/using_plugin/test_inventory.yml: -------------------------------------------------------------------------------- 1 | plugin: test.test.test 2 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/lint/borked/playbook.yml: -------------------------------------------------------------------------------- 1 | - hosts: localhost 2 | roles: 3 | - yep 4 | - uh-huh 5 | tasks: 6 | - command: echo 'nameless task oh no!' 7 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/lint/borked/roles/uh-huh/tasks/main.yml: -------------------------------------------------------------------------------- 1 | - name: demo 2 | assert: 3 | that: 4 | - true 5 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/lint/borked/roles/yep/tasks/main.yml: -------------------------------------------------------------------------------- 1 | - command: echo 'oh no, no name' 2 | 3 | - debug: msg="boo!" 4 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/lint/no_errors/playbook.yml: -------------------------------------------------------------------------------- 1 | - name: Test play 2 | hosts: localhost 3 | roles: 4 | - no-errors-here 5 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/lint/no_errors/roles/no-errors-here/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: A properly named task 3 | ansible.builtin.assert: 4 | that: 5 | - true 6 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/lint/test_direct_interactive_no_errors_ee.py/test/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[0]", 3 | "index": 0, 4 | "comment": "ansible-navigator lint top window", 5 | "additional_information": { 6 | "present": [ 7 | "no lint issues" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | " Success", 14 | " ────────────────────────────────────────", 15 | " Congratulations, no lint issues found!", 16 | " ────────────────────────────────────────", 17 | " Ok" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/lint/test_stdout_tmux.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[step1]", 3 | "index": 1, 4 | "comment": "lint stdout with no errors", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [ 8 | ".yml:" 9 | ], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "(py313) bash$ansible-navigator lint /home/user/github/ansible-navigator/tests/fixtures/integration/actions/lint/no_errors --ee True --ll debug --mode stdout", 14 | "(py313) bash$" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/ansible-navigator.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: {} 3 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_direct_interactive_ee.py/test/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[0]", 3 | "index": 0, 4 | "comment": "run top window", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_direct_interactive_ee.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1]", 3 | "index": 1, 4 | "comment": "Task list", 5 | "output": [ 6 | " Result Host Number Changed Task Task action Duration", 7 | "0│OK localhost 0 False debug debug 0s", 8 | "1│OK localhost 1 False debug debug 0s", 9 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_direct_interactive_ee.py/test/5.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[5]", 3 | "index": 5, 4 | "comment": "Return to task list", 5 | "output": [ 6 | " Result Host Number Changed Task Task action Duration", 7 | "0│OK localhost 0 False debug debug 0s", 8 | "1│OK localhost 1 False debug debug 0s", 9 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_direct_interactive_ee.py/test/6.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[6]", 3 | "index": 6, 4 | "comment": "Return to play list", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_direct_interactive_noee.py/test/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[0]", 3 | "index": 0, 4 | "comment": "run top window", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_direct_interactive_noee.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1]", 3 | "index": 1, 4 | "comment": "Task list", 5 | "output": [ 6 | " Result Host Number Changed Task Task action Duration", 7 | "0│OK localhost 0 False debug debug 0s", 8 | "1│OK localhost 1 False debug debug 0s", 9 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_direct_interactive_noee.py/test/5.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[5]", 3 | "index": 5, 4 | "comment": "Return to task list", 5 | "output": [ 6 | " Result Host Number Changed Task Task action Duration", 7 | "0│OK localhost 0 False debug debug 0s", 8 | "1│OK localhost 1 False debug debug 0s", 9 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_direct_interactive_noee.py/test/6.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[6]", 3 | "index": 6, 4 | "comment": "Return to play list", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_welcome_interactive_ee.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1]", 3 | "index": 1, 4 | "comment": "Play list", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_welcome_interactive_ee.py/test/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[2]", 3 | "index": 2, 4 | "comment": "Task list", 5 | "output": [ 6 | " Result Host Number Changed Task Task action Duration", 7 | "0│OK localhost 0 False debug debug 0s", 8 | "1│OK localhost 1 False debug debug 0s", 9 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_welcome_interactive_ee.py/test/6.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[6]", 3 | "index": 6, 4 | "comment": "Return to task list", 5 | "output": [ 6 | " Result Host Number Changed Task Task action Duration", 7 | "0│OK localhost 0 False debug debug 0s", 8 | "1│OK localhost 1 False debug debug 0s", 9 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_welcome_interactive_ee.py/test/7.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[7]", 3 | "index": 7, 4 | "comment": "Return to play list", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_welcome_interactive_noee.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1]", 3 | "index": 1, 4 | "comment": "Play list", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_welcome_interactive_noee.py/test/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[2]", 3 | "index": 2, 4 | "comment": "Task list", 5 | "output": [ 6 | " Result Host Number Changed Task Task action Duration", 7 | "0│OK localhost 0 False debug debug 0s", 8 | "1│OK localhost 1 False debug debug 0s", 9 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_welcome_interactive_noee.py/test/6.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[6]", 3 | "index": 6, 4 | "comment": "Return to task list", 5 | "output": [ 6 | " Result Host Number Changed Task Task action Duration", 7 | "0│OK localhost 0 False debug debug 0s", 8 | "1│OK localhost 1 False debug debug 0s", 9 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/replay/test_welcome_interactive_noee.py/test/7.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[7]", 3 | "index": 7, 4 | "comment": "Return to play list", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/run/inventory: -------------------------------------------------------------------------------- 1 | localhost 2 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/run/test_stdout_tmux.py/test/9.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[run playbook with enable-prompts and show prompting clear && ansible-navigator run /tests/fixtures/integration/actions/run/site.yaml -k --enable-prompts --ee True --ll debug]", 3 | "index": 9, 4 | "comment": "run playbook with enable-prompts and show prompting", 5 | "additional_information": { 6 | "look_fors": [ 7 | "password:" 8 | ], 9 | "look_nots": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "SSH password:" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/run/using_ansible_cfg/ansible.cfg: -------------------------------------------------------------------------------- 1 | [defaults] 2 | 3 | inventory = inventory.yml 4 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/run/using_ansible_cfg/inventory.yml: -------------------------------------------------------------------------------- 1 | all: 2 | hosts: 3 | from.ansible.cfg: 4 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/run/using_ansible_cfg/site.yml: -------------------------------------------------------------------------------- 1 | - hosts: all 2 | gather_facts: false 3 | tasks: 4 | - debug: 5 | var: inventory_hostname 6 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/run/vars/external_vars.yaml: -------------------------------------------------------------------------------- 1 | play_number: play-3 2 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/run_unicode/inventory: -------------------------------------------------------------------------------- 1 | localhost 2 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/run_unicode/site.yaml: -------------------------------------------------------------------------------- 1 | - name: Simple unicode output test 2 | hosts: localhost 3 | connection: local 4 | gather_facts: false 5 | tasks: 6 | - name: Raw with unicode arg and output 7 | raw: echo 航海家 8 | register: output 9 | - name: Debug the output 10 | debug: 11 | var: output 12 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/run_unicode/test_direct_interactive_ee.py/test/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[0]", 3 | "index": 0, 4 | "comment": "ansible-navigator run playbook", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 12 | "0│Simple unicode output test 2 1 0 0 0 0 0 2 Complete", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/run_unicode/test_direct_interactive_ee.py/test/8.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[8]", 3 | "index": 8, 4 | "comment": "all play details", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 12 | "0│Simple unicode output test 2 1 0 0 0 0 0 2 Complete", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/run_unicode/test_direct_interactive_noee.py/test/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[0]", 3 | "index": 0, 4 | "comment": "ansible-navigator run playbook", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 12 | "0│Simple unicode output test 2 1 0 0 0 0 0 2 Complete", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/run_unicode/test_direct_interactive_noee.py/test/8.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[8]", 3 | "index": 8, 4 | "comment": "all play details", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 12 | "0│Simple unicode output test 2 1 0 0 0 0 0 2 Complete", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/settings/test_direct_interactive_ee.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1]", 3 | "index": 1, 4 | "comment": "filter for app settings", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│App False Command line XXXXXXX", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/settings/test_direct_interactive_ee.py/test/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[3]", 3 | "index": 3, 4 | "comment": "return to filtered settings list", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│App False Command line XXXXXXX", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/settings/test_direct_interactive_noee.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1]", 3 | "index": 1, 4 | "comment": "filter for app settings", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│App False Command line XXXXXXX", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/settings/test_direct_interactive_noee.py/test/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[3]", 3 | "index": 3, 4 | "comment": "return to filtered settings list", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│App False Command line XXXXXXX", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/settings/test_welcome_interactive_ee.py/test/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[2]", 3 | "index": 2, 4 | "comment": "filter for app settings", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│App True Defaults XXXXXXX", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/settings/test_welcome_interactive_ee.py/test/4.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[4]", 3 | "index": 4, 4 | "comment": "return to filtered settings list", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│App True Defaults XXXXXXX", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/settings/test_welcome_interactive_noee.py/test/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[2]", 3 | "index": 2, 4 | "comment": "filter for app settings", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│App True Defaults XXXXXXX", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/settings/test_welcome_interactive_noee.py/test/4.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[4]", 3 | "index": 4, 4 | "comment": "return to filtered settings list", 5 | "additional_information": { 6 | "present": [], 7 | "absent": [], 8 | "compared_fixture": true 9 | }, 10 | "output": [ 11 | " Name Default Source Current", 12 | "0│App True Defaults XXXXXXX", 13 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/stdout/ansible-navigator.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: 3 | inventory-columns: 4 | - ansible_network_os 5 | - ansible_network_cli_ssh_type 6 | - ansible_connection 7 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/stdout/site.yml: -------------------------------------------------------------------------------- 1 | - hosts: localhost 2 | gather_facts: False 3 | tasks: 4 | - debug: 5 | msg: "message 1" 6 | - debug: 7 | var: item 8 | loop: "{{ items }}" 9 | vars: 10 | items: 11 | - 1 12 | - 2 13 | - 3 14 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/stdout/test_direct_interactive_ee.py/test/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[0]", 3 | "index": 0, 4 | "comment": "run top window", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/stdout/test_direct_interactive_ee.py/test/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[2]", 3 | "index": 2, 4 | "comment": "Return to play list", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/stdout/test_direct_interactive_ee.py/test/4.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[4]", 3 | "index": 4, 4 | "comment": "Return to playlist", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/stdout/test_direct_interactive_noee.py/test/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[0]", 3 | "index": 0, 4 | "comment": "run top window", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/stdout/test_direct_interactive_noee.py/test/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[2]", 3 | "index": 2, 4 | "comment": "Return to play list", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/stdout/test_direct_interactive_noee.py/test/4.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[4]", 3 | "index": 4, 4 | "comment": "Return to playlist", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/stdout/test_welcome_interactive_ee.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1]", 3 | "index": 1, 4 | "comment": "Play list", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/stdout/test_welcome_interactive_ee.py/test/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[3]", 3 | "index": 3, 4 | "comment": "Return to play list", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/stdout/test_welcome_interactive_ee.py/test/5.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[5]", 3 | "index": 5, 4 | "comment": "Return to playlist", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/stdout/test_welcome_interactive_noee.py/test/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[1]", 3 | "index": 1, 4 | "comment": "Play list", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/stdout/test_welcome_interactive_noee.py/test/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[3]", 3 | "index": 3, 4 | "comment": "Return to play list", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/stdout/test_welcome_interactive_noee.py/test/5.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[5]", 3 | "index": 5, 4 | "comment": "Return to playlist", 5 | "output": [ 6 | " Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress", 7 | "0│localhost 2 0 0 0 0 0 0 2 Complete", 8 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back [0-9] goto :help help Successful" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tests/fixtures/integration/actions/templar/test_direct_interactive_ee_readme.py/test/6.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test[6]", 3 | "index": 6, 4 | "comment": "open full_name", 5 | "additional_information": { 6 | "present": [ 7 | "ansible.posix.csh" 8 | ], 9 | "absent": [], 10 | "compared_fixture": false 11 | }, 12 | "output": [ 13 | "0│ansible.posix.csh", 14 | "^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tests/fixtures/integration/ansible-navigator_empty.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: 3 | empty: True 4 | -------------------------------------------------------------------------------- /tests/fixtures/integration/execution_environment/ansible-navigator_disable_ee.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: 3 | execution-environment: 4 | enabled: False 5 | -------------------------------------------------------------------------------- /tests/fixtures/integration/execution_environment/ansible-navigator_empty.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: {} 3 | -------------------------------------------------------------------------------- /tests/fixtures/integration/execution_environment/inventory.yml: -------------------------------------------------------------------------------- 1 | --- 2 | hosts: 3 | localhost: 4 | -------------------------------------------------------------------------------- /tests/fixtures/integration/execution_environment/site.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: localhost 3 | gather_facts: False 4 | tasks: 5 | - ansible.builtin.debug: 6 | msg: "test" 7 | -------------------------------------------------------------------------------- /tests/fixtures/integration/execution_environment_image/ansible-navigator_empty.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: {} 3 | -------------------------------------------------------------------------------- /tests/fixtures/integration/execution_environment_image/ansible-navigator_set_ee_image.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: 3 | execution-environment: 4 | image: quay.io/fedora/python-313:latest 5 | -------------------------------------------------------------------------------- /tests/fixtures/integration/execution_environment_image/inventory.yml: -------------------------------------------------------------------------------- 1 | --- 2 | hosts: 3 | localhost: 4 | -------------------------------------------------------------------------------- /tests/fixtures/integration/execution_environment_image/site.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: localhost 3 | gather_facts: False 4 | tasks: 5 | - ansible.builtin.debug: 6 | msg: "test" 7 | -------------------------------------------------------------------------------- /tests/fixtures/integration/pass_environment_variable/ansible-navigator.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: 3 | execution-environment: 4 | environment-variables: 5 | set: 6 | TEST_ENV0: te0 7 | TEST_ENV1: te1 8 | TEST_ENV2: te2 9 | -------------------------------------------------------------------------------- /tests/fixtures/integration/pass_environment_variable/ansible-navigator_empty.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: {} 3 | -------------------------------------------------------------------------------- /tests/fixtures/integration/pass_environment_variable/inventory.yml: -------------------------------------------------------------------------------- 1 | --- 2 | hosts: 3 | localhost: 4 | -------------------------------------------------------------------------------- /tests/fixtures/integration/pass_environment_variable/site.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: localhost 3 | gather_facts: False 4 | tasks: 5 | - ansible.builtin.debug: 6 | msg: "test" 7 | -------------------------------------------------------------------------------- /tests/fixtures/integration/set_environment_variable/ansible-navigator.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: 3 | execution-environment: 4 | environment-variables: 5 | set: 6 | TEST_STR: "navigator" 7 | TEST_BOOL: "true" 8 | TEST_INT: "42" 9 | -------------------------------------------------------------------------------- /tests/fixtures/integration/set_environment_variable/ansible-navigator_empty.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: {} 3 | -------------------------------------------------------------------------------- /tests/fixtures/integration/set_environment_variable/inventory.yml: -------------------------------------------------------------------------------- 1 | --- 2 | hosts: 3 | localhost: 4 | -------------------------------------------------------------------------------- /tests/fixtures/integration/set_environment_variable/site.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: localhost 3 | gather_facts: False 4 | tasks: 5 | - ansible.builtin.debug: 6 | msg: "test" 7 | -------------------------------------------------------------------------------- /tests/fixtures/integration/stdout_exit_codes/site.yml: -------------------------------------------------------------------------------- 1 | - hosts: localhost 2 | gather_facts: False 3 | tasks: 4 | - ansible.builtin.debug: 5 | msg: success 6 | -------------------------------------------------------------------------------- /tests/fixtures/integration/version_migration/ansible-navigator_all.yml: -------------------------------------------------------------------------------- 1 | ansible-navigator: 2 | ansible: 3 | config: ./ansible.cfg 4 | inventories: 5 | - ./inventory.yaml 6 | playbook: site.yml 7 | documentation: 8 | plugin: 9 | name: debug 10 | type: module 11 | execution-environment: 12 | pull-policy: never 13 | volume-mounts: 14 | - dest: /tmp/foo 15 | label: Z 16 | src: /tmp/foo 17 | help-builder: true 18 | help-config: true 19 | help-doc: true 20 | help-inventory: true 21 | help-playbook: true 22 | logging: 23 | append: false 24 | level: debug 25 | playbook-artifact: 26 | save-as: "{playbook_dir}/{playbook_name}-artifact-{ts_utc}.json" 27 | -------------------------------------------------------------------------------- /tests/fixtures/integration/version_migration/ansible-navigator_all_corrected.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: 3 | ansible: 4 | config: 5 | help: true 6 | path: ./ansible.cfg 7 | doc: 8 | help: true 9 | plugin: 10 | name: debug 11 | type: module 12 | inventory: 13 | entries: 14 | - ./inventory.yaml 15 | help: true 16 | playbook: 17 | help: true 18 | path: site.yml 19 | ansible-builder: 20 | help: true 21 | execution-environment: 22 | pull: 23 | policy: never 24 | volume-mounts: 25 | - dest: /tmp/foo 26 | options: Z 27 | src: /tmp/foo 28 | logging: 29 | append: false 30 | level: debug 31 | playbook-artifact: 32 | save-as: '{playbook_dir}/{playbook_name}-artifact-{time_stamp}.json' 33 | -------------------------------------------------------------------------------- /tests/fixtures/integration/version_migration/ansible-navigator_some.yml: -------------------------------------------------------------------------------- 1 | ansible-navigator: 2 | execution-environment: 3 | pull: 4 | policy: never 5 | volume-mounts: 6 | - dest: /tmp/foo 7 | label: Z 8 | src: /tmp/foo 9 | help-builder: true 10 | help-config: true 11 | playbook-artifact: 12 | save-as: "{playbook_dir}/{playbook_name}-artifact-{ts_utc}.json" 13 | -------------------------------------------------------------------------------- /tests/fixtures/integration/version_migration/ansible-navigator_some_corrected.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: 3 | ansible: 4 | config: 5 | help: true 6 | ansible-builder: 7 | help: true 8 | execution-environment: 9 | pull: 10 | policy: never 11 | volume-mounts: 12 | - dest: /tmp/foo 13 | options: Z 14 | src: /tmp/foo 15 | playbook-artifact: 16 | save-as: '{playbook_dir}/{playbook_name}-artifact-{time_stamp}.json' 17 | -------------------------------------------------------------------------------- /tests/fixtures/unit/cli/ansible-navigator.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: 3 | ansible: 4 | doc: 5 | plugin: 6 | type: become 7 | editor: 8 | command: emacs -nw +{line_number} {filename} 9 | console: False 10 | execution-environment: 11 | container-engine: podman 12 | enabled: False 13 | image: ghcr.io/ansible/community-ansible-dev-tools:latest 14 | inventory-columns: 15 | - ansible_network_os 16 | - ansible_network_cli_ssh_type 17 | - ansible_connection 18 | color: 19 | osc4: True 20 | logging: 21 | level: critical 22 | -------------------------------------------------------------------------------- /tests/fixtures/unit/cli/ansible-navigator_empty.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: {} 3 | -------------------------------------------------------------------------------- /tests/fixtures/unit/configuration_subsystem/ansible-navigator_broken.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansible/ansible-navigator/e155a5d0c88d94aa2f11d535df8c1201e3e2f0e3/tests/fixtures/unit/configuration_subsystem/ansible-navigator_broken.yml -------------------------------------------------------------------------------- /tests/fixtures/unit/configuration_subsystem/ansible-navigator_empty.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: {} 3 | -------------------------------------------------------------------------------- /tests/fixtures/unit/configuration_subsystem/ansible-navigator_no_app.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: 3 | app: non_app 4 | -------------------------------------------------------------------------------- /tests/fixtures/unit/configuration_subsystem/ansible-navigator_not_bool.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: 3 | execution-environment: 4 | enabled: 5 5 | -------------------------------------------------------------------------------- /tests/fixtures/unit/configuration_subsystem/ansible-navigator_unknown_key.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible-navigator: 3 | unknown: key 4 | -------------------------------------------------------------------------------- /tests/integration/__init__.py: -------------------------------------------------------------------------------- 1 | """The integration tests.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests for actions.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/builder/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests for the builder subcommand.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/collections/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests for the collections subcommand.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/collections/test_direct_interactive_ee.py: -------------------------------------------------------------------------------- 1 | """Tests for collections from CLI, interactive, with an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id_padded 9 | 10 | from .base import EXPECTED_COLLECTIONS 11 | from .base import BaseClass 12 | from .base import base_steps 13 | 14 | 15 | CLI = Command(subcommand="collections", execution_environment=True).join() 16 | 17 | 18 | initial_steps = ( 19 | UiTestStep( 20 | user_input=CLI, 21 | comment="ansible-navigator collections top window", 22 | present=EXPECTED_COLLECTIONS, 23 | ), 24 | ) 25 | 26 | steps = add_indices(initial_steps + base_steps) 27 | 28 | 29 | @pytest.mark.parametrize("step", steps, ids=step_id_padded) 30 | class Test(BaseClass): 31 | """Run the tests for ``collections`` from CLI, interactive, with an EE.""" 32 | 33 | update_fixtures = False 34 | -------------------------------------------------------------------------------- /tests/integration/actions/collections/test_direct_interactive_noee.py: -------------------------------------------------------------------------------- 1 | """Tests for collections from CLI, interactive, without an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id_padded 9 | 10 | from .base import EXPECTED_COLLECTIONS 11 | from .base import BaseClass 12 | from .base import base_steps 13 | 14 | 15 | CLI = Command(subcommand="collections", execution_environment=False).join() 16 | 17 | 18 | initial_steps = ( 19 | UiTestStep( 20 | user_input=CLI, 21 | comment="ansible-navigator collections top window", 22 | present=EXPECTED_COLLECTIONS, 23 | ), 24 | ) 25 | 26 | steps = add_indices(initial_steps + base_steps) 27 | 28 | 29 | @pytest.mark.parametrize("step", steps, ids=step_id_padded) 30 | class Test(BaseClass): 31 | """Run the tests for ``collections`` from CLI, interactive, without an EE.""" 32 | 33 | update_fixtures = False 34 | -------------------------------------------------------------------------------- /tests/integration/actions/collections/test_welcome_interactive_ee.py: -------------------------------------------------------------------------------- 1 | """Tests for collections from welcome, interactive, with an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id_padded 9 | 10 | from .base import EXPECTED_COLLECTIONS 11 | from .base import BaseClass 12 | from .base import base_steps 13 | 14 | 15 | CLI = Command(execution_environment=True).join() 16 | 17 | initial_steps = ( 18 | UiTestStep(user_input=CLI, comment="welcome screen"), 19 | UiTestStep( 20 | user_input=":collections", 21 | comment="enter collections from welcome screen", 22 | present=EXPECTED_COLLECTIONS, 23 | ), 24 | ) 25 | 26 | steps = add_indices(initial_steps + base_steps) 27 | 28 | 29 | @pytest.mark.parametrize("step", steps, ids=step_id_padded) 30 | class Test(BaseClass): 31 | """Run the tests for ``collections`` from welcome, interactive, with an EE.""" 32 | 33 | update_fixtures = False 34 | -------------------------------------------------------------------------------- /tests/integration/actions/config/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests for the config subcommand.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/config/test_direct_interactive_ee.py: -------------------------------------------------------------------------------- 1 | """Tests for ``config`` from CLI, interactive, with an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id 9 | 10 | from .base import BaseClass 11 | from .base import base_steps 12 | 13 | 14 | CLI = Command(subcommand="config", execution_environment=True).join() 15 | 16 | initial_steps = (UiTestStep(user_input=CLI, comment="ansible-navigator config command top window"),) 17 | 18 | steps = add_indices(initial_steps + base_steps) 19 | 20 | 21 | @pytest.mark.parametrize("step", steps, ids=step_id) 22 | class Test(BaseClass): 23 | """Run the tests for ``config`` from CLI, interactive, with an EE.""" 24 | 25 | UPDATE_FIXTURES = False 26 | -------------------------------------------------------------------------------- /tests/integration/actions/config/test_direct_interactive_noee.py: -------------------------------------------------------------------------------- 1 | """Tests for ``config`` from CLI, interactive, without an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id 9 | 10 | from .base import BaseClass 11 | from .base import base_steps 12 | 13 | 14 | CLI = Command(subcommand="config", execution_environment=False).join() 15 | 16 | initial_steps = ( 17 | UiTestStep( 18 | user_input=CLI, 19 | comment="ansible-navigator config command top window", 20 | present=["Action warnings", "Callbacks enabled"], 21 | ), 22 | ) 23 | 24 | steps = add_indices(initial_steps + base_steps) 25 | 26 | 27 | @pytest.mark.parametrize("step", steps, ids=step_id) 28 | class Test(BaseClass): 29 | """Run the tests for ``config`` from CLI, interactive, without an EE.""" 30 | 31 | UPDATE_FIXTURES = False 32 | -------------------------------------------------------------------------------- /tests/integration/actions/config/test_welcome_interactive_ee.py: -------------------------------------------------------------------------------- 1 | """Tests for ``config`` from welcome, interactive, with an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id 9 | 10 | from .base import BaseClass 11 | from .base import base_steps 12 | 13 | 14 | CLI = Command(execution_environment=True).join() 15 | 16 | initial_steps = ( 17 | UiTestStep(user_input=CLI, comment="welcome screen"), 18 | UiTestStep(user_input=":config", comment="enter config from welcome screen"), 19 | ) 20 | 21 | steps = add_indices(initial_steps + base_steps) 22 | 23 | 24 | @pytest.mark.parametrize("step", steps, ids=step_id) 25 | class Test(BaseClass): 26 | """Run the tests for ``config`` from welcome, interactive, with an EE.""" 27 | 28 | UPDATE_FIXTURES = False 29 | -------------------------------------------------------------------------------- /tests/integration/actions/config/test_welcome_interactive_noee.py: -------------------------------------------------------------------------------- 1 | """Tests for ``config`` from CLI, interactive, without an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id 9 | 10 | from .base import BaseClass 11 | from .base import base_steps 12 | 13 | 14 | CLI = Command(execution_environment=False).join() 15 | 16 | initial_steps = ( 17 | UiTestStep(user_input=CLI, comment="welcome screen"), 18 | UiTestStep( 19 | user_input=":config", 20 | comment="enter config from welcome screen", 21 | present=["Action warnings", "Callbacks enabled"], 22 | ), 23 | ) 24 | 25 | steps = add_indices(initial_steps + base_steps) 26 | 27 | 28 | @pytest.mark.parametrize("step", steps, ids=step_id) 29 | class Test(BaseClass): 30 | """Run the tests for ``config`` from CLI, interactive, without an EE.""" 31 | 32 | UPDATE_FIXTURES = False 33 | -------------------------------------------------------------------------------- /tests/integration/actions/doc/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests for the doc subcommand.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/exec/__init__.py: -------------------------------------------------------------------------------- 1 | """Integration tests for the ``exec`` subcommand.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/images/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests for the images subcommand.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/images/test_direct_interactive_ee.py: -------------------------------------------------------------------------------- 1 | """Tests for images from CLI, interactive, with an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id_padded 9 | 10 | from .base import BaseClass 11 | from .base import base_steps 12 | 13 | 14 | CLI = Command(subcommand="images", execution_environment=True).join() 15 | 16 | initial_steps = ( 17 | UiTestStep( 18 | user_input=CLI, 19 | comment="ansible-navigator images top window", 20 | present=["community-ansible-dev-tools"], 21 | ), 22 | ) 23 | 24 | steps = add_indices(initial_steps + base_steps) 25 | 26 | 27 | @pytest.mark.parametrize("step", steps, ids=step_id_padded) 28 | class Test(BaseClass): 29 | """Run the tests for images from CLI, interactive, with an EE.""" 30 | 31 | UPDATE_FIXTURES = False 32 | -------------------------------------------------------------------------------- /tests/integration/actions/images/test_direct_interactive_noee.py: -------------------------------------------------------------------------------- 1 | """Tests for images from CLI, interactive, without an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id_padded 9 | 10 | from .base import BaseClass 11 | from .base import base_steps 12 | 13 | 14 | # this is misleading b/c images will use an EE, but not for automation 15 | CLI = Command(subcommand="images", execution_environment=False).join() 16 | 17 | initial_steps = ( 18 | UiTestStep( 19 | user_input=CLI, 20 | comment="ansible-navigator images top window", 21 | present=["community-ansible-dev-tools"], 22 | ), 23 | ) 24 | 25 | steps = add_indices(initial_steps + base_steps) 26 | 27 | 28 | @pytest.mark.parametrize("step", steps, ids=step_id_padded) 29 | class Test(BaseClass): 30 | """Run the tests for images from CLI, interactive, without an EE.""" 31 | 32 | UPDATE_FIXTURES = False 33 | -------------------------------------------------------------------------------- /tests/integration/actions/images/test_welcome_interactive_ee.py: -------------------------------------------------------------------------------- 1 | """Tests for images from welcome, interactive, with an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id_padded 9 | 10 | from .base import BaseClass 11 | from .base import base_steps 12 | 13 | 14 | CLI = Command(execution_environment=True).join() 15 | 16 | initial_steps = ( 17 | UiTestStep(user_input=CLI, comment="welcome screen"), 18 | UiTestStep( 19 | user_input=":images", 20 | comment="ansible-navigator images top window", 21 | present=["community-ansible-dev-tools"], 22 | ), 23 | ) 24 | 25 | steps = add_indices(initial_steps + base_steps) 26 | 27 | 28 | @pytest.mark.parametrize("step", steps, ids=step_id_padded) 29 | class Test(BaseClass): 30 | """Run the tests for images from welcome, interactive, with an EE.""" 31 | 32 | UPDATE_FIXTURES = False 33 | -------------------------------------------------------------------------------- /tests/integration/actions/inventory/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests for the inventory subcommand.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/inventory/test_direct_interactive_ee.py: -------------------------------------------------------------------------------- 1 | """Tests for inventory from CLI, interactive, with an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id_padded 9 | 10 | from .base import ANSIBLE_INVENTORY_FIXTURE_DIR 11 | from .base import BaseClass 12 | from .base import base_steps 13 | 14 | 15 | cmdline = f"-i {ANSIBLE_INVENTORY_FIXTURE_DIR}" 16 | CLI = Command(subcommand="inventory", cmdline=cmdline, execution_environment=True).join() 17 | 18 | initial_steps = ( 19 | UiTestStep(user_input=CLI, comment="ansible-navigator inventory command top window"), 20 | ) 21 | 22 | steps = add_indices(initial_steps + base_steps) 23 | 24 | 25 | @pytest.mark.parametrize("step", steps, ids=step_id_padded) 26 | class Test(BaseClass): 27 | """Run the tests for inventory from CLI, interactive, with an EE.""" 28 | 29 | UPDATE_FIXTURES = False 30 | -------------------------------------------------------------------------------- /tests/integration/actions/inventory/test_direct_interactive_noee.py: -------------------------------------------------------------------------------- 1 | """Tests for inventory from CLI, interactive, without an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id_padded 9 | 10 | from .base import ANSIBLE_INVENTORY_FIXTURE_DIR 11 | from .base import BaseClass 12 | from .base import base_steps 13 | 14 | 15 | cmdline = f"-i {ANSIBLE_INVENTORY_FIXTURE_DIR}" 16 | CLI = Command(subcommand="inventory", cmdline=cmdline, execution_environment=False).join() 17 | 18 | initial_steps = ( 19 | UiTestStep(user_input=CLI, comment="ansible-navigator inventory command top window"), 20 | ) 21 | 22 | steps = add_indices(initial_steps + base_steps) 23 | 24 | 25 | @pytest.mark.parametrize("step", steps, ids=step_id_padded) 26 | class Test(BaseClass): 27 | """Run the tests for inventory from CLI, interactive, without an EE.""" 28 | 29 | UPDATE_FIXTURES = False 30 | -------------------------------------------------------------------------------- /tests/integration/actions/inventory/test_welcome_interactive_ee.py: -------------------------------------------------------------------------------- 1 | """Tests for inventory from welcome, interactive, with an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id_padded 9 | 10 | from .base import ANSIBLE_INVENTORY_FIXTURE_DIR 11 | from .base import BaseClass 12 | from .base import base_steps 13 | 14 | 15 | CLI = Command(execution_environment=True).join() 16 | cmdline = f":inventory -i {ANSIBLE_INVENTORY_FIXTURE_DIR}" 17 | 18 | initial_steps = ( 19 | UiTestStep(user_input=CLI, comment="welcome screen"), 20 | UiTestStep(user_input=cmdline, comment="ansible-navigator inventory command top window"), 21 | ) 22 | 23 | steps = add_indices(initial_steps + base_steps) 24 | 25 | 26 | @pytest.mark.parametrize("step", steps, ids=step_id_padded) 27 | class Test(BaseClass): 28 | """Run the tests for inventory from CLI, interactive, with an EE.""" 29 | 30 | UPDATE_FIXTURES = False 31 | -------------------------------------------------------------------------------- /tests/integration/actions/inventory/test_welcome_interactive_noee.py: -------------------------------------------------------------------------------- 1 | """Tests for inventory from welcome, interactive, without an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id_padded 9 | 10 | from .base import ANSIBLE_INVENTORY_FIXTURE_DIR 11 | from .base import BaseClass 12 | from .base import base_steps 13 | 14 | 15 | CLI = Command(execution_environment=False).join() 16 | cmdline = f":inventory -i {ANSIBLE_INVENTORY_FIXTURE_DIR}" 17 | 18 | initial_steps = ( 19 | UiTestStep(user_input=CLI, comment="welcome screen"), 20 | UiTestStep(user_input=cmdline, comment="ansible-navigator inventory command top window"), 21 | ) 22 | 23 | steps = add_indices(initial_steps + base_steps) 24 | 25 | 26 | @pytest.mark.parametrize("step", steps, ids=step_id_padded) 27 | class Test(BaseClass): 28 | """Run the tests for inventory from CLI, interactive, without an EE.""" 29 | 30 | UPDATE_FIXTURES = False 31 | -------------------------------------------------------------------------------- /tests/integration/actions/lint/__init__.py: -------------------------------------------------------------------------------- 1 | """Lint tests.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/lint/test_direct_interactive_no_errors_ee.py: -------------------------------------------------------------------------------- 1 | """Tests for lint (with no errors) from CLI, interactive, with an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id 9 | 10 | from .base import LINT_FIXTURES 11 | from .base import BaseClass 12 | 13 | 14 | CLI = Command( 15 | subcommand="lint", 16 | cmdline=f"{LINT_FIXTURES / 'no_errors'}", 17 | execution_environment=True, 18 | ).join() 19 | 20 | steps: tuple[UiTestStep, ...] = ( 21 | UiTestStep( 22 | user_input=CLI, 23 | comment="ansible-navigator lint top window", 24 | present=["no lint issues"], 25 | search_within_response="Success", 26 | ), 27 | ) 28 | 29 | steps = add_indices(steps) 30 | 31 | 32 | @pytest.mark.parametrize("step", steps, ids=step_id) 33 | class Test(BaseClass): 34 | """Run the tests for lint from CLI, interactive, with an EE.""" 35 | 36 | UPDATE_FIXTURES = False 37 | -------------------------------------------------------------------------------- /tests/integration/actions/replay/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests for the replay subcommand.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/replay/test_direct_interactive_ee.py: -------------------------------------------------------------------------------- 1 | """Tests for replay from CLI, interactive, with an EE.""" 2 | 3 | import pytest 4 | 5 | from .base import PLAYBOOK_ARTIFACT 6 | from .base import BaseClass 7 | 8 | 9 | CLI = f"ansible-navigator replay {PLAYBOOK_ARTIFACT} --execution-environment true --ll debug" 10 | 11 | testdata = [ 12 | pytest.param(0, CLI, "run top window", ["Complete", "Successful"], id="0"), 13 | pytest.param(1, ":0", "Task list", ":help help", id="1"), 14 | pytest.param(2, ":0", "Task 1", ":help help", id="2"), 15 | pytest.param(3, ":stdout", "Check stdout", ":help help", id="3"), 16 | pytest.param(4, ":back", "Return to task 1", ":help help", id="4"), 17 | pytest.param(5, ":back", "Return to task list", ":help help", id="5"), 18 | pytest.param(6, ":back", "Return to play list", ":help help", id="6"), 19 | ] 20 | 21 | 22 | @pytest.mark.parametrize(("index", "user_input", "comment", "search_within_response"), testdata) 23 | class Test(BaseClass): 24 | """Run the tests for replay from CLI, interactive, with an EE.""" 25 | 26 | UPDATE_FIXTURES = False 27 | -------------------------------------------------------------------------------- /tests/integration/actions/replay/test_direct_interactive_noee.py: -------------------------------------------------------------------------------- 1 | """Tests for replay from CLI, interactive, without an EE.""" 2 | 3 | import pytest 4 | 5 | from .base import PLAYBOOK_ARTIFACT 6 | from .base import BaseClass 7 | 8 | 9 | CLI = f"ansible-navigator replay {PLAYBOOK_ARTIFACT} --execution-environment false" 10 | 11 | testdata = [ 12 | pytest.param(0, CLI, "run top window", ["Complete", "Successful"], id="0"), 13 | pytest.param(1, ":0", "Task list", ":help help", id="1"), 14 | pytest.param(2, ":0", "Task 1", ":help help", id="2"), 15 | pytest.param(3, ":stdout", "Check stdout", ":help help", id="3"), 16 | pytest.param(4, ":back", "Return to task 1", ":help help", id="4"), 17 | pytest.param(5, ":back", "Return to task list", ":help help", id="5"), 18 | pytest.param(6, ":back", "Return to play list", ":help help", id="6"), 19 | ] 20 | 21 | 22 | @pytest.mark.parametrize(("index", "user_input", "comment", "search_within_response"), testdata) 23 | class Test(BaseClass): 24 | """Run the tests for images from CLI, interactive, without an EE.""" 25 | 26 | UPDATE_FIXTURES = False 27 | -------------------------------------------------------------------------------- /tests/integration/actions/run/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests for the run subcommand.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/run_unicode/__init__.py: -------------------------------------------------------------------------------- 1 | """Integration tests for the ``run`` subcommand, confirming unicode output.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/run_unicode/test_welcome_interactive_ee.py: -------------------------------------------------------------------------------- 1 | """Not included, presentation of unicode should not vary with entrypoint.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/run_unicode/test_welcome_interactive_noee.py: -------------------------------------------------------------------------------- 1 | """Not included, presentation of unicode should not vary with entrypoint.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/settings/__init__.py: -------------------------------------------------------------------------------- 1 | """Settings tests.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/settings/test_direct_interactive_ee.py: -------------------------------------------------------------------------------- 1 | """Tests for ``settings`` from CLI, interactive, with an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id 9 | 10 | from .base import BaseClass 11 | from .base import base_steps 12 | 13 | 14 | CLI = Command(subcommand="settings", execution_environment=True).join() 15 | 16 | initial_steps = ( 17 | UiTestStep( 18 | user_input=CLI, 19 | comment="ansible-navigator settings command top window", 20 | present=["Ansible runner artifact dir", "Help config"], 21 | ), 22 | ) 23 | 24 | steps = add_indices(initial_steps + base_steps) 25 | 26 | 27 | @pytest.mark.parametrize("step", steps, ids=step_id) 28 | class Test(BaseClass): 29 | """Run the tests for ``settings`` from CLI, interactive, with an EE.""" 30 | 31 | UPDATE_FIXTURES = False 32 | -------------------------------------------------------------------------------- /tests/integration/actions/settings/test_direct_interactive_noee.py: -------------------------------------------------------------------------------- 1 | """Tests for ``settings`` from CLI, interactive, without an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id 9 | 10 | from .base import BaseClass 11 | from .base import base_steps 12 | 13 | 14 | CLI = Command(subcommand="settings", execution_environment=False).join() 15 | 16 | initial_steps = ( 17 | UiTestStep( 18 | user_input=CLI, 19 | comment="ansible-navigator settings command top window", 20 | present=["Ansible runner artifact dir", "Help config"], 21 | ), 22 | ) 23 | 24 | steps = add_indices(initial_steps + base_steps) 25 | 26 | 27 | @pytest.mark.parametrize("step", steps, ids=step_id) 28 | class Test(BaseClass): 29 | """Run the tests for ``settings`` from CLI, interactive, without an EE.""" 30 | 31 | UPDATE_FIXTURES = False 32 | -------------------------------------------------------------------------------- /tests/integration/actions/settings/test_welcome_interactive_ee.py: -------------------------------------------------------------------------------- 1 | """Tests for ``settings`` from welcome, interactive, with an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id 9 | 10 | from .base import BaseClass 11 | from .base import base_steps 12 | 13 | 14 | CLI = Command(execution_environment=True).join() 15 | 16 | initial_steps = ( 17 | UiTestStep(user_input=CLI, comment="welcome screen"), 18 | UiTestStep( 19 | user_input=":settings", 20 | comment="enter settings from welcome screen", 21 | present=["Ansible runner artifact dir", "Help config"], 22 | ), 23 | ) 24 | 25 | steps = add_indices(initial_steps + base_steps) 26 | 27 | 28 | @pytest.mark.parametrize("step", steps, ids=step_id) 29 | class Test(BaseClass): 30 | """Run the tests for ``settings`` from welcome, interactive, with an EE.""" 31 | 32 | UPDATE_FIXTURES = False 33 | -------------------------------------------------------------------------------- /tests/integration/actions/settings/test_welcome_interactive_noee.py: -------------------------------------------------------------------------------- 1 | """Tests for ``settings`` from CLI, interactive, without an EE.""" 2 | 3 | import pytest 4 | 5 | from tests.integration._interactions import Command 6 | from tests.integration._interactions import UiTestStep 7 | from tests.integration._interactions import add_indices 8 | from tests.integration._interactions import step_id 9 | 10 | from .base import BaseClass 11 | from .base import base_steps 12 | 13 | 14 | CLI = Command(execution_environment=False).join() 15 | 16 | initial_steps = ( 17 | UiTestStep(user_input=CLI, comment="welcome screen"), 18 | UiTestStep( 19 | user_input=":settings", 20 | comment="enter settings from welcome screen", 21 | present=["Ansible runner artifact dir", "Help config"], 22 | ), 23 | ) 24 | 25 | steps = add_indices(initial_steps + base_steps) 26 | 27 | 28 | @pytest.mark.parametrize("step", steps, ids=step_id) 29 | class Test(BaseClass): 30 | """Run the tests for ``settings`` from CLI, interactive, without an EE.""" 31 | 32 | UPDATE_FIXTURES = False 33 | -------------------------------------------------------------------------------- /tests/integration/actions/stdout/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests for the stdout subcommand.""" 2 | -------------------------------------------------------------------------------- /tests/integration/actions/stdout/test_direct_interactive_ee.py: -------------------------------------------------------------------------------- 1 | """Tests for ``stdout`` from CLI, interactive, with an EE.""" 2 | 3 | import pytest 4 | 5 | from .base import ANSIBLE_PLAYBOOK 6 | from .base import BaseClass 7 | 8 | 9 | CLI = f"ansible-navigator run {ANSIBLE_PLAYBOOK} --execution-environment true --ll debug" 10 | 11 | testdata = [ 12 | pytest.param(0, CLI, "run top window", "Successful", id="0"), 13 | pytest.param(1, ":st", "Check stdout", ":help help", id="1"), 14 | pytest.param(2, ":back", "Return to play list", ":help help", id="2"), 15 | pytest.param(3, ":stdout", "Check stdout", ":help help", id="3"), 16 | pytest.param(4, ":back", "Return to playlist", ":help help", id="4"), 17 | ] 18 | 19 | 20 | @pytest.mark.parametrize(("index", "user_input", "comment", "search_within_response"), testdata) 21 | class Test(BaseClass): 22 | """Run the tests for ``stdout`` from CLI, interactive, with EE.""" 23 | 24 | UPDATE_FIXTURES = False 25 | -------------------------------------------------------------------------------- /tests/integration/actions/stdout/test_direct_interactive_noee.py: -------------------------------------------------------------------------------- 1 | """Tests for ``stdout`` from CLI, interactive, without an EE.""" 2 | 3 | import pytest 4 | 5 | from .base import ANSIBLE_PLAYBOOK 6 | from .base import BaseClass 7 | 8 | 9 | CLI = f"ansible-navigator run {ANSIBLE_PLAYBOOK} --execution-environment false" 10 | 11 | testdata = [ 12 | pytest.param(0, CLI, "run top window", "Successful", id="0"), 13 | pytest.param(1, ":st", "Check stdout", ":help help", id="1"), 14 | pytest.param(2, ":back", "Return to play list", ":help help", id="2"), 15 | pytest.param(3, ":stdout", "Check stdout", ":help help", id="3"), 16 | pytest.param(4, ":back", "Return to playlist", ":help help", id="4"), 17 | ] 18 | 19 | 20 | @pytest.mark.parametrize(("index", "user_input", "comment", "search_within_response"), testdata) 21 | class Test(BaseClass): 22 | """Run the tests for ``stdout`` from CLI, ``interactive``, without an EE.""" 23 | 24 | UPDATE_FIXTURES = False 25 | -------------------------------------------------------------------------------- /tests/integration/actions/stdout/test_welcome_interactive_ee.py: -------------------------------------------------------------------------------- 1 | """Tests for stdout from welcome, interactive, with an EE.""" 2 | 3 | import pytest 4 | 5 | from .base import ANSIBLE_PLAYBOOK 6 | from .base import BaseClass 7 | 8 | 9 | CLI = "ansible-navigator --execution-environment true" 10 | 11 | testdata = [ 12 | pytest.param(0, CLI, "welcome", ":help help", id="0"), 13 | pytest.param(1, f":run {ANSIBLE_PLAYBOOK}", "Play list", "Successful", id="1"), 14 | pytest.param(2, ":st", "Check stdout", ":help help", id="2"), 15 | pytest.param(3, ":back", "Return to play list", ":help help", id="3"), 16 | pytest.param(4, ":stdout", "Check stdout", ":help help", id="4"), 17 | pytest.param(5, ":back", "Return to playlist", ":help help", id="5"), 18 | ] 19 | 20 | 21 | @pytest.mark.parametrize(("index", "user_input", "comment", "search_within_response"), testdata) 22 | class Test(BaseClass): 23 | """Run the tests for stdout from welcome, interactive, with an EE.""" 24 | 25 | UPDATE_FIXTURES = False 26 | -------------------------------------------------------------------------------- /tests/integration/actions/stdout/test_welcome_interactive_noee.py: -------------------------------------------------------------------------------- 1 | """Tests for stdout from welcome, interactive, without an EE.""" 2 | 3 | import pytest 4 | 5 | from .base import ANSIBLE_PLAYBOOK 6 | from .base import BaseClass 7 | 8 | 9 | CLI = "ansible-navigator --execution-environment false" 10 | 11 | testdata = [ 12 | pytest.param(0, CLI, "welcome", ":help help", id="0"), 13 | pytest.param(1, f":run {ANSIBLE_PLAYBOOK}", "Play list", "Successful", id="1"), 14 | pytest.param(2, ":st", "Check stdout", ":help help", id="2"), 15 | pytest.param(3, ":back", "Return to play list", ":help help", id="3"), 16 | pytest.param(4, ":stdout", "Check stdout", ":help help", id="4"), 17 | pytest.param(5, ":back", "Return to playlist", ":help help", id="5"), 18 | ] 19 | 20 | 21 | @pytest.mark.parametrize(("index", "user_input", "comment", "search_within_response"), testdata) 22 | class Test(BaseClass): 23 | """Run the tests for stdout from welcome, interactive, without an EE.""" 24 | 25 | UPDATE_FIXTURES = False 26 | -------------------------------------------------------------------------------- /tests/integration/actions/templar/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests for the templar subcommand.""" 2 | -------------------------------------------------------------------------------- /tests/integration/diagnostics/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests for diagnostics.""" 2 | -------------------------------------------------------------------------------- /tests/integration/settings_from_cli/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests various scenarios from the CLI.""" 2 | -------------------------------------------------------------------------------- /tests/integration/version_migration/__init__.py: -------------------------------------------------------------------------------- 1 | """Test the version migration utility.""" 2 | -------------------------------------------------------------------------------- /tests/unit/__init__.py: -------------------------------------------------------------------------------- 1 | """The unit tests.""" 2 | -------------------------------------------------------------------------------- /tests/unit/actions/__init__.py: -------------------------------------------------------------------------------- 1 | """Action specific unit tests.""" 2 | -------------------------------------------------------------------------------- /tests/unit/actions/run/__init__.py: -------------------------------------------------------------------------------- 1 | """Unit tests for the run action.""" 2 | -------------------------------------------------------------------------------- /tests/unit/actions/settings/__init__.py: -------------------------------------------------------------------------------- 1 | """Unit tests for the ``settings`` subcommand.""" 2 | -------------------------------------------------------------------------------- /tests/unit/configuration_subsystem/__init__.py: -------------------------------------------------------------------------------- 1 | """Unit tests for the configuration subsystem.""" 2 | -------------------------------------------------------------------------------- /tests/unit/configuration_subsystem/defaults.py: -------------------------------------------------------------------------------- 1 | """Defaults for adjacent tests.""" 2 | 3 | from tests.defaults import FIXTURES_DIR 4 | 5 | 6 | TEST_FIXTURE_DIR = FIXTURES_DIR / "unit" / "configuration_subsystem" 7 | -------------------------------------------------------------------------------- /tests/unit/configuration_subsystem/post_processors/__init__.py: -------------------------------------------------------------------------------- 1 | """Post processor related tests.""" 2 | -------------------------------------------------------------------------------- /tests/unit/image_manager/__init__.py: -------------------------------------------------------------------------------- 1 | """Unit tests for the image_manager subsystem.""" 2 | -------------------------------------------------------------------------------- /tests/unit/logger/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests related to log generation and formatting.""" 2 | -------------------------------------------------------------------------------- /tests/unit/runner/__init__.py: -------------------------------------------------------------------------------- 1 | """Unit tests for the runner subsystem which provides the ansible-runner integration.""" 2 | -------------------------------------------------------------------------------- /tests/unit/ui_framework/__init__.py: -------------------------------------------------------------------------------- 1 | """Unit tests for the UI framework.""" 2 | -------------------------------------------------------------------------------- /tests/unit/utils/__init__.py: -------------------------------------------------------------------------------- 1 | """Unit tests for the ansible-navigator utils.""" 2 | -------------------------------------------------------------------------------- /tools/report-coverage: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # cspell: ignore exuo 3 | set -euo pipefail 4 | coverage combine -q "--data-file=${TOX_ENV_DIR}/.coverage" "${TOX_ENV_DIR}"/.coverage.* 5 | coverage xml "--data-file=${TOX_ENV_DIR}/.coverage" -o "${TOX_ENV_DIR}/coverage.xml" --ignore-errors --fail-under=0 6 | COVERAGE_FILE="${TOX_ENV_DIR}/.coverage" coverage lcov --fail-under=0 --ignore-errors -q 7 | COVERAGE_FILE="${TOX_ENV_DIR}/.coverage" coverage report --ignore-errors 8 | --------------------------------------------------------------------------------