# ansible-lint runnimg modes
## Current
- online
- offline
## Future - running modes
- realtime # vs extension mode, really fast
- quick # from the CLI
- full # for CI
- galaxy? # is this seperate?
- # vscode extension can set certain flags to achive realtime mode
- # the CLI would default to quick mode
- # and the GHA can set flag for full
## Features affected
## current
- running `ansible-galaxy install` commands ... -- controled by offline mode
- refresh schemas, controlled by offline mode
- mocking dependencies based on config - always happening - hardcoded to on
- running in isolation (collection/roles) - currently hardcoded to "on"
- version check - controled by offline mode, also disabled if installed from rpm
- installing current collection using galaxy editable
- strict mode: treat warnings as errors (off default)
## future
- future telemetry reporting feature
- future saas features
We might want to avoid adding one option for each of these, as it would explode the testing complexity.
```yaml
# config
#
flags:
isolated: true
# should be false for CI mode
#
editable: true # unless CI is detected / limited to a recognized role/collection
install-requirements: true
# by default, look in a ./collections directory
# if a rqwuirements file is found in ./collections
# install the collections in ./collections
# this feature will install collecitons and roles
# but not their python or system package dependancies
# this should be documented, and suggest an EE for a full dep build
update-schemas: true
version-check: true # not for rpms
# reserved for future
telemetry: false # true for github-action
saas: false # or wisdom?
e/E
--feature=!telemetry,-editable
```
`./collection`
Question: If running ansible-lint in a directory that appears to be a collection, how do we ensure that collection can be used by ansible-core? Do we symlink the current working directory directories into a collections/ansible-collections/directory/name/namespace and inject the current working directory into the ansible-core collection path for the user?
- Should we install the collections deps into the same collection tree is asked?
## Developer machine
- Out of the box without any additional configuration, I want
- ansible-lint to use my current development environment
- respect my currently installed collections based on what ansible-core reports
- use the version of ansible-core available along side ansible-lint
- automatically refresh/update schemas
- ansible-lint to report newer versions available
- I want to be able to opt into telemetry
- I want the option for ansible-lint to install collections in the current environment based on the presense of a project directory requirements.yml file within a playbook adjacent collection directory
- I want the option to disable automatic schema updates
- I want the option to disable newer version checking
- I want the ability to disable errors thrown by "plugin not found"
- this may be done by mocking, monkeypatching/ignoring ansible-core
- I want ansible-lint to recognise I am developing a collection and symlink my workspace contents into a {workspace}/collections/ansible-collections/directory/name/namespace so ansible-lint paths are "clickable" <= this is probably the default behaviour of the extension using the "editable" mode
- I do not want ansible-lint to try and build a collection if project folder is determined to be a collection
## GHA action (CI/CD)
- Telemetry enabled by default, but option to disabled it (otherwise they will fork it to disable it)
- Schema update enabled by default
- We do not want to install current collection as editable!
- If ansible-lint detects that the CWD is a collection, then it should by default try to build the collection, this should include linting of all test and playbook directories (and eventually the examples contained within the plugin's plython files)
## AAS
- Provide deprecation warnings
- Don't build a collection
- Don't fail on missing plugins or attempt to install anything
## Wisdom
- Don't fail on missing plugins or attempt to install anything
- Provide quality measure as an integer
- Don't build a collection
- Clean/reformat the code