├── .github ├── boring-cyborg.yml └── workflows │ └── collection-migration-tests.yml ├── .gitignore ├── .yamllint ├── README.md ├── ansible-base.md ├── features.yaml ├── generate_glob_collection.sh ├── generate_nwo.py ├── generate_status_quo.py ├── gh.py ├── migrate.md ├── migrate.py ├── requirements.in ├── requirements.txt ├── requirements_nwo.txt ├── requirements_status_quo.txt ├── resources ├── .gitignore.tmpl ├── README.md.tmpl ├── collection-continuous-integration.yml.tmpl └── github_known_hosts.tmpl ├── rsa_utils.py ├── scenarios ├── base ├── bcs │ ├── README.md │ ├── a10networks.yml │ ├── ansible.yml │ ├── arista.yml │ ├── arubanetworks.yml │ ├── avinetworks.yml │ ├── azure.yml │ ├── check_point.yml │ ├── cisco.yml │ ├── community.yml │ ├── cyberark.yml │ ├── dell.yml │ ├── extremenetworks.yml │ ├── f5networks.yml │ ├── fortinet.yml │ ├── hp.yml │ ├── hpe.yml │ ├── huawei.yml │ ├── ibm.yml │ ├── infinidat.yml │ ├── influxdata.yml │ ├── infoblox.yml │ ├── junipernetworks.yml │ ├── logicmonitor.py │ ├── nagios.yml │ ├── netapp.yml │ ├── newrelic.yml │ ├── nginx.yml │ ├── nokia.yml │ ├── oracle.yml │ ├── pagerduty.yml │ ├── paloaltonetworks.yml │ ├── purestorage.yml │ ├── servicenow.yml │ └── vyatta.yml ├── common │ ├── README.md │ ├── a10networks.yml │ ├── arista.yml │ ├── arubanetworks.yml │ ├── avinetworks.yml │ ├── azure.yml │ ├── check_point.yml │ ├── cisco.yml │ ├── cyberark.yml │ ├── dell.yml │ ├── extremenetworks.yml │ ├── f5.yml │ ├── f5networks.yml │ ├── fortinet.yml │ ├── frrouting.yml │ ├── google.yml │ ├── hp.yml │ ├── hpe.yml │ ├── huawei.yml │ ├── ibm.yml │ ├── infinidat.yml │ ├── influxdata.yml │ ├── infoblox.yml │ ├── junipernetworks.yml │ ├── logicmonitor.yml │ ├── netapp.yml │ ├── newrelic.yml │ ├── nginx.yml │ ├── nokia.yml │ ├── oracle.yml │ ├── pagerduty.yml │ ├── paloaltonetworks.yml │ └── servicenow.yml ├── minimal │ ├── README.md │ ├── ansible.yml │ └── misc.yml ├── mintest │ ├── README.md │ ├── ansible.yml │ └── notmintest.yml ├── networking │ ├── ansible.yml │ ├── arista.yml │ ├── cisco.yml │ ├── junipernetworks.yml │ └── vyos.yml ├── newworld │ ├── README.md │ └── community.yml ├── nwo │ ├── ansible.yml │ ├── arista.yml │ ├── awx.yml │ ├── azure.yml │ ├── check_point.yml │ ├── cisco.yml │ ├── community.yml │ ├── compiled.csv │ ├── containers.yml │ ├── cyberark.yml │ ├── dellemc_networking.yml │ ├── f5networks.yml │ ├── fortinet.yml │ ├── frr.yml │ ├── google.yml │ ├── hetzner.yml │ ├── ibm.yml │ ├── junipernetworks.yml │ ├── netapp.yml │ ├── netbox.yml │ ├── openstack.yml │ ├── openvswitch.yml │ ├── ovirt.yml │ ├── purestorage.yml │ ├── servicenow.yml │ ├── skydive.yml │ ├── splunk.yml │ ├── theforeman.yml │ ├── vyos.yml │ └── wti.yml └── stdlib │ ├── README.md │ └── notstdlib.yml ├── template_utils.py ├── undolinks.sh └── update_nwo.py /.github/boring-cyborg.yml: -------------------------------------------------------------------------------- 1 | labelPRBasedOnFilePath: 2 | BCS: 3 | - scenarios/bcs/* 4 | mintest: 5 | - scenarios/mintest/* 6 | NWO: 7 | - scenarios/nwo/* 8 | migrate: 9 | - gh.py 10 | - migrate.py 11 | - rsa_utils.py 12 | - template_utils.py 13 | - undolinks.sh 14 | CI/CD: 15 | - .github/workflows/*.yml 16 | templates: 17 | - resources/* 18 | dependencies: 19 | - requirements.in 20 | - requirements.txt 21 | documentation: 22 | - "**/*.md" 23 | - "**/*.rst" 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.gitignore.io/api/git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs 3 | # Edit at https://www.gitignore.io/?templates=git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs 4 | 5 | ### Emacs ### 6 | # -*- mode: gitignore; -*- 7 | *~ 8 | \#*\# 9 | /.emacs.desktop 10 | /.emacs.desktop.lock 11 | *.elc 12 | auto-save-list 13 | tramp 14 | .\#* 15 | 16 | # Org-mode 17 | .org-id-locations 18 | *_archive 19 | 20 | # flymake-mode 21 | *_flymake.* 22 | 23 | # eshell files 24 | /eshell/history 25 | /eshell/lastdir 26 | 27 | # elpa packages 28 | /elpa/ 29 | 30 | # reftex files 31 | *.rel 32 | 33 | # AUCTeX auto folder 34 | /auto/ 35 | 36 | # cask packages 37 | .cask/ 38 | dist/ 39 | 40 | # Flycheck 41 | flycheck_*.el 42 | 43 | # server auth directory 44 | /server/ 45 | 46 | # projectiles files 47 | .projectile 48 | 49 | # directory configuration 50 | .dir-locals.el 51 | 52 | # network security 53 | /network-security.data 54 | 55 | 56 | ### Git ### 57 | # Created by git for backups. To disable backups in Git: 58 | # $ git config --global mergetool.keepBackup false 59 | *.orig 60 | 61 | # Created by git when using merge tools for conflicts 62 | *.BACKUP.* 63 | *.BASE.* 64 | *.LOCAL.* 65 | *.REMOTE.* 66 | *_BACKUP_*.txt 67 | *_BASE_*.txt 68 | *_LOCAL_*.txt 69 | *_REMOTE_*.txt 70 | 71 | #!! ERROR: jupyternotebook is undefined. Use list command to see defined gitignore types !!# 72 | 73 | ### Linux ### 74 | 75 | # temporary files which can be created if a process still has a handle open of a deleted file 76 | .fuse_hidden* 77 | 78 | # KDE directory preferences 79 | .directory 80 | 81 | # Linux trash folder which might appear on any partition or disk 82 | .Trash-* 83 | 84 | # .nfs files are created when an open file is removed but is still being accessed 85 | .nfs* 86 | 87 | ### PyCharm+all ### 88 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm 89 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 90 | 91 | # User-specific stuff 92 | .idea/**/workspace.xml 93 | .idea/**/tasks.xml 94 | .idea/**/usage.statistics.xml 95 | .idea/**/dictionaries 96 | .idea/**/shelf 97 | 98 | # Generated files 99 | .idea/**/contentModel.xml 100 | 101 | # Sensitive or high-churn files 102 | .idea/**/dataSources/ 103 | .idea/**/dataSources.ids 104 | .idea/**/dataSources.local.xml 105 | .idea/**/sqlDataSources.xml 106 | .idea/**/dynamic.xml 107 | .idea/**/uiDesigner.xml 108 | .idea/**/dbnavigator.xml 109 | 110 | # Gradle 111 | .idea/**/gradle.xml 112 | .idea/**/libraries 113 | 114 | # Gradle and Maven with auto-import 115 | # When using Gradle or Maven with auto-import, you should exclude module files, 116 | # since they will be recreated, and may cause churn. Uncomment if using 117 | # auto-import. 118 | # .idea/modules.xml 119 | # .idea/*.iml 120 | # .idea/modules 121 | # *.iml 122 | # *.ipr 123 | 124 | # CMake 125 | cmake-build-*/ 126 | 127 | # Mongo Explorer plugin 128 | .idea/**/mongoSettings.xml 129 | 130 | # File-based project format 131 | *.iws 132 | 133 | # IntelliJ 134 | out/ 135 | 136 | # mpeltonen/sbt-idea plugin 137 | .idea_modules/ 138 | 139 | # JIRA plugin 140 | atlassian-ide-plugin.xml 141 | 142 | # Cursive Clojure plugin 143 | .idea/replstate.xml 144 | 145 | # Crashlytics plugin (for Android Studio and IntelliJ) 146 | com_crashlytics_export_strings.xml 147 | crashlytics.properties 148 | crashlytics-build.properties 149 | fabric.properties 150 | 151 | # Editor-based Rest Client 152 | .idea/httpRequests 153 | 154 | # Android studio 3.1+ serialized cache file 155 | .idea/caches/build_file_checksums.ser 156 | 157 | ### PyCharm+all Patch ### 158 | # Ignores the whole .idea folder and all .iml files 159 | # See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360 160 | 161 | .idea/ 162 | 163 | # Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 164 | 165 | *.iml 166 | modules.xml 167 | .idea/misc.xml 168 | *.ipr 169 | 170 | # Sonarlint plugin 171 | .idea/sonarlint 172 | 173 | ### pydev ### 174 | .pydevproject 175 | 176 | ### Python ### 177 | # Byte-compiled / optimized / DLL files 178 | __pycache__/ 179 | *.py[cod] 180 | *$py.class 181 | 182 | # C extensions 183 | *.so 184 | 185 | # Distribution / packaging 186 | .Python 187 | build/ 188 | develop-eggs/ 189 | downloads/ 190 | eggs/ 191 | .eggs/ 192 | lib/ 193 | lib64/ 194 | parts/ 195 | sdist/ 196 | var/ 197 | wheels/ 198 | pip-wheel-metadata/ 199 | share/python-wheels/ 200 | *.egg-info/ 201 | .installed.cfg 202 | *.egg 203 | MANIFEST 204 | 205 | # PyInstaller 206 | # Usually these files are written by a python script from a template 207 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 208 | *.manifest 209 | *.spec 210 | 211 | # Installer logs 212 | pip-log.txt 213 | pip-delete-this-directory.txt 214 | 215 | # Unit test / coverage reports 216 | htmlcov/ 217 | .tox/ 218 | .nox/ 219 | .coverage 220 | .coverage.* 221 | .cache 222 | nosetests.xml 223 | coverage.xml 224 | *.cover 225 | .hypothesis/ 226 | .pytest_cache/ 227 | 228 | # Translations 229 | *.mo 230 | *.pot 231 | 232 | # Django stuff: 233 | *.log 234 | local_settings.py 235 | db.sqlite3 236 | db.sqlite3-journal 237 | 238 | # Flask stuff: 239 | instance/ 240 | .webassets-cache 241 | 242 | # Scrapy stuff: 243 | .scrapy 244 | 245 | # Sphinx documentation 246 | docs/_build/ 247 | 248 | # PyBuilder 249 | target/ 250 | 251 | # Jupyter Notebook 252 | .ipynb_checkpoints 253 | 254 | # IPython 255 | profile_default/ 256 | ipython_config.py 257 | 258 | # pyenv 259 | .python-version 260 | 261 | # pipenv 262 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 263 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 264 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 265 | # install all needed dependencies. 266 | #Pipfile.lock 267 | 268 | # celery beat schedule file 269 | celerybeat-schedule 270 | 271 | # SageMath parsed files 272 | *.sage.py 273 | 274 | # Environments 275 | .env 276 | .venv 277 | env/ 278 | venv/ 279 | ENV/ 280 | env.bak/ 281 | venv.bak/ 282 | 283 | # Spyder project settings 284 | .spyderproject 285 | .spyproject 286 | 287 | # Rope project settings 288 | .ropeproject 289 | 290 | # mkdocs documentation 291 | /site 292 | 293 | # mypy 294 | .mypy_cache/ 295 | .dmypy.json 296 | dmypy.json 297 | 298 | # Pyre type checker 299 | .pyre/ 300 | 301 | ### Vim ### 302 | # Swap 303 | [._]*.s[a-v][a-z] 304 | [._]*.sw[a-p] 305 | [._]s[a-rt-v][a-z] 306 | [._]ss[a-gi-z] 307 | [._]sw[a-p] 308 | 309 | # Session 310 | Session.vim 311 | Sessionx.vim 312 | 313 | # Temporary 314 | .netrwhist 315 | # Auto-generated tag files 316 | tags 317 | # Persistent undo 318 | [._]*.un~ 319 | 320 | ### WebStorm ### 321 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm 322 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 323 | 324 | # User-specific stuff 325 | 326 | # Generated files 327 | 328 | # Sensitive or high-churn files 329 | 330 | # Gradle 331 | 332 | # Gradle and Maven with auto-import 333 | # When using Gradle or Maven with auto-import, you should exclude module files, 334 | # since they will be recreated, and may cause churn. Uncomment if using 335 | # auto-import. 336 | # .idea/modules.xml 337 | # .idea/*.iml 338 | # .idea/modules 339 | # *.iml 340 | # *.ipr 341 | 342 | # CMake 343 | 344 | # Mongo Explorer plugin 345 | 346 | # File-based project format 347 | 348 | # IntelliJ 349 | 350 | # mpeltonen/sbt-idea plugin 351 | 352 | # JIRA plugin 353 | 354 | # Cursive Clojure plugin 355 | 356 | # Crashlytics plugin (for Android Studio and IntelliJ) 357 | 358 | # Editor-based Rest Client 359 | 360 | # Android studio 3.1+ serialized cache file 361 | 362 | ### WebStorm Patch ### 363 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 364 | 365 | # *.iml 366 | # modules.xml 367 | # .idea/misc.xml 368 | # *.ipr 369 | 370 | # Sonarlint plugin 371 | 372 | ### Windows ### 373 | # Windows thumbnail cache files 374 | Thumbs.db 375 | Thumbs.db:encryptable 376 | ehthumbs.db 377 | ehthumbs_vista.db 378 | 379 | # Dump file 380 | *.stackdump 381 | 382 | # Folder config file 383 | [Dd]esktop.ini 384 | 385 | # Recycle Bin used on file shares 386 | $RECYCLE.BIN/ 387 | 388 | # Windows Installer files 389 | *.cab 390 | *.msi 391 | *.msix 392 | *.msm 393 | *.msp 394 | 395 | # Windows shortcuts 396 | *.lnk 397 | 398 | # End of https://www.gitignore.io/api/git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs 399 | -------------------------------------------------------------------------------- /.yamllint: -------------------------------------------------------------------------------- 1 | indentation: 2 | indent-sequences: false 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![GitHub Actions CI/CD build status — Collection migration smoke test suite](https://github.com/ansible-community/collection_migration/workflows/CI/CD/badge.svg?branch=master)](https://github.com/ansible-community/collection_migration/actions?query=workflow%3ACI%2FCD+branch%3Amaster) 2 | 3 | 4 | 5 | # NO LONGER NEEDED 6 | 7 | The migrate.py process was ran for the **last time on Friday 6th March 2020**. 8 | 9 | This repo is left as a record of what was done. 10 | 11 | If you need to move plugins between collections please see https://github.com/ansible-collections/overview/blob/master/README.rst#q-what-should-i-do-to-move-plugins-across-collections-during-migration 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | # Old readme 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | migrate.py 33 | ========== 34 | 35 | The migration script (`migrate.py`) has incorporated help, so using 36 | `--help` you can see all the options. 37 | 38 | 39 | Runtime pre-requisites 40 | ---------------------- 41 | 42 | The main requisite is **Python 3.7**. You'll also need to install 43 | the dependency packages: 44 | 45 | ```console 46 | $ python3.7 -m venv .venv 47 | $ . .venv/bin/activate 48 | (.venv) $ python3.7 -m pip install -r requirements.in 49 | ``` 50 | 51 | *Pro tip:* If you wish to install exactly the same dep versions 52 | as the CI uses, make sure to add `-c requirements.txt` 53 | in the end of that last command. 54 | 55 | 56 | Contributing 57 | ------------ 58 | 59 | When making PRs, check for the CI green status. Occasionally, its 60 | red status has nothing to do with your contribution but most of the 61 | time it does. Ask questions if something looks weird. 62 | 63 | There's a separate linting job in the CI now. It essencially runs the 64 | [`pre-commit`](https://pre-commit.com) tool. Besides checks, it is 65 | also able to do minor code formatting. 66 | If you see any related failures, `pip install pre-commit` locally 67 | and run `pre-commit run --all-files`. In case this generates file 68 | changes, you can safely commit those. But if after that there's 69 | still linter offences present, fix them manually. 70 | 71 | *Note:* Some of the CI steps are set up to ignore failures, like 72 | running `ansible-test [sanity|units]` against the migrated collection 73 | artifacts. This is because the migration script is not ideal but we 74 | still want to have a log of how it's going. 75 | 76 | 77 | Migration scenario 78 | ------------------ 79 | 80 | The script takes a scenario as a mandatory argument 81 | (`-s path/to/dir`), a scenario is a directory with one or more YAML 82 | files that describe the collection layout post migration. 83 | 84 | Each file name is the namespace of the included collections, inside 85 | you can have a collection name, followed by the plugin types and 86 | actual plugin files (with extensions) in that collection as they 87 | appear in the ansible repo, including subdirectories from their 88 | expected locations. For example: 89 | 90 | ```yaml 91 | # test_scenario/microsoft.yml 92 | azure: 93 | module_utils: 94 | - azure.py 95 | - azure_rm.py 96 | modules: 97 | - cloud/azure/azure_rm_instance.py 98 | windows: 99 | lookups: 100 | - win_registry.py 101 | ``` 102 | 103 | Some existing scenarios are already provided in the repo, `stdlib` and `mintest` 104 | being the most useful ones as they can generate (with `-m` option) 105 | an ansible repo w/o most of the plugins (`stdlib` has none, 106 | `mintest` has the ones we have considered Ansible requires to be minimally testable). 107 | 108 | Per collection options 109 | ---------------------- 110 | 111 | A new `_options` key was introduced for per colleciotn settings, subkeys are: 112 | ``` 113 | mycol: 114 | _options: 115 | flatmap: False 116 | # Preserves subdirs for modules and makes it a 'flatmap type collection' 117 | 118 | version: '0.1.0' 119 | # Semantic version string for collection version 120 | 121 | licence: GPL-3.0-or-later 122 | # SPEX license string 123 | 124 | license_file: COPYING 125 | # file containing license in repo, this will be a GPLv3 copy from migration change as needed. 126 | 127 | tags: 128 | # list of galaxy tags desired for this collection 129 | ``` 130 | 131 | Performing the migration 132 | ------------------------ 133 | 134 | In order to run the migration based on the existing scenario, you'd 135 | need to execute somehting like this: 136 | 137 | ```console 138 | (.venv) $ python3.7 -m migrate -s scenarios/minimal 139 | ``` 140 | 141 | The migrate script has a `--help` for other options. 142 | 143 | Generating a bare scenario 144 | -------------------------- 145 | 146 | Another useful script is `generate_glob_collection.sh` which outputs 147 | a YAML structure to stdout that lists ALL the plugins from an Ansible 148 | checkout (which is the only required parameter), useful to regenerate 149 | the `bare` scenario or as a starting point for other scenarios. 150 | 151 | 152 | Note: scenarios support 'informative' collections, that start with `_` 153 | as a means to let collections know dependencies but not actually 154 | migrate, also the special `_core` collection is used to indicate 155 | plugins that would stay in core and not require rewrites for those 156 | referencing them. 157 | 158 | 159 | Things to be aware of 160 | --------------------- 161 | 162 | * If the scenario doesn't contain an explicit enumeration of artifacts 163 | related to the given resource, it may result in an incomplete 164 | migration. 165 | One example of such case it including an action plugin and omitting 166 | the module with the same name, or any other related files. This may 167 | result in various sanity and/or other tests failures. 168 | E.g. `action plugin has no matching module to provide documentation` 169 | (`action-plugin-docs`). 170 | 171 | Definitions for the 2.10 Ansible Release 172 | ---------------------------------------- 173 | 174 | There are a few terms that are important to the understanding of the 175 | Ansible 2.10 release, that impact and indicate how ansible will be 176 | structured, and distributed. 177 | 178 | base 179 | : This includes a small number of plugins and modules that roughly track 180 | the 2.9 definition of "core" supported plugins and modules. 181 | This will provide a limited functionality to support a standard use case 182 | that may involve bootstrapping a host, to a point where additionall 183 | collections can then be used. 184 | -------------------------------------------------------------------------------- /ansible-base.md: -------------------------------------------------------------------------------- 1 | # Ansible-base 2 | 3 | ## Use Cases for ansible-base 4 | 5 | What `ansible/ansible` will become, ie `ansible-base` 6 | 7 | 8 | * `ansible[|-playbook|-galaxy|-pull|-doc]` --help 9 | * Being able to install content from Galaxy or Automation Hub 10 | * `ansible-galaxy collection ...` 11 | * Setup Networking 12 | * Setup Proxy 13 | * Being able to install supported content via packages 14 | * ie RHEL users will not use `ansible-galaxy collection install ...`, they want RPMs 15 | * Ability to setup and use package repos 16 | * Ability to work online or offline 17 | * Include things that are "hardcoded" into Ansible 18 | * eg `stat` is used to handle any file information internally 19 | * `include_tasks` is hardcoded as the implementation is inside the engine, same with `add_hosts`, `group-by`, `debug` and others, async_wrapp, async-poll, assert/fail are 'parts of the language' 20 | * Development 21 | * Ability to run `ansible-test sanity,unit,integration` against the Ansible code base 22 | 23 | 24 | ## Windows details 25 | 26 | Windows touches 5 main areas in the Ansible engine itself: 27 | * Executor 28 | * Shell plugins 29 | * Connection plugins 30 | * Action plugins 31 | * Module utils 32 | 33 | ### Executor 34 | 35 | This is the code used to build the "manifest" (metadata used to execute a module) and the code is currently located at [lib/ansible/executor/powershell](https://github.com/ansible/ansible/tree/devel/lib/ansible/executor/powershell). This code is is what implements become, async, coverage (ansible-test) for Windows hosts and it's [entrypoint](https://github.com/ansible/ansible/blob/86663abf371d8352498554ab72c00c55890b5588/lib/ansible/executor/powershell/module_manifest.py#L259-L262) requires a lot of information about the task itself to achieve this. Taking this outside of the Ansible codebase would require us to create an interface we can rely on being stable as right now it's just kept in lock step with whatever calls it and is tested in CI. 36 | Another component of the executor is the various powershell wrapper scripts that are part of the manifest sent to the Windows host. These scripts contain the logic used by PowerShell to execute the module and return the data back to the controller. They have the ability to utilise existing PowerShell and C# module_utils to reduce code duplication which is critical due to the code complexity of these utils. Splitting them out means bugfixes in 1 would have to be transferred to the other which is not easy due to the code complexity and modules could potentially loose out of extra functionality that we add in the other. 37 | 38 | ### Shell 39 | 40 | There are 2 shell plugins for Windows; [powershell](https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/shell/powershell.py) and [cmd](https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/shell/cmd.py). The latter is mostly just an implementation of powershell.py and is used for SSH support on Windows so its reasons are the same for powershell's reasons. 41 | The powershell shell plugin contains a few methods that are sprinkled throughout the Ansible codebase like [script](https://github.com/ansible/ansible/blob/faaa669764faba8f2a1b4292afc3bc494e4a1932/lib/ansible/plugins/action/script.py#L129), [wait_for_connection](https://github.com/ansible/ansible/blob/68428efc39313b7fb22b77152ec548ca983b03dd/lib/ansible/plugins/action/wait_for_connection.py#L89), [ssh](https://github.com/ansible/ansible/blob/9a13d56b266a8180726d561d64076c4bf8f95fb9/lib/ansible/plugins/connection/ssh.py#L462), and even [action/__init__.py](https://github.com/ansible/ansible/blob/9b7198d25ecf084b6a465ba445efd426022265c3/lib/ansible/plugins/action/__init__.py#L485). This has resulted in a coupling of code in the engine that uses the shell plugin to control its behaviour depending on whether we are targeting a Windows host or not. Without a standard interface to determine this information we cannot safely rely on these private attributes/methods being available in all collection versions leading to a dependency hell like scenario when using Ansible against Windows. 42 | 43 | ### Connection 44 | 45 | Currently we have 3 different connection plugins that can be used for Windows; `ssh`, `winrm`, and `psrp` (there are other community ones that I cannot speak to here). The `ssh` plugin is already in base so we can skip that. The other 2 are very similar and both have tight coupling with the powershell.py shell plugin. The biggest issue with connection plugins for Windows is its tight coupling with the shell plugins. We cannot safely split them up and due to the reasons above for `Shell` we need to keep those plugins within Ansible for now. 46 | Once shell plugins are safely decoupled from Ansible there is less of a reason to keep these as part of the engine but until then we cannot split the Windows connection and shell plugins from each other. 47 | 48 | ### Action 49 | 50 | Some action plugins like `win_reboot` and `win_template` just implement the POSIX plugin counterpart and aren't too complex but something like `win_copy` and `win_updates` are quite complex and interact with things like the become plugin set on the connection and execute multiple modules or other action plugins. My biggest concern is that accessing things like the connection plugin or even executing modules are behind a private function or attribute. Having this split out just makes them more brittle and I don't feel comfortable ripping them out until a more solid interface for these scenarios have been implemented. 51 | 52 | ### Module utils 53 | 54 | There are 2 types of module utils used by Windows, [csharp](https://github.com/ansible/ansible/tree/devel/lib/ansible/module_utils/csharp), and [powershell](https://github.com/ansible/ansible/tree/devel/lib/ansible/module_utils/powershell) utils. 55 | 56 | #### CSharp utils 57 | 58 | A lot of these utils are for very low level functions in Windows and are fundamental to a lot of module actions and we want to have fine control over what they do. With the exception of `Ansible.Privilege.cs` and `Ansible.Basic.cs`, all the C# utils are used by the executor in some form or another. This is the prime reason why they should still be shipped with Ansible. Stripping it out would mean we could be introducing changes in a collection that is incompatible with an Ansible release breaking fundamental things like become or async. The `Ansible.Basic.cs` util isn't necessarily used by the executor but it is a core part of running a module like `basic.py`. We even have ansible-test sanity tests that utilise that util to do things like validate the module arg spec. 59 | 60 | 61 | #### Powershell utils 62 | 63 | The PowerShell module utils are less critical than the C# ones but some these 2 should be kept in Ansible; 64 | * `AddType.psm1` - Used by the executor to compile the C# utils and potentially add support for C# modules in the future 65 | * `Legacy.psm1` - The older version of the C# `Ansible.Basic.cs`, still used by lots of 3rd party modules (as well as win modules in Asible) and the same reasons for `Ansible.Basic.cs` apply here 66 | The remaining ones are purely module side and can be put in it's own collection. The biggest downside is that 3rd party modules now have a "hidden" dependency of the target Windows collection in future Ansible versions. 67 | 68 | ### Modules 69 | 70 | Some of the Windows modules are used by ansible-test helpers, for example: 71 | 72 | * [`test/lib/ansible_test/_data/playbooks/windows_coverage_setup.yml`](https://github.com/ansible/ansible/blob/devel/test/lib/ansible_test/_data/playbooks/windows_coverage_setup.yml) - uses `win_file` and `win_acl` to setup directories to enable code coverage 73 | * [`test/integration/targets/setup_remote_tmp_dir/tasks/windows.yml`](https://github.com/ansible/ansible/blob/devel/test/integration/targets/setup_remote_tmp_dir/tasks/windows.yml) - uses `win_tempfile` to generate unique working director for tests 74 | * and others... 75 | 76 | ## Missing from ansible-minimal 77 | 78 | Rough notes on other changes needed 79 | 80 | * `action/script` (has module) 81 | * `wait_for_connection` - Think this is used by ansible-test to check that machines have come up 82 | -------------------------------------------------------------------------------- /features.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansible-community/collection_migration/9a6ab91a9ae150e361fc96a90de58daf8a164b19/features.yaml -------------------------------------------------------------------------------- /generate_glob_collection.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # script takes 2 positional parameters: 4 | # first: (required) ansible repo to search for files 5 | # second: (optional) name of collection to use in output 6 | 7 | set -eu 8 | set -o pipefail 9 | 10 | if [ -d $1 ]; then 11 | 12 | pullfrom=() 13 | pullfrom+=$(find $1/lib/ansible/plugins/* -maxdepth 1 -type d |grep -v __ | sort) 14 | pullfrom+=("$1/lib/ansible/modules" "$1/lib/ansible/module_utils") 15 | 16 | files=() 17 | for t in ${pullfrom[@]} 18 | do 19 | files+=" " 20 | files+=$(find $t -type f|grep -v '.pyc'|grep -v '.pyo'|sort) 21 | done 22 | 23 | category='' 24 | collection=${2:-glob} 25 | echo "${collection}:" 26 | for f in ${files} 27 | do 28 | f=${f#$1/lib/ansible/plugins/} 29 | f=${f#$1/lib/ansible/} 30 | 31 | cat=$(echo $f |cut -f1 -d'/') 32 | token=${f#"$cat/"} 33 | 34 | # only print on cat change, files should already be grouped by category 35 | if [ "$cat" != "$category" ]; then 36 | echo " ${cat}:" 37 | category=$cat 38 | fi 39 | 40 | # naked init is skipped 41 | if [ "$token" != "__init__.py" ]; then 42 | echo " - ${token}" 43 | fi 44 | done 45 | fi 46 | -------------------------------------------------------------------------------- /gh.py: -------------------------------------------------------------------------------- 1 | """GitHub App auth and helpers.""" 2 | 3 | from __future__ import annotations 4 | 5 | import asyncio 6 | from dataclasses import dataclass 7 | import contextlib 8 | from http import HTTPStatus 9 | import os 10 | import pathlib 11 | from typing import Union 12 | 13 | from aiohttp.client import ClientSession 14 | import backoff 15 | import gidgethub 16 | from logzero import logger 17 | 18 | from octomachinery.github.api.app_client import GitHubApp 19 | from octomachinery.github.config.app import GitHubAppIntegrationConfig 20 | 21 | 22 | def _is_not_404_response(gh_err_resp): 23 | """Check whether the HTTP response is 404 Not Found.""" 24 | is_404 = gh_err_resp.status_code == HTTPStatus.NOT_FOUND 25 | 26 | logger.info( 27 | 'Expected failure: should retry' if is_404 28 | else 'Unexpected failure: should fail loudly' 29 | ) 30 | logger.error( 31 | 'Error: %r; status: %r; args: %s.', 32 | gh_err_resp, 33 | gh_err_resp.status_code, 34 | gh_err_resp.args, 35 | ) 36 | 37 | return not is_404 38 | 39 | 40 | retry_on_not_found = backoff.on_exception( # pylint: disable=invalid-name 41 | backoff.expo, gidgethub.BadRequest, 42 | max_tries=3, max_time=15, jitter=backoff.full_jitter, 43 | giveup=_is_not_404_response, 44 | ) 45 | 46 | 47 | def provision_http_session(async_method): 48 | """Inject aiohttp client session into method keyword args.""" 49 | async def async_method_wrapper(self, *args, **kwargs): 50 | async with ClientSession() as http_session: 51 | kwargs['http_session'] = http_session 52 | return await async_method(self, *args, **kwargs) 53 | return async_method_wrapper 54 | 55 | 56 | @dataclass(frozen=True) 57 | class GitHubOrgClient: 58 | """Wrapper for GH repos creation.""" 59 | 60 | github_app_id: int 61 | github_app_private_key_path: Union[pathlib.Path, str] 62 | github_org_name: str 63 | 64 | deployment_rsa_pub_key: str 65 | 66 | def _read_app_id(self): 67 | if self.github_app_id is None: 68 | return int(os.environ['GITHUB_APP_IDENTIFIER']) 69 | return self.github_app_id 70 | 71 | def _read_private_key(self): 72 | if self.github_app_private_key_path is None: 73 | return os.environ['GITHUB_PRIVATE_KEY'] 74 | return pathlib.Path( 75 | self.github_app_private_key_path, 76 | ).expanduser().resolve().read_text() 77 | 78 | def _get_github_app(self, http_session: ClientSession): 79 | """Initialize a GitHub App instance with creds.""" 80 | github_app_config = GitHubAppIntegrationConfig( 81 | app_id=self._read_app_id(), 82 | private_key=self._read_private_key(), 83 | 84 | app_name='Ansible Collection Migrator', 85 | app_version='1.0', 86 | app_url='https://github.com/ansible/collection_migration', 87 | ) 88 | return GitHubApp(github_app_config, http_session) 89 | 90 | async def _get_github_client(self, http_session: ClientSession): 91 | """Return a GitHub API client for the target org.""" 92 | github_app = self._get_github_app(http_session) 93 | try: 94 | github_app_installations = await github_app.get_installations() 95 | except gidgethub.BadRequest: 96 | error_msg = 'Invalid GitHub App credentials' 97 | logger.error(error_msg) 98 | raise LookupError(error_msg) 99 | target_github_app_installation = next( # find the one 100 | ( 101 | i for n, i in github_app_installations.items() 102 | if i._metadata.account['login'] == self.github_org_name 103 | ), 104 | None, 105 | ) 106 | return target_github_app_installation.api_client 107 | 108 | @provision_http_session 109 | async def create_repo_if_not_exists( 110 | self, repo_name: str, 111 | *, 112 | http_session: ClientSession, 113 | ): 114 | """Ensure that the repo exists under the org.""" 115 | github_api = await self._get_github_client(http_session) 116 | with contextlib.suppress(gidgethub.InvalidField): 117 | await github_api.post( 118 | f'/orgs/{self.github_org_name}/repos', 119 | data={'name': repo_name}, 120 | ) 121 | logger.info( 122 | 'Repo %s has been created', 123 | f'https://github.com' 124 | f'/{self.github_org_name}' 125 | f'/{repo_name}.git' 126 | ) 127 | 128 | @retry_on_not_found 129 | @provision_http_session 130 | async def get_org_repo_token( 131 | self, repo_name: str, 132 | *, 133 | http_session: ClientSession, 134 | ) -> str: 135 | """Return an access token once the repo exists.""" 136 | await self.create_repo_if_not_exists(repo_name) 137 | return str((await self._get_github_client(http_session))._token) 138 | 139 | async def get_git_repo_token(self, repo_name): 140 | """Generate a Git repo URL with creds after ensuring repo existence.""" 141 | gh_token = await self.get_org_repo_token(repo_name) 142 | return ( 143 | f'https://x-access-token:{gh_token}@github.com' 144 | f'/{self.github_org_name}/{repo_name}.git' 145 | ) 146 | 147 | def get_git_repo_write_uri(self, repo_name): 148 | """Get a Git repo URL with embedded creds synchronously.""" 149 | return asyncio.run(self.get_git_repo_token(repo_name)) 150 | 151 | def sync_provision_deploy_key_to(self, repo_name: str) -> int: 152 | return asyncio.run(self.provision_deploy_key_to(repo_name)) 153 | 154 | @retry_on_not_found 155 | @provision_http_session 156 | async def provision_deploy_key_to( 157 | self, repo_name: str, 158 | *, 159 | http_session: ClientSession, 160 | ) -> int: 161 | """Add deploy key to the repo.""" 162 | await self.create_repo_if_not_exists(repo_name) 163 | 164 | dpl_key = self.deployment_rsa_pub_key 165 | dpl_key_repr = dpl_key.split(' ')[1] 166 | dpl_key_repr = '...'.join((dpl_key_repr[:16], dpl_key_repr[-16:])) 167 | github_api = await self._get_github_client(http_session) 168 | api_resp = await github_api.post( 169 | '/repos/{owner}/{repo}/keys', 170 | url_vars={ 171 | 'owner': self.github_org_name, 172 | 'repo': repo_name, 173 | }, 174 | data={ 175 | 'title': ( 176 | '[SHOULD BE AUTO-REMOVED MINUTES AFTER CREATION!] ' 177 | f'Temporary key ({dpl_key_repr}) added ' 178 | 'by Ansible Collection Migrator' 179 | ), 180 | 'key': dpl_key, 181 | 'read_only': False, 182 | }, 183 | ) 184 | return api_resp['id'] 185 | 186 | def sync_drop_deploy_key_from(self, repo_name: str, key_id: int): 187 | return asyncio.run(self.drop_deploy_key_from(repo_name, key_id)) 188 | 189 | @provision_http_session 190 | async def drop_deploy_key_from( 191 | self, repo_name: str, key_id: int, 192 | *, 193 | http_session: ClientSession, 194 | ) -> None: 195 | """Add deploy key to the repo.""" 196 | github_api = await self._get_github_client(http_session) 197 | await github_api.delete( 198 | '/repos/{owner}/{repo}/keys/{key_id}', 199 | url_vars={ 200 | 'owner': self.github_org_name, 201 | 'repo': repo_name, 202 | 'key_id': key_id, 203 | }, 204 | ) 205 | 206 | def tmp_deployment_key_for(self, repo_name: str): 207 | """Make a CM that adds and removes deployment keys.""" 208 | return _tmp_repo_deploy_key(self, repo_name) 209 | 210 | 211 | @contextlib.contextmanager 212 | def _tmp_repo_deploy_key(gh_api, repo_name): 213 | _key_id = gh_api.sync_provision_deploy_key_to(repo_name) 214 | try: 215 | yield 216 | finally: 217 | gh_api.sync_drop_deploy_key_from(repo_name, _key_id) 218 | -------------------------------------------------------------------------------- /migrate.md: -------------------------------------------------------------------------------- 1 | # migrating to collections 2 | 3 | Traditionally there were 2 ways to distribute plugins (including modules) for an Ansible installation, 4 | use a role and then import it inside a play or install the plugin where ansible would find it (adjacent to play or in configured directories). 5 | 6 | Collections allow for a much looser and easier reference to plugins and modules and a more consolidated path to install as well as better internal reference to avoid conflicts. 7 | They also allow roles and other content you might want to distribute. 8 | 9 | Also you will become familiar with FQCN (Full Qualified Collection Name) for each plugin type as this will need to be used both in the migration and in plays using the collection. 10 | 11 | 12 | This project is using migrate.py to do automated migration from ansible/ansible to separate repos that can host 1 or more collections per repo, but there are those that might want to do a manual migration themselves. 13 | 14 | So how do you move existing code into a collection? Below we describe the steps that migrate.py does automatically but might not align with the structure you might want for your content. 15 | 16 | 17 | # galaxy.yml 18 | 19 | The first thing is creating the file that 'defines' your collection, this should have the namespace and collection name as well as any other collections you depend on for content. 20 | ( note: if you plan to distribute via galaxy or some other service you need to claim that namespace). This file is used by the build process to create the collection package. 21 | 22 | 23 | example file: 24 | ``` 25 | namespace: myname 26 | name: mycoll 27 | version: '1.0.0' 28 | readme: null 29 | authors: null 30 | description: something 31 | license: GPLv3+ 32 | tags: [stuff, morestuff, mystuff] 33 | dependencies: null # collections i depend on 34 | repository: null # optionally repo where this collection lives 35 | documentation: null 36 | homepage: null 37 | issues: null 38 | ``` 39 | 40 | # .github/BOTMETA.yml 41 | 42 | This file is used by the core issue management bot and other tools to keep track of many things, we added a `migrated_to` field that will indicate the collection name of where a file is supposed to primarily reside now. 43 | You only need to update this file if your content is currently in ansible/ansible and can be ignored for 3rd party distributed content. 44 | 45 | # migrating plugins 46 | 47 | The modules and the other plugin types require some rewrites to support collection semantics, mostly do deal with how they reference other resources, mostly module_utils and doc_fragments. 48 | 49 | 50 | ## Paths 51 | The first thing to note, all runtime code is under the ``plugins/`` path, so modules, module_utils and 52 | all other plugins are in their own plugin specific directory under the plugins/ top level directory in the collection. 53 | This is similar to what already exists in roles, but for modules and module_utils it is a change from the core repo. 54 | 55 | Tests now live under the ``tests/`` directory with ``units`` and ``integration`` subdirectories. 56 | 57 | ## Roles 58 | Collection roles exist under the roles/ directory, with a couple of restrictions. 59 | 60 | * They cannot have their own plugins, so plugins in role adjacent directories will be ignored 61 | * Role 'dependencies' will not be installed on collection install, if using collections those dependencies should be specified in galaxy.yml 62 | 63 | ## Plugins 64 | 65 | for most plugins you need to rewrite. 66 | 67 | ### documentation 68 | * doc_fragments: must use FQCN, examine all modules and plugins that use doc_fragments and rewrite from 'myfrag' to 'myname.mycoll.myfrag'. 69 | 70 | * general docs: any references to modules and other plugins need to be rewritten to use FQCN, normally found in descriptions and examples. 71 | 72 | ### imports (also for tests). 73 | 74 | * relative imports work in collections, but only if they start with a ``.`` so ``./filename`` and ``../asdfu/filestuff`` works but ``filename`` in same dir does not. 75 | 76 | * module_utils: the most obvious one, you go from ``import ansible.module_utils.randomdir.myutil`` to ``import ansible_collections.myname.mycoll.randomdir.myutil``. 77 | 78 | * subclassing plugins: you need to follow the same rules in changing paths and using namespaced names. 79 | 80 | ### tests 81 | 82 | * patches and mocks: mostly used in tests, these also might need rewrites with the same rules as imports follow. 83 | 84 | * sanity tests: ignores need to be moved to ansible specific version ignores files ignores-2.9.txt 85 | 86 | * integration tests and roles: 87 | * tasks need to be rewritten to use FQCN, this includes modules, lookups, filters and any other plugin referenced that has been moved to a collection. 88 | * Jinja filters and tests FQCN includes the file name where the plugin resides. 89 | 90 | ### other files 91 | 92 | * BOTMETA.yml (discussed above for all files) 93 | 94 | * lib/ansbile/config/routing.yml entry for 'trasnparent execution' for plugins that used to be in core, hopefully to avoid rewritting all exising playbooks. 95 | 96 | * new meta/routing.yml in collections that now handle 'aliases across collections', deprecations, plugin removals. 97 | 98 | * new meta/action_groups.yml in collections that now handle module_defaults 'action to group' mappings, no more need to update in core. 99 | 100 | 101 | Things to consider after migration. 102 | =================================== 103 | 104 | migrate.py does not handle everything, just most of what could be automated, here is a list of things you might need to do manually aftewards. 105 | 106 | 107 | free form references 108 | -------------------- 109 | 110 | Documentation, comments and other 'free form' references to plugins/modules will need manual updates, for example, `EXAMPLES` and `description` sections in plugin docs. 111 | 112 | 113 | git history 114 | ----------- 115 | 116 | The existing git history is not being moved to the new repos by the migration, they all start as a new commit, we had plans to do so, but were not able to realize due to the time table. 117 | The hope was to leverage the previous experience with 'repo merge/splits' (ansible-modules-core/ansilbe-modules-extras) and use as a blueprint on how we did preserve history. 118 | New repo owners that want to copy history over, can do so, but currently we do not provide any tools to do so. 119 | 120 | 121 | plugin/module_utils imports 122 | --------------------------- 123 | 124 | Currently these will be broken for 3rd party plugin imports that reference files that used to live in core, there is work being done to transparently map to the new colleciton location but no code exists as of yet. Another option is to rewrite the imports to point to new collection locations. Anything that was in core should have already been rewritten to match the new locations. 125 | 126 | 127 | ansible-doc 128 | ----------- 129 | 130 | Currently it can show plugin docs from collections, but not list what plugins a collection provides (also being worked on). 131 | ansible-galaxy recently added listing available collections and that code will be built on to list 'available plugins including collections'. 132 | 133 | 134 | docs.ansible.com 135 | ---------------- 136 | 137 | Docs team has a system to show plugins from chosen collections, still in testing, should be ready soon after migration. 138 | 139 | 140 | filters and tests docs 141 | ---------------------- 142 | 143 | These were still manualy written in docs.ansible.com and do not have any autogeneration, migration does not change this, all changes will still have to be manual. 144 | 145 | 146 | licenses 147 | -------- 148 | 149 | Collections currently only support a single license, with migrate.py defaulting to GPLv3+, this is ok for most files in Ansible except for module_utils which have mostly been published under BSD and some other licenses. The migration does not rewrite the license information per file, so those that had their own license information will still have it, even when it contradicts the 'collection license'. 150 | 151 | Currently we don't have an official solution for this issue. 152 | -------------------------------------------------------------------------------- /requirements.in: -------------------------------------------------------------------------------- 1 | ansible 2 | backoff # to mitigate GitHub's eventual consistency with retries 3 | cryptography # dependency of octomachinery but imported too 4 | gidgethub # dependency of octomachinery but imported too 5 | Jinja2 6 | logzero 7 | octomachinery 8 | redbaron 9 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | # 2 | # This file is autogenerated by pip-compile 3 | # To update, run: 4 | # 5 | # pip-compile --generate-hashes --output-file=requirements.txt requirements.in 6 | # 7 | aiohttp==3.6.2 \ 8 | --hash=sha256:1e984191d1ec186881ffaed4581092ba04f7c61582a177b187d3a2f07ed9719e \ 9 | --hash=sha256:259ab809ff0727d0e834ac5e8a283dc5e3e0ecc30c4d80b3cd17a4139ce1f326 \ 10 | --hash=sha256:2f4d1a4fdce595c947162333353d4a44952a724fba9ca3205a3df99a33d1307a \ 11 | --hash=sha256:32e5f3b7e511aa850829fbe5aa32eb455e5534eaa4b1ce93231d00e2f76e5654 \ 12 | --hash=sha256:344c780466b73095a72c616fac5ea9c4665add7fc129f285fbdbca3cccf4612a \ 13 | --hash=sha256:460bd4237d2dbecc3b5ed57e122992f60188afe46e7319116da5eb8a9dfedba4 \ 14 | --hash=sha256:4c6efd824d44ae697814a2a85604d8e992b875462c6655da161ff18fd4f29f17 \ 15 | --hash=sha256:50aaad128e6ac62e7bf7bd1f0c0a24bc968a0c0590a726d5a955af193544bcec \ 16 | --hash=sha256:6206a135d072f88da3e71cc501c59d5abffa9d0bb43269a6dcd28d66bfafdbdd \ 17 | --hash=sha256:65f31b622af739a802ca6fd1a3076fd0ae523f8485c52924a89561ba10c49b48 \ 18 | --hash=sha256:ae55bac364c405caa23a4f2d6cfecc6a0daada500274ffca4a9230e7129eac59 \ 19 | --hash=sha256:b778ce0c909a2653741cb4b1ac7015b5c130ab9c897611df43ae6a58523cb965 \ 20 | # via octomachinery 21 | ansible==2.9.6 \ 22 | --hash=sha256:59cf3a0781f89992d1dae5205b07e802dff1db205eebd238de9e503b62b8cbc9 \ 23 | # via -r requirements.in 24 | appdirs==1.4.3 \ 25 | --hash=sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92 \ 26 | --hash=sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e \ 27 | # via rply 28 | async-timeout==3.0.1 \ 29 | --hash=sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f \ 30 | --hash=sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3 \ 31 | # via aiohttp 32 | attrs==19.3.0 \ 33 | --hash=sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c \ 34 | --hash=sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72 \ 35 | # via aiohttp, environ-config 36 | backoff==1.10.0 \ 37 | --hash=sha256:5e73e2cbe780e1915a204799dba0a01896f45f4385e636bcca7a0614d879d0cd \ 38 | --hash=sha256:b8fba021fac74055ac05eb7c7bfce4723aedde6cd0a504e5326bcb0bdd6d19a4 \ 39 | # via -r requirements.in 40 | baron==0.9 \ 41 | --hash=sha256:05bac85913c1ebc44986f6915bf6a043ce5ce1e5c4d392a209f73845181e9452 \ 42 | --hash=sha256:b0589f32b91cf6dc450ea6a71b4a228c433ef8756b41fabf88815a3c2d392b3a \ 43 | # via redbaron 44 | cffi==1.13.2 \ 45 | --hash=sha256:0b49274afc941c626b605fb59b59c3485c17dc776dc3cc7cc14aca74cc19cc42 \ 46 | --hash=sha256:0e3ea92942cb1168e38c05c1d56b0527ce31f1a370f6117f1d490b8dcd6b3a04 \ 47 | --hash=sha256:135f69aecbf4517d5b3d6429207b2dff49c876be724ac0c8bf8e1ea99df3d7e5 \ 48 | --hash=sha256:19db0cdd6e516f13329cba4903368bff9bb5a9331d3410b1b448daaadc495e54 \ 49 | --hash=sha256:2781e9ad0e9d47173c0093321bb5435a9dfae0ed6a762aabafa13108f5f7b2ba \ 50 | --hash=sha256:291f7c42e21d72144bb1c1b2e825ec60f46d0a7468f5346841860454c7aa8f57 \ 51 | --hash=sha256:2c5e309ec482556397cb21ede0350c5e82f0eb2621de04b2633588d118da4396 \ 52 | --hash=sha256:2e9c80a8c3344a92cb04661115898a9129c074f7ab82011ef4b612f645939f12 \ 53 | --hash=sha256:32a262e2b90ffcfdd97c7a5e24a6012a43c61f1f5a57789ad80af1d26c6acd97 \ 54 | --hash=sha256:3c9fff570f13480b201e9ab69453108f6d98244a7f495e91b6c654a47486ba43 \ 55 | --hash=sha256:415bdc7ca8c1c634a6d7163d43fb0ea885a07e9618a64bda407e04b04333b7db \ 56 | --hash=sha256:42194f54c11abc8583417a7cf4eaff544ce0de8187abaf5d29029c91b1725ad3 \ 57 | --hash=sha256:4424e42199e86b21fc4db83bd76909a6fc2a2aefb352cb5414833c030f6ed71b \ 58 | --hash=sha256:4a43c91840bda5f55249413037b7a9b79c90b1184ed504883b72c4df70778579 \ 59 | --hash=sha256:599a1e8ff057ac530c9ad1778293c665cb81a791421f46922d80a86473c13346 \ 60 | --hash=sha256:5c4fae4e9cdd18c82ba3a134be256e98dc0596af1e7285a3d2602c97dcfa5159 \ 61 | --hash=sha256:5ecfa867dea6fabe2a58f03ac9186ea64da1386af2159196da51c4904e11d652 \ 62 | --hash=sha256:62f2578358d3a92e4ab2d830cd1c2049c9c0d0e6d3c58322993cc341bdeac22e \ 63 | --hash=sha256:6471a82d5abea994e38d2c2abc77164b4f7fbaaf80261cb98394d5793f11b12a \ 64 | --hash=sha256:6d4f18483d040e18546108eb13b1dfa1000a089bcf8529e30346116ea6240506 \ 65 | --hash=sha256:71a608532ab3bd26223c8d841dde43f3516aa5d2bf37b50ac410bb5e99053e8f \ 66 | --hash=sha256:74a1d8c85fb6ff0b30fbfa8ad0ac23cd601a138f7509dc617ebc65ef305bb98d \ 67 | --hash=sha256:7b93a885bb13073afb0aa73ad82059a4c41f4b7d8eb8368980448b52d4c7dc2c \ 68 | --hash=sha256:7d4751da932caaec419d514eaa4215eaf14b612cff66398dd51129ac22680b20 \ 69 | --hash=sha256:7f627141a26b551bdebbc4855c1157feeef18241b4b8366ed22a5c7d672ef858 \ 70 | --hash=sha256:8169cf44dd8f9071b2b9248c35fc35e8677451c52f795daa2bb4643f32a540bc \ 71 | --hash=sha256:aa00d66c0fab27373ae44ae26a66a9e43ff2a678bf63a9c7c1a9a4d61172827a \ 72 | --hash=sha256:ccb032fda0873254380aa2bfad2582aedc2959186cce61e3a17abc1a55ff89c3 \ 73 | --hash=sha256:d754f39e0d1603b5b24a7f8484b22d2904fa551fe865fd0d4c3332f078d20d4e \ 74 | --hash=sha256:d75c461e20e29afc0aee7172a0950157c704ff0dd51613506bd7d82b718e7410 \ 75 | --hash=sha256:dcd65317dd15bc0451f3e01c80da2216a31916bdcffd6221ca1202d96584aa25 \ 76 | --hash=sha256:e570d3ab32e2c2861c4ebe6ffcad6a8abf9347432a37608fe1fbd157b3f0036b \ 77 | --hash=sha256:fd43a88e045cf992ed09fa724b5315b790525f2676883a6ea64e3263bae6549d \ 78 | # via cryptography 79 | chardet==3.0.4 \ 80 | --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ 81 | --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 \ 82 | # via aiohttp 83 | cryptography==2.8 \ 84 | --hash=sha256:02079a6addc7b5140ba0825f542c0869ff4df9a69c360e339ecead5baefa843c \ 85 | --hash=sha256:1df22371fbf2004c6f64e927668734070a8953362cd8370ddd336774d6743595 \ 86 | --hash=sha256:369d2346db5934345787451504853ad9d342d7f721ae82d098083e1f49a582ad \ 87 | --hash=sha256:3cda1f0ed8747339bbdf71b9f38ca74c7b592f24f65cdb3ab3765e4b02871651 \ 88 | --hash=sha256:44ff04138935882fef7c686878e1c8fd80a723161ad6a98da31e14b7553170c2 \ 89 | --hash=sha256:4b1030728872c59687badcca1e225a9103440e467c17d6d1730ab3d2d64bfeff \ 90 | --hash=sha256:58363dbd966afb4f89b3b11dfb8ff200058fbc3b947507675c19ceb46104b48d \ 91 | --hash=sha256:6ec280fb24d27e3d97aa731e16207d58bd8ae94ef6eab97249a2afe4ba643d42 \ 92 | --hash=sha256:7270a6c29199adc1297776937a05b59720e8a782531f1f122f2eb8467f9aab4d \ 93 | --hash=sha256:73fd30c57fa2d0a1d7a49c561c40c2f79c7d6c374cc7750e9ac7c99176f6428e \ 94 | --hash=sha256:7f09806ed4fbea8f51585231ba742b58cbcfbfe823ea197d8c89a5e433c7e912 \ 95 | --hash=sha256:90df0cc93e1f8d2fba8365fb59a858f51a11a394d64dbf3ef844f783844cc793 \ 96 | --hash=sha256:971221ed40f058f5662a604bd1ae6e4521d84e6cad0b7b170564cc34169c8f13 \ 97 | --hash=sha256:a518c153a2b5ed6b8cc03f7ae79d5ffad7315ad4569b2d5333a13c38d64bd8d7 \ 98 | --hash=sha256:b0de590a8b0979649ebeef8bb9f54394d3a41f66c5584fff4220901739b6b2f0 \ 99 | --hash=sha256:b43f53f29816ba1db8525f006fa6f49292e9b029554b3eb56a189a70f2a40879 \ 100 | --hash=sha256:d31402aad60ed889c7e57934a03477b572a03af7794fa8fb1780f21ea8f6551f \ 101 | --hash=sha256:de96157ec73458a7f14e3d26f17f8128c959084931e8997b9e655a39c8fde9f9 \ 102 | --hash=sha256:df6b4dca2e11865e6cfbfb708e800efb18370f5a46fd601d3755bc7f85b3a8a2 \ 103 | --hash=sha256:ecadccc7ba52193963c0475ac9f6fa28ac01e01349a2ca48509667ef41ffd2cf \ 104 | --hash=sha256:fb81c17e0ebe3358486cd8cc3ad78adbae58af12fc2bf2bc0bb84e8090fa5ce8 \ 105 | # via -r requirements.in, ansible, octomachinery, pyjwt 106 | environ-config==19.1.0 \ 107 | --hash=sha256:539a1025aeaa015eb03fdd03201517172816ce32ace377c54cbc55c1e4f24739 \ 108 | --hash=sha256:cd5fa819f047853fb7b6c432d35976a84eacd54647a109fa2af27bafcdab7af1 \ 109 | # via octomachinery 110 | envparse==0.2.0 \ 111 | --hash=sha256:4f3b9a27bb55d27f124eb4adf006fec05e4588891c9a054a183a112645056eb7 \ 112 | # via octomachinery 113 | gidgethub==3.3.0 \ 114 | --hash=sha256:3692d2df48a23c87ec4a5e74053ce343bc59cea7c34488a9136754a35aeb177a \ 115 | --hash=sha256:4a456758a5fc8bfd581f297df90f2d09efbb830ccd209b1ceba4723705607d70 \ 116 | # via -r requirements.in, octomachinery 117 | idna==2.8 \ 118 | --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ 119 | --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c \ 120 | # via yarl 121 | jinja2==2.10.3 \ 122 | --hash=sha256:74320bb91f31270f9551d46522e33af46a80c3d619f4a4bf42b3164d30b5911f \ 123 | --hash=sha256:9fe95f19286cfefaa917656583d020be14e7859c6b0252588391e47db34527de \ 124 | # via -r requirements.in, ansible 125 | logzero==1.5.0 \ 126 | --hash=sha256:34fa1e2e436dfa9f37e5ff8750e932bafe0c5abbb42e1f669e4cf5ce1f179142 \ 127 | --hash=sha256:818072e4fcb53a3f6fb4114a92f920e1135fe6f47bffd9dc2b6c4d10eedacf27 \ 128 | # via -r requirements.in 129 | markupsafe==1.1.1 \ 130 | --hash=sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473 \ 131 | --hash=sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161 \ 132 | --hash=sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235 \ 133 | --hash=sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5 \ 134 | --hash=sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff \ 135 | --hash=sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b \ 136 | --hash=sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1 \ 137 | --hash=sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e \ 138 | --hash=sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183 \ 139 | --hash=sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66 \ 140 | --hash=sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1 \ 141 | --hash=sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1 \ 142 | --hash=sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e \ 143 | --hash=sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b \ 144 | --hash=sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905 \ 145 | --hash=sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735 \ 146 | --hash=sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d \ 147 | --hash=sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e \ 148 | --hash=sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d \ 149 | --hash=sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c \ 150 | --hash=sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21 \ 151 | --hash=sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2 \ 152 | --hash=sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5 \ 153 | --hash=sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b \ 154 | --hash=sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6 \ 155 | --hash=sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f \ 156 | --hash=sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f \ 157 | --hash=sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7 \ 158 | # via jinja2 159 | multidict==4.6.1 \ 160 | --hash=sha256:07f9a6bf75ad675d53956b2c6a2d4ef2fa63132f33ecc99e9c24cf93beb0d10b \ 161 | --hash=sha256:0ffe4d4d28cbe9801952bfb52a8095dd9ffecebd93f84bdf973c76300de783c5 \ 162 | --hash=sha256:1b605272c558e4c659dbaf0fb32a53bfede44121bcf77b356e6e906867b958b7 \ 163 | --hash=sha256:205a011e636d885af6dd0029e41e3514a46e05bb2a43251a619a6e8348b96fc0 \ 164 | --hash=sha256:250632316295f2311e1ed43e6b26a63b0216b866b45c11441886ac1543ca96e1 \ 165 | --hash=sha256:2bc9c2579312c68a3552ee816311c8da76412e6f6a9cf33b15152e385a572d2a \ 166 | --hash=sha256:318aadf1cfb6741c555c7dd83d94f746dc95989f4f106b25b8a83dfb547f2756 \ 167 | --hash=sha256:42cdd649741a14b0602bf15985cad0dd4696a380081a3319cd1ead46fd0f0fab \ 168 | --hash=sha256:5159c4975931a1a78bf6602bbebaa366747fce0a56cb2111f44789d2c45e379f \ 169 | --hash=sha256:87e26d8b89127c25659e962c61a4c655ec7445d19150daea0759516884ecb8b4 \ 170 | --hash=sha256:891b7e142885e17a894d9d22b0349b92bb2da4769b4e675665d0331c08719be5 \ 171 | --hash=sha256:8d919034420378132d074bf89df148d0193e9780c9fe7c0e495e895b8af4d8a2 \ 172 | --hash=sha256:9c890978e2b37dd0dc1bd952da9a5d9f245d4807bee33e3517e4119c48d66f8c \ 173 | --hash=sha256:a37433ce8cdb35fc9e6e47e1606fa1bfd6d70440879038dca7d8dd023197eaa9 \ 174 | --hash=sha256:c626029841ada34c030b94a00c573a0c7575fe66489cde148785b6535397d675 \ 175 | --hash=sha256:cfec9d001a83dc73580143f3c77e898cf7ad78b27bb5e64dbe9652668fcafec7 \ 176 | --hash=sha256:efaf1b18ea6c1f577b1371c0159edbe4749558bfe983e13aa24d0a0c01e1ad7b \ 177 | # via aiohttp, yarl 178 | octomachinery==0.1.2 \ 179 | --hash=sha256:8f6e56670bd6b5095b58db9622ac012257663c67bd0d723041125bd816eb4460 \ 180 | --hash=sha256:a769454533d6385a40865ad9cbb9f636cec18ca1854eab8194d7cee4685c30ce \ 181 | # via -r requirements.in 182 | pycparser==2.19 \ 183 | --hash=sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3 \ 184 | # via cffi 185 | pyjwt[crypto]==1.7.1 \ 186 | --hash=sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e \ 187 | --hash=sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96 \ 188 | # via octomachinery 189 | pyyaml==5.1.2 \ 190 | --hash=sha256:0113bc0ec2ad727182326b61326afa3d1d8280ae1122493553fd6f4397f33df9 \ 191 | --hash=sha256:01adf0b6c6f61bd11af6e10ca52b7d4057dd0be0343eb9283c878cf3af56aee4 \ 192 | --hash=sha256:5124373960b0b3f4aa7df1707e63e9f109b5263eca5976c66e08b1c552d4eaf8 \ 193 | --hash=sha256:5ca4f10adbddae56d824b2c09668e91219bb178a1eee1faa56af6f99f11bf696 \ 194 | --hash=sha256:7907be34ffa3c5a32b60b95f4d95ea25361c951383a894fec31be7252b2b6f34 \ 195 | --hash=sha256:7ec9b2a4ed5cad025c2278a1e6a19c011c80a3caaac804fd2d329e9cc2c287c9 \ 196 | --hash=sha256:87ae4c829bb25b9fe99cf71fbb2140c448f534e24c998cc60f39ae4f94396a73 \ 197 | --hash=sha256:9de9919becc9cc2ff03637872a440195ac4241c80536632fffeb6a1e25a74299 \ 198 | --hash=sha256:a5a85b10e450c66b49f98846937e8cfca1db3127a9d5d1e31ca45c3d0bef4c5b \ 199 | --hash=sha256:b0997827b4f6a7c286c01c5f60384d218dca4ed7d9efa945c3e1aa623d5709ae \ 200 | --hash=sha256:b631ef96d3222e62861443cc89d6563ba3eeb816eeb96b2629345ab795e53681 \ 201 | --hash=sha256:bf47c0607522fdbca6c9e817a6e81b08491de50f3766a7a0e6a5be7905961b41 \ 202 | --hash=sha256:f81025eddd0327c7d4cfe9b62cf33190e1e736cc6e97502b3ec425f574b3e7a8 \ 203 | # via ansible, octomachinery 204 | redbaron==0.9.2 \ 205 | --hash=sha256:472d0739ca6b2240bb2278ae428604a75472c9c12e86c6321e8c016139c0132f \ 206 | --hash=sha256:d01032b6a848b5521a8d6ef72486315c2880f420956870cdd742e2b5a09b9bab \ 207 | # via -r requirements.in 208 | rply==0.7.7 \ 209 | --hash=sha256:2c8083bf2853642a0e24de9a9db3ce2d25b3153037a7298d2ff9434413744e33 \ 210 | --hash=sha256:4d6d25703efd28fb3d5707f7b3bd4fe66c306159a5c25af10ba26d206a66d00d \ 211 | # via baron 212 | setuptools-scm==3.3.3 \ 213 | --hash=sha256:1f11cb2eea431346d46589c2dafcafe2e7dc1c7b2c70bc4c3752d2048ad5c148 \ 214 | --hash=sha256:bd25e1fb5e4d603dcf490f1fde40fb4c595b357795674c3e5cb7f6217ab39ea5 \ 215 | # via octomachinery 216 | six==1.13.0 \ 217 | --hash=sha256:1f1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd \ 218 | --hash=sha256:30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66 \ 219 | # via cryptography 220 | uritemplate==3.0.0 \ 221 | --hash=sha256:01c69f4fe8ed503b2951bef85d996a9d22434d2431584b5b107b2981ff416fbd \ 222 | --hash=sha256:1b9c467a940ce9fb9f50df819e8ddd14696f89b9a8cc87ac77952ba416e0a8fd \ 223 | --hash=sha256:c02643cebe23fc8adb5e6becffe201185bf06c40bda5c0b4028a93f1527d011d \ 224 | # via gidgethub 225 | yarl==1.4.1 \ 226 | --hash=sha256:031e8f56cf085d3b3df6b6bce756369ea7052b82d35ea07b6045f209c819e0e5 \ 227 | --hash=sha256:074958fe4578ef3a3d0bdaf96bbc25e4c4db82b7ff523594776fcf3d3f16c531 \ 228 | --hash=sha256:2db667ee21f620b446a54a793e467714fc5a446fcc82d93a47e8bde01d69afab \ 229 | --hash=sha256:326f2dbaaa17b858ae86f261ae73a266fd820a561fc5142cee9d0fc58448fbd7 \ 230 | --hash=sha256:32a3885f542f74d0f4f87057050c6b45529ebd79d0639f56582e741521575bfe \ 231 | --hash=sha256:56126ef061b913c3eefecace3404ca88917265d0550b8e32bbbeab29e5c830bf \ 232 | --hash=sha256:589ac1e82add13fbdedc04eb0a83400db728e5f1af2bd273392088ca90de7062 \ 233 | --hash=sha256:6076bce2ecc6ebf6c92919d77762f80f4c9c6ecc9c1fbaa16567ec59ad7d6f1d \ 234 | --hash=sha256:63be649c535d18ab6230efbc06a07f7779cd4336a687672defe70c025349a47b \ 235 | --hash=sha256:6642cbc92eaffa586180f669adc772f5c34977e9e849e93f33dc142351e98c9c \ 236 | --hash=sha256:6fa05a25f2280e78a514041d4609d39962e7d51525f2439db9ad7a2ae7aac163 \ 237 | --hash=sha256:7ed006a220422c33ff0889288be24db56ff0a3008ffe9eaead58a690715ad09b \ 238 | --hash=sha256:80c9c213803b50899460cc355f47e66778c3c868f448b7b7de5b1f1858c82c2a \ 239 | --hash=sha256:8bae18e2129850e76969b57869dacc72a66cccdbeebce1a28d7f3d439c21a7a3 \ 240 | --hash=sha256:ab112fba996a8f48f427e26969f2066d50080df0c24007a8cc6d7ae865e19013 \ 241 | --hash=sha256:b1c178ef813940c9a5cbad42ab7b8b76ac08b594b0a6bad91063c968e0466efc \ 242 | --hash=sha256:d6eff151c3b23a56a5e4f496805619bc3bdf4f749f63a7a95ad50e8267c17475 \ 243 | # via aiohttp 244 | -------------------------------------------------------------------------------- /requirements_nwo.txt: -------------------------------------------------------------------------------- 1 | epdb==0.15.1 2 | GitPython==3.0.7 3 | logzero==1.5.0 4 | PyYAML==5.3 5 | requests==2.22.0 6 | requests-cache==0.5.2 7 | ruamel.yaml==0.16.6 8 | sh==1.12.14 9 | 10 | # ansibot 11 | bs4 12 | textblob 13 | fuzzywuzzy 14 | python-LevenShtein 15 | sqlalchemy 16 | git+git://github.com/ansible/ansibullbot 17 | 18 | -------------------------------------------------------------------------------- /requirements_status_quo.txt: -------------------------------------------------------------------------------- 1 | logzero 2 | ruamel.yaml 3 | sh 4 | -------------------------------------------------------------------------------- /resources/.gitignore.tmpl: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.gitignore.io/api/git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs,dotenv 3 | # Edit at https://www.gitignore.io/?templates=git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs,dotenv 4 | 5 | ### dotenv ### 6 | .env 7 | 8 | ### Emacs ### 9 | # -*- mode: gitignore; -*- 10 | *~ 11 | \#*\# 12 | /.emacs.desktop 13 | /.emacs.desktop.lock 14 | *.elc 15 | auto-save-list 16 | tramp 17 | .\#* 18 | 19 | # Org-mode 20 | .org-id-locations 21 | *_archive 22 | 23 | # flymake-mode 24 | *_flymake.* 25 | 26 | # eshell files 27 | /eshell/history 28 | /eshell/lastdir 29 | 30 | # elpa packages 31 | /elpa/ 32 | 33 | # reftex files 34 | *.rel 35 | 36 | # AUCTeX auto folder 37 | /auto/ 38 | 39 | # cask packages 40 | .cask/ 41 | dist/ 42 | 43 | # Flycheck 44 | flycheck_*.el 45 | 46 | # server auth directory 47 | /server/ 48 | 49 | # projectiles files 50 | .projectile 51 | 52 | # directory configuration 53 | .dir-locals.el 54 | 55 | # network security 56 | /network-security.data 57 | 58 | 59 | ### Git ### 60 | # Created by git for backups. To disable backups in Git: 61 | # $ git config --global mergetool.keepBackup false 62 | *.orig 63 | 64 | # Created by git when using merge tools for conflicts 65 | *.BACKUP.* 66 | *.BASE.* 67 | *.LOCAL.* 68 | *.REMOTE.* 69 | *_BACKUP_*.txt 70 | *_BASE_*.txt 71 | *_LOCAL_*.txt 72 | *_REMOTE_*.txt 73 | 74 | #!! ERROR: jupyternotebook is undefined. Use list command to see defined gitignore types !!# 75 | 76 | ### Linux ### 77 | 78 | # temporary files which can be created if a process still has a handle open of a deleted file 79 | .fuse_hidden* 80 | 81 | # KDE directory preferences 82 | .directory 83 | 84 | # Linux trash folder which might appear on any partition or disk 85 | .Trash-* 86 | 87 | # .nfs files are created when an open file is removed but is still being accessed 88 | .nfs* 89 | 90 | ### PyCharm+all ### 91 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm 92 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 93 | 94 | # User-specific stuff 95 | .idea/**/workspace.xml 96 | .idea/**/tasks.xml 97 | .idea/**/usage.statistics.xml 98 | .idea/**/dictionaries 99 | .idea/**/shelf 100 | 101 | # Generated files 102 | .idea/**/contentModel.xml 103 | 104 | # Sensitive or high-churn files 105 | .idea/**/dataSources/ 106 | .idea/**/dataSources.ids 107 | .idea/**/dataSources.local.xml 108 | .idea/**/sqlDataSources.xml 109 | .idea/**/dynamic.xml 110 | .idea/**/uiDesigner.xml 111 | .idea/**/dbnavigator.xml 112 | 113 | # Gradle 114 | .idea/**/gradle.xml 115 | .idea/**/libraries 116 | 117 | # Gradle and Maven with auto-import 118 | # When using Gradle or Maven with auto-import, you should exclude module files, 119 | # since they will be recreated, and may cause churn. Uncomment if using 120 | # auto-import. 121 | # .idea/modules.xml 122 | # .idea/*.iml 123 | # .idea/modules 124 | # *.iml 125 | # *.ipr 126 | 127 | # CMake 128 | cmake-build-*/ 129 | 130 | # Mongo Explorer plugin 131 | .idea/**/mongoSettings.xml 132 | 133 | # File-based project format 134 | *.iws 135 | 136 | # IntelliJ 137 | out/ 138 | 139 | # mpeltonen/sbt-idea plugin 140 | .idea_modules/ 141 | 142 | # JIRA plugin 143 | atlassian-ide-plugin.xml 144 | 145 | # Cursive Clojure plugin 146 | .idea/replstate.xml 147 | 148 | # Crashlytics plugin (for Android Studio and IntelliJ) 149 | com_crashlytics_export_strings.xml 150 | crashlytics.properties 151 | crashlytics-build.properties 152 | fabric.properties 153 | 154 | # Editor-based Rest Client 155 | .idea/httpRequests 156 | 157 | # Android studio 3.1+ serialized cache file 158 | .idea/caches/build_file_checksums.ser 159 | 160 | ### PyCharm+all Patch ### 161 | # Ignores the whole .idea folder and all .iml files 162 | # See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360 163 | 164 | .idea/ 165 | 166 | # Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 167 | 168 | *.iml 169 | modules.xml 170 | .idea/misc.xml 171 | *.ipr 172 | 173 | # Sonarlint plugin 174 | .idea/sonarlint 175 | 176 | ### pydev ### 177 | .pydevproject 178 | 179 | ### Python ### 180 | # Byte-compiled / optimized / DLL files 181 | __pycache__/ 182 | *.py[cod] 183 | *$py.class 184 | 185 | # C extensions 186 | *.so 187 | 188 | # Distribution / packaging 189 | .Python 190 | build/ 191 | develop-eggs/ 192 | downloads/ 193 | eggs/ 194 | .eggs/ 195 | lib/ 196 | lib64/ 197 | parts/ 198 | sdist/ 199 | var/ 200 | wheels/ 201 | pip-wheel-metadata/ 202 | share/python-wheels/ 203 | *.egg-info/ 204 | .installed.cfg 205 | *.egg 206 | MANIFEST 207 | 208 | # PyInstaller 209 | # Usually these files are written by a python script from a template 210 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 211 | *.manifest 212 | *.spec 213 | 214 | # Installer logs 215 | pip-log.txt 216 | pip-delete-this-directory.txt 217 | 218 | # Unit test / coverage reports 219 | htmlcov/ 220 | .tox/ 221 | .nox/ 222 | .coverage 223 | .coverage.* 224 | .cache 225 | nosetests.xml 226 | coverage.xml 227 | *.cover 228 | .hypothesis/ 229 | .pytest_cache/ 230 | 231 | # Translations 232 | *.mo 233 | *.pot 234 | 235 | # Scrapy stuff: 236 | .scrapy 237 | 238 | # Sphinx documentation 239 | docs/_build/ 240 | 241 | # PyBuilder 242 | target/ 243 | 244 | # pyenv 245 | .python-version 246 | 247 | # pipenv 248 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 249 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 250 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 251 | # install all needed dependencies. 252 | #Pipfile.lock 253 | 254 | # celery beat schedule file 255 | celerybeat-schedule 256 | 257 | # SageMath parsed files 258 | *.sage.py 259 | 260 | # Spyder project settings 261 | .spyderproject 262 | .spyproject 263 | 264 | # Rope project settings 265 | .ropeproject 266 | 267 | # Mr Developer 268 | .mr.developer.cfg 269 | .project 270 | 271 | # mkdocs documentation 272 | /site 273 | 274 | # mypy 275 | .mypy_cache/ 276 | .dmypy.json 277 | dmypy.json 278 | 279 | # Pyre type checker 280 | .pyre/ 281 | 282 | ### Vim ### 283 | # Swap 284 | [._]*.s[a-v][a-z] 285 | [._]*.sw[a-p] 286 | [._]s[a-rt-v][a-z] 287 | [._]ss[a-gi-z] 288 | [._]sw[a-p] 289 | 290 | # Session 291 | Session.vim 292 | Sessionx.vim 293 | 294 | # Temporary 295 | .netrwhist 296 | # Auto-generated tag files 297 | tags 298 | # Persistent undo 299 | [._]*.un~ 300 | 301 | ### WebStorm ### 302 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm 303 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 304 | 305 | # User-specific stuff 306 | 307 | # Generated files 308 | 309 | # Sensitive or high-churn files 310 | 311 | # Gradle 312 | 313 | # Gradle and Maven with auto-import 314 | # When using Gradle or Maven with auto-import, you should exclude module files, 315 | # since they will be recreated, and may cause churn. Uncomment if using 316 | # auto-import. 317 | # .idea/modules.xml 318 | # .idea/*.iml 319 | # .idea/modules 320 | # *.iml 321 | # *.ipr 322 | 323 | # CMake 324 | 325 | # Mongo Explorer plugin 326 | 327 | # File-based project format 328 | 329 | # IntelliJ 330 | 331 | # mpeltonen/sbt-idea plugin 332 | 333 | # JIRA plugin 334 | 335 | # Cursive Clojure plugin 336 | 337 | # Crashlytics plugin (for Android Studio and IntelliJ) 338 | 339 | # Editor-based Rest Client 340 | 341 | # Android studio 3.1+ serialized cache file 342 | 343 | ### WebStorm Patch ### 344 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 345 | 346 | # *.iml 347 | # modules.xml 348 | # .idea/misc.xml 349 | # *.ipr 350 | 351 | # Sonarlint plugin 352 | .idea/**/sonarlint/ 353 | 354 | # SonarQube Plugin 355 | .idea/**/sonarIssues.xml 356 | 357 | # Markdown Navigator plugin 358 | .idea/**/markdown-navigator.xml 359 | .idea/**/markdown-navigator/ 360 | 361 | ### Windows ### 362 | # Windows thumbnail cache files 363 | Thumbs.db 364 | Thumbs.db:encryptable 365 | ehthumbs.db 366 | ehthumbs_vista.db 367 | 368 | # Dump file 369 | *.stackdump 370 | 371 | # Folder config file 372 | [Dd]esktop.ini 373 | 374 | # Recycle Bin used on file shares 375 | $RECYCLE.BIN/ 376 | 377 | # Windows Installer files 378 | *.cab 379 | *.msi 380 | *.msix 381 | *.msm 382 | *.msp 383 | 384 | # Windows shortcuts 385 | *.lnk 386 | 387 | # End of https://www.gitignore.io/api/git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs,dotenv 388 | -------------------------------------------------------------------------------- /resources/README.md.tmpl: -------------------------------------------------------------------------------- 1 | [![GitHub Actions CI/CD build status — Collection test suite](https://github.com/{{ gh_org }}/{{ coll_ns }}.{{ coll_name }}/workflows/Collection%20test%20suite/badge.svg?branch=master)](https://github.com/{{ gh_org }}/{{ coll_ns }}.{{ coll_name }}/actions?query=workflow%3A%22Collection%20test%20suite%22) 2 | 3 | Ansible Collection: {{ coll_ns }}.{{ coll_name }} 4 | ================================================= 5 | -------------------------------------------------------------------------------- /resources/collection-continuous-integration.yml.tmpl: -------------------------------------------------------------------------------- 1 | {% raw %}name: Collection test suite 2 | 3 | on: 4 | push: 5 | pull_request: 6 | schedule: 7 | - cron: 3 0 * * * # Run daily at 0:03 UTC 8 | 9 | jobs: 10 | build-collection-artifact: 11 | name: Build collection 12 | runs-on: ${{ matrix.runner-os }} 13 | strategy: 14 | matrix: 15 | runner-os: 16 | - ubuntu-latest 17 | ansible-version: 18 | - git+https://github.com/ansible/ansible.git@devel 19 | runner-python-version: 20 | - 3.8 21 | steps: 22 | - name: Check out ${{ github.repository }} on disk 23 | uses: actions/checkout@master 24 | - name: Set up Python ${{ matrix.runner-python-version }} 25 | uses: actions/setup-python@v1 26 | with: 27 | python-version: ${{ matrix.runner-python-version }} 28 | - name: Set up pip cache 29 | uses: actions/cache@v1 30 | with: 31 | path: ~/.cache/pip 32 | key: ${{ runner.os }}-pip-${{ hashFiles('tests/sanity/requirements.txt') }}-${{ hashFiles('tests/unit/requirements.txt') }} 33 | restore-keys: | 34 | ${{ runner.os }}-pip- 35 | ${{ runner.os }}- 36 | - name: Install Ansible ${{ matrix.ansible-version }} 37 | run: >- 38 | python -m 39 | pip 40 | install 41 | --user 42 | ${{ matrix.ansible-version }} 43 | - name: Build a collection tarball 44 | run: >- 45 | ~/.local/bin/ansible-galaxy 46 | collection 47 | build 48 | --output-path 49 | "${GITHUB_WORKSPACE}/.cache/collection-tarballs" 50 | - name: Store migrated collection artifacts 51 | uses: actions/upload-artifact@v1 52 | with: 53 | name: >- 54 | collection 55 | path: .cache/collection-tarballs 56 | 57 | sanity-test-collection-via-vms: 58 | name: Sanity in VM ${{ matrix.os.vm || 'ubuntu-latest' }} 59 | needs: 60 | - build-collection-artifact 61 | runs-on: ${{ matrix.os.vm || 'ubuntu-latest' }} 62 | strategy: 63 | fail-fast: false 64 | matrix: 65 | ansible-version: 66 | - git+https://github.com/ansible/ansible.git@devel 67 | os: 68 | - vm: ubuntu-latest 69 | - vm: ubuntu-16.04 70 | - vm: macos-latest 71 | python-version: 72 | - 3.8 73 | - 3.7 74 | - 3.6 75 | - 3.5 76 | - 2.7 77 | steps: 78 | - name: Set up Python ${{ matrix.python-version }} 79 | uses: actions/setup-python@v1 80 | with: 81 | python-version: ${{ matrix.python-version }} 82 | - name: Set up pip cache 83 | uses: actions/cache@v1 84 | with: 85 | path: ~/.cache/pip 86 | key: ${{ runner.os }}-pip-${{ github.ref }}-sanity-VMs 87 | restore-keys: | 88 | ${{ runner.os }}-pip- 89 | ${{ runner.os }}- 90 | - name: Install Ansible ${{ matrix.ansible-version }} 91 | run: >- 92 | python -m 93 | pip 94 | install 95 | --user 96 | ${{ matrix.ansible-version }} 97 | - name: Download migrated collection artifacts 98 | uses: actions/download-artifact@v1 99 | with: 100 | name: >- 101 | collection 102 | path: .cache/collection-tarballs 103 | - name: Install the collection tarball 104 | run: >- 105 | ~/.local/bin/ansible-galaxy 106 | collection 107 | install 108 | .cache/collection-tarballs/*.tar.gz 109 | - name: Run collection sanity tests 110 | run: >- 111 | ~/.local/bin/ansible-test 112 | sanity 113 | --color 114 | --requirements 115 | --venv 116 | --python 117 | "${{ matrix.python-version }}" 118 | -vvv 119 | working-directory: >- 120 | /${{ runner.os == 'Linux' && 'home' || 'Users' }}/runner/.ansible/collections/ansible_collections/{% endraw %}{{ coll_ns }}/{{ coll_name }}{% raw %} 121 | 122 | sanity-test-collection-via-containers: 123 | name: Sanity in container via Python ${{ matrix.python-version }} 124 | needs: 125 | - build-collection-artifact 126 | runs-on: ${{ matrix.runner-os }} 127 | strategy: 128 | fail-fast: false 129 | matrix: 130 | runner-os: 131 | - ubuntu-latest 132 | runner-python-version: 133 | - 3.8 134 | ansible-version: 135 | - git+https://github.com/ansible/ansible.git@devel 136 | python-version: 137 | - 3.8 138 | - 2.7 139 | - 3.7 140 | - 3.6 141 | - 3.5 142 | - 2.6 143 | steps: 144 | - name: Set up Python ${{ matrix.runner-python-version }} 145 | uses: actions/setup-python@v1 146 | with: 147 | python-version: ${{ matrix.runner-python-version }} 148 | - name: Set up pip cache 149 | uses: actions/cache@v1 150 | with: 151 | path: ~/.cache/pip 152 | key: ${{ runner.os }}-pip-${{ github.ref }}-sanity-containers 153 | restore-keys: | 154 | ${{ runner.os }}-pip- 155 | ${{ runner.os }}- 156 | - name: Install Ansible ${{ matrix.ansible-version }} 157 | run: >- 158 | python -m 159 | pip 160 | install 161 | --user 162 | ${{ matrix.ansible-version }} 163 | - name: Download migrated collection artifacts 164 | uses: actions/download-artifact@v1 165 | with: 166 | name: >- 167 | collection 168 | path: .cache/collection-tarballs 169 | - name: Install the collection tarball 170 | run: >- 171 | ~/.local/bin/ansible-galaxy 172 | collection 173 | install 174 | .cache/collection-tarballs/*.tar.gz 175 | - name: Run collection sanity tests 176 | run: >- 177 | ~/.local/bin/ansible-test 178 | sanity 179 | --color 180 | --requirements 181 | --docker 182 | --python 183 | "${{ matrix.python-version }}" 184 | -vvv 185 | working-directory: >- 186 | /home/runner/.ansible/collections/ansible_collections/{% endraw %}{{ coll_ns }}/{{ coll_name }}{% raw %} 187 | 188 | unit-test-collection-via-vms: 189 | name: Units in VM ${{ matrix.os.vm || 'ubuntu-latest' }} 190 | needs: 191 | - build-collection-artifact 192 | runs-on: ${{ matrix.os.vm || 'ubuntu-latest' }} 193 | strategy: 194 | fail-fast: false 195 | matrix: 196 | ansible-version: 197 | - git+https://github.com/ansible/ansible.git@devel 198 | os: 199 | - vm: ubuntu-latest 200 | - vm: ubuntu-16.04 201 | - vm: macos-latest 202 | python-version: 203 | - 3.8 204 | - 3.7 205 | - 3.6 206 | - 3.5 207 | - 2.7 208 | steps: 209 | - name: Set up Python ${{ matrix.python-version }} 210 | uses: actions/setup-python@v1 211 | with: 212 | python-version: ${{ matrix.python-version }} 213 | - name: Set up pip cache 214 | uses: actions/cache@v1 215 | with: 216 | path: ~/.cache/pip 217 | key: ${{ runner.os }}-pip-${{ github.ref }}-units-VMs 218 | restore-keys: | 219 | ${{ runner.os }}-pip- 220 | ${{ runner.os }}- 221 | - name: Install Ansible ${{ matrix.ansible-version }} 222 | run: >- 223 | python -m 224 | pip 225 | install 226 | --user 227 | ${{ matrix.ansible-version }} 228 | - name: Download migrated collection artifacts 229 | uses: actions/download-artifact@v1 230 | with: 231 | name: >- 232 | collection 233 | path: .cache/collection-tarballs 234 | - name: Install the collection tarball 235 | run: >- 236 | ~/.local/bin/ansible-galaxy 237 | collection 238 | install 239 | .cache/collection-tarballs/*.tar.gz 240 | - name: Run collection unit tests 241 | run: | 242 | [[ ! -d 'tests/unit' ]] && echo This collection does not have unit tests. Skipping... || \ 243 | ~/.local/bin/ansible-test units --color --coverage --requirements --venv --python "${{ matrix.python-version }}" -vvv 244 | working-directory: >- 245 | /${{ runner.os == 'Linux' && 'home' || 'Users' }}/runner/.ansible/collections/ansible_collections/{% endraw %}{{ coll_ns }}/{{ coll_name }}{% raw %} 246 | 247 | unit-test-collection-via-containers: 248 | name: Units in container ${{ matrix.container-image }} 249 | needs: 250 | - build-collection-artifact 251 | runs-on: ${{ matrix.runner-os }} 252 | strategy: 253 | fail-fast: false 254 | matrix: 255 | runner-os: 256 | - ubuntu-latest 257 | runner-python-version: 258 | - 3.8 259 | ansible-version: 260 | - git+https://github.com/ansible/ansible.git@devel 261 | container-image: 262 | - fedora31 263 | - ubuntu1804 264 | - centos8 265 | - opensuse15 266 | - fedora30 267 | - centos7 268 | - opensuse15py2 269 | - ubuntu1604 270 | - centos6 271 | steps: 272 | - name: Set up Python ${{ matrix.runner-python-version }} 273 | uses: actions/setup-python@v1 274 | with: 275 | python-version: ${{ matrix.runner-python-version }} 276 | - name: Set up pip cache 277 | uses: actions/cache@v1 278 | with: 279 | path: ~/.cache/pip 280 | key: ${{ runner.os }}-pip-${{ github.ref }}-units-containers 281 | restore-keys: | 282 | ${{ runner.os }}-pip- 283 | ${{ runner.os }}- 284 | - name: Install Ansible ${{ matrix.ansible-version }} 285 | run: >- 286 | python -m 287 | pip 288 | install 289 | --user 290 | ${{ matrix.ansible-version }} 291 | - name: Download migrated collection artifacts 292 | uses: actions/download-artifact@v1 293 | with: 294 | name: >- 295 | collection 296 | path: .cache/collection-tarballs 297 | - name: Install the collection tarball 298 | run: >- 299 | ~/.local/bin/ansible-galaxy 300 | collection 301 | install 302 | .cache/collection-tarballs/*.tar.gz 303 | - name: Run collection unit tests 304 | run: | 305 | [[ ! -d 'tests/unit' ]] && echo This collection does not have unit tests. Skipping... || \ 306 | ~/.local/bin/ansible-test units --color --coverage --requirements --docker "${{ matrix.container-image }}" -vvv 307 | working-directory: >- 308 | /home/runner/.ansible/collections/ansible_collections/{% endraw %}{{ coll_ns }}/{{ coll_name }} 309 | -------------------------------------------------------------------------------- /resources/github_known_hosts.tmpl: -------------------------------------------------------------------------------- 1 | # Entries under the comment can be generated via: 2 | # ssh-keyscan -t rsa,dsa,ecdsa,ed25519 github.com 3 | # 4 | # GitHub's SSH key fingerprints: 5 | # 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48 (RSA) 6 | # ad:1c:08:a4:40:e3:6f:9c:f5:66:26:5d:4b:33:5d:8c (DSA) 7 | # SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 (RSA) 8 | # SHA256:br9IjFspm1vxR3iA35FWE+4VTyz1hYVLIE2t1/CeyWQ (DSA) 9 | # Ref: https://help.github.com/en/github/authenticating-to-github/githubs-ssh-key-fingerprints 10 | 11 | github.com ssh-dss AAAAB3NzaC1kc3MAAACBANGFW2P9xlGU3zWrymJgI/lKo//ZW2WfVtmbsUZJ5uyKArtlQOT2+WRhcg4979aFxgKdcsqAYW3/LS1T2km3jYW/vr4Uzn+dXWODVk5VlUiZ1HFOHf6s6ITcZvjvdbp6ZbpM+DuJT7Bw+h5Fx8Qt8I16oCZYmAPJRtu46o9C2zk1AAAAFQC4gdFGcSbp5Gr0Wd5Ay/jtcldMewAAAIATTgn4sY4Nem/FQE+XJlyUQptPWMem5fwOcWtSXiTKaaN0lkk2p2snz+EJvAGXGq9dTSWHyLJSM2W6ZdQDqWJ1k+cL8CARAqL+UMwF84CR0m3hj+wtVGD/J4G5kW2DBAf4/bqzP4469lT+dF2FRQ2L9JKXrCWcnhMtJUvua8dvnwAAAIB6C4nQfAA7x8oLta6tT+oCk2WQcydNsyugE8vLrHlogoWEicla6cWPk7oXSspbzUcfkjN3Qa6e74PhRkc7JdSdAlFzU3m7LMkXo1MHgkqNX8glxWNVqBSc0YRdbFdTkL0C6gtpklilhvuHQCdbgB3LBAikcRkDp+FCVkUgPC/7Rw== 12 | 13 | github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== 14 | -------------------------------------------------------------------------------- /rsa_utils.py: -------------------------------------------------------------------------------- 1 | """In-memory RSA key generation and management utils.""" 2 | from __future__ import annotations 3 | 4 | import contextlib 5 | import functools 6 | import os 7 | import subprocess 8 | 9 | from cryptography.hazmat.backends import default_backend 10 | from cryptography.hazmat.primitives.asymmetric.rsa import generate_private_key 11 | from cryptography.hazmat.primitives.serialization import ( 12 | Encoding, 13 | NoEncryption, 14 | PublicFormat, 15 | PrivateFormat, 16 | ) 17 | 18 | 19 | class RSAKey: 20 | """In-memory RSA key wrapper.""" 21 | 22 | def __init__(self): 23 | _rsa_key_obj = generate_private_key( 24 | public_exponent=65537, 25 | key_size=4096, 26 | backend=default_backend(), 27 | ) 28 | 29 | _rsa_pub_key_obj = _rsa_key_obj.public_key() 30 | self._public_repr = _rsa_pub_key_obj.public_bytes( 31 | encoding=Encoding.PEM, 32 | format=PublicFormat.PKCS1, 33 | ).decode() 34 | self._public_repr_openssh = _rsa_pub_key_obj.public_bytes( 35 | encoding=Encoding.OpenSSH, 36 | format=PublicFormat.OpenSSH, 37 | ).decode() 38 | 39 | _private_rsa_key_repr = _rsa_key_obj.private_bytes( 40 | encoding=Encoding.PEM, 41 | format=PrivateFormat.TraditionalOpenSSL, # A.K.A. PKCS#1 42 | encryption_algorithm=NoEncryption(), 43 | ) 44 | self._ssh_agent_cm = SSHAgent(_private_rsa_key_repr) 45 | 46 | @property 47 | def ssh_agent(self) -> SSHAgent: 48 | """SSH agent CM.""" 49 | return self._ssh_agent_cm 50 | 51 | @property 52 | def public(self) -> str: 53 | """String PKCS#1-formatted representation of the public key.""" 54 | return self._public_repr 55 | 56 | @property 57 | def public_openssh(self) -> str: 58 | """String OpenSSH-formatted representation of the public key.""" 59 | return self._public_repr_openssh 60 | 61 | 62 | class SSHAgent: 63 | """SSH agent lifetime manager. 64 | 65 | Only usable as a CM. Only holds one RSA key in memory. 66 | """ 67 | 68 | def __init__(self, ssh_key: bytes): 69 | self._ssh_key = ssh_key 70 | self._ssh_agent_proc = None 71 | self._ssh_agent_socket = None 72 | 73 | def __enter__(self) -> _SubprocessSSHAgentProxy: 74 | ssh_agent_cmd = ( 75 | 'ssh-agent', # man 1 ssh-agent 76 | '-s', # generate Bourne shell commands on stdout 77 | '-D', # foreground mode 78 | ) 79 | ssh_add_cmd = 'ssh-add', '-' 80 | 81 | self._ssh_agent_proc = subprocess.Popen( 82 | ssh_agent_cmd, 83 | stdout=subprocess.PIPE, # we need to parse the socket path 84 | text=True, # auto-decode the text from bytes 85 | ) 86 | self._ssh_agent_socket = ( 87 | self._ssh_agent_proc. 88 | stdout.readline(). 89 | partition('; ')[0]. 90 | partition('=')[-1] 91 | ) 92 | 93 | subprocess_proxy = _SubprocessSSHAgentProxy(self._ssh_agent_socket) 94 | subprocess_proxy.check_output( 95 | ssh_add_cmd, 96 | input=self._ssh_key, 97 | stderr=subprocess.DEVNULL, 98 | ) 99 | 100 | return subprocess_proxy 101 | 102 | def __exit__(self, exc_type, exc_val, exc_tb): 103 | ssh_agent_proc = self._ssh_agent_proc 104 | 105 | self._ssh_agent_socket = None 106 | self._ssh_agent_proc = None 107 | 108 | with contextlib.suppress(IOError, OSError): 109 | ssh_agent_proc.terminate() 110 | 111 | return False 112 | 113 | 114 | def pre_populate_env_kwarg(meth): 115 | """Pre-populated env arg in decorated methods.""" 116 | @functools.wraps(meth) 117 | def method_wrapper(self, *args, **kwargs): 118 | if 'env' not in kwargs: 119 | kwargs['env'] = os.environ.copy() 120 | kwargs['env']['GIT_SSH_COMMAND'] = ( 121 | 'ssh -2 ' 122 | '-F /dev/null ' 123 | '-o PreferredAuthentications=publickey ' 124 | '-o IdentityFile=/dev/null ' 125 | f'-o IdentityAgent="{self._sock}"' 126 | ) 127 | kwargs['env']['SSH_AUTH_SOCK'] = self._sock 128 | return meth(self, *args, **kwargs) 129 | return method_wrapper 130 | 131 | 132 | # pylint: disable=too-few-public-methods 133 | class _SubprocessSSHAgentProxy: 134 | """Proxy object for calls to subprocess functions.""" 135 | 136 | def __init__(self, sock): 137 | self._sock = sock 138 | 139 | @pre_populate_env_kwarg 140 | def check_call(self, *args, **kwargs): 141 | """Populate the SSH agent sock into the check_call env.""" 142 | return subprocess.check_call(*args, **kwargs) 143 | 144 | @pre_populate_env_kwarg 145 | def check_output(self, *args, **kwargs): 146 | """Populate the SSH agent sock into the check_output env.""" 147 | return subprocess.check_output(*args, **kwargs) 148 | 149 | @pre_populate_env_kwarg 150 | def run(self, *args, **kwargs): 151 | """Populate the SSH agent sock into the run env.""" 152 | return subprocess.run(*args, **kwargs) 153 | -------------------------------------------------------------------------------- /scenarios/base: -------------------------------------------------------------------------------- 1 | nwo -------------------------------------------------------------------------------- /scenarios/bcs/README.md: -------------------------------------------------------------------------------- 1 | This scenario is used for testing the migration itself, do not use unless specifically instructed. 2 | -------------------------------------------------------------------------------- /scenarios/bcs/a10networks.yml: -------------------------------------------------------------------------------- 1 | ../common/a10networks.yml -------------------------------------------------------------------------------- /scenarios/bcs/ansible.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | action: 3 | - add_host.py 4 | - assert.py 5 | - assemble.py 6 | - async_status.py 7 | - command.py 8 | - copy.py 9 | - debug.py 10 | - gather_facts.py 11 | - group_by.py 12 | - fail.py 13 | - fetch.py 14 | - include_vars.py 15 | - netconf.py 16 | - normal.py 17 | - package.py 18 | - patch.py 19 | - pause.py 20 | - raw.py 21 | - shell.py 22 | - service.py 23 | - set_fact.py 24 | - set_stats.py 25 | - reboot.py 26 | - template.py 27 | - uri.py 28 | - wait_for_connection.py 29 | - yum.py 30 | become: 31 | - su.py 32 | - sudo.py 33 | cache: 34 | - jsonfile.py 35 | - memcached.py 36 | - memory.py 37 | - pickle.py 38 | callback: 39 | - default.py 40 | - minimal.py 41 | - oneline.py 42 | - junit.py 43 | - tree.py 44 | connection: 45 | - local.py 46 | - httpapi.py 47 | - netconf.py 48 | - network_cli.py 49 | - ssh.py 50 | doc_fragments: 51 | - backup.py 52 | - constructed.py 53 | - default_callback.py 54 | - decrypt.py 55 | - files.py 56 | - inventory_cache.py 57 | - return_common.py 58 | - shell_common.py 59 | - template_common.py 60 | - url.py 61 | - vars_plugin_staging.py 62 | - validate.py 63 | filter: 64 | - core.py 65 | - mathstuff.py 66 | - urlsplit.py 67 | inventory: 68 | - advanced_host_list.py 69 | - auto.py 70 | - constructed.py 71 | - generator.py 72 | - host_list.py 73 | - ini.py 74 | - script.py 75 | - toml.py 76 | - yaml.py 77 | lookup: 78 | - config.py 79 | - dict.py 80 | - env.py 81 | - file.py 82 | - fileglob.py 83 | - first_found.py 84 | - indexed_items.py 85 | - inventory_hostnames.py 86 | - items.py 87 | - lines.py 88 | - list.py 89 | - nested.py 90 | - password.py 91 | - pipe.py 92 | - random_choice.py 93 | - sequence.py 94 | - subelements.py 95 | - together.py 96 | - varnames.py 97 | - vars.py 98 | module_utils: 99 | - _text.py 100 | - ansible_release.py 101 | - api.py 102 | - basic.py 103 | - connection.py 104 | - common/* 105 | - common/text/* 106 | - csharp/* 107 | - compat/__init__.py 108 | - compat/paramiko.py 109 | - distro/__init__.py 110 | - facts/__init__.py 111 | - facts/ansible_collector.py 112 | - facts/collector.py 113 | - facts/compat.py 114 | - facts/default_collectors.py 115 | - facts/hardware/* 116 | - facts/namespace.py 117 | - facts/network/* 118 | - facts/other/* 119 | - facts/system/* 120 | - facts/sysctl.py 121 | - facts/packages.py 122 | - facts/timeout.py 123 | - facts/utils.py 124 | - facts/virtual/* 125 | - json_utils.py 126 | - parsing/* 127 | - powershell/* 128 | - service.py 129 | - splitter.py 130 | - six/* 131 | - urls.py 132 | - yumdnf.py 133 | modules: 134 | - commands/command.py 135 | - commands/expect.py 136 | - commands/raw.py 137 | - commands/script.py 138 | - commands/shell.py 139 | - files/blockinfile.py 140 | - files/copy.py 141 | - files/fetch.py 142 | - files/file.py 143 | - files/find.py 144 | - files/lineinfile.py 145 | - files/patch.py 146 | - files/replace.py 147 | - files/stat.py 148 | - inventory/add_host.py 149 | - inventory/group_by.py 150 | - network/netconf/* 151 | - net_tools/basics/get_url.py 152 | - net_tools/basics/slurp.py 153 | - net_tools/basics/uri.py 154 | - notification/irc.py 155 | - notification/mail.py 156 | - packaging/language/pip.py 157 | - packaging/os/apt.py 158 | - packaging/os/apt_key.py 159 | - packaging/os/apt_repo.py 160 | - packaging/os/apt_repository.py 161 | - packaging/os/dpkg_selections.py 162 | - packaging/os/dnf.py 163 | - packaging/os/package.py 164 | - packaging/os/package_facts.py 165 | - packaging/os/rpm_key.py 166 | - packaging/os/yum.py 167 | - packaging/os/yum_repository.py 168 | - remote_management/ipmi/ipmi_boot.py 169 | - remote_management/ipmi/ipmi_power.py 170 | - source_control/git.py 171 | - source_control/subversion.py 172 | - system/debconf.py 173 | - system/gather_facts.py 174 | - system/getent.py 175 | - system/group.py 176 | - system/hostname.py 177 | - system/iptables.py 178 | - system/known_hosts.py 179 | - system/ping.py 180 | - system/reboot.py 181 | - system/service.py 182 | - system/service_facts.py 183 | - system/setup.py 184 | - system/systemd.py 185 | - system/sysvinit.py 186 | - system/timezone.py 187 | - system/user.py 188 | - utilities/helper/meta.py 189 | - utilities/logic/assert.py 190 | - utilities/logic/async_status.py 191 | - utilities/logic/async_wrapper.py 192 | - utilities/logic/debug.py 193 | - utilities/logic/fail.py 194 | - utilities/logic/import_playbook.py 195 | - utilities/logic/import_role.py 196 | - utilities/logic/import_tasks.py 197 | - utilities/logic/include.py 198 | - utilities/logic/include_role.py 199 | - utilities/logic/include_tasks.py 200 | - utilities/logic/include_vars.py 201 | - utilities/logic/pause.py 202 | - utilities/logic/set_fact.py 203 | - utilities/logic/set_stats.py 204 | - utilities/logic/wait_for.py 205 | - utilities/logic/wait_for_connection.py 206 | shell: 207 | - sh.py 208 | strategy: 209 | - debug.py 210 | - free.py 211 | - host_pinned.py 212 | - linear.py 213 | test: 214 | - core.py 215 | - mathstuff.py 216 | vars: 217 | - host_group_vars.py 218 | acme: 219 | doc_fragments: 220 | - acme.py 221 | module_utils: 222 | - acme.py 223 | modules: 224 | - crypto/acme/* 225 | aireos: 226 | action: 227 | - aireos.py 228 | cliconf: 229 | - aireos.py 230 | doc_fragments: 231 | - aireos.py 232 | module_utils: 233 | - network/aireos/* 234 | modules: 235 | - network/aireos/* 236 | terminal: 237 | - aireos.py 238 | alicloud: 239 | doc_fragments: 240 | - alicloud.py 241 | modules: 242 | - cloud/alicloud/* 243 | module_utils: 244 | - alicloud_ecs.py 245 | amazon: 246 | action: 247 | - aws_s3.py 248 | doc_fragments: 249 | - aws.py 250 | - aws_credentials.py 251 | - aws_region.py 252 | - ec2.py 253 | connection: 254 | - aws_ssm.py 255 | callback: 256 | - aws_resource_actions.py 257 | inventory: 258 | - aws_ec2.py 259 | - aws_rds.py 260 | module_utils: 261 | - ec2.py 262 | - aws/* 263 | modules: 264 | - cloud/amazon/* 265 | lookup: 266 | - aws_account_attribute.py 267 | - aws_secret.py 268 | - aws_service_ip_ranges.py 269 | - aws_ssm.py 270 | apconos: 271 | cliconf: 272 | - apconos.py 273 | module_utils: 274 | - network/apconos/* 275 | modules: 276 | - network/apconos/* 277 | terminal: 278 | - apconos.py 279 | cloudstack: 280 | doc_fragments: 281 | - cloudstack.py 282 | module_utils: 283 | - cloudstack.py 284 | modules: 285 | - cloud/cloudstack/* 286 | cloudscale: 287 | doc_fragments: 288 | - cloudscale.py 289 | inventory: 290 | - cloudscale.py 291 | module_utils: 292 | - cloudscale.py 293 | modules: 294 | - cloud/cloudscale/* 295 | cnos: 296 | action: 297 | - cnos.py 298 | cliconf: 299 | - cnos.py 300 | doc_fragments: 301 | - cnos.py 302 | module_utils: 303 | - network/cnos/* 304 | modules: 305 | - network/cnos/* 306 | terminal: 307 | - cnos.py 308 | containers: 309 | connection: 310 | - buildah.py 311 | - lxc.py 312 | - lxd.py 313 | - libvirt_lxc.py 314 | - qubes.py 315 | - iocage.py 316 | - podman.py 317 | module_utils: 318 | - lxd.py 319 | - podman/* 320 | modules: 321 | - cloud/lxc/* 322 | - cloud/lxd/* 323 | - cloud/podman/* 324 | digital_ocean: 325 | doc_fragments: 326 | - digital_ocean.py 327 | module_utils: 328 | - digital_ocean.py 329 | modules: 330 | - cloud/digital_ocean/* 331 | dimensiondata: 332 | doc_fragments: 333 | - dimensiondata.py 334 | - dimensiondata_wait.py 335 | module_utils: 336 | - dimensiondata.py 337 | modules: 338 | - cloud/dimensiondata/* 339 | docker: 340 | doc_fragments: 341 | - docker.py 342 | connection: 343 | - docker.py 344 | inventory: 345 | - docker_*.py 346 | module_utils: 347 | - docker/* 348 | modules: 349 | - cloud/docker/* 350 | enos: 351 | action: 352 | - enos.py 353 | cliconf: 354 | - enos.py 355 | doc_fragments: 356 | - enos.py 357 | modules: 358 | - network/enos/* 359 | module_utils: 360 | - network/enos/* 361 | terminal: 362 | - enos.py 363 | exoscale: 364 | doc_fragments: 365 | - exoscale.py 366 | module_utils: 367 | - exoscale.py 368 | modules: 369 | - net_tools/exoscale/* 370 | gitlab: 371 | inventory: 372 | - gitlab_runners.py 373 | module_utils: 374 | - gitlab.py 375 | modules: 376 | - source_control/gitlab/* 377 | hetzner: 378 | doc_fragments: 379 | - hcloud.py 380 | - hetzner.py 381 | inventory: 382 | - hcloud.py 383 | module_utils: 384 | - hcloud.py 385 | - hetzner.py 386 | modules: 387 | - cloud/hcloud/* 388 | - net_tools/hetzner_* 389 | ironware: 390 | action: 391 | - ironware.py 392 | doc_fragments: 393 | - ironware.py 394 | module_utils: 395 | - network/ironware/* 396 | modules: 397 | - network/ironware/* 398 | terminal: 399 | - ironware.py 400 | kubernetes: 401 | doc_fragments: 402 | - k8s_*.py 403 | - kubevirt_*.py 404 | connection: 405 | - kubectl.py 406 | - oc.py 407 | filter: 408 | - k8s.py 409 | inventory: 410 | - k8s.py 411 | - kubevirt.py 412 | - openshift.py 413 | lookup: 414 | - _openshift.py 415 | - k8s.py 416 | module_utils: 417 | - k8s/* 418 | - kubevirt.py 419 | modules: 420 | - clustering/k8s/* 421 | - cloud/kubevirt/* 422 | - clustering/openshift/* 423 | intersight: 424 | doc_fragments: 425 | - intersight.py 426 | module_utils: 427 | - remote_management/intersight.py 428 | modules: 429 | - remote_management/intersight/* 430 | keycloak: 431 | doc_fragments: 432 | - keycloak.py 433 | module_utils: 434 | - identity/* 435 | - identity/keycloak/* 436 | modules: 437 | - identity/keycloak/* 438 | layer2: 439 | modules: 440 | - network/layer2/* 441 | layer3: 442 | modules: 443 | - network/layer3/* 444 | netcommon: 445 | action: 446 | - cli_command.py 447 | - cli_config.py 448 | - edgeos_config.py 449 | - net_banner.py 450 | - net_base.py 451 | - net_l2_interface.py 452 | - net_l3_interface.py 453 | - net_lldp.py 454 | - net_lldp_interface.py 455 | - net_linkagg.py 456 | - net_logging.py 457 | - net_interface.py 458 | - net_get.py 459 | - net_ping.py 460 | - net_put.py 461 | - net_system.py 462 | - net_static_route.py 463 | - net_user.py 464 | - net_vlan.py 465 | - net_vrf.py 466 | - network.py 467 | - nos_config.py 468 | - onyx_config.py 469 | - telnet.py 470 | become: 471 | - enable.py 472 | cliconf: 473 | - eric_eccli.py 474 | - icx.py 475 | - netvisor.py 476 | - nos.py 477 | connection: 478 | - paramiko_ssh.py 479 | - napalm.py 480 | doc_fragments: 481 | - network_agnostic.py 482 | - openswitch.py 483 | filter: 484 | - network.py 485 | httpapi: 486 | - fortianalyzer.py 487 | - fortimanager.py 488 | - restconf.py 489 | - splunk.py 490 | inventory: 491 | - nmap.py 492 | modules: 493 | - network/cli/cli_command.py 494 | - network/cli/cli_config.py 495 | - network/files/net_get.py 496 | - network/files/net_put.py 497 | - network/fortianalyzer/* 498 | - network/icx/* 499 | - network/interface/_net_*.py 500 | - network/netvisor/* 501 | - network/netact/* 502 | - network/protocol/_net_lldp.py 503 | - network/restconf/* 504 | - network/routing/_net_static_route.py 505 | - network/system/_net_*.py 506 | - network/system/net_ping.py 507 | module_utils: 508 | - compat/ipaddress.py 509 | - network/common/* 510 | - network/common/*/* 511 | - network/edgeos/* 512 | - network/edgeswitch/* 513 | - network/eric_eccli/* 514 | - network/icx/* 515 | - network/netvisor/* 516 | - network/restconf/* 517 | - network/routeros/* 518 | netconf: 519 | - default.py 520 | terminal: 521 | - edgeos.py 522 | - edgeswitch.py 523 | - eric_eccli.py 524 | - icx.py 525 | - netvisor.py 526 | - nos.py 527 | - onyx.py 528 | - routeros.py 529 | - slxos.py 530 | ovs: 531 | modules: 532 | - network/ovs/* 533 | skydive: 534 | doc_fragments: 535 | - skydive.py 536 | modules: 537 | - network/skydive/* 538 | module_utils: 539 | - network/skydive/* 540 | lookup: 541 | - skydive.py 542 | tower: 543 | doc_fragments: 544 | - tower.py 545 | inventory: 546 | - tower.py 547 | modules: 548 | - web_infrastructure/ansible_tower/* 549 | module_utils: 550 | - ansible_tower.py 551 | unix: 552 | action: 553 | - synchronize.py 554 | - unarchive.py 555 | become: 556 | - doas.py 557 | - ksu.py 558 | - machinectl.py 559 | - pfexec.py 560 | callback: 561 | - mail.py 562 | - osx_say.py 563 | - say.py 564 | - syslog_json.py 565 | - unixy.py 566 | connection: 567 | - chroot.py 568 | - jail.py 569 | - zone.py 570 | lookup: 571 | - dig.py 572 | - dnstxt.py 573 | - keyring.py 574 | - shelvefile.py 575 | modules: 576 | - files/acl.py 577 | - files/assemble.py 578 | - files/unarchive.py 579 | - files/xattr.py 580 | - files/synchronize.py 581 | - files/tempfile.py 582 | - net_tools/nmcli.py 583 | - notification/_osx_say.py 584 | - notification/say.py 585 | - packaging/os/apk.py 586 | - packaging/os/flatpak.py 587 | - packaging/os/flatpak_remote.py 588 | - packaging/os/homebrew.py 589 | - packaging/os/homebrew_cask.py 590 | - packaging/os/homebrew_tap.py 591 | - packaging/os/installp.py 592 | - packaging/os/layman.py 593 | - packaging/os/macports.py 594 | - packaging/os/openbsd_pkg.py 595 | - packaging/os/opkg.py 596 | - packaging/os/pacman.py 597 | - packaging/os/pkg5.py 598 | - packaging/os/pkg5_publisher.py 599 | - packaging/os/pkgin.py 600 | - packaging/os/pkgng.py 601 | - packaging/os/pkgutil.py 602 | - packaging/os/portage.py 603 | - packaging/os/portinstall.py 604 | - packaging/os/pulp_repo.py 605 | - packaging/os/redhat_subscription.py 606 | - packaging/os/rhn_channel.py 607 | - packaging/os/rhn_register.py 608 | - packaging/os/rhsm_release.py 609 | - packaging/os/rhsm_repository.py 610 | - packaging/os/slackpkg.py 611 | - packaging/os/snap.py 612 | - packaging/os/sorcery.py 613 | - packaging/os/svr4pkg.py 614 | - packaging/os/swdepot.py 615 | - packaging/os/swupd.py 616 | - packaging/os/urpmi.py 617 | - packaging/os/xbps.py 618 | - packaging/os/zypper.py 619 | - packaging/os/zypper_repository.py 620 | - system/alternatives.py 621 | - system/at.py 622 | - system/authorized_key.py 623 | - system/capabilities.py 624 | - system/cron.py 625 | - system/cronvar.py 626 | - system/filesystem.py 627 | - system/firewalld.py 628 | - system/gconftool2.py 629 | - system/lbu.py 630 | - system/locale_gen.py 631 | - system/lvg.py 632 | - system/lvol.py 633 | - system/modprobe.py 634 | - system/mount.py 635 | - system/openwrt_init.py 636 | - system/pam_limits.py 637 | - system/osx_defaults.py 638 | - system/runit.py 639 | - system/svc.py 640 | - system/selinux.py 641 | - system/seboolean.py 642 | - system/seport.py 643 | - system/solaris_zone.py 644 | - system/sysctl.py 645 | - system/ufw.py 646 | - system/xfs_quota.py 647 | module_utils: 648 | - firewalld.py 649 | - ismount.py 650 | - redhat.py 651 | shell: 652 | - csh.py 653 | - fish.py 654 | vultr: 655 | doc_fragments: 656 | - vultr.py 657 | inventory: 658 | - vultr.py 659 | module_utils: 660 | - vultr.py 661 | modules: 662 | - cloud/vultr/* 663 | windows: 664 | action: 665 | - win_* 666 | become: 667 | - runas.py 668 | connection: 669 | - psrp.py 670 | - winrm.py 671 | doc_fragments: 672 | - '*_windows.py' 673 | modules: 674 | - windows/* 675 | shell: 676 | - cmd.py 677 | - powershell.py 678 | -------------------------------------------------------------------------------- /scenarios/bcs/arista.yml: -------------------------------------------------------------------------------- 1 | ../common/arista.yml -------------------------------------------------------------------------------- /scenarios/bcs/arubanetworks.yml: -------------------------------------------------------------------------------- 1 | ../common/arubanetworks.yml -------------------------------------------------------------------------------- /scenarios/bcs/avinetworks.yml: -------------------------------------------------------------------------------- 1 | ../common/avinetworks.yml -------------------------------------------------------------------------------- /scenarios/bcs/azure.yml: -------------------------------------------------------------------------------- 1 | ../common/azure.yml -------------------------------------------------------------------------------- /scenarios/bcs/check_point.yml: -------------------------------------------------------------------------------- 1 | ../common/check_point.yml -------------------------------------------------------------------------------- /scenarios/bcs/cisco.yml: -------------------------------------------------------------------------------- 1 | ../common/cisco.yml -------------------------------------------------------------------------------- /scenarios/bcs/community.yml: -------------------------------------------------------------------------------- 1 | _grafana: 2 | callback: 3 | - grafana_annotations.py 4 | lookup: 5 | - grafana_dashboard.py 6 | modules: 7 | - monitoring/grafana/* 8 | general: 9 | action: 10 | - slxos.py 11 | become: 12 | - dzdo.py 13 | - pbrun.py 14 | - pmrun.py 15 | - sesu.py 16 | doc_fragments: 17 | - auth_basic.py 18 | - ecs_credential.py 19 | - ingate.py 20 | - ipa.py 21 | - ldap.py 22 | - lxca_common.py 23 | - manageiq.py 24 | - mysql.py 25 | - netscaler.py 26 | - ovirt.py 27 | - ovirt_facts.py 28 | - ovirt_info.py 29 | - online.py 30 | - onyx.py 31 | - opennebula.py 32 | - openstack.py 33 | - postgres.py 34 | - proxysql.py 35 | - rabbitmq.py 36 | - rackspace.py 37 | - scaleway.py 38 | - utm.py 39 | - vca.py 40 | - vexata.py 41 | - xenserver.py 42 | - zabbix.py 43 | callback: 44 | - actionable.py 45 | - context_demo.py 46 | - counter_enabled.py 47 | - debug.py 48 | - dense.py 49 | - foreman.py 50 | - full_skip.py 51 | - hipchat.py 52 | - jabber.py 53 | - json.py 54 | - log_plays.py 55 | - logdna.py 56 | - logentries.py 57 | - logstash.py 58 | - 'null.py' 59 | - profile_roles.py 60 | - selective.py 61 | - skippy.py 62 | - slack.py 63 | - splunk.py 64 | - stderr.py 65 | - sumologic.py 66 | - timer.py 67 | - yaml.py 68 | cliconf: 69 | - edgeswitch.py 70 | - routeros.py 71 | - slxos.py 72 | connection: 73 | - funcd.py 74 | - saltstack.py 75 | lookup: 76 | - chef_databag.py 77 | - conjur_variable.py 78 | - consul_kv.py 79 | - cpm_metering.py 80 | - cpm_status.py 81 | - credstash.py 82 | - csvfile.py 83 | - etcd.py 84 | - filetree.py 85 | - hashi_vault.py 86 | - hiera.py 87 | - ini.py 88 | - laps_password.py 89 | - lastpass.py 90 | - lmdb_kv.py 91 | - manifold.py 92 | - mongodb.py 93 | - onepassword.py 94 | - onepassword_raw.py 95 | - passwordstore.py 96 | - rabbitmq.py 97 | - redis.py 98 | inventory: 99 | - foreman.py 100 | - netbox.py 101 | - online.py 102 | - openstack.py 103 | - scaleway.py 104 | - virtualbox.py 105 | filter: 106 | - json_query.py 107 | - random_mac.py 108 | modules: 109 | - cloud/atomic/* 110 | - cloud/centurylink/* 111 | - cloud/heroku/heroku_collaborator.py 112 | - cloud/linode/* 113 | - cloud/memset/* 114 | - cloud/misc/* 115 | - cloud/oneandone/* 116 | - cloud/online/* 117 | - cloud/opennebula/* 118 | - cloud/openstack/* 119 | - cloud/ovh/ovh_ip_failover.py 120 | - cloud/ovh/ovh_ip_loadbalancing_backend.py 121 | - cloud/ovirt/* 122 | - cloud/packet/* 123 | - cloud/profitbricks/* 124 | - cloud/pubnub/pubnub_blocks.py 125 | - cloud/rackspace/* 126 | - cloud/scaleway/* 127 | - cloud/smartos/* 128 | - cloud/softlayer/sl_vm.py 129 | - cloud/spotinst/spotinst_aws_elastigroup.py 130 | - cloud/univention/* 131 | - cloud/webfaction/* 132 | - cloud/xenserver/* 133 | - clustering/consul/* 134 | - clustering/etcd3.py 135 | - clustering/pacemaker_cluster.py 136 | - clustering/znode.py 137 | - commands/psexec.py 138 | - commands/telnet.py 139 | - crypto/certificate_complete_chain.py 140 | - crypto/get_certificate.py 141 | - crypto/luks_device.py 142 | - crypto/openssh_cert.py 143 | - crypto/openssh_keypair.py 144 | - crypto/openssl_* 145 | - crypto/entrust/* 146 | - database/aerospike/aerospike_migrations.py 147 | - database/misc/elasticsearch_plugin.py 148 | - database/misc/kibana_plugin.py 149 | - database/misc/redis.py 150 | - database/misc/riak.py 151 | - database/mongodb/* 152 | - database/mssql/* 153 | - database/mysql/* 154 | - database/postgresql/* 155 | - database/proxysql/* 156 | - database/vertica/* 157 | - files/archive.py 158 | - files/ini_file.py 159 | - files/iso_extract.py 160 | - files/read_csv.py 161 | - files/xml.py 162 | - identity/ipa/* 163 | - identity/_onepassword_facts.py 164 | - identity/onepassword_info.py 165 | - identity/opendj/opendj_backendprop.py 166 | - messaging/rabbitmq/* 167 | - monitoring/airbrake_deployment.py 168 | - monitoring/bigpanda.py 169 | - monitoring/circonus_annotation.py 170 | - monitoring/datadog/* 171 | - monitoring/honeybadger_deployment.py 172 | - monitoring/icinga2_* 173 | - monitoring/librato_annotation.py 174 | - monitoring/logentries.py 175 | - monitoring/logstash_plugin.py 176 | - monitoring/monit.py 177 | - monitoring/pingdom.py 178 | - monitoring/rollbar_deployment.py 179 | - monitoring/sensu/* 180 | - monitoring/spectrum_device.py 181 | - monitoring/stackdriver.py 182 | - monitoring/statusio_maintenance.py 183 | - monitoring/uptimerobot.py 184 | - monitoring/zabbix/* 185 | - net_tools/cloudflare_dns.py 186 | - net_tools/dnsimple.py 187 | - net_tools/dnsmadeeasy.py 188 | - net_tools/haproxy.py 189 | - net_tools/infinity/* 190 | - net_tools/ip_netns.py 191 | - net_tools/ipify_facts.py 192 | - net_tools/ipinfoio_facts.py 193 | - net_tools/ldap/* 194 | - net_tools/lldp.py 195 | - net_tools/netbox/* 196 | - net_tools/netcup_dns.py 197 | - net_tools/nsupdate.py 198 | - net_tools/omapi_host.py 199 | - net_tools/snmp_facts.py 200 | - network/bigswitch/* 201 | - network/cloudvision/* 202 | - network/citrix/* 203 | - network/edgeos/* 204 | - network/edgeswitch/* 205 | - network/eric_eccli/* 206 | - network/fortimanager/* 207 | - network/illumos/* 208 | - network/ingate/* 209 | - network/itential/* 210 | - network/netscaler/* 211 | - network/nos/* 212 | - network/nuage/nuage_vspk.py 213 | - network/onyx/* 214 | - network/opx/* 215 | - network/ordnance/* 216 | - network/radware/* 217 | - network/routeros/* 218 | - network/slxos/* 219 | - notification/bearychat.py 220 | - notification/campfire.py 221 | - notification/catapult.py 222 | - notification/cisco_spark.py 223 | - notification/flowdock.py 224 | - notification/grove.py 225 | - notification/hipchat.py 226 | - notification/jabber.py 227 | - notification/logentries_msg.py 228 | - notification/matrix.py 229 | - notification/mattermost.py 230 | - notification/mqtt.py 231 | - notification/nexmo.py 232 | - notification/office_365_connector_card.py 233 | - notification/pushbullet.py 234 | - notification/pushover.py 235 | - notification/rabbitmq_publish.py 236 | - notification/rocketchat.py 237 | - notification/sendgrid.py 238 | - notification/slack.py 239 | - notification/syslogger.py 240 | - notification/telegram.py 241 | - notification/twilio.py 242 | - notification/typetalk.py 243 | - packaging/language/bower.py 244 | - packaging/language/bundler.py 245 | - packaging/language/composer.py 246 | - packaging/language/cpanm.py 247 | - packaging/language/easy_install.py 248 | - packaging/language/gem.py 249 | - packaging/language/maven_artifact.py 250 | - packaging/language/npm.py 251 | - packaging/language/pear.py 252 | - packaging/language/pip_package_info.py 253 | - packaging/language/yarn.py 254 | - remote_management/cobbler/cobbler_sync.py 255 | - remote_management/cobbler/cobbler_system.py 256 | - remote_management/cpm/cpm_plugconfig.py 257 | - remote_management/cpm/cpm_plugcontrol.py 258 | - remote_management/cpm/cpm_serial_port_config.py 259 | - remote_management/cpm/cpm_serial_port_info.py 260 | - remote_management/cpm/cpm_user.py 261 | - remote_management/foreman/_foreman.py 262 | - remote_management/foreman/_katello.py 263 | - remote_management/imc/imc_rest.py 264 | - remote_management/lxca/lxca_cmms.py 265 | - remote_management/lxca/lxca_nodes.py 266 | - remote_management/manageiq/* 267 | - remote_management/redfish/* 268 | - remote_management/stacki/stacki_host.py 269 | - remote_management/wakeonlan.py 270 | - source_control/bitbucket/* 271 | - source_control/bzr.py 272 | - source_control/git_config.py 273 | - source_control/github/* 274 | - source_control/hg.py 275 | - storage/glusterfs/_gluster_heal_facts.py 276 | - storage/glusterfs/gluster_heal_info.py 277 | - storage/glusterfs/gluster_peer.py 278 | - storage/glusterfs/gluster_volume.py 279 | - storage/vexata/vexata_eg.py 280 | - storage/vexata/vexata_volume.py 281 | - storage/zfs/zfs.py 282 | - storage/zfs/zfs_delegate_admin.py 283 | - storage/zfs/zfs_facts.py 284 | - storage/zfs/zpool_facts.py 285 | - system/_python_requirements_facts.py 286 | - system/awall.py 287 | - system/beadm.py 288 | - system/dconf.py 289 | - system/facter.py 290 | - system/interfaces_file.py 291 | - system/java_cert.py 292 | - system/java_keystore.py 293 | - system/kernel_blacklist.py 294 | - system/make.py 295 | - system/mksysb.py 296 | - system/nosh.py 297 | - system/ohai.py 298 | - system/open_iscsi.py 299 | - system/pamd.py 300 | - system/parted.py 301 | - system/pids.py 302 | - system/puppet.py 303 | - system/python_requirements_info.py 304 | - system/sefcontext.py 305 | - system/selinux_permissive.py 306 | - system/selogin.py 307 | - system/syspatch.py 308 | - system/vdo.py 309 | - system/xfconf.py 310 | - web_infrastructure/_jenkins_job_facts.py 311 | - web_infrastructure/apache2_mod_proxy.py 312 | - web_infrastructure/apache2_module.py 313 | - web_infrastructure/deploy_helper.py 314 | - web_infrastructure/django_manage.py 315 | - web_infrastructure/ejabberd_user.py 316 | - web_infrastructure/gunicorn.py 317 | - web_infrastructure/htpasswd.py 318 | - web_infrastructure/jboss.py 319 | - web_infrastructure/jenkins_job.py 320 | - web_infrastructure/jenkins_job_info.py 321 | - web_infrastructure/jenkins_plugin.py 322 | - web_infrastructure/jenkins_script.py 323 | - web_infrastructure/jira.py 324 | - web_infrastructure/rundeck_acl_policy.py 325 | - web_infrastructure/rundeck_project.py 326 | - web_infrastructure/sophos_utm/* 327 | - web_infrastructure/supervisorctl.py 328 | - web_infrastructure/taiga_issue.py 329 | module_utils: 330 | - cloud.py 331 | - crypto.py 332 | - database.py 333 | - ecs/* 334 | - heroku.py 335 | - ipa.py 336 | - ldap.py 337 | - linode.py 338 | - manageiq.py 339 | - memset.py 340 | - mysql.py 341 | - network/bigswitch/* 342 | - network/fortimanager/* 343 | - network/ingate/* 344 | - net_tools/netbox/* 345 | - network/netscaler/* 346 | - network/nos/* 347 | - network/onyx/* 348 | - network/ordnance/* 349 | - network/slxos/* 350 | - oneandone.py 351 | - online.py 352 | - opennebula.py 353 | - openstack.py 354 | - ovirt.py 355 | - postgres.py 356 | - rax.py 357 | - rabbitmq.py 358 | - redfish_utils.py 359 | - remote_management/dellemc/* 360 | - remote_management/lxca/* 361 | - scaleway.py 362 | - source_control/bitbucket.py 363 | - univention_umc.py 364 | - utm_utils.py 365 | - vca.py 366 | - vexata.py 367 | - xenserver.py 368 | vault: 369 | - '*' 370 | vmware: 371 | connection: 372 | - vmware_tools.py 373 | doc_fragments: 374 | - vmware.py 375 | - vmware_rest_client.py 376 | - VmwareRestModule.py 377 | - VmwareRestModule_filters.py 378 | - VmwareRestModule_full.py 379 | - VmwareRestModule_state.py 380 | inventory: 381 | - vmware_vm_inventory.py 382 | httpapi: 383 | - vmware.py 384 | modules: 385 | - cloud/vmware/* 386 | - cloud/vmware_httpapi/* 387 | module_utils: 388 | - vmware.py 389 | - vmware_spbm.py 390 | - vmware_rest_client.py 391 | - vmware_httpapi/* 392 | -------------------------------------------------------------------------------- /scenarios/bcs/cyberark.yml: -------------------------------------------------------------------------------- 1 | ../common/cyberark.yml -------------------------------------------------------------------------------- /scenarios/bcs/dell.yml: -------------------------------------------------------------------------------- 1 | ../common/dell.yml -------------------------------------------------------------------------------- /scenarios/bcs/extremenetworks.yml: -------------------------------------------------------------------------------- 1 | ../common/extremenetworks.yml -------------------------------------------------------------------------------- /scenarios/bcs/f5networks.yml: -------------------------------------------------------------------------------- 1 | ../common/f5networks.yml -------------------------------------------------------------------------------- /scenarios/bcs/fortinet.yml: -------------------------------------------------------------------------------- 1 | ../common/fortinet.yml -------------------------------------------------------------------------------- /scenarios/bcs/hp.yml: -------------------------------------------------------------------------------- 1 | ../common/hp.yml -------------------------------------------------------------------------------- /scenarios/bcs/hpe.yml: -------------------------------------------------------------------------------- 1 | ../common/hpe.yml -------------------------------------------------------------------------------- /scenarios/bcs/huawei.yml: -------------------------------------------------------------------------------- 1 | ../common/huawei.yml -------------------------------------------------------------------------------- /scenarios/bcs/ibm.yml: -------------------------------------------------------------------------------- 1 | ../common/ibm.yml -------------------------------------------------------------------------------- /scenarios/bcs/infinidat.yml: -------------------------------------------------------------------------------- 1 | ../common/infinidat.yml -------------------------------------------------------------------------------- /scenarios/bcs/influxdata.yml: -------------------------------------------------------------------------------- 1 | ../common/influxdata.yml -------------------------------------------------------------------------------- /scenarios/bcs/infoblox.yml: -------------------------------------------------------------------------------- 1 | ../common/infoblox.yml -------------------------------------------------------------------------------- /scenarios/bcs/junipernetworks.yml: -------------------------------------------------------------------------------- 1 | ../common/junipernetworks.yml -------------------------------------------------------------------------------- /scenarios/bcs/logicmonitor.py: -------------------------------------------------------------------------------- 1 | ../common/logicmonitor.py -------------------------------------------------------------------------------- /scenarios/bcs/nagios.yml: -------------------------------------------------------------------------------- 1 | nagios: 2 | callback: 3 | - nrdp.py 4 | modules: 5 | - monitoring/nagios.py 6 | -------------------------------------------------------------------------------- /scenarios/bcs/netapp.yml: -------------------------------------------------------------------------------- 1 | ../common/netapp.yml -------------------------------------------------------------------------------- /scenarios/bcs/newrelic.yml: -------------------------------------------------------------------------------- 1 | ../common/newrelic.yml -------------------------------------------------------------------------------- /scenarios/bcs/nginx.yml: -------------------------------------------------------------------------------- 1 | ../common/nginx.yml -------------------------------------------------------------------------------- /scenarios/bcs/nokia.yml: -------------------------------------------------------------------------------- 1 | ../common/nokia.yml -------------------------------------------------------------------------------- /scenarios/bcs/oracle.yml: -------------------------------------------------------------------------------- 1 | ../common/oracle.yml -------------------------------------------------------------------------------- /scenarios/bcs/pagerduty.yml: -------------------------------------------------------------------------------- 1 | ../common/pagerduty.yml -------------------------------------------------------------------------------- /scenarios/bcs/paloaltonetworks.yml: -------------------------------------------------------------------------------- 1 | ../common/paloaltonetworks.yml -------------------------------------------------------------------------------- /scenarios/bcs/purestorage.yml: -------------------------------------------------------------------------------- 1 | common: 2 | doc_fragments: 3 | - purestorage.py 4 | module_utils: 5 | - pure.py 6 | array: 7 | modules: 8 | - storage/purestorage/_purefa_* 9 | - storage/purestorage/purefa_* 10 | blade: 11 | modules: 12 | - storage/purestorage/_purefb_* 13 | - storage/purestorage/purefb_* 14 | -------------------------------------------------------------------------------- /scenarios/bcs/servicenow.yml: -------------------------------------------------------------------------------- 1 | ../common/servicenow.yml -------------------------------------------------------------------------------- /scenarios/bcs/vyatta.yml: -------------------------------------------------------------------------------- 1 | vyos: 2 | action: 3 | - vyos.py 4 | cliconf: 5 | - vyos.py 6 | doc_fragments: 7 | - vyos.py 8 | modules: 9 | - network/vyos/* 10 | module_utils: 11 | - network/vyos/* 12 | - network/vyos/*/* 13 | - network/vyos/*/*/* 14 | terminal: 15 | - vyos.py 16 | integration: 17 | - vyos_smoke/*/* 18 | - vyos_smoke/*/*/* 19 | -------------------------------------------------------------------------------- /scenarios/common/README.md: -------------------------------------------------------------------------------- 1 | This is not a scenario, this is mostly a common repository of 'documented manuallly migrated' collections. 2 | 3 | Normally files here are symlinked into other scenarios so each does not have to maintain the same info. 4 | -------------------------------------------------------------------------------- /scenarios/common/a10networks.yml: -------------------------------------------------------------------------------- 1 | _a10: 2 | doc_fragments: 3 | - a10.py 4 | module_utils: 5 | - network/a10/* 6 | modules: 7 | - network/a10/* 8 | -------------------------------------------------------------------------------- /scenarios/common/arista.yml: -------------------------------------------------------------------------------- 1 | _eos: # this is supposition, have arista data on new products but not eos 2 | action: 3 | - eos.py 4 | cliconf: 5 | - eos.py 6 | doc_fragments: 7 | - eos.py 8 | httpapi: 9 | - eos.py 10 | modules: 11 | - network/eos/* 12 | module_utils: 13 | - network/eos/* 14 | - network/eos/*/* 15 | - network/eos/*/*/* 16 | - network/eos/*/*/*/* 17 | - network/eos/*/*/*/*/* 18 | terminal: 19 | - eos.py 20 | -------------------------------------------------------------------------------- /scenarios/common/arubanetworks.yml: -------------------------------------------------------------------------------- 1 | _aruba: 2 | action: 3 | - aruba.py 4 | cliconf: 5 | - aruba.py 6 | doc_fragments: 7 | - aruba.py 8 | module_utils: 9 | - network/aruba/* 10 | modules: 11 | - network/aruba/* 12 | terminal: 13 | - aruba.py 14 | -------------------------------------------------------------------------------- /scenarios/common/avinetworks.yml: -------------------------------------------------------------------------------- 1 | _avi: 2 | doc_fragments: 3 | - avi.py 4 | lookup: 5 | - avi.py 6 | module_utils: 7 | - network/avi/* 8 | modules: 9 | - network/avi/* 10 | -------------------------------------------------------------------------------- /scenarios/common/azure.yml: -------------------------------------------------------------------------------- 1 | _azcollection: 2 | inventory: 3 | - azure_rm.py 4 | doc_fragments: 5 | - azure.py 6 | - azure_tags.py 7 | modules: 8 | - cloud/azure/* 9 | module_utils: 10 | - azure_rm_common.py 11 | - azure_rm_common_ext.py 12 | - azure_rm_common_rest.py 13 | -------------------------------------------------------------------------------- /scenarios/common/check_point.yml: -------------------------------------------------------------------------------- 1 | _mgmt: 2 | httpapi: 3 | - checkpoint.py 4 | doc_fragments: 5 | - checkpoint_*.py 6 | modules: 7 | - network/check_point/* 8 | module_utils: 9 | - network/checkpoint/* 10 | -------------------------------------------------------------------------------- /scenarios/common/cisco.yml: -------------------------------------------------------------------------------- 1 | _aci: 2 | doc_fragments: 3 | - aci.py 4 | - mso.py 5 | modules: 6 | - network/aci/* 7 | module_utils: 8 | - network/aci/* 9 | _asa: 10 | action: 11 | - asa.py 12 | cliconf: 13 | - asa.py 14 | doc_fragments: 15 | - asa.py 16 | module_utils: 17 | - network/asa/* 18 | modules: 19 | - network/asa/* 20 | terminal: 21 | - asa.py 22 | ftd: 23 | httpapi: 24 | - ftd.py 25 | module_utils: 26 | - network/ftd/* 27 | modules: 28 | - network/ftd/* 29 | _ios: 30 | action: 31 | - ios.py 32 | cliconf: 33 | - ios.py 34 | doc_fragments: 35 | - ios.py 36 | modules: 37 | - network/ios/* 38 | module_utils: 39 | - network/ios/* 40 | - network/ios/*/* 41 | - network/ios/*/*/* 42 | - network/ios/*/*/*/* 43 | - network/ios/*/*/*/*/* 44 | terminal: 45 | - ios.py 46 | _iosxr: 47 | action: 48 | - iosxr.py 49 | cliconf: 50 | - iosxr.py 51 | doc_fragments: 52 | - iosxr.py 53 | modules: 54 | - network/iosxr/* 55 | module_utils: 56 | - network/iosxr/* 57 | - network/iosxr/*/* 58 | - network/iosxr/*/*/* 59 | - network/iosxr/*/*/*/* 60 | - network/iosxr/*/*/*/*/* 61 | netconf: 62 | - iosxr.py 63 | terminal: 64 | - iosxr.py 65 | _meraki: 66 | doc_fragments: 67 | - meraki.py 68 | modules: 69 | - network/meraki/* 70 | module_utils: 71 | - network/meraki/* 72 | _nso: 73 | doc_fragments: 74 | - nso.py 75 | modules: 76 | - network/nso/* 77 | module_utils: 78 | - network/nso/* 79 | _nxos: 80 | action: 81 | - nxos.py 82 | doc_fragments: 83 | - nxos.py 84 | modules: 85 | - network/nxos/* 86 | - network/nxos/*/* 87 | module_utils: 88 | - network/nxos/* 89 | - network/nxos/*/* 90 | - network/nxos/*/*/* 91 | terminal: 92 | - nxos.py 93 | _ucs: 94 | doc_fragments: 95 | - ucs.py 96 | module_utils: 97 | - remote_management/ucs.py 98 | modules: 99 | - remote_management/ucs/* 100 | -------------------------------------------------------------------------------- /scenarios/common/cyberark.yml: -------------------------------------------------------------------------------- 1 | _pas: 2 | modules: 3 | - identity/cyberark/* 4 | lookup: 5 | - cyberarkpassword.py 6 | -------------------------------------------------------------------------------- /scenarios/common/dell.yml: -------------------------------------------------------------------------------- 1 | _emc: 2 | doc_fragments: 3 | - emc.py 4 | module_utils: 5 | - storage/emc/* 6 | modules: 7 | - storage/emc/* 8 | - remote_management/dellemc/* 9 | _os6: 10 | action: 11 | - dellos6.py 12 | cliconf: 13 | - dellos6.py 14 | doc_fragments: 15 | - dellos6.py 16 | module_utils: 17 | - network/dellos6/* 18 | modules: 19 | - network/dellos6/* 20 | terminal: 21 | - dellos6.py 22 | _os9: 23 | action: 24 | - dellos9.py 25 | cliconf: 26 | - dellos9.py 27 | doc_fragments: 28 | - dellos9.py 29 | module_utils: 30 | - network/dellos9/* 31 | modules: 32 | - network/dellos9/* 33 | terminal: 34 | - dellos9.py 35 | _os10: 36 | action: 37 | - dellos10.py 38 | cliconf: 39 | - dellos10.py 40 | doc_fragments: 41 | - dellos10.py 42 | module_utils: 43 | - network/dellos10/* 44 | modules: 45 | - network/dellos10/* 46 | terminal: 47 | - dellos10.py 48 | -------------------------------------------------------------------------------- /scenarios/common/extremenetworks.yml: -------------------------------------------------------------------------------- 1 | _exos: 2 | action: 3 | - exos.py 4 | cliconf: 5 | - exos.py 6 | httpapi: 7 | - exos.py 8 | module_utils: 9 | - network/exos/* 10 | - network/exos/*/* 11 | - network/exos/*/*/* 12 | modules: 13 | - network/exos/* 14 | terminal: 15 | - exos.py 16 | _voss: 17 | action: 18 | - voss.py 19 | cliconf: 20 | - voss.py 21 | module_utils: 22 | - network/voss/* 23 | modules: 24 | - network/voss/* 25 | terminal: 26 | - voss.py 27 | -------------------------------------------------------------------------------- /scenarios/common/f5.yml: -------------------------------------------------------------------------------- 1 | common: 2 | doc_fragments: 3 | - f5.py 4 | module_utils: 5 | - network/f5/common.py 6 | - network/f5/compare.py 7 | - network/f5/icontrol.py 8 | - network/f5/ipaddress.py 9 | - network/f5/iworkflow.py 10 | - network/f5/legacy.py 11 | - network/f5/urls.py 12 | bigip: 13 | action: 14 | - bigip.py 15 | modules: 16 | - network/f5/bigip_* 17 | module_utils: 18 | - network/f5/bigip.py 19 | terminal: 20 | - bigip.py 21 | bigiq: 22 | action: 23 | - bigiq.py 24 | module_utils: 25 | - network/f5/bigiq.py 26 | modules: 27 | - network/f5/bigiq_* 28 | -------------------------------------------------------------------------------- /scenarios/common/f5networks.yml: -------------------------------------------------------------------------------- 1 | _f5_modules: 2 | action: 3 | - bigip.py 4 | - bigiq.py 5 | doc_fragments: 6 | - f5.py 7 | module_utils: 8 | - f5_utils.py 9 | - network/f5/* 10 | modules: 11 | - network/f5/* 12 | terminal: 13 | - bigip.py 14 | -------------------------------------------------------------------------------- /scenarios/common/fortinet.yml: -------------------------------------------------------------------------------- 1 | _fortios: 2 | action: 3 | - fortios_config.py 4 | doc_fragments: 5 | - fortios.py 6 | httpapi: 7 | - fortios.py 8 | module_utils: 9 | - network/fortios/* 10 | - network/fortios/*/* 11 | - network/fortios/*/*/* 12 | modules: 13 | - network/fortios/* 14 | -------------------------------------------------------------------------------- /scenarios/common/frrouting.yml: -------------------------------------------------------------------------------- 1 | _frr: 2 | cliconf: 3 | - frr.py 4 | modules: 5 | - network/frr/* 6 | module_utils: 7 | - network/frr/* 8 | - network/frr/*/* 9 | - network/frr/*/*/* 10 | - network/frr/*/*/*/* 11 | - network/frr/*/*/*/*/* 12 | terminal: 13 | - frr.py 14 | -------------------------------------------------------------------------------- /scenarios/common/google.yml: -------------------------------------------------------------------------------- 1 | _cloud: 2 | doc_fragments: 3 | - gcp.py 4 | inventory: 5 | - gcp_compute.py 6 | filter: 7 | - gcp_kms_filters.py 8 | modules: 9 | - cloud/google/* 10 | module_utils: 11 | - gcdns.py 12 | - gce.py 13 | - gcp.py 14 | - gcp_utils.py 15 | lookup: 16 | - gcp_storage_file.py 17 | -------------------------------------------------------------------------------- /scenarios/common/hp.yml: -------------------------------------------------------------------------------- 1 | _ilo: 2 | modules: 3 | - remote_management/hpilo/* 4 | _oneview: 5 | doc_fragments: 6 | - oneview.py 7 | modules: 8 | - remote_management/oneview/* 9 | module_utils: 10 | - oneview.py 11 | -------------------------------------------------------------------------------- /scenarios/common/hpe.yml: -------------------------------------------------------------------------------- 1 | _hpe3par: 2 | doc_fragments: 3 | - hpe3par.py 4 | module_utils: 5 | - storage/hpe3par/* 6 | modules: 7 | - storage/hpe3par/ss_3par_cpg.py 8 | -------------------------------------------------------------------------------- /scenarios/common/huawei.yml: -------------------------------------------------------------------------------- 1 | _cloudengine: 2 | action: 3 | - ce.py 4 | - ce_template.py 5 | cliconf: 6 | - ce.py 7 | doc_fragments: 8 | - ce.py 9 | netconf: 10 | - ce.py 11 | terminal: 12 | - ce.py 13 | module_utils: 14 | - network/cloudengine/* 15 | modules: 16 | - network/cloudengine/* 17 | terminal: 18 | - ce.py 19 | _cloud: 20 | doc_fragments: 21 | - hwc.py 22 | module_utils: 23 | - hwc_utils.py 24 | modules: 25 | - cloud/huawei/* 26 | -------------------------------------------------------------------------------- /scenarios/common/ibm.yml: -------------------------------------------------------------------------------- 1 | _aix: 2 | modules: 3 | - system/aix_*.py 4 | _qradar: 5 | httpapi: 6 | - qradar.py 7 | _storage: 8 | doc_fragments: 9 | - ibm_storage.py 10 | modules: 11 | - storage/ibm/* 12 | -------------------------------------------------------------------------------- /scenarios/common/infinidat.yml: -------------------------------------------------------------------------------- 1 | infinity: 2 | doc_fragments: 3 | - infinibox.py 4 | module_utils: 5 | - infinibox.py 6 | modules: 7 | - storage/infinidat/* 8 | -------------------------------------------------------------------------------- /scenarios/common/influxdata.yml: -------------------------------------------------------------------------------- 1 | _influxdb: 2 | doc_fragments: 3 | - influxdb.py 4 | module_utils: 5 | - influxdb.py 6 | modules: 7 | - database/influxdb/* 8 | -------------------------------------------------------------------------------- /scenarios/common/infoblox.yml: -------------------------------------------------------------------------------- 1 | _nios: # best guess, only hard info is the namespace 2 | doc_fragments: 3 | - nios.py 4 | lookup: 5 | - nios.py 6 | - nios_next_ip.py 7 | - nios_next_network.py 8 | modules: 9 | - net_tools/nios/* 10 | module_utils: 11 | - net_tools/nios/* 12 | -------------------------------------------------------------------------------- /scenarios/common/junipernetworks.yml: -------------------------------------------------------------------------------- 1 | _junos: 2 | action: 3 | - junos.py 4 | cliconf: 5 | - junos.py 6 | doc_fragments: 7 | - junos.py 8 | netconf: 9 | - junos.py 10 | terminal: 11 | - junos.py 12 | modules: 13 | - network/junos/* 14 | module_utils: 15 | - network/junos/* 16 | - network/junos/*/* 17 | - network/junos/*/*/* 18 | -------------------------------------------------------------------------------- /scenarios/common/logicmonitor.yml: -------------------------------------------------------------------------------- 1 | _logicmonitor: 2 | modules: 3 | - monitoring/logicmonitor.py 4 | - monitoring/logicmonitor_facts.py 5 | 6 | -------------------------------------------------------------------------------- /scenarios/common/netapp.yml: -------------------------------------------------------------------------------- 1 | # fragments and module_utils are being copied to both collections, 2 | # since migration wont handle dupes, just assigned to first one for our deps purposes 3 | _ontap: 4 | doc_fragments: 5 | - netapp.py 6 | module_utils: 7 | - netapp.py 8 | - netapp_module.py 9 | - netapp_elementsw_module.py 10 | modules: 11 | - storage/netapp/na_ontap_* 12 | # netapp is ignoring deprecated, but added these here anyways 13 | - storage/netapp/_sf_* 14 | - storage/netapp/_na_ontap_gather_facts.py 15 | _elementsw: 16 | modules: 17 | - storage/netapp/na_elementsw_* 18 | -------------------------------------------------------------------------------- /scenarios/common/newrelic.yml: -------------------------------------------------------------------------------- 1 | _newrelic: 2 | modules: 3 | - monitoring/newrelic_deployment.py 4 | -------------------------------------------------------------------------------- /scenarios/common/nginx.yml: -------------------------------------------------------------------------------- 1 | _nginx: 2 | modules: 3 | - web_infrastructure/_nginx_status_facts.py 4 | - web_infrastructure/nginx_status_info.py 5 | -------------------------------------------------------------------------------- /scenarios/common/nokia.yml: -------------------------------------------------------------------------------- 1 | _sros: 2 | action: 3 | - sros.py 4 | doc_fragments: 5 | - sros.py 6 | modules: 7 | - network/sros/* 8 | module_utils: 9 | - network/sros/* 10 | netconf: 11 | - sros.py 12 | terminal: 13 | - sros.py 14 | -------------------------------------------------------------------------------- /scenarios/common/oracle.yml: -------------------------------------------------------------------------------- 1 | _cloud: 2 | doc_fragments: 3 | - oracle.py 4 | - oracle_*.py 5 | module_utils: 6 | - oracle/* 7 | modules: 8 | - cloud/oracle/oci_vcn.py 9 | -------------------------------------------------------------------------------- /scenarios/common/pagerduty.yml: -------------------------------------------------------------------------------- 1 | _pagerduty: 2 | modules: 3 | - monitoring/pagerduty.py 4 | - monitoring/pagerduty_alert.py 5 | 6 | -------------------------------------------------------------------------------- /scenarios/common/paloaltonetworks.yml: -------------------------------------------------------------------------------- 1 | _panos: 2 | doc_fragments: 3 | - panos.py 4 | module_utils: 5 | - network/panos/* 6 | modules: 7 | - network/panos/* 8 | -------------------------------------------------------------------------------- /scenarios/common/servicenow.yml: -------------------------------------------------------------------------------- 1 | _servicenow: 2 | doc_fragments: 3 | - service_now.py 4 | module_utils: 5 | - service_now.py 6 | modules: 7 | - notification/snow_record.py 8 | - notification/snow_record_find.py 9 | -------------------------------------------------------------------------------- /scenarios/minimal/README.md: -------------------------------------------------------------------------------- 1 | ## Aim 2 | 3 | Incomplete scenario that migrates most things into placeholder collection, hopefully leaving a usable Ansible version, keeps certain things in Core. 4 | 5 | This is *NOT *for final/production use. 6 | 7 | ## How to test 8 | 9 | `ansible-minimal` is built, at least daily, to https://github.com/ansible-collection-migration/ansible-minimal and is installable by doing: 10 | 11 | ```console 12 | pip install git+https://github.com/ansible-collection-migration/ansible-minimal.git 13 | ``` 14 | -------------------------------------------------------------------------------- /scenarios/minimal/ansible.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | action: 3 | - assert.py 4 | - async_status.py 5 | - copy.py 6 | - debug.py 7 | - command.py 8 | - fail.py 9 | - fetch.py 10 | - gather_facts.py 11 | - group_by.py 12 | - include_vars.py 13 | - normal.py 14 | - package.py 15 | - patch.py 16 | - pause.py 17 | - raw.py 18 | - shell.py 19 | - service.py 20 | - reboot.py 21 | - template.py 22 | - uri.py 23 | - yum.py 24 | - wait_for_connection.py 25 | become: 26 | - su.py 27 | - sudo.py 28 | cache: 29 | - jsonfile.py 30 | - memcached.py 31 | - memory.py 32 | - pickle.py 33 | callback: 34 | - __init__.py # has base classes 35 | - default.py 36 | - minimal.py 37 | - oneline.py 38 | - junit.py 39 | - tree.py 40 | connection: 41 | - local.py 42 | - paramiko_ssh.py 43 | - ssh.py 44 | doc_fragments: 45 | - backup.py 46 | - constructed.py 47 | - default_callback.py 48 | - decrypt.py 49 | - files.py 50 | - inventory_cache.py 51 | - return_common.py 52 | - shell_common.py 53 | - url.py 54 | - vars_plugins_staging.py 55 | - validate.py 56 | filter: 57 | - core.py 58 | - mathstuff.py 59 | - urlsplit.py 60 | inventory: 61 | - advanced_host_list.py 62 | - auto.py 63 | - constructed.py 64 | - generator.py 65 | - host_list.py 66 | - ini.py 67 | - script.py 68 | - toml.py 69 | - yaml.py 70 | lookup: 71 | - config.py 72 | - csvfile.py 73 | - dict.py 74 | - env.py 75 | - file.py 76 | - fileglob.py 77 | - first_found.py 78 | - indexed_items.py 79 | - inventory_hostnames.py 80 | - items.py 81 | - lines.py 82 | - list.py 83 | - nested.py 84 | - password.py 85 | - pipe.py 86 | - random_choice.py 87 | - sequence.py 88 | - subelements.py 89 | - together.py 90 | - varnames.py 91 | - vars.py 92 | module_utils: 93 | - _text.py 94 | - ansible_release.py 95 | - api.py 96 | - basic.py 97 | - connection.py 98 | - common/* 99 | - common/text/* 100 | - compat/__init__.py 101 | - compat/paramiko.py 102 | - distro/__init__.py 103 | - facts/__init__.py 104 | - facts/ansible_collector.py 105 | - facts/collector.py 106 | - facts/compat.py 107 | - facts/default_collectors.py 108 | - facts/hardware/* 109 | - facts/namespace.py 110 | - facts/network/* 111 | - facts/other/* 112 | - facts/system/* 113 | - facts/sysctl.py 114 | - facts/packages.py 115 | - facts/timeout.py 116 | - facts/utils.py 117 | - facts/virtual/* 118 | - json_utils.py 119 | - parsing/* 120 | - service.py 121 | - splitter.py 122 | - six/* 123 | - urls.py 124 | - yumdnf.py 125 | modules: 126 | - commands/command.py 127 | - commands/expect.py 128 | - commands/raw.py 129 | - commands/script.py 130 | - commands/shell.py 131 | - files/blockinfile.py 132 | - files/copy.py 133 | - files/fetch.py 134 | - files/file.py 135 | - files/find.py 136 | - files/lineinfile.py 137 | - files/patch.py 138 | - files/replace.py 139 | - files/stat.py 140 | - files/template.py 141 | - inventory/add_host.py 142 | - inventory/group_by.py 143 | - net_tools/basics/get_url.py 144 | - net_tools/basics/slurp.py 145 | - net_tools/basics/uri.py 146 | - notification/irc.py 147 | - notification/jabber.py 148 | - notification/mail.py 149 | - packaging/language/pip.py 150 | - packaging/os/apt.py 151 | - packaging/os/apt_key.py 152 | - packaging/os/apt_repo.py 153 | - packaging/os/apt_repository.py 154 | - packaging/os/dpkg_selections.py 155 | - packaging/os/dnf.py 156 | - packaging/os/package.py 157 | - packaging/os/package_facts.py 158 | - packaging/os/rpm_key.py 159 | - packaging/os/yum.py 160 | - packaging/os/yum_repository.py 161 | - remote_management/ipmi/ipmi_boot.py 162 | - remote_management/ipmi/ipmi_power.py 163 | - source_control/git.py 164 | - source_control/subversion.py 165 | - system/cron.py 166 | - system/debconf.py 167 | - system/firewalld.py 168 | - system/gather_facts.py 169 | - system/getent.py 170 | - system/group.py 171 | - system/hostname.py 172 | - system/iptables.py 173 | - system/ping.py 174 | - system/reboot.py 175 | - system/service.py 176 | - system/service_facts.py 177 | - system/setup.py 178 | - system/systemd.py 179 | - system/sysvinit.py 180 | - system/timezone.py 181 | - system/user.py 182 | - utilities/helper/_accelerate.py 183 | - utilities/helper/meta.py 184 | - utilities/logic/assert.py 185 | - utilities/logic/async_status.py 186 | - utilities/logic/async_wrapper.py 187 | - utilities/logic/debug.py 188 | - utilities/logic/fail.py 189 | - utilities/logic/import_playbook.py 190 | - utilities/logic/import_role.py 191 | - utilities/logic/import_tasks.py 192 | - utilities/logic/include.py 193 | - utilities/logic/include_role.py 194 | - utilities/logic/include_tasks.py 195 | - utilities/logic/include_vars.py 196 | - utilities/logic/pause.py 197 | - utilities/logic/set_fact.py 198 | - utilities/logic/set_stats.py 199 | - utilities/logic/wait_for.py 200 | - utilities/logic/wait_for_connection.py 201 | shell: 202 | - powershell.py 203 | - sh.py 204 | strategy: 205 | - debug.py 206 | - free.py 207 | - host_pinned.py 208 | - linear.py 209 | test: 210 | - core.py 211 | - mathstuff.py 212 | vars: 213 | - host_group_vars.py 214 | -------------------------------------------------------------------------------- /scenarios/mintest/README.md: -------------------------------------------------------------------------------- 1 | ## Aim 2 | 3 | bcoca's opinionated 'minimal' testable Ansible version, keeps certain things in Core that are either required for any Ansible cli to execute or allow minimal configuration of the system to then enable installing collections and/or other content. 4 | 5 | This is *NOT *for final/production use, just meant as a good test bed for manualy migrated collections and to narrow down what core subsystems require to function. 6 | 7 | ## Use Cases 8 | 9 | * `ansible[|-playbook|-galaxy|-pull|-doc]` --help 10 | * Being able to install content from Galaxy or Automation Hub 11 | * `ansible-galaxy collection ...` 12 | * Setup Networking 13 | * Setup Proxy 14 | * Being able to install supported content via packages 15 | * ie RHEL users will not use `ansible-galaxy collection install ...`, they want RPMs 16 | * Ability to setup and use package repos 17 | * Ability to work online or offline 18 | * Include things that are "hardcoded" into Ansible 19 | * eg `stat` is used to handle any file information internally 20 | * `include_tasks` is hardcoded as the implementation is inside the engine, same with `add_hosts`, `group-by`, `debug` and others, async_wrapp, async-poll, assert/fail are 'parts of the language' 21 | -------------------------------------------------------------------------------- /scenarios/mintest/ansible.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | action: 3 | - assert.py 4 | - async_status.py 5 | - copy.py 6 | - debug.py 7 | - command.py 8 | - fail.py 9 | - fetch.py 10 | - gather_facts.py 11 | - group_by.py 12 | - include_vars.py 13 | - normal.py 14 | - package.py 15 | - patch.py 16 | - pause.py 17 | - raw.py 18 | - shell.py 19 | - service.py 20 | - reboot.py 21 | - template.py 22 | - uri.py 23 | - yum.py 24 | - wait_for_connection.py 25 | become: 26 | - su.py 27 | - sudo.py 28 | cache: 29 | - jsonfile.py 30 | - memcached.py 31 | - memory.py 32 | - pickle.py 33 | callback: 34 | - __init__.py # has base classes 35 | - default.py 36 | - minimal.py 37 | - oneline.py 38 | - junit.py 39 | - tree.py 40 | connection: 41 | - local.py 42 | - httpapi.py 43 | - netconf.py 44 | - network_cli.py 45 | - ssh.py 46 | doc_fragments: 47 | - backup.py 48 | - constructed.py 49 | - default_callback.py 50 | - decrypt.py 51 | - files.py 52 | - inventory_cache.py 53 | - return_common.py 54 | - shell_common.py 55 | - url.py 56 | - vars_plugin_staging.py 57 | - validate.py 58 | filter: 59 | - core.py 60 | - mathstuff.py 61 | - urlsplit.py 62 | inventory: 63 | - advanced_host_list.py 64 | - auto.py 65 | - constructed.py 66 | - generator.py 67 | - host_list.py 68 | - ini.py 69 | - script.py 70 | - toml.py 71 | - yaml.py 72 | lookup: 73 | - config.py 74 | - csvfile.py 75 | - dict.py 76 | - env.py 77 | - file.py 78 | - fileglob.py 79 | - first_found.py 80 | - indexed_items.py 81 | - inventory_hostnames.py 82 | - items.py 83 | - lines.py 84 | - list.py 85 | - nested.py 86 | - password.py 87 | - pipe.py 88 | - random_choice.py 89 | - sequence.py 90 | - subelements.py 91 | - together.py 92 | - varnames.py 93 | - vars.py 94 | module_utils: 95 | - _text.py 96 | - ansible_release.py 97 | - api.py 98 | - basic.py 99 | - connection.py 100 | - common/* 101 | - common/text/* 102 | - compat/__init__.py 103 | - compat/paramiko.py 104 | - distro/__init__.py 105 | - distro/_distro.py 106 | - facts/__init__.py 107 | - facts/ansible_collector.py 108 | - facts/collector.py 109 | - facts/compat.py 110 | - facts/default_collectors.py 111 | - facts/hardware/* 112 | - facts/namespace.py 113 | - facts/network/* 114 | - facts/other/* 115 | - facts/system/* 116 | - facts/sysctl.py 117 | - facts/packages.py 118 | - facts/timeout.py 119 | - facts/utils.py 120 | - facts/virtual/* 121 | - json_utils.py 122 | - parsing/* 123 | - service.py 124 | - splitter.py 125 | - six/* 126 | - urls.py 127 | - yumdnf.py 128 | modules: 129 | - commands/command.py 130 | - commands/expect.py 131 | - commands/raw.py 132 | - commands/script.py 133 | - commands/shell.py 134 | - files/blockinfile.py 135 | - files/copy.py 136 | - files/fetch.py 137 | - files/file.py 138 | - files/find.py 139 | - files/lineinfile.py 140 | - files/patch.py 141 | - files/replace.py 142 | - files/stat.py 143 | - files/template.py 144 | - inventory/add_host.py 145 | - inventory/group_by.py 146 | - net_tools/basics/get_url.py 147 | - net_tools/basics/slurp.py 148 | - net_tools/basics/uri.py 149 | - notification/irc.py 150 | - notification/jabber.py 151 | - notification/mail.py 152 | - packaging/language/pip.py 153 | - packaging/os/apt.py 154 | - packaging/os/apt_key.py 155 | - packaging/os/apt_repo.py 156 | - packaging/os/apt_repository.py 157 | - packaging/os/dpkg_selections.py 158 | - packaging/os/dnf.py 159 | - packaging/os/package.py 160 | - packaging/os/package_facts.py 161 | - packaging/os/rpm_key.py 162 | - packaging/os/yum.py 163 | - packaging/os/yum_repository.py 164 | - remote_management/ipmi/ipmi_boot.py 165 | - remote_management/ipmi/ipmi_power.py 166 | - source_control/git.py 167 | - source_control/subversion.py 168 | - system/cron.py 169 | - system/debconf.py 170 | - system/gather_facts.py 171 | - system/getent.py 172 | - system/group.py 173 | - system/hostname.py 174 | - system/iptables.py 175 | - system/ping.py 176 | - system/reboot.py 177 | - system/service.py 178 | - system/service_facts.py 179 | - system/setup.py 180 | - system/systemd.py 181 | - system/sysvinit.py 182 | - system/timezone.py 183 | - system/user.py 184 | - utilities/helper/meta.py 185 | - utilities/logic/assert.py 186 | - utilities/logic/async_status.py 187 | - utilities/logic/async_wrapper.py 188 | - utilities/logic/debug.py 189 | - utilities/logic/fail.py 190 | - utilities/logic/import_playbook.py 191 | - utilities/logic/import_role.py 192 | - utilities/logic/import_tasks.py 193 | - utilities/logic/include.py 194 | - utilities/logic/include_role.py 195 | - utilities/logic/include_tasks.py 196 | - utilities/logic/include_vars.py 197 | - utilities/logic/pause.py 198 | - utilities/logic/set_fact.py 199 | - utilities/logic/set_stats.py 200 | - utilities/logic/wait_for.py 201 | - utilities/logic/wait_for_connection.py 202 | shell: 203 | - powershell.py 204 | - sh.py 205 | strategy: 206 | - debug.py 207 | - free.py 208 | - host_pinned.py 209 | - linear.py 210 | test: 211 | - core.py 212 | - mathstuff.py 213 | vars: 214 | - host_group_vars.py 215 | -------------------------------------------------------------------------------- /scenarios/networking/ansible.yml: -------------------------------------------------------------------------------- 1 | ../nwo/ansible.yml -------------------------------------------------------------------------------- /scenarios/networking/arista.yml: -------------------------------------------------------------------------------- 1 | ../nwo/arista.yml -------------------------------------------------------------------------------- /scenarios/networking/cisco.yml: -------------------------------------------------------------------------------- 1 | ../nwo/cisco.yml -------------------------------------------------------------------------------- /scenarios/networking/junipernetworks.yml: -------------------------------------------------------------------------------- 1 | ../nwo/junipernetworks.yml -------------------------------------------------------------------------------- /scenarios/networking/vyos.yml: -------------------------------------------------------------------------------- 1 | ../nwo/vyos.yml -------------------------------------------------------------------------------- /scenarios/newworld/README.md: -------------------------------------------------------------------------------- 1 | Translation from a proposed spreadsheet, not really in use. 2 | -------------------------------------------------------------------------------- /scenarios/nwo/ansible.yml: -------------------------------------------------------------------------------- 1 | amazon: 2 | action: 3 | - aws_s3.py 4 | callback: 5 | - aws_resource_actions.py 6 | doc_fragments: 7 | - aws.py 8 | - aws_credentials.py 9 | - aws_region.py 10 | - ec2.py 11 | inventory: 12 | - aws_ec2.py 13 | - aws_rds.py 14 | lookup: 15 | - aws_account_attribute.py 16 | - aws_secret.py 17 | - aws_service_ip_ranges.py 18 | - aws_ssm.py 19 | module_utils: 20 | - aws/__init__.py 21 | - aws/acm.py 22 | - aws/batch.py 23 | - aws/cloudfront_facts.py 24 | - aws/core.py 25 | - aws/direct_connect.py 26 | - aws/elb_utils.py 27 | - aws/elbv2.py 28 | - aws/iam.py 29 | - aws/rds.py 30 | - aws/s3.py 31 | - aws/urls.py 32 | - aws/waf.py 33 | - aws/waiters.py 34 | - ec2.py 35 | modules: 36 | - cloud/amazon/_aws_az_facts.py 37 | - cloud/amazon/_aws_caller_facts.py 38 | - cloud/amazon/_cloudformation_facts.py 39 | - cloud/amazon/_ec2_ami_facts.py 40 | - cloud/amazon/_ec2_eni_facts.py 41 | - cloud/amazon/_ec2_group_facts.py 42 | - cloud/amazon/_ec2_snapshot_facts.py 43 | - cloud/amazon/_ec2_vol_facts.py 44 | - cloud/amazon/_ec2_vpc_dhcp_option_facts.py 45 | - cloud/amazon/_ec2_vpc_net_facts.py 46 | - cloud/amazon/_ec2_vpc_subnet_facts.py 47 | - cloud/amazon/aws_az_info.py 48 | - cloud/amazon/aws_caller_info.py 49 | - cloud/amazon/aws_s3.py 50 | - cloud/amazon/cloudformation.py 51 | - cloud/amazon/cloudformation_info.py 52 | - cloud/amazon/ec2.py 53 | - cloud/amazon/ec2_ami.py 54 | - cloud/amazon/ec2_ami_info.py 55 | - cloud/amazon/ec2_elb_lb.py 56 | - cloud/amazon/ec2_eni.py 57 | - cloud/amazon/ec2_eni_info.py 58 | - cloud/amazon/ec2_group.py 59 | - cloud/amazon/ec2_group_info.py 60 | - cloud/amazon/ec2_key.py 61 | - cloud/amazon/ec2_metadata_facts.py 62 | - cloud/amazon/ec2_snapshot.py 63 | - cloud/amazon/ec2_snapshot_info.py 64 | - cloud/amazon/ec2_tag.py 65 | - cloud/amazon/ec2_tag_info.py 66 | - cloud/amazon/ec2_vol.py 67 | - cloud/amazon/ec2_vol_info.py 68 | - cloud/amazon/ec2_vpc_dhcp_option.py 69 | - cloud/amazon/ec2_vpc_dhcp_option_info.py 70 | - cloud/amazon/ec2_vpc_net.py 71 | - cloud/amazon/ec2_vpc_net_info.py 72 | - cloud/amazon/ec2_vpc_subnet.py 73 | - cloud/amazon/ec2_vpc_subnet_info.py 74 | - cloud/amazon/s3_bucket.py 75 | unit: 76 | - module_utils/aws/test_aws_module.py 77 | 78 | _core: 79 | action: 80 | - __init__.py 81 | - add_host.py 82 | - assemble.py 83 | - assert.py 84 | - async_status.py 85 | - command.py 86 | - copy.py 87 | - debug.py 88 | - fail.py 89 | - fetch.py 90 | - gather_facts.py 91 | - group_by.py 92 | - include_vars.py 93 | - normal.py 94 | - package.py 95 | - pause.py 96 | - raw.py 97 | - reboot.py 98 | - script.py 99 | - service.py 100 | - set_fact.py 101 | - set_stats.py 102 | - shell.py 103 | - template.py 104 | - unarchive.py 105 | - uri.py 106 | - wait_for_connection.py 107 | - yum.py 108 | become: 109 | - __init__.py 110 | - runas.py 111 | - su.py 112 | - sudo.py 113 | cache: 114 | - __init__.py 115 | - base.py 116 | - memory.py 117 | callback: 118 | - __init__.py 119 | - default.py 120 | - junit.py 121 | - minimal.py 122 | - oneline.py 123 | - tree.py 124 | cliconf: 125 | - __init__.py 126 | connection: 127 | - __init__.py 128 | - local.py 129 | - paramiko_ssh.py 130 | - psrp.py 131 | - ssh.py 132 | - winrm.py 133 | doc_fragments: 134 | - __init__.py 135 | - backup.py 136 | - constructed.py 137 | - decrypt.py 138 | - default_callback.py 139 | - files.py 140 | - inventory_cache.py 141 | - return_common.py 142 | - shell_common.py 143 | - shell_windows.py 144 | - template_common.py 145 | - url.py 146 | - validate.py 147 | - vars_plugin_staging.py 148 | filter: 149 | - __init__.py 150 | - core.py 151 | - mathstuff.py 152 | - urls.py 153 | - urlsplit.py 154 | httpapi: 155 | - __init__.py 156 | inventory: 157 | - __init__.py 158 | - advanced_host_list.py 159 | - auto.py 160 | - constructed.py 161 | - generator.py 162 | - host_list.py 163 | - ini.py 164 | - script.py 165 | - toml.py 166 | - yaml.py 167 | lookup: 168 | - __init__.py 169 | - config.py 170 | - csvfile.py 171 | - dict.py 172 | - env.py 173 | - file.py 174 | - fileglob.py 175 | - first_found.py 176 | - indexed_items.py 177 | - ini.py 178 | - inventory_hostnames.py 179 | - items.py 180 | - lines.py 181 | - list.py 182 | - nested.py 183 | - password.py 184 | - pipe.py 185 | - random_choice.py 186 | - sequence.py 187 | - subelements.py 188 | - template.py 189 | - together.py 190 | - url.py 191 | - varnames.py 192 | - vars.py 193 | module_utils: 194 | - __init__.py 195 | - _text.py 196 | - ansible_release.py 197 | - api.py 198 | - basic.py 199 | - common/__init__.py 200 | - common/_collections_compat.py 201 | - common/_json_compat.py 202 | - common/_utils.py 203 | - common/collections.py 204 | - common/dict_transformations.py 205 | - common/file.py 206 | - common/json.py 207 | - common/network.py 208 | - common/parameters.py 209 | - common/process.py 210 | - common/removed.py 211 | - common/sys_info.py 212 | - common/text/__init__.py 213 | - common/text/converters.py 214 | - common/text/formatters.py 215 | - common/validation.py 216 | - common/warnings.py 217 | - compat/__init__.py 218 | - compat/paramiko.py 219 | - connection.py 220 | - csharp/Ansible.AccessToken.cs 221 | - csharp/Ansible.Basic.cs 222 | - csharp/Ansible.Become.cs 223 | - csharp/Ansible.Privilege.cs 224 | - csharp/Ansible.Process.cs 225 | - csharp/__init__.py 226 | - distro/* 227 | - facts/__init__.py 228 | - facts/ansible_collector.py 229 | - facts/collector.py 230 | - facts/compat.py 231 | - facts/default_collectors.py 232 | - facts/hardware/__init__.py 233 | - facts/hardware/aix.py 234 | - facts/hardware/base.py 235 | - facts/hardware/darwin.py 236 | - facts/hardware/dragonfly.py 237 | - facts/hardware/freebsd.py 238 | - facts/hardware/hpux.py 239 | - facts/hardware/hurd.py 240 | - facts/hardware/linux.py 241 | - facts/hardware/netbsd.py 242 | - facts/hardware/openbsd.py 243 | - facts/hardware/sunos.py 244 | - facts/namespace.py 245 | - facts/network/__init__.py 246 | - facts/network/aix.py 247 | - facts/network/base.py 248 | - facts/network/darwin.py 249 | - facts/network/dragonfly.py 250 | - facts/network/fc_wwn.py 251 | - facts/network/freebsd.py 252 | - facts/network/generic_bsd.py 253 | - facts/network/hpux.py 254 | - facts/network/hurd.py 255 | - facts/network/iscsi.py 256 | - facts/network/linux.py 257 | - facts/network/netbsd.py 258 | - facts/network/nvme.py 259 | - facts/network/openbsd.py 260 | - facts/network/sunos.py 261 | - facts/other/__init__.py 262 | - facts/other/facter.py 263 | - facts/other/ohai.py 264 | - facts/packages.py 265 | - facts/sysctl.py 266 | - facts/system/__init__.py 267 | - facts/system/apparmor.py 268 | - facts/system/caps.py 269 | - facts/system/chroot.py 270 | - facts/system/cmdline.py 271 | - facts/system/date_time.py 272 | - facts/system/distribution.py 273 | - facts/system/dns.py 274 | - facts/system/env.py 275 | - facts/system/fips.py 276 | - facts/system/local.py 277 | - facts/system/lsb.py 278 | - facts/system/pkg_mgr.py 279 | - facts/system/platform.py 280 | - facts/system/python.py 281 | - facts/system/selinux.py 282 | - facts/system/service_mgr.py 283 | - facts/system/ssh_pub_keys.py 284 | - facts/system/user.py 285 | - facts/timeout.py 286 | - facts/utils.py 287 | - facts/virtual/__init__.py 288 | - facts/virtual/base.py 289 | - facts/virtual/dragonfly.py 290 | - facts/virtual/freebsd.py 291 | - facts/virtual/hpux.py 292 | - facts/virtual/linux.py 293 | - facts/virtual/netbsd.py 294 | - facts/virtual/openbsd.py 295 | - facts/virtual/sunos.py 296 | - facts/virtual/sysctl.py 297 | - json_utils.py 298 | - parsing/__init__.py 299 | - parsing/convert_bool.py 300 | - powershell/Ansible.ModuleUtils.AddType.psm1 301 | - powershell/Ansible.ModuleUtils.ArgvParser.psm1 302 | - powershell/Ansible.ModuleUtils.Backup.psm1 303 | - powershell/Ansible.ModuleUtils.CamelConversion.psm1 304 | - powershell/Ansible.ModuleUtils.CommandUtil.psm1 305 | - powershell/Ansible.ModuleUtils.FileUtil.psm1 306 | - powershell/Ansible.ModuleUtils.Legacy.psm1 307 | - powershell/Ansible.ModuleUtils.LinkUtil.psm1 308 | - powershell/Ansible.ModuleUtils.PrivilegeUtil.psm1 309 | - powershell/Ansible.ModuleUtils.SID.psm1 310 | - powershell/Ansible.ModuleUtils.WebRequest.psm1 311 | - powershell/__init__.py 312 | - pycompat24.py 313 | - service.py 314 | - six/* 315 | - splitter.py 316 | - urls.py 317 | - yumdnf.py 318 | modules: 319 | - __init__.py 320 | - commands/command.py 321 | - commands/expect.py 322 | - commands/raw.py 323 | - commands/script.py 324 | - commands/shell.py 325 | - files/assemble.py 326 | - files/blockinfile.py 327 | - files/copy.py 328 | - files/fetch.py 329 | - files/file.py 330 | - files/find.py 331 | - files/lineinfile.py 332 | - files/replace.py 333 | - files/stat.py 334 | - files/tempfile.py 335 | - files/template.py 336 | - files/unarchive.py 337 | - inventory/add_host.py 338 | - inventory/group_by.py 339 | - net_tools/basics/get_url.py 340 | - net_tools/basics/slurp.py 341 | - net_tools/basics/uri.py 342 | - packaging/language/pip.py 343 | - packaging/os/apt.py 344 | - packaging/os/apt_key.py 345 | - packaging/os/apt_repo.py 346 | - packaging/os/apt_repository.py 347 | - packaging/os/dnf.py 348 | - packaging/os/dpkg_selections.py 349 | - packaging/os/package.py 350 | - packaging/os/package_facts.py 351 | - packaging/os/rpm_key.py 352 | - packaging/os/yum.py 353 | - packaging/os/yum_repository.py 354 | - source_control/git.py 355 | - source_control/subversion.py 356 | - system/cron.py 357 | - system/debconf.py 358 | - system/gather_facts.py 359 | - system/getent.py 360 | - system/group.py 361 | - system/hostname.py 362 | - system/iptables.py 363 | - system/known_hosts.py 364 | - system/ping.py 365 | - system/reboot.py 366 | - system/service.py 367 | - system/service_facts.py 368 | - system/setup.py 369 | - system/systemd.py 370 | - system/sysvinit.py 371 | - system/user.py 372 | - utilities/helper/meta.py 373 | - utilities/logic/assert.py 374 | - utilities/logic/async_status.py 375 | - utilities/logic/async_wrapper.py 376 | - utilities/logic/debug.py 377 | - utilities/logic/fail.py 378 | - utilities/logic/import_playbook.py 379 | - utilities/logic/import_role.py 380 | - utilities/logic/import_tasks.py 381 | - utilities/logic/include.py 382 | - utilities/logic/include_role.py 383 | - utilities/logic/include_tasks.py 384 | - utilities/logic/include_vars.py 385 | - utilities/logic/pause.py 386 | - utilities/logic/set_fact.py 387 | - utilities/logic/set_stats.py 388 | - utilities/logic/wait_for.py 389 | - utilities/logic/wait_for_connection.py 390 | netconf: 391 | - __init__.py 392 | shell: 393 | - __init__.py 394 | - cmd.py 395 | - powershell.py 396 | - sh.py 397 | strategy: 398 | - __init__.py 399 | - debug.py 400 | - free.py 401 | - host_pinned.py 402 | - linear.py 403 | terminal: 404 | - __init__.py 405 | test: 406 | - __init__.py 407 | - core.py 408 | - files.py 409 | - mathstuff.py 410 | vars: 411 | - __init__.py 412 | - host_group_vars.py 413 | netcommon: 414 | action: 415 | - cli_command.py 416 | - cli_config.py 417 | - net_* 418 | - netconf.py 419 | - network.py 420 | - telnet.py 421 | become: 422 | - enable.py 423 | connection: 424 | - httpapi.py 425 | - napalm.py 426 | - netconf.py 427 | - network_cli.py 428 | - persistent.py 429 | doc_fragments: 430 | - netconf.py 431 | - network_agnostic.py 432 | filter: 433 | - ipaddr.py 434 | - network.py 435 | httpapi: 436 | - restconf.py 437 | module_utils: 438 | - compat/ipaddress.py 439 | - network/common/* 440 | - network/common/*/* 441 | - network/netconf/* 442 | - network/restconf/* 443 | modules: 444 | - commands/telnet.py 445 | - network/cli/* 446 | - network/files/* 447 | - network/interface/* 448 | - network/layer2/* 449 | - network/layer3/* 450 | - network/netconf/* 451 | - network/protocol/* 452 | - network/restconf/* 453 | - network/routing/* 454 | - network/system/* 455 | netconf: 456 | - default.py 457 | posix: 458 | action: 459 | - patch.py 460 | - synchronize.py 461 | callback: 462 | - cgroup_perf_recap.py 463 | - debug.py 464 | - json.py 465 | - profile_roles.py 466 | - profile_tasks.py 467 | - skippy.py 468 | - timer.py 469 | module_utils: 470 | - ismount.py 471 | modules: 472 | - files/acl.py 473 | - files/synchronize.py 474 | - system/at.py 475 | - system/authorized_key.py 476 | - system/mount.py 477 | - system/seboolean.py 478 | - system/selinux.py 479 | - system/sysctl.py 480 | shell: 481 | - csh.py 482 | - fish.py 483 | windows: 484 | action: 485 | - win_copy.py 486 | - win_reboot.py 487 | - win_template.py 488 | - win_updates.py 489 | doc_fragments: 490 | - url_windows.py 491 | integration: 492 | - win_setup/* 493 | - win_setup/*/* 494 | - win_slurp/* 495 | - win_slurp/*/* 496 | module_utils: 497 | - csharp/Ansible.Service.cs 498 | modules: 499 | - windows/async_status.ps1 500 | - windows/setup.ps1 501 | - windows/slurp.ps1 502 | - windows/win_acl.ps1 503 | - windows/win_acl.py 504 | - windows/win_acl_inheritance.ps1 505 | - windows/win_acl_inheritance.py 506 | - windows/win_certificate_store.ps1 507 | - windows/win_certificate_store.py 508 | - windows/win_command.ps1 509 | - windows/win_command.py 510 | - windows/win_copy.ps1 511 | - windows/win_copy.py 512 | - windows/win_dns_client.ps1 513 | - windows/win_dns_client.py 514 | - windows/win_domain.ps1 515 | - windows/win_domain.py 516 | - windows/win_domain_controller.ps1 517 | - windows/win_domain_controller.py 518 | - windows/win_domain_membership.ps1 519 | - windows/win_domain_membership.py 520 | - windows/win_dsc.ps1 521 | - windows/win_dsc.py 522 | - windows/win_environment.ps1 523 | - windows/win_environment.py 524 | - windows/win_feature.ps1 525 | - windows/win_feature.py 526 | - windows/win_file.ps1 527 | - windows/win_file.py 528 | - windows/win_find.ps1 529 | - windows/win_find.py 530 | - windows/win_get_url.ps1 531 | - windows/win_get_url.py 532 | - windows/win_group.ps1 533 | - windows/win_group.py 534 | - windows/win_group_membership.ps1 535 | - windows/win_group_membership.py 536 | - windows/win_hostname.ps1 537 | - windows/win_hostname.py 538 | - windows/win_optional_feature.ps1 539 | - windows/win_optional_feature.py 540 | - windows/win_owner.ps1 541 | - windows/win_owner.py 542 | - windows/win_package.ps1 543 | - windows/win_package.py 544 | - windows/win_path.ps1 545 | - windows/win_path.py 546 | - windows/win_ping.ps1 547 | - windows/win_ping.py 548 | - windows/win_reboot.py 549 | - windows/win_reg_stat.ps1 550 | - windows/win_reg_stat.py 551 | - windows/win_regedit.ps1 552 | - windows/win_regedit.py 553 | - windows/win_service.ps1 554 | - windows/win_service.py 555 | - windows/win_service_info.ps1 556 | - windows/win_service_info.py 557 | - windows/win_share.ps1 558 | - windows/win_share.py 559 | - windows/win_shell.ps1 560 | - windows/win_shell.py 561 | - windows/win_stat.ps1 562 | - windows/win_stat.py 563 | - windows/win_tempfile.ps1 564 | - windows/win_tempfile.py 565 | - windows/win_template.py 566 | - windows/win_updates.ps1 567 | - windows/win_updates.py 568 | - windows/win_uri.ps1 569 | - windows/win_uri.py 570 | - windows/win_user.ps1 571 | - windows/win_user.py 572 | - windows/win_user_right.ps1 573 | - windows/win_user_right.py 574 | - windows/win_wait_for.ps1 575 | - windows/win_wait_for.py 576 | - windows/win_whoami.ps1 577 | - windows/win_whoami.py 578 | -------------------------------------------------------------------------------- /scenarios/nwo/arista.yml: -------------------------------------------------------------------------------- 1 | eos: 2 | action: 3 | - eos.py 4 | cliconf: 5 | - eos.py 6 | doc_fragments: 7 | - eos.py 8 | httpapi: 9 | - eos.py 10 | integration: 11 | - eos_*/* 12 | - eos_*/*/* 13 | - eos_*/*/*/* 14 | module_utils: 15 | - network/eos/* 16 | - network/eos/*/* 17 | - network/eos/*/*/* 18 | - network/eos/*/*/*/* 19 | - network/eos/*/*/*/*/* 20 | modules: 21 | - network/eos/* 22 | terminal: 23 | - eos.py 24 | -------------------------------------------------------------------------------- /scenarios/nwo/awx.yml: -------------------------------------------------------------------------------- 1 | awx: 2 | doc_fragments: 3 | - tower.py 4 | inventory: 5 | - tower.py 6 | module_utils: 7 | - ansible_tower.py 8 | modules: 9 | - web_infrastructure/ansible_tower/__init__.py 10 | - web_infrastructure/ansible_tower/tower_credential.py 11 | - web_infrastructure/ansible_tower/tower_credential_type.py 12 | - web_infrastructure/ansible_tower/tower_group.py 13 | - web_infrastructure/ansible_tower/tower_host.py 14 | - web_infrastructure/ansible_tower/tower_inventory.py 15 | - web_infrastructure/ansible_tower/tower_inventory_source.py 16 | - web_infrastructure/ansible_tower/tower_job_cancel.py 17 | - web_infrastructure/ansible_tower/tower_job_launch.py 18 | - web_infrastructure/ansible_tower/tower_job_list.py 19 | - web_infrastructure/ansible_tower/tower_job_template.py 20 | - web_infrastructure/ansible_tower/tower_job_wait.py 21 | - web_infrastructure/ansible_tower/tower_label.py 22 | - web_infrastructure/ansible_tower/tower_notification.py 23 | - web_infrastructure/ansible_tower/tower_organization.py 24 | - web_infrastructure/ansible_tower/tower_project.py 25 | - web_infrastructure/ansible_tower/tower_receive.py 26 | - web_infrastructure/ansible_tower/tower_role.py 27 | - web_infrastructure/ansible_tower/tower_send.py 28 | - web_infrastructure/ansible_tower/tower_settings.py 29 | - web_infrastructure/ansible_tower/tower_team.py 30 | - web_infrastructure/ansible_tower/tower_user.py 31 | - web_infrastructure/ansible_tower/tower_workflow_launch.py 32 | - web_infrastructure/ansible_tower/tower_workflow_template.py 33 | -------------------------------------------------------------------------------- /scenarios/nwo/azure.yml: -------------------------------------------------------------------------------- 1 | azcollection: 2 | inventory: 3 | - azure_rm.py 4 | module_utils: 5 | - azure_rm_common.py 6 | - azure_rm_common_ext.py 7 | - azure_rm_common_rest.py 8 | modules: 9 | - cloud/azure/azure_rm_acs.py 10 | - cloud/azure/azure_rm_virtualmachine_info.py 11 | - cloud/azure/azure_rm_dnsrecordset_info.py 12 | - cloud/azure/azure_rm_dnszone_info.py 13 | - cloud/azure/azure_rm_networkinterface_info.py 14 | - cloud/azure/azure_rm_publicipaddress_info.py 15 | - cloud/azure/azure_rm_securitygroup_info.py 16 | - cloud/azure/azure_rm_storageaccount_info.py 17 | - cloud/azure/azure_rm_virtualnetwork_info.py 18 | - cloud/azure/azure_rm_deployment.py 19 | - cloud/azure/azure_rm_dnsrecordset.py 20 | - cloud/azure/azure_rm_dnszone.py 21 | - cloud/azure/azure_rm_networkinterface.py 22 | - cloud/azure/azure_rm_publicipaddress.py 23 | - cloud/azure/azure_rm_securitygroup.py 24 | - cloud/azure/azure_rm_storageaccount.py 25 | - cloud/azure/azure_rm_subnet.py 26 | - cloud/azure/azure_rm_virtualmachine.py 27 | - cloud/azure/azure_rm_virtualnetwork.py 28 | - cloud/azure/azure_rm_aks.py 29 | - cloud/azure/azure_rm_aks_info.py 30 | - cloud/azure/azure_rm_aksversion_info.py 31 | - cloud/azure/azure_rm_appgateway.py 32 | - cloud/azure/azure_rm_applicationsecuritygroup.py 33 | - cloud/azure/azure_rm_applicationsecuritygroup_info.py 34 | - cloud/azure/azure_rm_appserviceplan.py 35 | - cloud/azure/azure_rm_appserviceplan_info.py 36 | - cloud/azure/azure_rm_availabilityset.py 37 | - cloud/azure/azure_rm_availabilityset_info.py 38 | - cloud/azure/azure_rm_containerinstance.py 39 | - cloud/azure/azure_rm_containerinstance_info.py 40 | - cloud/azure/azure_rm_containerregistry.py 41 | - cloud/azure/azure_rm_containerregistry_info.py 42 | - cloud/azure/azure_rm_deployment_info.py 43 | - cloud/azure/azure_rm_functionapp.py 44 | - cloud/azure/azure_rm_functionapp_info.py 45 | - cloud/azure/azure_rm_gallery.py 46 | - cloud/azure/azure_rm_gallery_info.py 47 | - cloud/azure/azure_rm_galleryimage.py 48 | - cloud/azure/azure_rm_galleryimage_info.py 49 | - cloud/azure/azure_rm_galleryimageversion.py 50 | - cloud/azure/azure_rm_galleryimageversion_info.py 51 | - cloud/azure/azure_rm_image.py 52 | - cloud/azure/azure_rm_image_info.py 53 | - cloud/azure/azure_rm_keyvault.py 54 | - cloud/azure/azure_rm_keyvault_info.py 55 | - cloud/azure/azure_rm_keyvaultkey.py 56 | - cloud/azure/azure_rm_keyvaultkey_info.py 57 | - cloud/azure/azure_rm_keyvaultsecret.py 58 | - cloud/azure/azure_rm_manageddisk.py 59 | - cloud/azure/azure_rm_manageddisk_info.py 60 | - cloud/azure/azure_rm_resource.py 61 | - cloud/azure/azure_rm_resource_info.py 62 | - cloud/azure/azure_rm_resourcegroup.py 63 | - cloud/azure/azure_rm_resourcegroup_info.py 64 | - cloud/azure/azure_rm_snapshot.py 65 | - cloud/azure/azure_rm_storageblob.py 66 | - cloud/azure/azure_rm_subnet_info.py 67 | - cloud/azure/azure_rm_virtualmachineextension.py 68 | - cloud/azure/azure_rm_virtualmachineextension_info.py 69 | - cloud/azure/azure_rm_virtualmachineimage_info.py 70 | - cloud/azure/azure_rm_virtualmachinescaleset.py 71 | - cloud/azure/azure_rm_virtualmachinescaleset_info.py 72 | - cloud/azure/azure_rm_virtualmachinescalesetextension.py 73 | - cloud/azure/azure_rm_virtualmachinescalesetextension_info.py 74 | - cloud/azure/azure_rm_virtualmachinescalesetinstance.py 75 | - cloud/azure/azure_rm_virtualmachinescalesetinstance_info.py 76 | - cloud/azure/azure_rm_webapp.py 77 | - cloud/azure/azure_rm_webapp_info.py 78 | - cloud/azure/azure_rm_webappslot.py 79 | - cloud/azure/azure_rm_automationaccount.py 80 | - cloud/azure/azure_rm_automationaccount_info.py 81 | - cloud/azure/azure_rm_autoscale.py 82 | - cloud/azure/azure_rm_autoscale_info.py 83 | - cloud/azure/azure_rm_azurefirewall.py 84 | - cloud/azure/azure_rm_azurefirewall_info.py 85 | - cloud/azure/azure_rm_batchaccount.py 86 | - cloud/azure/azure_rm_cdnendpoint.py 87 | - cloud/azure/azure_rm_cdnendpoint_info.py 88 | - cloud/azure/azure_rm_cdnprofile.py 89 | - cloud/azure/azure_rm_cdnprofile_info.py 90 | - cloud/azure/azure_rm_iotdevice.py 91 | - cloud/azure/azure_rm_iotdevice_info.py 92 | - cloud/azure/azure_rm_iotdevicemodule.py 93 | - cloud/azure/azure_rm_iothub.py 94 | - cloud/azure/azure_rm_iothub_info.py 95 | - cloud/azure/azure_rm_iothubconsumergroup.py 96 | - cloud/azure/azure_rm_loadbalancer.py 97 | - cloud/azure/azure_rm_loadbalancer_info.py 98 | - cloud/azure/azure_rm_lock.py 99 | - cloud/azure/azure_rm_lock_info.py 100 | - cloud/azure/azure_rm_loganalyticsworkspace.py 101 | - cloud/azure/azure_rm_loganalyticsworkspace_info.py 102 | - cloud/azure/azure_rm_monitorlogprofile.py 103 | - cloud/azure/azure_rm_rediscache.py 104 | - cloud/azure/azure_rm_rediscache_info.py 105 | - cloud/azure/azure_rm_rediscachefirewallrule.py 106 | - cloud/azure/azure_rm_roleassignment.py 107 | - cloud/azure/azure_rm_roleassignment_info.py 108 | - cloud/azure/azure_rm_roledefinition.py 109 | - cloud/azure/azure_rm_roledefinition_info.py 110 | - cloud/azure/azure_rm_route.py 111 | - cloud/azure/azure_rm_routetable.py 112 | - cloud/azure/azure_rm_routetable_info.py 113 | - cloud/azure/azure_rm_servicebus.py 114 | - cloud/azure/azure_rm_servicebus_info.py 115 | - cloud/azure/azure_rm_servicebusqueue.py 116 | - cloud/azure/azure_rm_servicebussaspolicy.py 117 | - cloud/azure/azure_rm_servicebustopic.py 118 | - cloud/azure/azure_rm_servicebustopicsubscription.py 119 | - cloud/azure/azure_rm_trafficmanagerendpoint.py 120 | - cloud/azure/azure_rm_trafficmanagerendpoint_info.py 121 | - cloud/azure/azure_rm_trafficmanagerprofile.py 122 | - cloud/azure/azure_rm_trafficmanagerprofile_info.py 123 | - cloud/azure/azure_rm_virtualnetworkgateway.py 124 | - cloud/azure/azure_rm_virtualnetworkpeering.py 125 | - cloud/azure/azure_rm_virtualnetworkpeering_info.py 126 | - cloud/azure/azure_rm_cosmosdbaccount.py 127 | - cloud/azure/azure_rm_cosmosdbaccount_info.py 128 | - cloud/azure/azure_rm_devtestlab.py 129 | - cloud/azure/azure_rm_devtestlab_info.py 130 | - cloud/azure/azure_rm_devtestlabarmtemplate_info.py 131 | - cloud/azure/azure_rm_devtestlabartifact_info.py 132 | - cloud/azure/azure_rm_devtestlabartifactsource.py 133 | - cloud/azure/azure_rm_devtestlabartifactsource_info.py 134 | - cloud/azure/azure_rm_devtestlabcustomimage.py 135 | - cloud/azure/azure_rm_devtestlabcustomimage_info.py 136 | - cloud/azure/azure_rm_devtestlabenvironment.py 137 | - cloud/azure/azure_rm_devtestlabenvironment_info.py 138 | - cloud/azure/azure_rm_devtestlabpolicy.py 139 | - cloud/azure/azure_rm_devtestlabpolicy_info.py 140 | - cloud/azure/azure_rm_devtestlabschedule.py 141 | - cloud/azure/azure_rm_devtestlabschedule_info.py 142 | - cloud/azure/azure_rm_devtestlabvirtualmachine.py 143 | - cloud/azure/azure_rm_devtestlabvirtualmachine_info.py 144 | - cloud/azure/azure_rm_devtestlabvirtualnetwork.py 145 | - cloud/azure/azure_rm_devtestlabvirtualnetwork_info.py 146 | - cloud/azure/azure_rm_hdinsightcluster.py 147 | - cloud/azure/azure_rm_hdinsightcluster_info.py 148 | - cloud/azure/azure_rm_mariadbconfiguration.py 149 | - cloud/azure/azure_rm_mariadbconfiguration_info.py 150 | - cloud/azure/azure_rm_mariadbdatabase.py 151 | - cloud/azure/azure_rm_mariadbdatabase_info.py 152 | - cloud/azure/azure_rm_mariadbfirewallrule.py 153 | - cloud/azure/azure_rm_mariadbfirewallrule_info.py 154 | - cloud/azure/azure_rm_mariadbserver.py 155 | - cloud/azure/azure_rm_mariadbserver_info.py 156 | - cloud/azure/azure_rm_mysqlconfiguration.py 157 | - cloud/azure/azure_rm_mysqlconfiguration_info.py 158 | - cloud/azure/azure_rm_mysqldatabase.py 159 | - cloud/azure/azure_rm_mysqldatabase_info.py 160 | - cloud/azure/azure_rm_mysqlfirewallrule.py 161 | - cloud/azure/azure_rm_mysqlfirewallrule_info.py 162 | - cloud/azure/azure_rm_mysqlserver.py 163 | - cloud/azure/azure_rm_mysqlserver_info.py 164 | - cloud/azure/azure_rm_postgresqlconfiguration.py 165 | - cloud/azure/azure_rm_postgresqlconfiguration_info.py 166 | - cloud/azure/azure_rm_postgresqldatabase.py 167 | - cloud/azure/azure_rm_postgresqldatabase_info.py 168 | - cloud/azure/azure_rm_postgresqlfirewallrule.py 169 | - cloud/azure/azure_rm_postgresqlfirewallrule_info.py 170 | - cloud/azure/azure_rm_postgresqlserver.py 171 | - cloud/azure/azure_rm_postgresqlserver_info.py 172 | - cloud/azure/azure_rm_sqldatabase.py 173 | - cloud/azure/azure_rm_sqldatabase_info.py 174 | - cloud/azure/azure_rm_sqlfirewallrule.py 175 | - cloud/azure/azure_rm_sqlfirewallrule_info.py 176 | - cloud/azure/azure_rm_sqlserver.py 177 | - cloud/azure/azure_rm_sqlserver_info.py 178 | doc_fragments: 179 | - azure.py 180 | - azure_tags.py -------------------------------------------------------------------------------- /scenarios/nwo/check_point.yml: -------------------------------------------------------------------------------- 1 | mgmt: 2 | doc_fragments: 3 | - checkpoint_commands.py 4 | - checkpoint_facts.py 5 | - checkpoint_objects.py 6 | httpapi: 7 | - checkpoint.py 8 | module_utils: 9 | - network/checkpoint/checkpoint.py 10 | modules: 11 | - network/check_point/cp_mgmt_access_layer.py 12 | - network/check_point/cp_mgmt_access_layer_facts.py 13 | - network/check_point/cp_mgmt_access_role.py 14 | - network/check_point/cp_mgmt_access_role_facts.py 15 | - network/check_point/cp_mgmt_access_rule.py 16 | - network/check_point/cp_mgmt_access_rule_facts.py 17 | - network/check_point/cp_mgmt_address_range.py 18 | - network/check_point/cp_mgmt_address_range_facts.py 19 | - network/check_point/cp_mgmt_administrator.py 20 | - network/check_point/cp_mgmt_administrator_facts.py 21 | - network/check_point/cp_mgmt_application_site.py 22 | - network/check_point/cp_mgmt_application_site_category.py 23 | - network/check_point/cp_mgmt_application_site_category_facts.py 24 | - network/check_point/cp_mgmt_application_site_facts.py 25 | - network/check_point/cp_mgmt_application_site_group.py 26 | - network/check_point/cp_mgmt_application_site_group_facts.py 27 | - network/check_point/cp_mgmt_assign_global_assignment.py 28 | - network/check_point/cp_mgmt_discard.py 29 | - network/check_point/cp_mgmt_dns_domain.py 30 | - network/check_point/cp_mgmt_dns_domain_facts.py 31 | - network/check_point/cp_mgmt_dynamic_object.py 32 | - network/check_point/cp_mgmt_dynamic_object_facts.py 33 | - network/check_point/cp_mgmt_exception_group.py 34 | - network/check_point/cp_mgmt_exception_group_facts.py 35 | - network/check_point/cp_mgmt_global_assignment.py 36 | - network/check_point/cp_mgmt_global_assignment_facts.py 37 | - network/check_point/cp_mgmt_group.py 38 | - network/check_point/cp_mgmt_group_facts.py 39 | - network/check_point/cp_mgmt_group_with_exclusion.py 40 | - network/check_point/cp_mgmt_group_with_exclusion_facts.py 41 | - network/check_point/cp_mgmt_host.py 42 | - network/check_point/cp_mgmt_host_facts.py 43 | - network/check_point/cp_mgmt_install_policy.py 44 | - network/check_point/cp_mgmt_mds_facts.py 45 | - network/check_point/cp_mgmt_multicast_address_range.py 46 | - network/check_point/cp_mgmt_multicast_address_range_facts.py 47 | - network/check_point/cp_mgmt_network.py 48 | - network/check_point/cp_mgmt_network_facts.py 49 | - network/check_point/cp_mgmt_package.py 50 | - network/check_point/cp_mgmt_package_facts.py 51 | - network/check_point/cp_mgmt_publish.py 52 | - network/check_point/cp_mgmt_put_file.py 53 | - network/check_point/cp_mgmt_run_ips_update.py 54 | - network/check_point/cp_mgmt_run_script.py 55 | - network/check_point/cp_mgmt_security_zone.py 56 | - network/check_point/cp_mgmt_security_zone_facts.py 57 | - network/check_point/cp_mgmt_service_dce_rpc.py 58 | - network/check_point/cp_mgmt_service_dce_rpc_facts.py 59 | - network/check_point/cp_mgmt_service_group.py 60 | - network/check_point/cp_mgmt_service_group_facts.py 61 | - network/check_point/cp_mgmt_service_icmp.py 62 | - network/check_point/cp_mgmt_service_icmp6.py 63 | - network/check_point/cp_mgmt_service_icmp6_facts.py 64 | - network/check_point/cp_mgmt_service_icmp_facts.py 65 | - network/check_point/cp_mgmt_service_other.py 66 | - network/check_point/cp_mgmt_service_other_facts.py 67 | - network/check_point/cp_mgmt_service_rpc.py 68 | - network/check_point/cp_mgmt_service_rpc_facts.py 69 | - network/check_point/cp_mgmt_service_sctp.py 70 | - network/check_point/cp_mgmt_service_sctp_facts.py 71 | - network/check_point/cp_mgmt_service_tcp.py 72 | - network/check_point/cp_mgmt_service_tcp_facts.py 73 | - network/check_point/cp_mgmt_service_udp.py 74 | - network/check_point/cp_mgmt_service_udp_facts.py 75 | - network/check_point/cp_mgmt_session_facts.py 76 | - network/check_point/cp_mgmt_simple_gateway.py 77 | - network/check_point/cp_mgmt_simple_gateway_facts.py 78 | - network/check_point/cp_mgmt_tag.py 79 | - network/check_point/cp_mgmt_tag_facts.py 80 | - network/check_point/cp_mgmt_threat_exception.py 81 | - network/check_point/cp_mgmt_threat_exception_facts.py 82 | - network/check_point/cp_mgmt_threat_indicator.py 83 | - network/check_point/cp_mgmt_threat_indicator_facts.py 84 | - network/check_point/cp_mgmt_threat_layer.py 85 | - network/check_point/cp_mgmt_threat_layer_facts.py 86 | - network/check_point/cp_mgmt_threat_profile.py 87 | - network/check_point/cp_mgmt_threat_profile_facts.py 88 | - network/check_point/cp_mgmt_threat_protection_override.py 89 | - network/check_point/cp_mgmt_threat_rule.py 90 | - network/check_point/cp_mgmt_threat_rule_facts.py 91 | - network/check_point/cp_mgmt_time.py 92 | - network/check_point/cp_mgmt_time_facts.py 93 | - network/check_point/cp_mgmt_verify_policy.py 94 | - network/check_point/cp_mgmt_vpn_community_meshed.py 95 | - network/check_point/cp_mgmt_vpn_community_meshed_facts.py 96 | - network/check_point/cp_mgmt_vpn_community_star.py 97 | - network/check_point/cp_mgmt_vpn_community_star_facts.py 98 | - network/check_point/cp_mgmt_wildcard.py 99 | - network/check_point/cp_mgmt_wildcard_facts.py 100 | -------------------------------------------------------------------------------- /scenarios/nwo/cisco.yml: -------------------------------------------------------------------------------- 1 | aci: 2 | doc_fragments: 3 | - aci.py 4 | module_utils: 5 | - network/aci/aci.py 6 | modules: 7 | - network/aci/aci_aaa_user.py 8 | - network/aci/aci_aaa_user_certificate.py 9 | - network/aci/aci_access_port_block_to_access_port.py 10 | - network/aci/aci_access_port_to_interface_policy_leaf_profile.py 11 | - network/aci/aci_access_sub_port_block_to_access_port.py 12 | - network/aci/aci_aep.py 13 | - network/aci/aci_aep_to_domain.py 14 | - network/aci/aci_ap.py 15 | - network/aci/aci_bd.py 16 | - network/aci/aci_bd_subnet.py 17 | - network/aci/aci_bd_to_l3out.py 18 | - network/aci/aci_config_rollback.py 19 | - network/aci/aci_config_snapshot.py 20 | - network/aci/aci_contract.py 21 | - network/aci/aci_contract_subject.py 22 | - network/aci/aci_contract_subject_to_filter.py 23 | - network/aci/aci_domain.py 24 | - network/aci/aci_domain_to_encap_pool.py 25 | - network/aci/aci_domain_to_vlan_pool.py 26 | - network/aci/aci_encap_pool.py 27 | - network/aci/aci_encap_pool_range.py 28 | - network/aci/aci_epg.py 29 | - network/aci/aci_epg_monitoring_policy.py 30 | - network/aci/aci_epg_to_contract.py 31 | - network/aci/aci_epg_to_domain.py 32 | - network/aci/aci_fabric_node.py 33 | - network/aci/aci_fabric_scheduler.py 34 | - network/aci/aci_filter.py 35 | - network/aci/aci_filter_entry.py 36 | - network/aci/aci_firmware_group.py 37 | - network/aci/aci_firmware_group_node.py 38 | - network/aci/aci_firmware_policy.py 39 | - network/aci/aci_firmware_source.py 40 | - network/aci/aci_interface_policy_cdp.py 41 | - network/aci/aci_interface_policy_fc.py 42 | - network/aci/aci_interface_policy_l2.py 43 | - network/aci/aci_interface_policy_leaf_policy_group.py 44 | - network/aci/aci_interface_policy_leaf_profile.py 45 | - network/aci/aci_interface_policy_lldp.py 46 | - network/aci/aci_interface_policy_mcp.py 47 | - network/aci/aci_interface_policy_ospf.py 48 | - network/aci/aci_interface_policy_port_channel.py 49 | - network/aci/aci_interface_policy_port_security.py 50 | - network/aci/aci_interface_selector_to_switch_policy_leaf_profile.py 51 | - network/aci/aci_l3out.py 52 | - network/aci/aci_l3out_extepg.py 53 | - network/aci/aci_l3out_extsubnet.py 54 | - network/aci/aci_l3out_route_tag_policy.py 55 | - network/aci/aci_maintenance_group.py 56 | - network/aci/aci_maintenance_group_node.py 57 | - network/aci/aci_maintenance_policy.py 58 | - network/aci/aci_rest.py 59 | - network/aci/aci_static_binding_to_epg.py 60 | - network/aci/aci_switch_leaf_selector.py 61 | - network/aci/aci_switch_policy_leaf_profile.py 62 | - network/aci/aci_switch_policy_vpc_protection_group.py 63 | - network/aci/aci_taboo_contract.py 64 | - network/aci/aci_tenant.py 65 | - network/aci/aci_tenant_action_rule_profile.py 66 | - network/aci/aci_tenant_ep_retention_policy.py 67 | - network/aci/aci_tenant_span_dst_group.py 68 | - network/aci/aci_tenant_span_src_group.py 69 | - network/aci/aci_tenant_span_src_group_to_dst_group.py 70 | - network/aci/aci_vlan_pool.py 71 | - network/aci/aci_vlan_pool_encap_block.py 72 | - network/aci/aci_vmm_credential.py 73 | - network/aci/aci_vrf.py 74 | asa: 75 | module_utils: 76 | - network/asa/* 77 | modules: 78 | - network/asa/* 79 | action: 80 | - asa.py 81 | cliconf: 82 | - asa.py 83 | doc_fragments: 84 | - asa.py 85 | terminal: 86 | - asa.py 87 | intersight: 88 | doc_fragments: 89 | - intersight.py 90 | module_utils: 91 | - remote_management/intersight.py 92 | modules: 93 | - remote_management/intersight/_intersight_facts.py 94 | - remote_management/intersight/intersight_rest_api.py 95 | ios: 96 | action: 97 | - ios.py 98 | cliconf: 99 | - ios.py 100 | doc_fragments: 101 | - ios.py 102 | integration: 103 | - ios_*/* 104 | - ios_*/*/* 105 | - ios_*/*/*/* 106 | module_utils: 107 | - network/ios/* 108 | - network/ios/*/* 109 | - network/ios/*/*/* 110 | - network/ios/*/*/*/* 111 | - network/ios/*/*/*/*/* 112 | modules: 113 | - network/ios/* 114 | terminal: 115 | - ios.py 116 | iosxr: 117 | action: 118 | - iosxr.py 119 | cliconf: 120 | - iosxr.py 121 | doc_fragments: 122 | - iosxr.py 123 | integration: 124 | - iosxr_*/* 125 | - iosxr_*/*/* 126 | - iosxr_*/*/*/* 127 | module_utils: 128 | - network/iosxr/* 129 | - network/iosxr/*/* 130 | - network/iosxr/*/*/* 131 | - network/iosxr/*/*/*/* 132 | - network/iosxr/*/*/*/*/* 133 | modules: 134 | - network/iosxr/* 135 | netconf: 136 | - iosxr.py 137 | terminal: 138 | - iosxr.py 139 | meraki: 140 | doc_fragments: 141 | - meraki.py 142 | module_utils: 143 | - network/meraki/__init__.py 144 | - network/meraki/meraki.py 145 | modules: 146 | - network/meraki/__init__.py 147 | - network/meraki/meraki_admin.py 148 | - network/meraki/meraki_config_template.py 149 | - network/meraki/meraki_content_filtering.py 150 | - network/meraki/meraki_device.py 151 | - network/meraki/meraki_firewalled_services.py 152 | - network/meraki/meraki_malware.py 153 | - network/meraki/meraki_mr_l3_firewall.py 154 | - network/meraki/meraki_mx_l3_firewall.py 155 | - network/meraki/meraki_mx_l7_firewall.py 156 | - network/meraki/meraki_nat.py 157 | - network/meraki/meraki_network.py 158 | - network/meraki/meraki_organization.py 159 | - network/meraki/meraki_snmp.py 160 | - network/meraki/meraki_ssid.py 161 | - network/meraki/meraki_static_route.py 162 | - network/meraki/meraki_switchport.py 163 | - network/meraki/meraki_syslog.py 164 | - network/meraki/meraki_vlan.py 165 | - network/meraki/meraki_webhook.py 166 | mso: 167 | doc_fragments: 168 | - mso.py 169 | module_utils: 170 | - network/aci/mso.py 171 | modules: 172 | - network/aci/mso_label.py 173 | - network/aci/mso_role.py 174 | - network/aci/mso_schema.py 175 | - network/aci/mso_schema_site.py 176 | - network/aci/mso_schema_site_anp.py 177 | - network/aci/mso_schema_site_anp_epg.py 178 | - network/aci/mso_schema_site_anp_epg_domain.py 179 | - network/aci/mso_schema_site_anp_epg_staticleaf.py 180 | - network/aci/mso_schema_site_anp_epg_staticport.py 181 | - network/aci/mso_schema_site_anp_epg_subnet.py 182 | - network/aci/mso_schema_site_bd.py 183 | - network/aci/mso_schema_site_bd_l3out.py 184 | - network/aci/mso_schema_site_bd_subnet.py 185 | - network/aci/mso_schema_site_vrf.py 186 | - network/aci/mso_schema_site_vrf_region.py 187 | - network/aci/mso_schema_site_vrf_region_cidr.py 188 | - network/aci/mso_schema_site_vrf_region_cidr_subnet.py 189 | - network/aci/mso_schema_template.py 190 | - network/aci/mso_schema_template_anp.py 191 | - network/aci/mso_schema_template_anp_epg.py 192 | - network/aci/mso_schema_template_anp_epg_contract.py 193 | - network/aci/mso_schema_template_anp_epg_subnet.py 194 | - network/aci/mso_schema_template_bd.py 195 | - network/aci/mso_schema_template_bd_subnet.py 196 | - network/aci/mso_schema_template_contract_filter.py 197 | - network/aci/mso_schema_template_deploy.py 198 | - network/aci/mso_schema_template_externalepg.py 199 | - network/aci/mso_schema_template_filter_entry.py 200 | - network/aci/mso_schema_template_l3out.py 201 | - network/aci/mso_schema_template_vrf.py 202 | - network/aci/mso_site.py 203 | - network/aci/mso_tenant.py 204 | - network/aci/mso_user.py 205 | nxos: 206 | action: 207 | - nxos.py 208 | - nxos_file_copy.py 209 | cliconf: 210 | - nxos.py 211 | doc_fragments: 212 | - nxos.py 213 | httpapi: 214 | - nxos.py 215 | integration: 216 | - nxos_*/* 217 | - nxos_*/*/* 218 | - nxos_*/*/*/* 219 | module_utils: 220 | - network/nxos/* 221 | - network/nxos/*/* 222 | - network/nxos/*/*/* 223 | modules: 224 | - network/nxos/* 225 | - network/nxos/*/* 226 | terminal: 227 | - nxos.py 228 | ucs: 229 | doc_fragments: 230 | - ucs.py 231 | module_utils: 232 | - remote_management/ucs.py 233 | modules: 234 | - remote_management/ucs/* 235 | -------------------------------------------------------------------------------- /scenarios/nwo/containers.yml: -------------------------------------------------------------------------------- 1 | podman: 2 | connection: 3 | - buildah.py 4 | - podman.py 5 | modules: 6 | - cloud/podman/__init__.py 7 | - cloud/podman/podman_container_info.py 8 | - cloud/podman/podman_image_info.py 9 | - cloud/podman/podman_image.py 10 | - cloud/podman/podman_volume_info.py 11 | module_utils: 12 | - podman/common.py 13 | - podman/__init__.py 14 | integration: 15 | - connection_podman/aliases 16 | - connection_podman/runme.sh 17 | - connection_podman/test_connection.inventory 18 | - podman_*/* 19 | - podman_*/*/* 20 | - setup_podman/* 21 | - setup_podman/*/* 22 | 23 | -------------------------------------------------------------------------------- /scenarios/nwo/cyberark.yml: -------------------------------------------------------------------------------- 1 | bizdev: 2 | modules: 3 | - identity/cyberark/__init__.py 4 | - identity/cyberark/cyberark_authentication.py 5 | - identity/cyberark/cyberark_user.py 6 | -------------------------------------------------------------------------------- /scenarios/nwo/dellemc_networking.yml: -------------------------------------------------------------------------------- 1 | os10: 2 | action: 3 | - dellos10.py 4 | cliconf: 5 | - dellos10.py 6 | doc_fragments: 7 | - dellos10.py 8 | integration: 9 | - dellos10_*/* 10 | - dellos10_*/*/* 11 | - dellos10_*/*/*/* 12 | module_utils: 13 | - network/dellos10/* 14 | modules: 15 | - network/dellos10/* 16 | terminal: 17 | - dellos10.py 18 | os9: 19 | action: 20 | - dellos9.py 21 | cliconf: 22 | - dellos9.py 23 | doc_fragments: 24 | - dellos9.py 25 | integration: 26 | - dellos9_*/* 27 | - dellos9_*/*/* 28 | - dellos9_*/*/*/* 29 | module_utils: 30 | - network/dellos9/* 31 | modules: 32 | - network/dellos9/* 33 | terminal: 34 | - dellos9.py 35 | os6: 36 | action: 37 | - dellos6.py 38 | cliconf: 39 | - dellos6.py 40 | doc_fragments: 41 | - dellos6.py 42 | integration: 43 | - dellos6_*/* 44 | - dellos6_*/*/* 45 | - dellos6_*/*/*/* 46 | module_utils: 47 | - network/dellos6/* 48 | modules: 49 | - network/dellos6/* 50 | terminal: 51 | - dellos6.py 52 | -------------------------------------------------------------------------------- /scenarios/nwo/f5networks.yml: -------------------------------------------------------------------------------- 1 | f5_modules: 2 | action: 3 | - bigip.py 4 | - bigiq.py 5 | doc_fragments: 6 | - f5.py 7 | module_utils: 8 | - network/f5/bigip.py 9 | - network/f5/bigiq.py 10 | - network/f5/common.py 11 | - network/f5/compare.py 12 | - network/f5/icontrol.py 13 | - network/f5/ipaddress.py 14 | modules: 15 | - network/f5/bigip_apm_acl.py 16 | - network/f5/bigip_apm_network_access.py 17 | - network/f5/bigip_apm_policy_fetch.py 18 | - network/f5/bigip_apm_policy_import.py 19 | - network/f5/bigip_appsvcs_extension.py 20 | - network/f5/bigip_asm_dos_application.py 21 | - network/f5/bigip_asm_policy_fetch.py 22 | - network/f5/bigip_asm_policy_import.py 23 | - network/f5/bigip_asm_policy_manage.py 24 | - network/f5/bigip_asm_policy_server_technology.py 25 | - network/f5/bigip_asm_policy_signature_set.py 26 | - network/f5/bigip_cli_alias.py 27 | - network/f5/bigip_cli_script.py 28 | - network/f5/bigip_command.py 29 | - network/f5/bigip_config.py 30 | - network/f5/bigip_configsync_action.py 31 | - network/f5/bigip_data_group.py 32 | - network/f5/bigip_device_auth.py 33 | - network/f5/bigip_device_auth_ldap.py 34 | - network/f5/bigip_device_certificate.py 35 | - network/f5/bigip_device_connectivity.py 36 | - network/f5/bigip_device_dns.py 37 | - network/f5/bigip_device_group.py 38 | - network/f5/bigip_device_group_member.py 39 | - network/f5/bigip_device_ha_group.py 40 | - network/f5/bigip_device_httpd.py 41 | - network/f5/bigip_device_info.py 42 | - network/f5/bigip_device_license.py 43 | - network/f5/bigip_device_ntp.py 44 | - network/f5/bigip_device_sshd.py 45 | - network/f5/bigip_device_syslog.py 46 | - network/f5/bigip_device_traffic_group.py 47 | - network/f5/bigip_device_trust.py 48 | - network/f5/bigip_dns_cache_resolver.py 49 | - network/f5/bigip_dns_nameserver.py 50 | - network/f5/bigip_dns_resolver.py 51 | - network/f5/bigip_dns_zone.py 52 | - network/f5/bigip_file_copy.py 53 | - network/f5/bigip_firewall_address_list.py 54 | - network/f5/bigip_firewall_dos_profile.py 55 | - network/f5/bigip_firewall_dos_vector.py 56 | - network/f5/bigip_firewall_global_rules.py 57 | - network/f5/bigip_firewall_log_profile.py 58 | - network/f5/bigip_firewall_log_profile_network.py 59 | - network/f5/bigip_firewall_policy.py 60 | - network/f5/bigip_firewall_port_list.py 61 | - network/f5/bigip_firewall_rule.py 62 | - network/f5/bigip_firewall_rule_list.py 63 | - network/f5/bigip_firewall_schedule.py 64 | - network/f5/bigip_gtm_datacenter.py 65 | - network/f5/bigip_gtm_global.py 66 | - network/f5/bigip_gtm_monitor_bigip.py 67 | - network/f5/bigip_gtm_monitor_external.py 68 | - network/f5/bigip_gtm_monitor_firepass.py 69 | - network/f5/bigip_gtm_monitor_http.py 70 | - network/f5/bigip_gtm_monitor_https.py 71 | - network/f5/bigip_gtm_monitor_tcp.py 72 | - network/f5/bigip_gtm_monitor_tcp_half_open.py 73 | - network/f5/bigip_gtm_pool.py 74 | - network/f5/bigip_gtm_pool_member.py 75 | - network/f5/bigip_gtm_server.py 76 | - network/f5/bigip_gtm_topology_record.py 77 | - network/f5/bigip_gtm_topology_region.py 78 | - network/f5/bigip_gtm_virtual_server.py 79 | - network/f5/bigip_gtm_wide_ip.py 80 | - network/f5/bigip_hostname.py 81 | - network/f5/bigip_iapp_service.py 82 | - network/f5/bigip_iapp_template.py 83 | - network/f5/bigip_ike_peer.py 84 | - network/f5/bigip_imish_config.py 85 | - network/f5/bigip_ipsec_policy.py 86 | - network/f5/bigip_irule.py 87 | - network/f5/bigip_log_destination.py 88 | - network/f5/bigip_log_publisher.py 89 | - network/f5/bigip_lx_package.py 90 | - network/f5/bigip_management_route.py 91 | - network/f5/bigip_message_routing_peer.py 92 | - network/f5/bigip_message_routing_protocol.py 93 | - network/f5/bigip_message_routing_route.py 94 | - network/f5/bigip_message_routing_router.py 95 | - network/f5/bigip_message_routing_transport_config.py 96 | - network/f5/bigip_monitor_dns.py 97 | - network/f5/bigip_monitor_external.py 98 | - network/f5/bigip_monitor_gateway_icmp.py 99 | - network/f5/bigip_monitor_http.py 100 | - network/f5/bigip_monitor_https.py 101 | - network/f5/bigip_monitor_ldap.py 102 | - network/f5/bigip_monitor_snmp_dca.py 103 | - network/f5/bigip_monitor_tcp.py 104 | - network/f5/bigip_monitor_tcp_echo.py 105 | - network/f5/bigip_monitor_tcp_half_open.py 106 | - network/f5/bigip_monitor_udp.py 107 | - network/f5/bigip_node.py 108 | - network/f5/bigip_partition.py 109 | - network/f5/bigip_password_policy.py 110 | - network/f5/bigip_policy.py 111 | - network/f5/bigip_policy_rule.py 112 | - network/f5/bigip_pool.py 113 | - network/f5/bigip_pool_member.py 114 | - network/f5/bigip_profile_analytics.py 115 | - network/f5/bigip_profile_client_ssl.py 116 | - network/f5/bigip_profile_dns.py 117 | - network/f5/bigip_profile_fastl4.py 118 | - network/f5/bigip_profile_http.py 119 | - network/f5/bigip_profile_http2.py 120 | - network/f5/bigip_profile_http_compression.py 121 | - network/f5/bigip_profile_oneconnect.py 122 | - network/f5/bigip_profile_persistence_cookie.py 123 | - network/f5/bigip_profile_persistence_src_addr.py 124 | - network/f5/bigip_profile_server_ssl.py 125 | - network/f5/bigip_profile_tcp.py 126 | - network/f5/bigip_profile_udp.py 127 | - network/f5/bigip_provision.py 128 | - network/f5/bigip_qkview.py 129 | - network/f5/bigip_remote_role.py 130 | - network/f5/bigip_remote_syslog.py 131 | - network/f5/bigip_remote_user.py 132 | - network/f5/bigip_routedomain.py 133 | - network/f5/bigip_selfip.py 134 | - network/f5/bigip_service_policy.py 135 | - network/f5/bigip_smtp.py 136 | - network/f5/bigip_snat_pool.py 137 | - network/f5/bigip_snat_translation.py 138 | - network/f5/bigip_snmp.py 139 | - network/f5/bigip_snmp_community.py 140 | - network/f5/bigip_snmp_trap.py 141 | - network/f5/bigip_software_image.py 142 | - network/f5/bigip_software_install.py 143 | - network/f5/bigip_software_update.py 144 | - network/f5/bigip_ssl_certificate.py 145 | - network/f5/bigip_ssl_key.py 146 | - network/f5/bigip_ssl_ocsp.py 147 | - network/f5/bigip_static_route.py 148 | - network/f5/bigip_sys_daemon_log_tmm.py 149 | - network/f5/bigip_sys_db.py 150 | - network/f5/bigip_sys_global.py 151 | - network/f5/bigip_timer_policy.py 152 | - network/f5/bigip_traffic_selector.py 153 | - network/f5/bigip_trunk.py 154 | - network/f5/bigip_tunnel.py 155 | - network/f5/bigip_ucs.py 156 | - network/f5/bigip_ucs_fetch.py 157 | - network/f5/bigip_user.py 158 | - network/f5/bigip_vcmp_guest.py 159 | - network/f5/bigip_virtual_address.py 160 | - network/f5/bigip_virtual_server.py 161 | - network/f5/bigip_vlan.py 162 | - network/f5/bigip_wait.py 163 | - network/f5/bigiq_application_fasthttp.py 164 | - network/f5/bigiq_application_fastl4_tcp.py 165 | - network/f5/bigiq_application_fastl4_udp.py 166 | - network/f5/bigiq_application_http.py 167 | - network/f5/bigiq_application_https_offload.py 168 | - network/f5/bigiq_application_https_waf.py 169 | - network/f5/bigiq_device_discovery.py 170 | - network/f5/bigiq_device_info.py 171 | - network/f5/bigiq_regkey_license.py 172 | - network/f5/bigiq_regkey_license_assignment.py 173 | - network/f5/bigiq_regkey_pool.py 174 | - network/f5/bigiq_utility_license.py 175 | - network/f5/bigiq_utility_license_assignment.py 176 | terminal: 177 | - bigip.py 178 | -------------------------------------------------------------------------------- /scenarios/nwo/frr.yml: -------------------------------------------------------------------------------- 1 | frr: 2 | module_utils: 3 | - network/frr/* 4 | - network/frr/*/* 5 | - network/frr/*/*/* 6 | - network/frr/*/*/*/* 7 | - network/frr/*/*/*/*/* 8 | modules: 9 | - network/frr/* 10 | cliconf: 11 | - frr.py 12 | terminal: 13 | - frr.py 14 | -------------------------------------------------------------------------------- /scenarios/nwo/google.yml: -------------------------------------------------------------------------------- 1 | cloud: 2 | inventory: 3 | - gcp_compute.py 4 | module_utils: 5 | - gcp_utils.py 6 | modules: 7 | - cloud/google/gcp_appengine_firewall_rule.py 8 | - cloud/google/gcp_appengine_firewall_rule_info.py 9 | - cloud/google/gcp_bigquery_dataset.py 10 | - cloud/google/gcp_bigquery_dataset_info.py 11 | - cloud/google/gcp_bigquery_table.py 12 | - cloud/google/gcp_bigquery_table_info.py 13 | - cloud/google/gcp_cloudbuild_trigger.py 14 | - cloud/google/gcp_cloudbuild_trigger_info.py 15 | - cloud/google/gcp_cloudfunctions_cloud_function.py 16 | - cloud/google/gcp_cloudfunctions_cloud_function_info.py 17 | - cloud/google/gcp_cloudscheduler_job.py 18 | - cloud/google/gcp_cloudscheduler_job_info.py 19 | - cloud/google/gcp_cloudtasks_queue.py 20 | - cloud/google/gcp_cloudtasks_queue_info.py 21 | - cloud/google/gcp_compute_address.py 22 | - cloud/google/gcp_compute_address_info.py 23 | - cloud/google/gcp_compute_autoscaler.py 24 | - cloud/google/gcp_compute_autoscaler_info.py 25 | - cloud/google/gcp_compute_backend_bucket.py 26 | - cloud/google/gcp_compute_backend_bucket_info.py 27 | - cloud/google/gcp_compute_backend_service.py 28 | - cloud/google/gcp_compute_backend_service_info.py 29 | - cloud/google/gcp_compute_disk.py 30 | - cloud/google/gcp_compute_disk_info.py 31 | - cloud/google/gcp_compute_firewall.py 32 | - cloud/google/gcp_compute_firewall_info.py 33 | - cloud/google/gcp_compute_forwarding_rule.py 34 | - cloud/google/gcp_compute_forwarding_rule_info.py 35 | - cloud/google/gcp_compute_global_address.py 36 | - cloud/google/gcp_compute_global_address_info.py 37 | - cloud/google/gcp_compute_global_forwarding_rule.py 38 | - cloud/google/gcp_compute_global_forwarding_rule_info.py 39 | - cloud/google/gcp_compute_health_check.py 40 | - cloud/google/gcp_compute_health_check_info.py 41 | - cloud/google/gcp_compute_http_health_check.py 42 | - cloud/google/gcp_compute_http_health_check_info.py 43 | - cloud/google/gcp_compute_https_health_check.py 44 | - cloud/google/gcp_compute_https_health_check_info.py 45 | - cloud/google/gcp_compute_image.py 46 | - cloud/google/gcp_compute_image_info.py 47 | - cloud/google/gcp_compute_instance.py 48 | - cloud/google/gcp_compute_instance_group.py 49 | - cloud/google/gcp_compute_instance_group_info.py 50 | - cloud/google/gcp_compute_instance_group_manager.py 51 | - cloud/google/gcp_compute_instance_group_manager_info.py 52 | - cloud/google/gcp_compute_instance_info.py 53 | - cloud/google/gcp_compute_instance_template.py 54 | - cloud/google/gcp_compute_instance_template_info.py 55 | - cloud/google/gcp_compute_interconnect_attachment.py 56 | - cloud/google/gcp_compute_interconnect_attachment_info.py 57 | - cloud/google/gcp_compute_network.py 58 | - cloud/google/gcp_compute_network_endpoint_group.py 59 | - cloud/google/gcp_compute_network_endpoint_group_info.py 60 | - cloud/google/gcp_compute_network_info.py 61 | - cloud/google/gcp_compute_node_group.py 62 | - cloud/google/gcp_compute_node_group_info.py 63 | - cloud/google/gcp_compute_node_template.py 64 | - cloud/google/gcp_compute_node_template_info.py 65 | - cloud/google/gcp_compute_region_backend_service.py 66 | - cloud/google/gcp_compute_region_backend_service_info.py 67 | - cloud/google/gcp_compute_region_disk.py 68 | - cloud/google/gcp_compute_region_disk_info.py 69 | - cloud/google/gcp_compute_reservation.py 70 | - cloud/google/gcp_compute_reservation_info.py 71 | - cloud/google/gcp_compute_route.py 72 | - cloud/google/gcp_compute_route_info.py 73 | - cloud/google/gcp_compute_router.py 74 | - cloud/google/gcp_compute_router_info.py 75 | - cloud/google/gcp_compute_snapshot.py 76 | - cloud/google/gcp_compute_snapshot_info.py 77 | - cloud/google/gcp_compute_ssl_certificate.py 78 | - cloud/google/gcp_compute_ssl_certificate_info.py 79 | - cloud/google/gcp_compute_ssl_policy.py 80 | - cloud/google/gcp_compute_ssl_policy_info.py 81 | - cloud/google/gcp_compute_subnetwork.py 82 | - cloud/google/gcp_compute_subnetwork_info.py 83 | - cloud/google/gcp_compute_target_http_proxy.py 84 | - cloud/google/gcp_compute_target_http_proxy_info.py 85 | - cloud/google/gcp_compute_target_https_proxy.py 86 | - cloud/google/gcp_compute_target_https_proxy_info.py 87 | - cloud/google/gcp_compute_target_instance.py 88 | - cloud/google/gcp_compute_target_instance_info.py 89 | - cloud/google/gcp_compute_target_pool.py 90 | - cloud/google/gcp_compute_target_pool_info.py 91 | - cloud/google/gcp_compute_target_ssl_proxy.py 92 | - cloud/google/gcp_compute_target_ssl_proxy_info.py 93 | - cloud/google/gcp_compute_target_tcp_proxy.py 94 | - cloud/google/gcp_compute_target_tcp_proxy_info.py 95 | - cloud/google/gcp_compute_target_vpn_gateway.py 96 | - cloud/google/gcp_compute_target_vpn_gateway_info.py 97 | - cloud/google/gcp_compute_url_map.py 98 | - cloud/google/gcp_compute_url_map_info.py 99 | - cloud/google/gcp_compute_vpn_tunnel.py 100 | - cloud/google/gcp_compute_vpn_tunnel_info.py 101 | - cloud/google/gcp_container_cluster.py 102 | - cloud/google/gcp_container_cluster_info.py 103 | - cloud/google/gcp_container_node_pool.py 104 | - cloud/google/gcp_container_node_pool_info.py 105 | - cloud/google/gcp_dns_managed_zone.py 106 | - cloud/google/gcp_dns_managed_zone_info.py 107 | - cloud/google/gcp_dns_resource_record_set.py 108 | - cloud/google/gcp_dns_resource_record_set_info.py 109 | - cloud/google/gcp_filestore_instance.py 110 | - cloud/google/gcp_filestore_instance_info.py 111 | - cloud/google/gcp_iam_role.py 112 | - cloud/google/gcp_iam_role_info.py 113 | - cloud/google/gcp_iam_service_account.py 114 | - cloud/google/gcp_iam_service_account_info.py 115 | - cloud/google/gcp_iam_service_account_key.py 116 | - cloud/google/gcp_kms_crypto_key.py 117 | - cloud/google/gcp_kms_crypto_key_info.py 118 | - cloud/google/gcp_kms_key_ring.py 119 | - cloud/google/gcp_kms_key_ring_info.py 120 | - cloud/google/gcp_logging_metric.py 121 | - cloud/google/gcp_logging_metric_info.py 122 | - cloud/google/gcp_mlengine_model.py 123 | - cloud/google/gcp_mlengine_model_info.py 124 | - cloud/google/gcp_mlengine_version.py 125 | - cloud/google/gcp_mlengine_version_info.py 126 | - cloud/google/gcp_pubsub_subscription.py 127 | - cloud/google/gcp_pubsub_subscription_info.py 128 | - cloud/google/gcp_pubsub_topic.py 129 | - cloud/google/gcp_pubsub_topic_info.py 130 | - cloud/google/gcp_redis_instance.py 131 | - cloud/google/gcp_redis_instance_info.py 132 | - cloud/google/gcp_resourcemanager_project.py 133 | - cloud/google/gcp_resourcemanager_project_info.py 134 | - cloud/google/gcp_runtimeconfig_config.py 135 | - cloud/google/gcp_runtimeconfig_config_info.py 136 | - cloud/google/gcp_runtimeconfig_variable.py 137 | - cloud/google/gcp_runtimeconfig_variable_info.py 138 | - cloud/google/gcp_serviceusage_service.py 139 | - cloud/google/gcp_serviceusage_service_info.py 140 | - cloud/google/gcp_sourcerepo_repository.py 141 | - cloud/google/gcp_sourcerepo_repository_info.py 142 | - cloud/google/gcp_spanner_database.py 143 | - cloud/google/gcp_spanner_database_info.py 144 | - cloud/google/gcp_spanner_instance.py 145 | - cloud/google/gcp_spanner_instance_info.py 146 | - cloud/google/gcp_sql_database.py 147 | - cloud/google/gcp_sql_database_info.py 148 | - cloud/google/gcp_sql_instance.py 149 | - cloud/google/gcp_sql_instance_info.py 150 | - cloud/google/gcp_sql_user.py 151 | - cloud/google/gcp_sql_user_info.py 152 | - cloud/google/gcp_storage_bucket.py 153 | - cloud/google/gcp_storage_bucket_access_control.py 154 | - cloud/google/gcp_storage_object.py 155 | - cloud/google/gcp_tpu_node.py 156 | - cloud/google/gcp_tpu_node_info.py 157 | -------------------------------------------------------------------------------- /scenarios/nwo/hetzner.yml: -------------------------------------------------------------------------------- 1 | hcloud: 2 | doc_fragments: 3 | - hcloud.py 4 | inventory: 5 | - hcloud.py 6 | module_utils: 7 | - hcloud.py 8 | modules: 9 | - cloud/hcloud/* 10 | -------------------------------------------------------------------------------- /scenarios/nwo/ibm.yml: -------------------------------------------------------------------------------- 1 | qradar: 2 | httpapi: 3 | - qradar.py 4 | -------------------------------------------------------------------------------- /scenarios/nwo/junipernetworks.yml: -------------------------------------------------------------------------------- 1 | junos: 2 | action: 3 | - junos.py 4 | cliconf: 5 | - junos.py 6 | doc_fragments: 7 | - junos.py 8 | integration: 9 | - junos_*/* 10 | - junos_*/*/* 11 | - junos_*/*/*/* 12 | module_utils: 13 | - network/junos/* 14 | - network/junos/*/* 15 | - network/junos/*/*/* 16 | modules: 17 | - network/junos/* 18 | netconf: 19 | - junos.py 20 | terminal: 21 | - junos.py 22 | -------------------------------------------------------------------------------- /scenarios/nwo/netapp.yml: -------------------------------------------------------------------------------- 1 | aws: 2 | modules: 3 | - cloud/amazon/aws_netapp_cvs_FileSystems.py 4 | - cloud/amazon/aws_netapp_cvs_active_directory.py 5 | - cloud/amazon/aws_netapp_cvs_pool.py 6 | - cloud/amazon/aws_netapp_cvs_snapshots.py 7 | elementsw: 8 | modules: 9 | - storage/netapp/na_elementsw_access_group.py 10 | - storage/netapp/na_elementsw_account.py 11 | - storage/netapp/na_elementsw_admin_users.py 12 | - storage/netapp/na_elementsw_backup.py 13 | - storage/netapp/na_elementsw_check_connections.py 14 | - storage/netapp/na_elementsw_cluster.py 15 | - storage/netapp/na_elementsw_cluster_config.py 16 | - storage/netapp/na_elementsw_cluster_pair.py 17 | - storage/netapp/na_elementsw_cluster_snmp.py 18 | - storage/netapp/na_elementsw_drive.py 19 | - storage/netapp/na_elementsw_initiators.py 20 | - storage/netapp/na_elementsw_ldap.py 21 | - storage/netapp/na_elementsw_network_interfaces.py 22 | - storage/netapp/na_elementsw_node.py 23 | - storage/netapp/na_elementsw_snapshot.py 24 | - storage/netapp/na_elementsw_snapshot_restore.py 25 | - storage/netapp/na_elementsw_snapshot_schedule.py 26 | - storage/netapp/na_elementsw_vlan.py 27 | - storage/netapp/na_elementsw_volume.py 28 | - storage/netapp/na_elementsw_volume_clone.py 29 | - storage/netapp/na_elementsw_volume_pair.py 30 | ontap: 31 | doc_fragments: 32 | - netapp.py 33 | module_utils: 34 | - netapp.py 35 | - netapp_elementsw_module.py 36 | - netapp_module.py 37 | modules: 38 | - storage/netapp/na_ontap_aggregate.py 39 | - storage/netapp/na_ontap_autosupport.py 40 | - storage/netapp/na_ontap_broadcast_domain.py 41 | - storage/netapp/na_ontap_broadcast_domain_ports.py 42 | - storage/netapp/na_ontap_cg_snapshot.py 43 | - storage/netapp/na_ontap_cifs.py 44 | - storage/netapp/na_ontap_cifs_acl.py 45 | - storage/netapp/na_ontap_cifs_server.py 46 | - storage/netapp/na_ontap_cluster.py 47 | - storage/netapp/na_ontap_cluster_ha.py 48 | - storage/netapp/na_ontap_cluster_peer.py 49 | - storage/netapp/na_ontap_command.py 50 | - storage/netapp/na_ontap_disks.py 51 | - storage/netapp/na_ontap_dns.py 52 | - storage/netapp/na_ontap_export_policy.py 53 | - storage/netapp/na_ontap_export_policy_rule.py 54 | - storage/netapp/na_ontap_fcp.py 55 | - storage/netapp/na_ontap_firewall_policy.py 56 | - storage/netapp/na_ontap_firmware_upgrade.py 57 | - storage/netapp/na_ontap_flexcache.py 58 | - storage/netapp/na_ontap_igroup.py 59 | - storage/netapp/na_ontap_igroup_initiator.py 60 | - storage/netapp/na_ontap_info.py 61 | - storage/netapp/na_ontap_interface.py 62 | - storage/netapp/na_ontap_ipspace.py 63 | - storage/netapp/na_ontap_iscsi.py 64 | - storage/netapp/na_ontap_job_schedule.py 65 | - storage/netapp/na_ontap_kerberos_realm.py 66 | - storage/netapp/na_ontap_ldap.py 67 | - storage/netapp/na_ontap_ldap_client.py 68 | - storage/netapp/na_ontap_license.py 69 | - storage/netapp/na_ontap_lun.py 70 | - storage/netapp/na_ontap_lun_copy.py 71 | - storage/netapp/na_ontap_lun_map.py 72 | - storage/netapp/na_ontap_motd.py 73 | - storage/netapp/na_ontap_ndmp.py 74 | - storage/netapp/na_ontap_net_ifgrp.py 75 | - storage/netapp/na_ontap_net_port.py 76 | - storage/netapp/na_ontap_net_routes.py 77 | - storage/netapp/na_ontap_net_subnet.py 78 | - storage/netapp/na_ontap_net_vlan.py 79 | - storage/netapp/na_ontap_nfs.py 80 | - storage/netapp/na_ontap_node.py 81 | - storage/netapp/na_ontap_ntp.py 82 | - storage/netapp/na_ontap_nvme.py 83 | - storage/netapp/na_ontap_nvme_namespace.py 84 | - storage/netapp/na_ontap_nvme_subsystem.py 85 | - storage/netapp/na_ontap_object_store.py 86 | - storage/netapp/na_ontap_ports.py 87 | - storage/netapp/na_ontap_portset.py 88 | - storage/netapp/na_ontap_qos_adaptive_policy_group.py 89 | - storage/netapp/na_ontap_qos_policy_group.py 90 | - storage/netapp/na_ontap_qtree.py 91 | - storage/netapp/na_ontap_quotas.py 92 | - storage/netapp/na_ontap_security_key_manager.py 93 | - storage/netapp/na_ontap_service_processor_network.py 94 | - storage/netapp/na_ontap_snapmirror.py 95 | - storage/netapp/na_ontap_snapshot.py 96 | - storage/netapp/na_ontap_snapshot_policy.py 97 | - storage/netapp/na_ontap_snmp.py 98 | - storage/netapp/na_ontap_software_update.py 99 | - storage/netapp/na_ontap_svm.py 100 | - storage/netapp/na_ontap_svm_options.py 101 | - storage/netapp/na_ontap_ucadapter.py 102 | - storage/netapp/na_ontap_unix_group.py 103 | - storage/netapp/na_ontap_unix_user.py 104 | - storage/netapp/na_ontap_user.py 105 | - storage/netapp/na_ontap_user_role.py 106 | - storage/netapp/na_ontap_volume.py 107 | - storage/netapp/na_ontap_volume_autosize.py 108 | - storage/netapp/na_ontap_volume_clone.py 109 | - storage/netapp/na_ontap_vscan.py 110 | - storage/netapp/na_ontap_vscan_on_access_policy.py 111 | - storage/netapp/na_ontap_vscan_on_demand_task.py 112 | - storage/netapp/na_ontap_vscan_scanner_pool.py 113 | - storage/netapp/na_ontap_vserver_cifs_security.py 114 | - storage/netapp/na_ontap_vserver_peer.py 115 | -------------------------------------------------------------------------------- /scenarios/nwo/netbox.yml: -------------------------------------------------------------------------------- 1 | netbox: 2 | inventory: 3 | - netbox.py 4 | module_utils: 5 | - net_tools/netbox/netbox_utils.py 6 | modules: 7 | - net_tools/netbox/netbox_device.py 8 | - net_tools/netbox/netbox_ip_address.py 9 | - net_tools/netbox/netbox_interface.py 10 | - net_tools/netbox/netbox_prefix.py 11 | - net_tools/netbox/netbox_site.py 12 | -------------------------------------------------------------------------------- /scenarios/nwo/openstack.yml: -------------------------------------------------------------------------------- 1 | cloud: 2 | doc_fragments: 3 | - openstack.py 4 | inventory: 5 | - openstack.py 6 | module_utils: 7 | - openstack.py 8 | modules: 9 | - cloud/openstack/os_auth.py 10 | - cloud/openstack/os_client_config.py 11 | - cloud/openstack/os_coe_cluster.py 12 | - cloud/openstack/os_coe_cluster_template.py 13 | - cloud/openstack/os_flavor_info.py 14 | - cloud/openstack/os_floating_ip.py 15 | - cloud/openstack/os_group.py 16 | - cloud/openstack/os_group_info.py 17 | - cloud/openstack/os_image.py 18 | - cloud/openstack/os_image_info.py 19 | - cloud/openstack/os_ironic.py 20 | - cloud/openstack/os_ironic_inspect.py 21 | - cloud/openstack/os_ironic_node.py 22 | - cloud/openstack/os_keypair.py 23 | - cloud/openstack/os_keystone_domain.py 24 | - cloud/openstack/os_keystone_domain_info.py 25 | - cloud/openstack/os_keystone_endpoint.py 26 | - cloud/openstack/os_keystone_role.py 27 | - cloud/openstack/os_keystone_service.py 28 | - cloud/openstack/os_listener.py 29 | - cloud/openstack/os_loadbalancer.py 30 | - cloud/openstack/os_member.py 31 | - cloud/openstack/os_network.py 32 | - cloud/openstack/os_networks_info.py 33 | - cloud/openstack/os_nova_flavor.py 34 | - cloud/openstack/os_nova_host_aggregate.py 35 | - cloud/openstack/os_object.py 36 | - cloud/openstack/os_pool.py 37 | - cloud/openstack/os_port.py 38 | - cloud/openstack/os_port_info.py 39 | - cloud/openstack/os_project.py 40 | - cloud/openstack/os_project_access.py 41 | - cloud/openstack/os_project_info.py 42 | - cloud/openstack/os_quota.py 43 | - cloud/openstack/os_recordset.py 44 | - cloud/openstack/os_router.py 45 | - cloud/openstack/os_security_group.py 46 | - cloud/openstack/os_security_group_rule.py 47 | - cloud/openstack/os_server.py 48 | - cloud/openstack/os_server_action.py 49 | - cloud/openstack/os_server_group.py 50 | - cloud/openstack/os_server_info.py 51 | - cloud/openstack/os_server_metadata.py 52 | - cloud/openstack/os_server_volume.py 53 | - cloud/openstack/os_stack.py 54 | - cloud/openstack/os_subnet.py 55 | - cloud/openstack/os_subnets_info.py 56 | - cloud/openstack/os_user.py 57 | - cloud/openstack/os_user_group.py 58 | - cloud/openstack/os_user_info.py 59 | - cloud/openstack/os_user_role.py 60 | - cloud/openstack/os_volume.py 61 | - cloud/openstack/os_volume_snapshot.py 62 | - cloud/openstack/os_zone.py 63 | -------------------------------------------------------------------------------- /scenarios/nwo/openvswitch.yml: -------------------------------------------------------------------------------- 1 | openvswitch: 2 | modules: 3 | - network/ovs/* 4 | -------------------------------------------------------------------------------- /scenarios/nwo/ovirt.yml: -------------------------------------------------------------------------------- 1 | ovirt: 2 | doc_fragments: 3 | - ovirt.py 4 | - ovirt_info.py 5 | module_utils: 6 | - ovirt.py 7 | modules: 8 | - cloud/ovirt/ovirt_affinity_group.py 9 | - cloud/ovirt/ovirt_affinity_label.py 10 | - cloud/ovirt/ovirt_affinity_label_info.py 11 | - cloud/ovirt/ovirt_api_info.py 12 | - cloud/ovirt/ovirt_auth.py 13 | - cloud/ovirt/ovirt_cluster.py 14 | - cloud/ovirt/ovirt_cluster_info.py 15 | - cloud/ovirt/ovirt_datacenter.py 16 | - cloud/ovirt/ovirt_datacenter_info.py 17 | - cloud/ovirt/ovirt_disk.py 18 | - cloud/ovirt/ovirt_disk_info.py 19 | - cloud/ovirt/ovirt_event.py 20 | - cloud/ovirt/ovirt_event_info.py 21 | - cloud/ovirt/ovirt_external_provider.py 22 | - cloud/ovirt/ovirt_external_provider_info.py 23 | - cloud/ovirt/ovirt_group.py 24 | - cloud/ovirt/ovirt_group_info.py 25 | - cloud/ovirt/ovirt_host.py 26 | - cloud/ovirt/ovirt_host_info.py 27 | - cloud/ovirt/ovirt_host_network.py 28 | - cloud/ovirt/ovirt_host_pm.py 29 | - cloud/ovirt/ovirt_host_storage_info.py 30 | - cloud/ovirt/ovirt_instance_type.py 31 | - cloud/ovirt/ovirt_job.py 32 | - cloud/ovirt/ovirt_mac_pool.py 33 | - cloud/ovirt/ovirt_network.py 34 | - cloud/ovirt/ovirt_network_info.py 35 | - cloud/ovirt/ovirt_nic.py 36 | - cloud/ovirt/ovirt_nic_info.py 37 | - cloud/ovirt/ovirt_permission.py 38 | - cloud/ovirt/ovirt_permission_info.py 39 | - cloud/ovirt/ovirt_quota.py 40 | - cloud/ovirt/ovirt_quota_info.py 41 | - cloud/ovirt/ovirt_role.py 42 | - cloud/ovirt/ovirt_scheduling_policy_info.py 43 | - cloud/ovirt/ovirt_snapshot.py 44 | - cloud/ovirt/ovirt_snapshot_info.py 45 | - cloud/ovirt/ovirt_storage_connection.py 46 | - cloud/ovirt/ovirt_storage_domain.py 47 | - cloud/ovirt/ovirt_storage_domain_info.py 48 | - cloud/ovirt/ovirt_storage_template_info.py 49 | - cloud/ovirt/ovirt_storage_vm_info.py 50 | - cloud/ovirt/ovirt_tag.py 51 | - cloud/ovirt/ovirt_tag_info.py 52 | - cloud/ovirt/ovirt_template.py 53 | - cloud/ovirt/ovirt_template_info.py 54 | - cloud/ovirt/ovirt_user.py 55 | - cloud/ovirt/ovirt_user_info.py 56 | - cloud/ovirt/ovirt_vm.py 57 | - cloud/ovirt/ovirt_vm_info.py 58 | - cloud/ovirt/ovirt_vmpool.py 59 | - cloud/ovirt/ovirt_vmpool_info.py 60 | - cloud/ovirt/ovirt_vnic_profile.py 61 | - cloud/ovirt/ovirt_vnic_profile_info.py 62 | -------------------------------------------------------------------------------- /scenarios/nwo/purestorage.yml: -------------------------------------------------------------------------------- 1 | flasharray: 2 | modules: 3 | - storage/purestorage/purefa_alert.py 4 | - storage/purestorage/purefa_arrayname.py 5 | - storage/purestorage/purefa_banner.py 6 | - storage/purestorage/purefa_connect.py 7 | - storage/purestorage/purefa_dns.py 8 | - storage/purestorage/purefa_ds.py 9 | - storage/purestorage/purefa_dsrole.py 10 | - storage/purestorage/purefa_hg.py 11 | - storage/purestorage/purefa_host.py 12 | - storage/purestorage/purefa_info.py 13 | - storage/purestorage/purefa_ntp.py 14 | - storage/purestorage/purefa_offload.py 15 | - storage/purestorage/purefa_pg.py 16 | - storage/purestorage/purefa_pgsnap.py 17 | - storage/purestorage/purefa_phonehome.py 18 | - storage/purestorage/purefa_ra.py 19 | - storage/purestorage/purefa_smtp.py 20 | - storage/purestorage/purefa_snap.py 21 | - storage/purestorage/purefa_snmp.py 22 | - storage/purestorage/purefa_syslog.py 23 | - storage/purestorage/purefa_user.py 24 | - storage/purestorage/purefa_vg.py 25 | - storage/purestorage/purefa_volume.py 26 | flashblade: 27 | modules: 28 | - storage/purestorage/purefb_bucket.py 29 | - storage/purestorage/purefb_ds.py 30 | - storage/purestorage/purefb_dsrole.py 31 | - storage/purestorage/purefb_fs.py 32 | - storage/purestorage/purefb_info.py 33 | - storage/purestorage/purefb_network.py 34 | - storage/purestorage/purefb_ra.py 35 | - storage/purestorage/purefb_s3acc.py 36 | - storage/purestorage/purefb_s3user.py 37 | - storage/purestorage/purefb_smtp.py 38 | - storage/purestorage/purefb_snap.py 39 | - storage/purestorage/purefb_subnet.py 40 | -------------------------------------------------------------------------------- /scenarios/nwo/servicenow.yml: -------------------------------------------------------------------------------- 1 | servicenow: 2 | doc_fragments: 3 | - service_now.py 4 | module_utils: 5 | - service_now.py 6 | modules: 7 | - notification/snow_record.py 8 | - notification/snow_record_find.py 9 | -------------------------------------------------------------------------------- /scenarios/nwo/skydive.yml: -------------------------------------------------------------------------------- 1 | skydive: 2 | doc_fragments: 3 | - skydive.py 4 | lookup: 5 | - skydive.py 6 | module_utils: 7 | - network/skydive/* 8 | modules: 9 | - network/skydive/* 10 | -------------------------------------------------------------------------------- /scenarios/nwo/splunk.yml: -------------------------------------------------------------------------------- 1 | enterprise_security: 2 | httpapi: 3 | - splunk.py 4 | -------------------------------------------------------------------------------- /scenarios/nwo/theforeman.yml: -------------------------------------------------------------------------------- 1 | foreman: 2 | inventory: 3 | - foreman.py 4 | callback: 5 | - foreman.py 6 | -------------------------------------------------------------------------------- /scenarios/nwo/vyos.yml: -------------------------------------------------------------------------------- 1 | vyos: 2 | action: 3 | - vyos.py 4 | cliconf: 5 | - vyos.py 6 | doc_fragments: 7 | - vyos.py 8 | integration: 9 | - vyos_*/* 10 | - vyos_*/*/* 11 | - vyos_*/*/*/* 12 | module_utils: 13 | - network/vyos/* 14 | - network/vyos/*/* 15 | - network/vyos/*/*/* 16 | modules: 17 | - network/vyos/* 18 | terminal: 19 | - vyos.py 20 | -------------------------------------------------------------------------------- /scenarios/nwo/wti.yml: -------------------------------------------------------------------------------- 1 | remote: 2 | lookup: 3 | - cpm_metering.py 4 | - cpm_status.py 5 | modules: 6 | - remote_management/cpm/cpm_plugconfig.py 7 | - remote_management/cpm/cpm_plugcontrol.py 8 | - remote_management/cpm/cpm_serial_port_config.py 9 | - remote_management/cpm/cpm_serial_port_info.py 10 | - remote_management/cpm/cpm_user.py 11 | 12 | -------------------------------------------------------------------------------- /scenarios/stdlib/README.md: -------------------------------------------------------------------------------- 1 | This scenario moves ALL plugins out of ansible, use with -m to get a 'bare bones ansible' to see how it executes w/o any plugins: 2 | 3 | - This does not work as Ansible internally requires plugins to function 4 | - Redefine this to add content back. 5 | -------------------------------------------------------------------------------- /template_utils.py: -------------------------------------------------------------------------------- 1 | """Helpers for working with Jinja2 templates.""" 2 | from pathlib import Path 3 | 4 | from jinja2 import Template 5 | 6 | 7 | def render_template_into(template_path: str, context: dict, target_path: str): 8 | """Render the template on a given path.""" 9 | template_content = (Path('resources') / template_path).read_text() 10 | rendered_content = Template(template_content).render(context) 11 | Path(target_path).write_text(rendered_content) 12 | -------------------------------------------------------------------------------- /undolinks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | find $1 -type l |parallel 'cp --remove-destination $(readlink -f {}) {}' 4 | --------------------------------------------------------------------------------