Browse code

Docs [2.10] Backportapalooza 6 (#71129)

* Misc typo fixes (#71089)

(cherry picked from commit 504ef607f350f0411fede8576d8feb2b0195cc70)

* Add some documentation for the format of meta/runtime.yml (#71035)

* Document the format of meta/runtime.yml

* Document multiple Ansible versions

Clarify difference between deprecation and tombstone fields

* add note

(cherry picked from commit a9eb8b04882669bd17cd82780c908863e7504886)

* add note to uninstall older versions of ansible for pip (#71023)

* add note to uninstall older versions of ansible for pip

* combine with the other PR

(cherry picked from commit 72d3d441632d0e6ef6d2a057392f8165ffd8c65a)

* VMware: Inventory scenario guide for hostnames (#71055)

Added a scenario guide for ``hostnames`` parameter
for vmware_vm_inventory.

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit 0055673c704afd555053d6e2239ac2666ad60e56)

* Document string tests a bit more (#71049)

- Explain how `regex` differs from `match` and `search`.
- Document `multiline` and `ignorecase`.

Signed-off-by: Rick Elrod <rick@elrod.me>
(cherry picked from commit 701c638757949280c875edc0eb364ee0e63db4bb)

* docs: Add a note about package requirements for fact gathering (#70796)

Fixes: #26148

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit a6725d6e2af2f950979a0ed370aee786daabf926)

* added note about fakeroot (#71018)

see #70895

(cherry picked from commit 11a31e99e6b3395b624a7c74ea64b055434c9ea1)

* Update documentation of httpapi's handle_httperror method for clarity (#70991)

(cherry picked from commit a0523e5b8a7c183b59836ad891c2af8b6c091ebb)

* DOCS: add 2.10 collections roadmap (#70975)

* draft of 2.10 collections roadmap

* incorporates feedback from felixfontein

* gundalow and samccann feedback, fix link

Co-authored-by: Alicia Cozine <acozine@users.noreply.github.com>
(cherry picked from commit 9879da8e23b01405c20529d700cc38c7863853db)

* updates changelog types; some updates for easier translation (#71027)

Co-authored-by: Alicia Cozine <acozine@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 4f4436c1240d38bd95829fd0fc31e456864dc24a)

* Document common return values with examples (#71046)

* adding return value examples
* shift to console code blocks
* cleaning up whitespace and shortening invocation example
* reordering diff section

(cherry picked from commit 864573a38d109fa5299b57ce2eefd0aa2bbfef5e)

* Update intro_getting_started.rst (#71039)

Added two additional learning resources in the See also: section- forgot closing backticks

(cherry picked from commit 9850915bd61d7e25d02907ce2b990e73beb27854)

* Guide users to use ansible-runner (#71063)

Update the docs to guide users to use `ansible-runner` instead of using Python API directly. In many use cases, executing Ansible playbooks are sufficient. In those use cases, `ansible-runner` is easier and much stable to use comparing with Python API, but there is no mention of it.

(cherry picked from commit 0c855dc70bde3b737329689823be03496026d976)

* Porting guides for ansible-base 2.10 and ansible 2.10 (#70891)

* Fix changelog link title.

* Rename Ansible 2.10 and 2.11 porting guides to Ansible-base porting guides.

* Add stub for automatically generated 2.10 porting guide.

* Move things that should not be in the ansible-base porting guide to the ansible porting guide.

* Apply changes to base porting guides.

* Add remark that ansible-base is mainly for developers.

* Ansible Base -> Ansible-base

* Fix link in base porting guide.

* Add generated porting guide.

* Use same header signs as antsibull-changelog's RST builder.

* Update generated porting guide.

(cherry picked from commit 61b36c6f3087614cc7ed1a2cca590f74de8d7188)

* Update network platform guides with FQCN (#70699)

* fqcn all the docs things!

(cherry picked from commit 54bee7152b70409f751aefb4affafdd3867df87b)

* Document how to upgrade to ansible with pip (#70768)

Fixes #70348

(cherry picked from commit 50193356605a9f96caf7772c331ff0950afa4c7c)

* document how to migrate between collections (#70243)

* document how to migrate between collections
* Apply suggestions from code review

Co-authored-by: John R Barker <john@johnrbarker.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 58145dff9ca1a713f8ed295a0076779a91c41cba)

* remove github link from plugins (#70951)

(cherry picked from commit e28b20d72930ad8c0a359de05e05726090165fda)

* Add latest rc from ansible-base (#70974)

* Add latest rc from ansible-base

(cherry picked from commit d62dffafb3671dfc331eef6a847dde05b24a73d0)

* Document to_json will convert to ASCII strings by default (#70954)

... as reported in issue #68702

(cherry picked from commit 8c48366f1c2b184341ae1d0b9d62eb6bd0df506a)

* Update the porting guide for ansible-2.10.0a8 (#71141)

(cherry picked from commit 0a9638ce4bf7f1b4a87c68dc3ca8cd05249d79be)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
Co-authored-by: Sloane Hertel <shertel@redhat.com>
Co-authored-by: Rick Elrod <rick@elrod.me>
Co-authored-by: Brian Coca <bcoca@users.noreply.github.com>
Co-authored-by: Nathaniel Case <ncase@redhat.com>
Co-authored-by: Alicia Cozine <879121+acozine@users.noreply.github.com>
Co-authored-by: Terciero <terciero@users.noreply.github.com>
Co-authored-by: Brendon O'Sullivan <49501251+bjosullivan@users.noreply.github.com>
Co-authored-by: EthanHur <ethan0311@gmail.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Baptiste Mille-Mathias <baptiste.millemathias@gmail.com>
Co-authored-by: Toshio Kuratomi <a.badger@gmail.com>

Sandra McCann authored on 2020/08/08 06:04:19
Showing 42 changed files
... ...
@@ -44,10 +44,14 @@
44 44
               <a href="{{ meta['github_url'] }}" class="fa fa-github"> {{ _('Edit on GitHub') }}</a>
45 45
             {% else %}
46 46
               <!-- Ansible-specific additions for modules etc -->
47
-                {% if pagename.endswith('_module') %}
48
-                  <a href="https://{{ github_host|default("github.com") }}/{{ github_user }}/{{ github_repo }}/{{ theme_vcs_pageview_mode|default("blob") }}/{{ github_module_version }}{{ meta.get('source', '') }}?description=%23%23%23%23%23%20SUMMARY%0A%3C!---%20Your%20description%20here%20--%3E%0A%0A%0A%23%23%23%23%23%20ISSUE%20TYPE%0A-%20Docs%20Pull%20Request%0A%0A%2Blabel:%20docsite_pr" class="fa fa-github"> {{ _('Edit on GitHub') }}</a>
49
-                {% elif pagename.startswith('plugins') and meta.get('source', None) %}
50
-                  <a href="https://{{ github_host|default("github.com") }}/{{ github_user }}/{{ github_repo }}/{{ theme_vcs_pageview_mode|default("blob") }}/{{ github_root_dir }}/{{ pagename }}.py?description=%23%23%23%23%23%20SUMMARY%0A%3C!---%20Your%20description%20here%20--%3E%0A%0A%0A%23%23%23%23%23%20ISSUE%20TYPE%0A-%20Docs%20Pull%20Request%0A%0A%2Blabel:%20docsite_pr" class="fa fa-github"> {{ _('Edit on GitHub') }}</a>
47
+                {% if (pagename.endswith('_module')) or (pagename.endswith('_become'))
48
+                  or (pagename.endswith('_cache')) or (pagename.endswith('_callback'))
49
+                  or (pagename.endswith('_connection')) or (pagename.endswith('_inventory'))
50
+                  or (pagename.endswith('_lookup')) or (pagename.endswith('_shell'))
51
+                  or (pagename.endswith('_strategy')) or (pagename.endswith('_vars'))
52
+                 %}
53
+                <!--  <a href="https://{{ github_host|default("github.com") }}/{{ github_user }}/{{ github_repo }}/{{ theme_vcs_pageview_mode|default("blob") }}/{{ github_module_version }}{{ meta.get('source', '') }}?description=%23%23%23%23%23%20SUMMARY%0A%3C!---%20Your%20description%20here%20--%3E%0A%0A%0A%23%23%23%23%23%20ISSUE%20TYPE%0A-%20Docs%20Pull%20Request%0A%0A%2Blabel:%20docsite_pr" class="fa fa-github"> {{ _('Edit on GitHub') }}</a> -->
54
+                  <br>
51 55
                 {% elif pagename.startswith('cli') and meta.get('source', None) %}
52 56
                   <a href="https://{{ github_host|default("github.com") }}/{{ github_user }}/{{ github_repo }}/{{ theme_vcs_pageview_mode|default("blob") }}/{{ github_cli_version }}{{ meta.get('source', '') }}?description=%23%23%23%23%23%20SUMMARY%0A%3C!---%20Your%20description%20here%20--%3E%0A%0A%0A%23%23%23%23%23%20ISSUE%20TYPE%0A-%20Docs%20Pull%20Request%0A%0A%2Blabel:%20docsite_pr" class="fa fa-github"> {{ _('Edit on GitHub') }}</a>
53 57
                 {% elif (not 'list_of' in pagename) and (not 'category' in pagename) %}
... ...
@@ -43,7 +43,7 @@ Here's an overview of the PR lifecycle:
43 43
 Automated PR review: ansibullbot
44 44
 --------------------------------
45 45
 
46
-Because Ansible receives many pull requests, and because we love automating things, we've automated several steps of the process of reviewing and merging pull requests with a tool called Ansibullbot, or Ansibot for short.
46
+Because Ansible receives many pull requests, and because we love automating things, we have automated several steps of the process of reviewing and merging pull requests with a tool called Ansibullbot, or Ansibot for short.
47 47
 
48 48
 `Ansibullbot <https://github.com/ansible/ansibullbot/blob/master/ISSUE_HELP.md>`_ serves many functions:
49 49
 
... ...
@@ -139,11 +139,7 @@ We don't merge every PR. Here are some tips for making your PR useful, attractiv
139 139
 Changelogs
140 140
 ----------
141 141
 
142
-Changelogs help users and developers keep up with changes to Ansible.
143
-Ansible builds a changelog for each release from fragments.
144
-You **must** add a changelog fragment to any PR that changes functionality or fixes a bug in ansible-base.
145
-You don't have to add a changelog fragment for PRs that add new
146
-modules and plugins, because our tooling does that for you automatically.
142
+Changelogs help users and developers keep up with changes to Ansible. Ansible builds a changelog for each release from fragments. You **must** add a changelog fragment to any PR that changes functionality or fixes a bug in ansible-base. You do not have to add a changelog fragment for PRs that add new modules and plugins, because our tooling does that for you automatically.
147 143
 
148 144
 We build short summary changelogs for minor releases as well as for major releases. If you backport a bugfix, include a changelog fragment with the backport PR.
149 145
 
... ...
@@ -152,35 +148,29 @@ We build short summary changelogs for minor releases as well as for major releas
152 152
 Creating a changelog fragment
153 153
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
154 154
 
155
-A basic changelog fragment is a ``.yaml`` file placed in the
156
-``changelogs/fragments/`` directory.  Each file contains a yaml dict with
157
-keys like ``bugfixes`` or ``major_changes`` followed by a list of
158
-changelog entries of bugfixes or features.  Each changelog entry is
159
-rst embedded inside of the yaml file which means that certain
160
-constructs would need to be escaped so they can be interpreted by rst
161
-and not by yaml (or escaped for both yaml and rst if that's your
162
-desire).  Each PR **must** use a new fragment file rather than adding to
163
-an existing one, so we can trace the change back to the PR that introduced it.
155
+A basic changelog fragment is a ``.yaml`` file placed in the ``changelogs/fragments/`` directory.  Each file contains a yaml dict with keys like ``bugfixes`` or ``major_changes`` followed by a list of changelog entries of bugfixes or features.  Each changelog entry is rst embedded inside of the yaml file which means that certain constructs would need to be escaped so they can be interpreted by rst and not by yaml (or escaped for both yaml and rst if you prefer).  Each PR **must** use a new fragment file rather than adding to an existing one, so we can trace the change back to the PR that introduced it.
164 156
 
165
-To create a changelog entry, create a new file with a unique name in the ``changelogs/fragments/`` directory of corresponding repository.
166
-The file name should include the PR number and a description of the change.
167
-It must end with the file extension ``.yaml``. For example: ``40696-user-backup-shadow-file.yaml``
157
+To create a changelog entry, create a new file with a unique name in the ``changelogs/fragments/`` directory of the corresponding repository. The file name should include the PR number and a description of the change. It must end with the file extension ``.yaml``. For example: ``40696-user-backup-shadow-file.yaml``
168 158
 
169
-A single changelog fragment may contain multiple sections but most will only contain one section.
170
-The toplevel keys (bugfixes, major_changes, and so on) are defined in the
171
-`config file <https://github.com/ansible/ansible/blob/devel/changelogs/config.yaml>`_ for our release note tool. Here are the valid sections and a description of each:
159
+A single changelog fragment may contain multiple sections but most will only contain one section. The toplevel keys (bugfixes, major_changes, and so on) are defined in the `config file <https://github.com/ansible/ansible/blob/devel/changelogs/config.yaml>`_ for our `release note tool <https://github.com/ansible-community/antsibull-changelog/blob/main/docs/changelogs.rst>`_. Here are the valid sections and a description of each:
160
+
161
+**breaking_changes**
162
+  Changes that break existing playbooks or roles. This includes any change to existing behavior that forces users to update tasks. Displayed in both the changelogs and the :ref:`Porting Guides <porting_guides>`.
172 163
 
173 164
 **major_changes**
174
-  Major changes to Ansible itself. Generally does not include module or plugin changes.
165
+  Major changes to Ansible itself. Generally does not include module or plugin changes. Displayed in both the changelogs and the :ref:`Porting Guides <porting_guides>`.
175 166
 
176 167
 **minor_changes**
177 168
   Minor changes to Ansible, modules, or plugins. This includes new features, new parameters added to modules, or behavior changes to existing parameters.
178 169
 
179 170
 **deprecated_features**
180
-  Features that have been deprecated and are scheduled for removal in a future release.
171
+  Features that have been deprecated and are scheduled for removal in a future release. Displayed in both the changelogs and the :ref:`Porting Guides <porting_guides>`.
181 172
 
182 173
 **removed_features**
183
-  Features that were previously deprecated and are now removed.
174
+  Features that were previously deprecated and are now removed. Displayed in both the changelogs and the :ref:`Porting Guides <porting_guides>`.
175
+
176
+**security_fixes**
177
+  Fixes that address CVEs or resolve security concerns. Include links to CVE information.
184 178
 
185 179
 **bugfixes**
186 180
   Fixes that resolve issues.
... ...
@@ -188,8 +178,7 @@ The toplevel keys (bugfixes, major_changes, and so on) are defined in the
188 188
 **known_issues**
189 189
   Known issues that are currently not fixed or will not be fixed.
190 190
 
191
-Each changelog entry must contain a link to its issue between parentheses at the end.
192
-If there is no corresponding issue, the entry must contain a link to the PR itself.
191
+Each changelog entry must contain a link to its issue between parentheses at the end. If there is no corresponding issue, the entry must contain a link to the PR itself.
193 192
 
194 193
 Most changelog entries will be ``bugfixes`` or ``minor_changes``. When writing a changelog entry that pertains to a particular module, start the entry with ``- [module name] -`` and the following sentence with a lowercase letter.
195 194
 
... ...
@@ -222,9 +211,7 @@ Once you've written the changelog fragment for your PR, commit the file and incl
222 222
 Backporting merged PRs
223 223
 ======================
224 224
 
225
-All Ansible PRs must be merged to the ``devel`` branch first.
226
-After a pull request has been accepted and merged to the ``devel`` branch, the following instructions will help you create a
227
-pull request to backport the change to a previous stable branch.
225
+All Ansible PRs must be merged to the ``devel`` branch first. After a pull request has been accepted and merged to the ``devel`` branch, the following instructions will help you create a pull request to backport the change to a previous stable branch.
228 226
 
229 227
 We do **not** backport features.
230 228
 
... ...
@@ -6,7 +6,7 @@ Python API
6 6
 
7 7
 .. contents:: Topics
8 8
 
9
-.. note:: This API is intended for internal Ansible use. Ansible may make changes to this API at any time that could break backward compatibility with older versions of the API. Because of this, external use is not supported by Ansible.
9
+.. note:: This API is intended for internal Ansible use. Ansible may make changes to this API at any time that could break backward compatibility with older versions of the API. Because of this, external use is not supported by Ansible. If you want to use Python API only for executing playbooks or modules, consider `ansible-runner <https://ansible-runner.readthedocs.io/en/latest/>`_ first.
10 10
 
11 11
 There are several ways to use Ansible from an API perspective.   You can use
12 12
 the Ansible Python API to control nodes, you can extend Ansible to respond to various Python events, you can
... ...
@@ -25,6 +25,8 @@ Collections follow a simple data structure. None of the directories are required
25 25
     collection/
26 26
     ├── docs/
27 27
     ├── galaxy.yml
28
+    ├── meta/
29
+    │   └── runtime.yml
28 30
     ├── plugins/
29 31
     │   ├── modules/
30 32
     │   │   └── module1.py
... ...
@@ -194,6 +196,64 @@ command completion, or environment variables are presented throughout the
194 194
 Ansible Collection Testing because the act of installing the stable release of
195 195
 Ansible containing `ansible-test` is expected to setup those things for you.
196 196
 
197
+.. _meta_runtime_yml:
198
+
199
+meta directory
200
+--------------
201
+
202
+A collection can store some additional metadata in a ``runtime.yml`` file in the collection's ``meta`` directory. The ``runtime.yml`` file supports the top level keys:
203
+
204
+- *requires_ansible*:
205
+
206
+  The version of Ansible required to use the collection. Multiple versions can be separated with a comma.
207
+
208
+  .. code:: yaml
209
+
210
+     requires_ansible: ">=2.10,<2.11"
211
+
212
+  .. note:: although the version is a `PEP440 Version Specifier <https://www.python.org/dev/peps/pep-0440/#version-specifiers>`_ under the hood, Ansible deviates from PEP440 behavior by truncating prerelease segments from the Ansible version. This means that Ansible 2.11.0b1 is compatible with something that ``requires_ansible: ">=2.11"``.
213
+
214
+- *plugin_routing*:
215
+
216
+  Content in a collection that Ansible needs to load from another location or that has been deprecated/removed.
217
+  The top level keys of ``plugin_routing`` are types of plugins, with individual plugin names as subkeys.
218
+  To define a new location for a plugin, set the ``redirect`` field to another name.
219
+  To deprecate a plugin, use the ``deprecation`` field to provide a custom warning message and the removal date or version. If the plugin has been renamed or moved to a new location, the ``redirect`` field should also be provided. If a plugin is being removed entirely, ``tombstone`` can be used for the fatal error message and removal date or version.
220
+
221
+  .. code:: yaml
222
+
223
+     plugin_routing:
224
+       inventory:
225
+         kubevirt:
226
+           redirect: community.general.kubevirt
227
+         my_inventory:
228
+           tombstone:
229
+             removal_version: "2.0.0"
230
+             warning_text: my_inventory has been removed. Please use other_inventory instead.
231
+       modules:
232
+         my_module:
233
+           deprecation:
234
+             removal_date: "2021-11-30"
235
+             warning_text: my_module will be removed in a future release of this collection. Use another.collection.new_module instead.
236
+           redirect: another.collection.new_module
237
+         podman_image:
238
+           redirect: containers.podman.podman_image
239
+       module_utils:
240
+         ec2:
241
+           redirect: amazon.aws.ec2
242
+         util_dir.subdir.my_util:
243
+           redirect: namespace.name.my_util
244
+
245
+- *import_redirection*
246
+
247
+  A mapping of names for Python import statements and their redirected locations.
248
+
249
+  .. code:: yaml
250
+
251
+     import_redirection:
252
+       ansible.module_utils.old_utility:
253
+         redirect: ansible_collections.collection_name.plugins.module_utils.new_location
254
+
197 255
 
198 256
 .. _creating_collections_skeleton:
199 257
 
... ...
@@ -469,16 +529,63 @@ Collection versions use `Semantic Versioning <https://semver.org/>`_ for version
469 469
 
470 470
 .. _migrate_to_collection:
471 471
 
472
-Migrating Ansible content to a collection
473
-=========================================
472
+Migrating Ansible content to a different collection
473
+====================================================
474
+
475
+To migrate content from one collection to another, you need to create three PRs as follows:
476
+
477
+#. Create a PR against the old collection to remove the content.
478
+#. Create a PR against the new collection to add the files removed in step 1.
479
+#. Update the ``ansible/ansible:devel`` branch entries for all files moved.
480
+
481
+
482
+Removing the content from the old collection
483
+----------------------------------------------
484
+
485
+Create a PR against the old collection repo to remove the modules, module_utils, plugins, and docs_fragments related to this migration:
486
+
487
+#. If you are removing an action plugin, remove the corresponding module that contains the documentation.
488
+#. If you are removing a module, remove any corresponding action plugin that should stay with it.
489
+#. Remove any entries about removed plugins from ``meta/runtime.yml``. Ensure they are added into the new repo.
490
+#. Remove sanity ignore lines from ``tests/sanity/ignore\*.txt``
491
+#. Remove associated integration tests from ``tests/integrations/targets/`` and unit tests from ``tests/units/plugins/``.
492
+#. if you are removing from content from ``community.general`` or ``community.network``, remove entries from ``.github/BOTMETA.yml``.
493
+#. Carefully review ``meta/runtime.yml`` for any entries you may need to remove or update, in particular deprecated entries.
494
+#. Update ``meta/runtime.yml`` to contain redirects for EVERY PLUGIN, pointing to the new collection name.
495
+#. If possible, do not yet add deprecation warnings to the new ``meta/runtime.yml`` entries, but only for a later major release. So the order should be:
496
+    1. Remove content, add redirects in 3.0.0;
497
+    2. Deprecate redirects in 4.0.0;
498
+    3. Set removal version to 5.0.0 or later.
474 499
 
475
-You can experiment with migrating existing modules into a collection using the `content_collector tool <https://github.com/ansible/content_collector>`_. The ``content_collector`` is a playbook that helps you migrate content from an Ansible distribution into a collection.
476 500
 
477 501
 .. warning::
478 502
 
479
-	This tool is in active development and is provided only for experimentation and feedback at this point.
503
+	Maintainers for the old collection have to make sure that the PR is merged in a way that it does not break user experience and semantic versioning:
504
+
505
+	#. A new version containing the merged PR must not be released before the collection the content has been moved to has been released again, with that content contained in it. Otherwise the redirects cannot work and users relying on that content will experience breakage.
506
+	#. Once 1.0.0 of the collection from which the content has been removed has been released, such PRs can only be merged for a new **major** version (i.e. 2.0.0, 3.0.0, etc.).
507
+
508
+
509
+Adding the content to the new collection
510
+-----------------------------------------
511
+
512
+Create a PR in the new collection to:
513
+
514
+#. Add ALL the files removed in first PR (from the old collection).
515
+#. If it is an action plugin, include the corresponding module with documentation.
516
+#. If it is a module, check if it has a corresponding action plugin that should move with it.
517
+#. Check ``meta/ `` for relevant updates to ``action_groups.yml`` and ``runtime.yml`` if they exist.
518
+#. Carefully check the moved ``tests/integration`` and ``tests/units`` and update for FQCN.
519
+#. Review ``tests/sanity/ignore-\*.txt`` entries.
520
+#. Update ``meta/runtime.yml``.
521
+
522
+Updating ``ansible/ansible:devel`` branch entries for all files moved
523
+----------------------------------------------------------------------
524
+
525
+Create a third PR on ``ansible/ansible`` repository to:
480 526
 
481
-See the `content_collector README <https://github.com/ansible/content_collector>`_ for full details and usage guidelines.
527
+#. Update ``lib/ansible/config/ansible_builtin_runtime.yml`` (the redirect entry).
528
+#. Update ``.github/BOTMETA.yml`` (the migrated_to entry)
482 529
 
483 530
 BOTMETA.yml
484 531
 -----------
... ...
@@ -486,7 +593,6 @@ BOTMETA.yml
486 486
 The `BOTMETA.yml <https://github.com/ansible/ansible/blob/devel/.github/BOTMETA.yml>`_ in the ansible/ansible GitHub repository is the source of truth for:
487 487
 
488 488
 * ansibullbot
489
-* the docs build for collections-based modules
490 489
 
491 490
 Ansibulbot will know how to redirect existing issues and PRs to the new repo.
492 491
 The build process for docs.ansible.com will know where to find the module docs.
... ...
@@ -232,6 +232,10 @@ The preferred way to install Ansible on a Mac is with ``pip``.
232 232
 
233 233
 The instructions can be found in :ref:`from_pip`. If you are running macOS version 10.12 or older, then you should upgrade to the latest ``pip`` to connect to the Python Package Index securely. It should be noted that pip must be run as a module on macOS, and the linked ``pip`` instructions will show you how to do that.
234 234
 
235
+.. note::
236
+
237
+	If you have Ansible 2.9 or older installed, you need to use ``pip uninstall ansible`` first to remove older versions of Ansible before re-installing it.
238
+
235 239
 If you are installing on macOS Mavericks (10.9), you may encounter some noise from your compiler. A workaround is to do the following::
236 240
 
237 241
     $ CFLAGS=-Qunused-arguments CPPFLAGS=-Qunused-arguments pip install --user ansible
... ...
@@ -301,6 +305,10 @@ Ansible can be installed with ``pip``, the Python package manager. If ``pip`` is
301 301
     $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
302 302
     $ python get-pip.py --user
303 303
 
304
+.. note::
305
+
306
+  	If you have Ansible 2.9 or older installed, you need to use ``pip uninstall ansible`` first to remove older versions of Ansible before re-installing it.
307
+
304 308
 Then install Ansible [1]_::
305 309
 
306 310
     $ python -m pip install --user ansible
... ...
@@ -324,6 +332,33 @@ If you wish to install Ansible globally, run the following commands::
324 324
     Please make sure you have the latest version of ``pip`` before installing Ansible.
325 325
     If you have an older version of ``pip`` installed, you can upgrade by following `pip's upgrade instructions <https://pip.pypa.io/en/stable/installing/#upgrading-pip>`_ .
326 326
 
327
+Upgrading Ansible from version 2.9 and older to version 2.10 or later
328
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
329
+
330
+Starting in version 2.10, Ansible is made of two packages. You need to first uninstall the old Ansible version (2.9 or earlier) before upgrading.
331
+If you do not uninstall the older version of Ansible, you will see the following message, and no change will be performed:
332
+
333
+.. code-block:: console
334
+
335
+    Cannot install ansible-base with a pre-existing ansible==2.x installation.
336
+
337
+    Installing ansible-base with ansible-2.9 or older currently installed with
338
+    pip is known to cause problems. Please uninstall ansible and install the new
339
+    version:
340
+
341
+    pip uninstall ansible
342
+    pip install ansible-base
343
+
344
+    ...
345
+
346
+As explained by the message, to upgrade you must first remove the version of Ansible installed and then install it
347
+to the latest version.
348
+
349
+.. code-block:: console
350
+
351
+    $ pip uninstall ansible
352
+    $ pip install ansible
353
+
327 354
 .. _from_pip_devel:
328 355
 
329 356
 Installing the development version of Ansible
... ...
@@ -333,6 +368,10 @@ Installing the development version of Ansible
333 333
 
334 334
     You should only run Ansible from ``devel`` if you are modifying the Ansible engine, or trying out features under development. This is a rapidly changing source of code and can become unstable at any point.
335 335
 
336
+.. note::
337
+
338
+    If you have Ansible 2.9 or older installed, you need to use ``pip uninstall ansible`` first to remove older versions of Ansible before re-installing it.
339
+
336 340
 The development version of Ansible can be directly installed from GitHub with pip::
337 341
 
338 342
     $ python -m pip install --user https://github.com/ansible/ansible/archive/devel.tar.gz
... ...
@@ -348,6 +387,10 @@ See :ref:`from_source` for instructions on how to run Ansible directly from sour
348 348
 Virtual Environments
349 349
 ^^^^^^^^^^^^^^^^^^^^
350 350
 
351
+.. note::
352
+
353
+	If you have Ansible 2.9 or older installed, you need to use ``pip uninstall ansible`` first to remove older versions of Ansible before re-installing it.
354
+
351 355
 Ansible can also be installed inside a new or existing ``virtualenv``::
352 356
 
353 357
     $ python -m virtualenv ansible  # Create a virtualenv if one does not already exist
... ...
@@ -113,7 +113,9 @@ The ``handle_httperror(self, exception)`` method can deal with status codes retu
113 113
 
114 114
 * A value of ``true`` means that the request can be retried. This my be used to indicate a transient error, or one that has been resolved. For example, the default implementation will try to call ``login()`` when presented with a 401, and return ``true`` if successful.
115 115
 
116
-* A value of ``false`` means that the plugin is unable to recover from this response. The status code will be returned to the calling module as an exception. Any other value will be taken as a nonfatal response from the request. This may be useful if the server returns error messages in the body of the response. Returning the original exception is usually sufficient in this case, as HTTPError objects have the same interface as a successful response.
116
+* A value of ``false`` means that the plugin is unable to recover from this response. The status code will be raised as an exception to the calling module.
117
+
118
+* Any other value will be taken as a nonfatal response from the request. This may be useful if the server returns error messages in the body of the response. Returning the original exception is usually sufficient in this case, as HTTPError objects have the same interface as a successful response.
117 119
 
118 120
 For example httpapi plugins, see the `source code for the httpapi plugins <https://github.com/ansible/ansible/tree/devel/lib/ansible/plugins/httpapi>`_ included with Ansible Core.
119 121
 
... ...
@@ -4,11 +4,12 @@
4 4
 CloudEngine OS Platform Options
5 5
 ***************************************
6 6
 
7
-CloudEngine CE OS supports multiple connections. This page offers details on how each connection works in Ansible and how to use it.
7
+CloudEngine CE OS is part of the `community.network <https://galaxy.ansible.com/community/network>`_ collection and supports multiple connections. This page offers details on how each connection works in Ansible and how to use it.
8 8
 
9
-.. contents:: Topics
9
+.. contents::
10
+  :local:
10 11
 
11
-Connections Available
12
+Connections available
12 13
 ================================================================================
13 14
 
14 15
 .. table::
... ...
@@ -27,7 +28,8 @@ Connections Available
27 27
 
28 28
     Indirect Access       via a bastion (jump host)                   via a bastion (jump host)
29 29
 
30
-    Connection Settings   ``ansible_connection: network_cli``         ``ansible_connection: netconf``
30
+    Connection Settings   ``ansible_connection:``                     ``ansible_connection:``
31
+                            ``ansible.netcommon.network_cli``           ``ansible.netcommon.netconf``
31 32
 
32 33
     |enable_mode|         not supported by ce OS                      not supported by ce OS
33 34
 
... ...
@@ -36,7 +38,7 @@ Connections Available
36 36
 
37 37
 .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation)
38 38
 
39
-For legacy playbooks, Ansible still supports ``ansible_connection=local`` on all CloudEngine modules. We recommend modernizing to use ``ansible_connection=netconf`` or ``ansible_connection=network_cli`` as soon as possible.
39
+The ``ansible_connection: local`` has been deprecated. Please use  ``ansible_connection: ansible.netcommon.netconf`` or ``ansible_connection=ansible.netcommon.network_cli`` instead.
40 40
 
41 41
 Using CLI in Ansible
42 42
 ====================
... ...
@@ -47,8 +49,8 @@ Example CLI inventory ``[ce:vars]``
47 47
 .. code-block:: yaml
48 48
 
49 49
    [ce:vars]
50
-   ansible_connection=network_cli
51
-   ansible_network_os=ce
50
+   ansible_connection=ansible.netcommon.network_cli
51
+   ansible_network_os=community.network.ce
52 52
    ansible_user=myuser
53 53
    ansible_password=!vault...
54 54
    ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q bastion01"'
... ...
@@ -58,15 +60,15 @@ Example CLI inventory ``[ce:vars]``
58 58
 - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration.
59 59
 - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables.
60 60
 
61
-Example CLI Task
61
+Example CLI task
62 62
 ----------------
63 63
 
64 64
 .. code-block:: yaml
65 65
 
66 66
    - name: Retrieve CE OS version
67
-     ce_command:
67
+     community.network.ce_command:
68 68
        commands: display version
69
-     when: ansible_network_os == 'ce'
69
+     when: ansible_network_os == 'community.network.ce'
70 70
 
71 71
 
72 72
 Using NETCONF in Ansible
... ...
@@ -80,16 +82,16 @@ Before you can use NETCONF to connect to a switch, you must:
80 80
 - install the ``ncclient`` python package on your control node(s) with ``pip install ncclient``
81 81
 - enable NETCONF on the CloudEngine OS device(s)
82 82
 
83
-To enable NETCONF on a new switch via Ansible, use the ``ce_config`` module via the CLI connection. Set up your platform-level variables just like in the CLI example above, then run a playbook task like this:
83
+To enable NETCONF on a new switch using Ansible, use the ``community.network.ce_config`` module with the CLI connection. Set up your platform-level variables just like in the CLI example above, then run a playbook task like this:
84 84
 
85 85
 .. code-block:: yaml
86 86
 
87 87
    - name: Enable NETCONF
88
-     connection: network_cli
89
-     ce_config:
88
+     connection: ansible.netcommon.network_cli
89
+     community.network.ce_config:
90 90
        lines:
91 91
          - snetconf server enable
92
-     when: ansible_network_os == 'ce'
92
+     when: ansible_network_os == 'community.network.ce'
93 93
 
94 94
 Once NETCONF is enabled, change your variables to use the NETCONF connection.
95 95
 
... ...
@@ -99,110 +101,110 @@ Example NETCONF inventory ``[ce:vars]``
99 99
 .. code-block:: yaml
100 100
 
101 101
    [ce:vars]
102
-   ansible_connection=netconf
103
-   ansible_network_os=ce
102
+   ansible_connection=ansible.netcommon.netconf
103
+   ansible_network_os=community.network.ce
104 104
    ansible_user=myuser
105 105
    ansible_password=!vault |
106 106
    ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q bastion01"'
107 107
 
108 108
 
109
-Example NETCONF Task
109
+Example NETCONF task
110 110
 --------------------
111 111
 
112 112
 .. code-block:: yaml
113 113
 
114 114
    - name: Create a vlan, id is 50(ce)
115
-     ce_vlan:
115
+     community.network.ce_vlan:
116 116
        vlan_id: 50
117 117
        name: WEB
118
-     when: ansible_network_os == 'ce'
118
+     when: ansible_network_os == 'community.network.ce'
119 119
 
120 120
 
121 121
 Notes
122 122
 ========================
123 123
 
124
-Modules work with connection C(network_cli)
124
+Modules that work with ``ansible.netcommon.network_cli``
125
+---------------------------------------------------------
125 126
 
126 127
 .. code-block:: yaml
127 128
 
128
-   ce_acl_interface
129
-   ce_command
130
-   ce_config
131
-   ce_evpn_bgp
132
-   ce_evpn_bgp_rr
133
-   ce_evpn_global
134
-   ce_facts
135
-   ce_mlag_interface
136
-   ce_mtu
137
-   ce_netstream_aging
138
-   ce_netstream_export
139
-   ce_netstream_global
140
-   ce_netstream_template
141
-   ce_ntp_auth
142
-   ce_rollback
143
-   ce_snmp_contact
144
-   ce_snmp_location
145
-   ce_snmp_traps
146
-   ce_startup
147
-   ce_stp
148
-   ce_vxlan_arp
149
-   ce_vxlan_gateway
150
-   ce_vxlan_global
151
-
152
-
153
-Modules work with connection C(netconf)
129
+   community.network.ce_acl_interface
130
+   community.network.ce_command
131
+   community.network.ce_config
132
+   community.network.ce_evpn_bgp
133
+   community.network.ce_evpn_bgp_rr
134
+   community.network.ce_evpn_global
135
+   community.network.ce_facts
136
+   community.network.ce_mlag_interface
137
+   community.network.ce_mtu
138
+   community.network.ce_netstream_aging
139
+   community.network.ce_netstream_export
140
+   community.network.ce_netstream_global
141
+   community.network.ce_netstream_template
142
+   community.network.ce_ntp_auth
143
+   community.network.ce_rollback
144
+   community.network.ce_snmp_contact
145
+   community.network.ce_snmp_location
146
+   community.network.ce_snmp_traps
147
+   community.network.ce_startup
148
+   community.network.ce_stp
149
+   community.network.ce_vxlan_arp
150
+   community.network.ce_vxlan_gateway
151
+   community.network.ce_vxlan_global
152
+
153
+
154
+Modules that work with ``ansible.netcommon.netconf``
155
+-----------------------------------------------------
154 156
 
155 157
 .. code-block:: yaml
156 158
 
157
-   ce_aaa_server
158
-   ce_aaa_server_host
159
-   ce_acl
160
-   ce_acl_advance
161
-   ce_bfd_global
162
-   ce_bfd_session
163
-   ce_bfd_view
164
-   ce_bgp
165
-   ce_bgp_af
166
-   ce_bgp_neighbor
167
-   ce_bgp_neighbor_af
168
-   ce_dldp
169
-   ce_dldp_interface
170
-   ce_eth_trunk
171
-   ce_evpn_bd_vni
172
-   ce_file_copy
173
-   ce_info_center_debug
174
-   ce_info_center_global
175
-   ce_info_center_log
176
-   ce_info_center_trap
177
-   ce_interface
178
-   ce_interface_ospf
179
-   ce_ip_interface
180
-   ce_lacp
181
-   ce_link_status
182
-   ce_lldp
183
-   ce_lldp_interface
184
-   ce_mlag_config
185
-   ce_netconf
186
-   ce_ntp
187
-   ce_ospf
188
-   ce_ospf_vrf
189
-   ce_reboot
190
-   ce_sflow
191
-   ce_snmp_community
192
-   ce_snmp_target_host
193
-   ce_snmp_user
194
-   ce_static_route
195
-   ce_static_route_bfd
196
-   ce_switchport
197
-   ce_vlan
198
-   ce_vrf
199
-   ce_vrf_af
200
-   ce_vrf_interface
201
-   ce_vrrp
202
-   ce_vxlan_tunnel
203
-   ce_vxlan_vap
159
+   community.network.ce_aaa_server
160
+   community.network.ce_aaa_server_host
161
+   community.network.ce_acl
162
+   community.network.ce_acl_advance
163
+   community.network.ce_bfd_global
164
+   community.network.ce_bfd_session
165
+   community.network.ce_bfd_view
166
+   community.network.ce_bgp
167
+   community.network.ce_bgp_af
168
+   community.network.ce_bgp_neighbor
169
+   community.network.ce_bgp_neighbor_af
170
+   community.network.ce_dldp
171
+   community.network.ce_dldp_interface
172
+   community.network.ce_eth_trunk
173
+   community.network.ce_evpn_bd_vni
174
+   community.network.ce_file_copy
175
+   community.network.ce_info_center_debug
176
+   community.network.ce_info_center_global
177
+   community.network.ce_info_center_log
178
+   community.network.ce_info_center_trap
179
+   community.network.ce_interface
180
+   community.network.ce_interface_ospf
181
+   community.network.ce_ip_interface
182
+   community.network.ce_lacp
183
+   community.network.ce_link_status
184
+   community.network.ce_lldp
185
+   community.network.ce_lldp_interface
186
+   community.network.ce_mlag_config
187
+   community.network.ce_netconf
188
+   community.network.ce_ntp
189
+   community.network.ce_ospf
190
+   community.network.ce_ospf_vrf
191
+   community.network.ce_reboot
192
+   community.network.ce_sflow
193
+   community.network.ce_snmp_community
194
+   community.network.ce_snmp_target_host
195
+   community.network.ce_snmp_user
196
+   community.network.ce_static_route
197
+   community.network.ce_static_route_bfd
198
+   community.network.ce_switchport
199
+   community.network.ce_vlan
200
+   community.network.ce_vrf
201
+   community.network.ce_vrf_af
202
+   community.network.ce_vrf_interface
203
+   community.network.ce_vrrp
204
+   community.network.ce_vxlan_tunnel
205
+   community.network.ce_vxlan_vap
204 206
 
205 207
 .. include:: shared_snippets/SSH_warning.txt
206 208
 
... ...
@@ -4,11 +4,12 @@
4 4
 CNOS Platform Options
5 5
 ***************************************
6 6
 
7
-CNOS supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on CNOS in Ansible.
7
+CNOS is part of the `community.network <https://galaxy.ansible.com/community/network>`_ collection and supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on CNOS in Ansible.
8 8
 
9
-.. contents:: Topics
9
+.. contents::
10
+  :local:
10 11
 
11
-Connections Available
12
+Connections available
12 13
 ================================================================================
13 14
 
14 15
 .. table::
... ...
@@ -25,7 +26,7 @@ Connections Available
25 25
 
26 26
     Indirect Access       via a bastion (jump host)
27 27
 
28
-    Connection Settings   ``ansible_connection: network_cli``
28
+    Connection Settings   ``ansible_connection: ansible.netcommon.network_cli``
29 29
 
30 30
     |enable_mode|         supported: use ``ansible_become: yes``
31 31
                           with ``ansible_become_method: enable``
... ...
@@ -36,7 +37,7 @@ Connections Available
36 36
 
37 37
 .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation)
38 38
 
39
-For legacy playbooks, CNOS still supports ``ansible_connection: local``. We recommend modernizing to use ``ansible_connection: network_cli`` as soon as possible.
39
+The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead.
40 40
 
41 41
 Using CLI in Ansible
42 42
 ================================================================================
... ...
@@ -46,8 +47,8 @@ Example CLI ``group_vars/cnos.yml``
46 46
 
47 47
 .. code-block:: yaml
48 48
 
49
-   ansible_connection: network_cli
50
-   ansible_network_os: cnos
49
+   ansible_connection: ansible.netcommon.network_cli
50
+   ansible_network_os: community.network.cnos
51 51
    ansible_user: myuser
52 52
    ansible_password: !vault...
53 53
    ansible_become: yes
... ...
@@ -60,15 +61,15 @@ Example CLI ``group_vars/cnos.yml``
60 60
 - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration.
61 61
 - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables.
62 62
 
63
-Example CLI Task
63
+Example CLI task
64 64
 ----------------
65 65
 
66 66
 .. code-block:: yaml
67 67
 
68 68
    - name: Retrieve CNOS OS version
69
-     cnos_command:
69
+     community.network.cnos_command:
70 70
        commands: show version
71
-     when: ansible_network_os == 'cnos'
71
+     when: ansible_network_os == 'community.network.cnos'
72 72
 
73 73
 .. include:: shared_snippets/SSH_warning.txt
74 74
 
... ...
@@ -4,11 +4,12 @@
4 4
 Dell OS10 Platform Options
5 5
 ***************************************
6 6
 
7
-OS10 supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on OS10 in Ansible.
7
+The `dellemc.os10 <https://galaxy.ansible.com/dellemc_networking/os10>`_ collection supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on OS10 in Ansible.
8 8
 
9
-.. contents:: Topics
9
+.. contents::
10
+  :local:
10 11
 
11
-Connections Available
12
+Connections available
12 13
 ================================================================================
13 14
 
14 15
 .. table::
... ...
@@ -25,7 +26,7 @@ Connections Available
25 25
 
26 26
     Indirect Access       via a bastion (jump host)
27 27
 
28
-    Connection Settings   ``ansible_connection: network_cli``
28
+    Connection Settings   ``ansible_connection: ansible.netcommon.network_cli``
29 29
 
30 30
     |enable_mode|         supported: use ``ansible_become: yes``
31 31
                           with ``ansible_become_method: enable``
... ...
@@ -36,7 +37,8 @@ Connections Available
36 36
 
37 37
 .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation)
38 38
 
39
-For legacy playbooks, OS10 still supports ``ansible_connection: local``. We recommend modernizing to use ``ansible_connection: network_cli`` as soon as possible.
39
+The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead.
40
+
40 41
 
41 42
 Using CLI in Ansible
42 43
 ================================================================================
... ...
@@ -46,8 +48,8 @@ Example CLI ``group_vars/dellos10.yml``
46 46
 
47 47
 .. code-block:: yaml
48 48
 
49
-   ansible_connection: network_cli
50
-   ansible_network_os: dellos10
49
+   ansible_connection: ansible.netcommon.network_cli
50
+   ansible_network_os: dellemc.os10.os10
51 51
    ansible_user: myuser
52 52
    ansible_password: !vault...
53 53
    ansible_become: yes
... ...
@@ -60,16 +62,16 @@ Example CLI ``group_vars/dellos10.yml``
60 60
 - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration.
61 61
 - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables.
62 62
 
63
-Example CLI Task
63
+Example CLI task
64 64
 ----------------
65 65
 
66 66
 .. code-block:: yaml
67 67
 
68 68
    - name: Backup current switch config (dellos10)
69
-     dellos10_config:
69
+     dellemc.os10.os10_config:
70 70
        backup: yes
71 71
      register: backup_dellos10_location
72
-     when: ansible_network_os == 'dellos10'
72
+     when: ansible_network_os == 'dellemc.os10.os10'
73 73
 
74 74
 .. include:: shared_snippets/SSH_warning.txt
75 75
 
... ...
@@ -4,11 +4,12 @@
4 4
 Dell OS6 Platform Options
5 5
 ***************************************
6 6
 
7
-OS6 supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on OS6 in Ansible.
7
+The `dellemc.os6 <https://github.com/ansible-collections/dellemc.os6>`_ collection supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on OS6 in Ansible.
8 8
 
9
-.. contents:: Topics
9
+.. contents::
10
+  :local:
10 11
 
11
-Connections Available
12
+Connections available
12 13
 ================================================================================
13 14
 
14 15
 .. table::
... ...
@@ -25,7 +26,7 @@ Connections Available
25 25
 
26 26
     Indirect Access       via a bastion (jump host)
27 27
 
28
-    Connection Settings   ``ansible_connection: network_cli``
28
+    Connection Settings   ``ansible_connection: ansible.netcommon.network_cli``
29 29
 
30 30
     |enable_mode|         supported: use ``ansible_become: yes``
31 31
                           with ``ansible_become_method: enable``
... ...
@@ -36,7 +37,7 @@ Connections Available
36 36
 
37 37
 .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation)
38 38
 
39
-For legacy playbooks, OS6 still supports ``ansible_connection: local``. We recommend modernizing to use ``ansible_connection: network_cli`` as soon as possible.
39
+The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead.
40 40
 
41 41
 Using CLI in Ansible
42 42
 ================================================================================
... ...
@@ -46,8 +47,8 @@ Example CLI ``group_vars/dellos6.yml``
46 46
 
47 47
 .. code-block:: yaml
48 48
 
49
-   ansible_connection: network_cli
50
-   ansible_network_os: dellos6
49
+   ansible_connection: ansible.netcommon.network_cli
50
+   ansible_network_os: dellemc.os6.os6
51 51
    ansible_user: myuser
52 52
    ansible_password: !vault...
53 53
    ansible_become: yes
... ...
@@ -60,16 +61,16 @@ Example CLI ``group_vars/dellos6.yml``
60 60
 - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration.
61 61
 - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables.
62 62
 
63
-Example CLI Task
63
+Example CLI task
64 64
 ----------------
65 65
 
66 66
 .. code-block:: yaml
67 67
 
68 68
    - name: Backup current switch config (dellos6)
69
-     dellos6_config:
69
+     dellemc.os6.os6_config:
70 70
        backup: yes
71 71
      register: backup_dellso6_location
72
-     when: ansible_network_os == 'dellos6'
72
+     when: ansible_network_os == 'dellemc.os6.os6'
73 73
 
74 74
 .. include:: shared_snippets/SSH_warning.txt
75 75
 
... ...
@@ -4,11 +4,12 @@
4 4
 Dell OS9 Platform Options
5 5
 ***************************************
6 6
 
7
-OS9 supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on OS9 in Ansible.
7
+The `dellemc.os9 <https://github.com/ansible-collections/dellemc.os9>`_ collection  supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on OS9 in Ansible.
8 8
 
9
-.. contents:: Topics
9
+.. contents::
10
+  :local:
10 11
 
11
-Connections Available
12
+Connections available
12 13
 ================================================================================
13 14
 
14 15
 .. table::
... ...
@@ -25,7 +26,7 @@ Connections Available
25 25
 
26 26
     Indirect Access       via a bastion (jump host)
27 27
 
28
-    Connection Settings   ``ansible_connection: network_cli``
28
+    Connection Settings   ``ansible_connection: ansible.netcommon.network_cli``
29 29
 
30 30
     |enable_mode|         supported: use ``ansible_become: yes``
31 31
                           with ``ansible_become_method: enable``
... ...
@@ -36,7 +37,7 @@ Connections Available
36 36
 
37 37
 .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation)
38 38
 
39
-For legacy playbooks, OS9 still supports ``ansible_connection: local``. We recommend modernizing to use ``ansible_connection: network_cli`` as soon as possible.
39
+The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead.
40 40
 
41 41
 Using CLI in Ansible
42 42
 ================================================================================
... ...
@@ -46,8 +47,8 @@ Example CLI ``group_vars/dellos9.yml``
46 46
 
47 47
 .. code-block:: yaml
48 48
 
49
-   ansible_connection: network_cli
50
-   ansible_network_os: dellos9
49
+   ansible_connection: ansible.netcommon.network_cli
50
+   ansible_network_os: dellemc.os9.os9
51 51
    ansible_user: myuser
52 52
    ansible_password: !vault...
53 53
    ansible_become: yes
... ...
@@ -60,16 +61,16 @@ Example CLI ``group_vars/dellos9.yml``
60 60
 - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration.
61 61
 - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables.
62 62
 
63
-Example CLI Task
63
+Example CLI task
64 64
 ----------------
65 65
 
66 66
 .. code-block:: yaml
67 67
 
68 68
    - name: Backup current switch config (dellos9)
69
-     dellos9_config:
69
+     dellemc.os9.os9_config:
70 70
        backup: yes
71 71
      register: backup_dellos9_location
72
-     when: ansible_network_os == 'dellos9'
72
+     when: ansible_network_os == 'dellemc.os9.os9'
73 73
 
74 74
 .. include:: shared_snippets/SSH_warning.txt
75 75
 
... ...
@@ -4,11 +4,12 @@
4 4
 ENOS Platform Options
5 5
 ***************************************
6 6
 
7
-ENOS supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on ENOS in Ansible.
7
+ENOS is part of the `community.network <https://galaxy.ansible.com/community/network>`_ collection and supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on ENOS in Ansible.
8 8
 
9
-.. contents:: Topics
9
+.. contents::
10
+  :local:
10 11
 
11
-Connections Available
12
+Connections available
12 13
 ================================================================================
13 14
 
14 15
 .. table::
... ...
@@ -25,7 +26,7 @@ Connections Available
25 25
 
26 26
     Indirect Access       via a bastion (jump host)
27 27
 
28
-    Connection Settings   ``ansible_connection: network_cli``
28
+    Connection Settings   ``ansible_connection: ansible.netcommon.network_cli``
29 29
 
30 30
     |enable_mode|         supported: use ``ansible_become: yes``
31 31
                           with ``ansible_become_method: enable``
... ...
@@ -38,7 +39,7 @@ Connections Available
38 38
 
39 39
 +---------------------------+-----------------------------------------------+
40 40
 
41
-For legacy playbooks, ENOS still supports ``ansible_connection: local``. We recommend modernizing to use ``ansible_connection: network_cli`` as soon as possible.
41
+The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead.
42 42
 
43 43
 Using CLI in Ansible
44 44
 ================================================================================
... ...
@@ -48,8 +49,8 @@ Example CLI ``group_vars/enos.yml``
48 48
 
49 49
 .. code-block:: yaml
50 50
 
51
-   ansible_connection: network_cli
52
-   ansible_network_os: enos
51
+   ansible_connection: ansible.netcommon.network_cli
52
+   ansible_network_os: community.network.enos
53 53
    ansible_user: myuser
54 54
    ansible_password: !vault...
55 55
    ansible_become: yes
... ...
@@ -62,15 +63,15 @@ Example CLI ``group_vars/enos.yml``
62 62
 - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration.
63 63
 - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables.
64 64
 
65
-Example CLI Task
65
+Example CLI task
66 66
 ----------------
67 67
 
68 68
 .. code-block:: yaml
69 69
 
70 70
    - name: Retrieve ENOS OS version
71
-     enos_command:
71
+     community.network.enos_command:
72 72
        commands: show version
73
-     when: ansible_network_os == 'enos'
73
+     when: ansible_network_os == 'community.network.enos'
74 74
 
75 75
 .. include:: shared_snippets/SSH_warning.txt
76 76
 
... ...
@@ -4,11 +4,12 @@
4 4
 ERIC_ECCLI Platform Options
5 5
 ***************************************
6 6
 
7
-Extreme ERIC_ECCLI Ansible modules only supports CLI connections today. This page offers details on how to use ``network_cli`` on ERIC_ECCLI in Ansible.
7
+Extreme ERIC_ECCLI is part of the `community.network <https://galaxy.ansible.com/community/network>`_ collection and only supports CLI connections today. This page offers details on how to use ``ansible.netcommon.network_cli`` on ERIC_ECCLI in Ansible.
8 8
 
9
-.. contents:: Topics
9
+.. contents::
10
+  :local:
10 11
 
11
-Connections Available
12
+Connections available
12 13
 ================================================================================
13 14
 
14 15
 .. table::
... ...
@@ -25,7 +26,7 @@ Connections Available
25 25
 
26 26
     Indirect Access       via a bastion (jump host)
27 27
 
28
-    Connection Settings   ``ansible_connection: network_cli``
28
+    Connection Settings   ``ansible_connection: ansible.netcommon.network_cli``
29 29
 
30 30
     |enable_mode|         not supported by ERIC_ECCLI
31 31
 
... ...
@@ -34,7 +35,7 @@ Connections Available
34 34
 
35 35
 .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation)
36 36
 
37
-ERIC_ECCLI does not support ``ansible_connection: local``. You must use ``ansible_connection: network_cli``.
37
+ERIC_ECCLI does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``.
38 38
 
39 39
 Using CLI in Ansible
40 40
 ====================
... ...
@@ -44,8 +45,8 @@ Example CLI ``group_vars/eric_eccli.yml``
44 44
 
45 45
 .. code-block:: yaml
46 46
 
47
-   ansible_connection: network_cli
48
-   ansible_network_os: eric_eccli
47
+   ansible_connection: ansible.netcommon.network_cli
48
+   ansible_network_os: community.network.eric_eccli
49 49
    ansible_user: myuser
50 50
    ansible_password: !vault...
51 51
    ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"'
... ...
@@ -55,15 +56,15 @@ Example CLI ``group_vars/eric_eccli.yml``
55 55
 - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration.
56 56
 - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables.
57 57
 
58
-Example CLI Task
58
+Example CLI task
59 59
 ----------------
60 60
 
61 61
 .. code-block:: yaml
62 62
 
63 63
    - name: run show version on remote devices (eric_eccli)
64
-     eric_eccli_command:
64
+     community.network.eric_eccli_command:
65 65
         commands: show version
66
-     when: ansible_network_os == 'eric_eccli'
66
+     when: ansible_network_os == 'community.network.eric_eccli'
67 67
 
68 68
 .. include:: shared_snippets/SSH_warning.txt
69 69
 
... ...
@@ -4,11 +4,12 @@
4 4
 EXOS Platform Options
5 5
 ***************************************
6 6
 
7
-Extreme EXOS Ansible modules support multiple connections. This page offers details on how each connection works in Ansible and how to use it.
7
+Extreme EXOS is part of the `community.network <https://galaxy.ansible.com/community/network>`_ collection and supports multiple connections. This page offers details on how each connection works in Ansible and how to use it.
8 8
 
9
-.. contents:: Topics
9
+.. contents::
10
+  :local:
10 11
 
11
-Connections Available
12
+Connections available
12 13
 ================================================================================
13 14
 
14 15
 
... ...
@@ -26,7 +27,8 @@ Connections Available
26 26
 
27 27
     Indirect Access       via a bastion (jump host)                   via a web proxy
28 28
 
29
-    Connection Settings   ``ansible_connection: network_cli``         ``ansible_connection: httpapi``
29
+    Connection Settings   ``ansible_connection:``                     ``ansible_connection:``
30
+                            ``ansible.netcommon.network_cli``           ``ansible.netcommon.httpapi``
30 31
 
31 32
     |enable_mode|         not supported by EXOS                       not supported by EXOS
32 33
 
... ...
@@ -35,7 +37,7 @@ Connections Available
35 35
 
36 36
 .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation)
37 37
 
38
-EXOS does not support ``ansible_connection: local``. You must use ``ansible_connection: network_cli`` or ``ansible_connection: httpapi``
38
+EXOS does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli`` or ``ansible_connection: ansible.netcommon.httpapi``.
39 39
 
40 40
 Using CLI in Ansible
41 41
 ====================
... ...
@@ -45,8 +47,8 @@ Example CLI ``group_vars/exos.yml``
45 45
 
46 46
 .. code-block:: yaml
47 47
 
48
-   ansible_connection: network_cli
49
-   ansible_network_os: exos
48
+   ansible_connection: ansible.netcommon.network_cli
49
+   ansible_network_os: community.network.exos
50 50
    ansible_user: myuser
51 51
    ansible_password: !vault...
52 52
    ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"'
... ...
@@ -56,15 +58,15 @@ Example CLI ``group_vars/exos.yml``
56 56
 - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration.
57 57
 - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables.
58 58
 
59
-Example CLI Task
59
+Example CLI task
60 60
 ----------------
61 61
 
62 62
 .. code-block:: yaml
63 63
 
64 64
    - name: Retrieve EXOS OS version
65
-     exos_command:
65
+     community.network.exos_command:
66 66
        commands: show version
67
-     when: ansible_network_os == 'exos'
67
+     when: ansible_network_os == 'community.network.exos'
68 68
 
69 69
 
70 70
 
... ...
@@ -76,8 +78,8 @@ Example EXOS-API ``group_vars/exos.yml``
76 76
 
77 77
 .. code-block:: yaml
78 78
 
79
-   ansible_connection: httpapi
80
-   ansible_network_os: exos
79
+   ansible_connection: ansible.netcommon.httpapi
80
+   ansible_network_os: community.network.exos
81 81
    ansible_user: myuser
82 82
    ansible_password: !vault...
83 83
    proxy_env:
... ...
@@ -87,15 +89,15 @@ Example EXOS-API ``group_vars/exos.yml``
87 87
 - If you are accessing your host through a web proxy using ``https``, change ``http_proxy`` to ``https_proxy``.
88 88
 
89 89
 
90
-Example EXOS-API Task
90
+Example EXOS-API task
91 91
 ---------------------
92 92
 
93 93
 .. code-block:: yaml
94 94
 
95 95
    - name: Retrieve EXOS OS version
96
-     exos_command:
96
+     community.network.exos_command:
97 97
        commands: show version
98
-     when: ansible_network_os == 'exos'
98
+     when: ansible_network_os == 'community.network.exos'
99 99
 
100 100
 In this example the ``proxy_env`` variable defined in ``group_vars`` gets passed to the ``environment`` option of the module used in the task.
101 101
 
... ...
@@ -4,11 +4,12 @@
4 4
 ICX Platform Options
5 5
 ***************************************
6 6
 
7
-ICX supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on ICX in Ansible.
7
+ICX is part of the `community.network <https://galaxy.ansible.com/community/network>`_ collection supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on ICX in Ansible.
8 8
 
9
-.. contents:: Topics
9
+.. contents::
10
+  :local:
10 11
 
11
-Connections Available
12
+Connections available
12 13
 ================================================================================
13 14
 
14 15
 .. table::
... ...
@@ -25,7 +26,7 @@ Connections Available
25 25
 
26 26
     Indirect Access       via a bastion (jump host)
27 27
 
28
-    Connection Settings   ``ansible_connection: network_cli``
28
+    Connection Settings   ``ansible_connection: ansible.netcommon.network_cli``
29 29
 
30 30
     |enable_mode|         supported: use ``ansible_become: yes`` with
31 31
                           ``ansible_become_method: enable`` and ``ansible_become_password:``
... ...
@@ -44,8 +45,8 @@ Example CLI ``group_vars/icx.yml``
44 44
 
45 45
 .. code-block:: yaml
46 46
 
47
-   ansible_connection: network_cli
48
-   ansible_network_os: icx
47
+   ansible_connection: ansible.netcommon.network_cli
48
+   ansible_network_os: community.network.icx
49 49
    ansible_user: myuser
50 50
    ansible_password: !vault...
51 51
    ansible_become: yes
... ...
@@ -58,16 +59,16 @@ Example CLI ``group_vars/icx.yml``
58 58
 - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration.
59 59
 - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables.
60 60
 
61
-Example CLI Task
61
+Example CLI task
62 62
 ----------------
63 63
 
64 64
 .. code-block:: yaml
65 65
 
66 66
    - name: Backup current switch config (icx)
67
-     icx_config:
67
+     community.network.icx_config:
68 68
        backup: yes
69 69
      register: backup_icx_location
70
-     when: ansible_network_os == 'icx'
70
+     when: ansible_network_os == 'community.network.icx'
71 71
 
72 72
 .. include:: shared_snippets/SSH_warning.txt
73 73
 
... ...
@@ -4,11 +4,12 @@
4 4
 IronWare Platform Options
5 5
 ***************************************
6 6
 
7
-IronWare supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on IronWare in Ansible.
7
+IronWare is part of the `community.network <https://galaxy.ansible.com/community/network>`_ collection and supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on IronWare in Ansible.
8 8
 
9
-.. contents:: Topics
9
+.. contents::
10
+  :local:
10 11
 
11
-Connections Available
12
+Connections available
12 13
 ================================================================================
13 14
 
14 15
 .. table::
... ...
@@ -25,7 +26,7 @@ Connections Available
25 25
 
26 26
     Indirect Access       via a bastion (jump host)
27 27
 
28
-    Connection Settings   ``ansible_connection: network_cli``
28
+    Connection Settings   ``ansible_connection: ansible.netcommon.network_cli``
29 29
 
30 30
     |enable_mode|         supported: use ``ansible_become: yes``
31 31
                           with ``ansible_become_method: enable``
... ...
@@ -37,7 +38,7 @@ Connections Available
37 37
 .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation)
38 38
 
39 39
 
40
-For legacy playbooks, IronWare still supports ``ansible_connection: local``. We recommend modernizing to use ``ansible_connection: network_cli`` as soon as possible.
40
+The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead.
41 41
 
42 42
 Using CLI in Ansible
43 43
 ====================
... ...
@@ -47,8 +48,8 @@ Example CLI ``group_vars/mlx.yml``
47 47
 
48 48
 .. code-block:: yaml
49 49
 
50
-   ansible_connection: network_cli
51
-   ansible_network_os: ironware
50
+   ansible_connection: ansible.netcommon.network_cli
51
+   ansible_network_os: community.network.ironware
52 52
    ansible_user: myuser
53 53
    ansible_password: !vault...
54 54
    ansible_become: yes
... ...
@@ -61,16 +62,16 @@ Example CLI ``group_vars/mlx.yml``
61 61
 - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration.
62 62
 - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables.
63 63
 
64
-Example CLI Task
64
+Example CLI task
65 65
 ----------------
66 66
 
67 67
 .. code-block:: yaml
68 68
 
69 69
    - name: Backup current switch config (ironware)
70
-     ironware_config:
70
+     community.network.ironware_config:
71 71
        backup: yes
72 72
      register: backup_ironware_location
73
-     when: ansible_network_os == 'ironware'
73
+     when: ansible_network_os == 'community.network.ironware'
74 74
 
75 75
 .. include:: shared_snippets/SSH_warning.txt
76 76
 
... ...
@@ -4,11 +4,12 @@
4 4
 Meraki Platform Options
5 5
 ***************************************
6 6
 
7
-Meraki only support supports the ``local`` connection type at this time.
7
+The `cisco.meraki <https://galaxy.ansible.com/cisco/meraki>`_ collection only supports the ``local`` connection type at this time.
8 8
 
9
-.. contents:: Topics
9
+.. contents::
10
+  :local:
10 11
 
11
-Connections Available
12
+Connections available
12 13
 ================================================================================
13 14
 
14 15
 .. table::
... ...
@@ -27,12 +28,12 @@ Connections Available
27 27
     ====================  ==========================================
28 28
 
29 29
 
30
-Example Meraki Task
30
+Example Meraki task
31 31
 -------------------
32 32
 
33 33
 .. code-block:: yaml
34 34
 
35
-  meraki_organization:
35
+  cisco.meraki.meraki_organization:
36 36
     auth_key: abc12345
37 37
     org_name: YourOrg
38 38
     state: present
... ...
@@ -4,12 +4,13 @@
4 4
 Pluribus NETVISOR Platform Options
5 5
 **********************************
6 6
 
7
-Pluribus NETVISOR Ansible modules only support CLI connections today. ``httpapi`` modules may be added in future.
8
-This page offers details on how to use ``network_cli`` on NETVISOR in Ansible.
7
+Pluribus NETVISOR Ansible is part of the `community.network <https://galaxy.ansible.com/community/network>`_ collection and only supports CLI connections today. ``httpapi`` modules may be added in future.
8
+This page offers details on how to use ``ansible.netcommon.network_cli`` on NETVISOR in Ansible.
9 9
 
10
-.. contents:: Topics
10
+.. contents::
11
+  :local:
11 12
 
12
-Connections Available
13
+Connections available
13 14
 ================================================================================
14 15
 
15 16
 .. table::
... ...
@@ -26,7 +27,7 @@ Connections Available
26 26
 
27 27
     Indirect Access       via a bastion (jump host)
28 28
 
29
-    Connection Settings   ``ansible_connection: network_cli``
29
+    Connection Settings   ``ansible_connection: ansible.netcommon.network_cli``
30 30
 
31 31
     |enable_mode|         not supported by NETVISOR
32 32
 
... ...
@@ -35,7 +36,7 @@ Connections Available
35 35
 
36 36
 .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation)
37 37
 
38
-Pluribus NETVISOR does not support ``ansible_connection: local``. You must use ``ansible_connection: network_cli``.
38
+Pluribus NETVISOR does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``.
39 39
 
40 40
 Using CLI in Ansible
41 41
 ====================
... ...
@@ -45,8 +46,8 @@ Example CLI ``group_vars/netvisor.yml``
45 45
 
46 46
 .. code-block:: yaml
47 47
 
48
-   ansible_connection: network_cli
49
-   ansible_network_os: netvisor
48
+   ansible_connection: ansible.netcommon.network_cli
49
+   ansible_network_os: community.netcommon.netvisor
50 50
    ansible_user: myuser
51 51
    ansible_password: !vault...
52 52
    ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"'
... ...
@@ -56,18 +57,18 @@ Example CLI ``group_vars/netvisor.yml``
56 56
 - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration.
57 57
 - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables.
58 58
 
59
-Example CLI Task
59
+Example CLI task
60 60
 ----------------
61 61
 
62 62
 .. code-block:: yaml
63 63
 
64 64
    - name: Create access list
65
-     pn_access_list:
65
+     community.network.pn_access_list:
66 66
        pn_name: "foo"
67 67
        pn_scope: "local"
68 68
        state: "present"
69 69
      register: acc_list
70
-     when: ansible_network_os == 'netvisor'
70
+     when: ansible_network_os == 'community.network.netvisor'
71 71
 
72 72
 
73 73
 .. include:: shared_snippets/SSH_warning.txt
... ...
@@ -4,12 +4,13 @@
4 4
 NOS Platform Options
5 5
 ***************************************
6 6
 
7
-Extreme NOS Ansible modules only support CLI connections today. ``httpapi`` modules may be added in future.
8
-This page offers details on how to use ``network_cli`` on NOS in Ansible.
7
+Extreme NOS is part of the `community.network <https://galaxy.ansible.com/community/network>`_ collection and only supports CLI connections today. ``httpapi`` modules may be added in future.
8
+This page offers details on how to use ``ansible.netcommon.network_cli`` on NOS in Ansible.
9 9
 
10
-.. contents:: Topics
10
+.. contents::
11
+  :local:
11 12
 
12
-Connections Available
13
+Connections available
13 14
 ================================================================================
14 15
 
15 16
 .. table::
... ...
@@ -26,7 +27,7 @@ Connections Available
26 26
 
27 27
     Indirect Access       via a bastion (jump host)
28 28
 
29
-    Connection Settings   ``ansible_connection: network_cli``
29
+    Connection Settings   ``ansible_connection: community.netcommon.network_cli``
30 30
 
31 31
     |enable_mode|         not supported by NOS
32 32
 
... ...
@@ -35,7 +36,7 @@ Connections Available
35 35
 
36 36
 .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation)
37 37
 
38
-NOS does not support ``ansible_connection: local``. You must use ``ansible_connection: network_cli``.
38
+NOS does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``.
39 39
 
40 40
 Using CLI in Ansible
41 41
 ====================
... ...
@@ -45,8 +46,8 @@ Example CLI ``group_vars/nos.yml``
45 45
 
46 46
 .. code-block:: yaml
47 47
 
48
-   ansible_connection: network_cli
49
-   ansible_network_os: nos
48
+   ansible_connection: ansible.netcommon.network_cli
49
+   ansible_network_os: community.network.nos
50 50
    ansible_user: myuser
51 51
    ansible_password: !vault...
52 52
    ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"'
... ...
@@ -56,16 +57,16 @@ Example CLI ``group_vars/nos.yml``
56 56
 - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration.
57 57
 - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables.
58 58
 
59
-Example CLI Task
59
+Example CLI task
60 60
 ----------------
61 61
 
62 62
 .. code-block:: yaml
63 63
 
64 64
    - name: Get version information (nos)
65
-     nos_command:
65
+     community.network.nos_command:
66 66
        commands: "show version"
67 67
      register: show_ver
68
-     when: ansible_network_os == 'nos'
68
+     when: ansible_network_os == 'community.network.nos'
69 69
 
70 70
 
71 71
 .. include:: shared_snippets/SSH_warning.txt
... ...
@@ -4,9 +4,13 @@
4 4
 RouterOS Platform Options
5 5
 ***************************************
6 6
 
7
-.. contents:: Topics
7
+RouterOS is part of the `community.network <https://galaxy.ansible.com/community/network>`_ collection and only supports CLI connections today. ``httpapi`` modules may be added in future.
8
+This page offers details on how to use ``ansible.netcommon.network_cli`` on RouterOS in Ansible.
8 9
 
9
-Connections Available
10
+.. contents::
11
+  :local:
12
+
13
+Connections available
10 14
 ================================================================================
11 15
 
12 16
 .. table::
... ...
@@ -23,7 +27,7 @@ Connections Available
23 23
 
24 24
     Indirect Access       via a bastion (jump host)
25 25
 
26
-    Connection Settings   ``ansible_connection: network_cli``
26
+    Connection Settings   ``ansible_connection: ansible.network.network_cli``
27 27
 
28 28
     |enable_mode|         not supported by RouterOS
29 29
 
... ...
@@ -33,7 +37,7 @@ Connections Available
33 33
 .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation)
34 34
 
35 35
 
36
-RouterOS does not support ``ansible_connection: local``. You must use ``ansible_connection: network_cli``.
36
+RouterOS does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``.
37 37
 
38 38
 Using CLI in Ansible
39 39
 ====================
... ...
@@ -43,8 +47,8 @@ Example CLI ``group_vars/routeros.yml``
43 43
 
44 44
 .. code-block:: yaml
45 45
 
46
-   ansible_connection: network_cli
47
-   ansible_network_os: routeros
46
+   ansible_connection: ansible.netcommon.network_cli
47
+   ansible_network_os: community.network.routeros
48 48
    ansible_user: myuser
49 49
    ansible_password: !vault...
50 50
    ansible_become: yes
... ...
@@ -58,16 +62,16 @@ Example CLI ``group_vars/routeros.yml``
58 58
 - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables.
59 59
 - If you are getting timeout errors you may want to add ``+cet1024w`` suffix to your username which will disable console colors, enable "dumb" mode, tell RouterOS not to try detecting terminal capabilities and set terminal width to 1024 columns. See article `Console login process <https://wiki.mikrotik.com/wiki/Manual:Console_login_process>`_ in MikroTik wiki for more information.
60 60
 
61
-Example CLI Task
61
+Example CLI task
62 62
 ----------------
63 63
 
64 64
 .. code-block:: yaml
65 65
 
66 66
    - name: Display resource statistics (routeros)
67
-     routeros_command:
67
+     community.network.routeros_command:
68 68
        commands: /system resource print
69 69
      register: routeros_resources
70
-     when: ansible_network_os == 'routeros'
70
+     when: ansible_network_os == 'community.network.routeros'
71 71
 
72 72
 .. include:: shared_snippets/SSH_warning.txt
73 73
 
... ...
@@ -4,12 +4,13 @@
4 4
 SLX-OS Platform Options
5 5
 ***************************************
6 6
 
7
-Extreme SLX-OS Ansible modules only support CLI connections today. ``httpapi`` modules may be added in future.
8
-This page offers details on how to use ``network_cli`` on SLX-OS in Ansible.
7
+Extreme SLX-OS is part of the `community.network <https://galaxy.ansible.com/community/network>`_ collection and only supports CLI connections today. ``httpapi`` modules may be added in future.
8
+This page offers details on how to use ``ansible.netcommon.network_cli`` on SLX-OS in Ansible.
9 9
 
10
-.. contents:: Topics
10
+.. contents::
11
+  :local:
11 12
 
12
-Connections Available
13
+Connections available
13 14
 ================================================================================
14 15
 
15 16
 .. table::
... ...
@@ -26,7 +27,7 @@ Connections Available
26 26
 
27 27
     Indirect Access       via a bastion (jump host)
28 28
 
29
-    Connection Settings   ``ansible_connection: network_cli``
29
+    Connection Settings   ``ansible_connection: ansible.netcommon.network_cli``
30 30
 
31 31
     |enable_mode|         not supported by SLX-OS
32 32
 
... ...
@@ -36,7 +37,7 @@ Connections Available
36 36
 .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation)
37 37
 
38 38
 
39
-SLX-OS does not support ``ansible_connection: local``. You must use ``ansible_connection: network_cli``.
39
+SLX-OS does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``.
40 40
 
41 41
 Using CLI in Ansible
42 42
 ====================
... ...
@@ -46,8 +47,8 @@ Example CLI ``group_vars/slxos.yml``
46 46
 
47 47
 .. code-block:: yaml
48 48
 
49
-   ansible_connection: network_cli
50
-   ansible_network_os: slxos
49
+   ansible_connection: ansible.netcommon.network_cli
50
+   ansible_network_os: community.network.slxos
51 51
    ansible_user: myuser
52 52
    ansible_password: !vault...
53 53
    ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"'
... ...
@@ -57,16 +58,16 @@ Example CLI ``group_vars/slxos.yml``
57 57
 - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration.
58 58
 - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables.
59 59
 
60
-Example CLI Task
60
+Example CLI task
61 61
 ----------------
62 62
 
63 63
 .. code-block:: yaml
64 64
 
65 65
    - name: Backup current switch config (slxos)
66
-     slxos_config:
66
+     community.network.slxos_config:
67 67
        backup: yes
68 68
      register: backup_slxos_location
69
-     when: ansible_network_os == 'slxos'
69
+     when: ansible_network_os == 'community.network.slxos'
70 70
 
71 71
 
72 72
 .. include:: shared_snippets/SSH_warning.txt
... ...
@@ -4,12 +4,13 @@
4 4
 VOSS Platform Options
5 5
 ***************************************
6 6
 
7
-Extreme VOSS Ansible modules only support CLI connections today. This page offers details on how to
8
-use ``network_cli`` on VOSS in Ansible.
7
+Extreme VOSS is part of the `community.network <https://galaxy.ansible.com/community/network>`_ collection and only supports CLI connections today. This page offers details on how to
8
+use ``ansible.netcommon.network_cli`` on VOSS in Ansible.
9 9
 
10
-.. contents:: Topics
10
+.. contents::
11
+  :local:
11 12
 
12
-Connections Available
13
+Connections available
13 14
 ================================================================================
14 15
 
15 16
 .. table::
... ...
@@ -26,7 +27,7 @@ Connections Available
26 26
 
27 27
     Indirect Access       via a bastion (jump host)
28 28
 
29
-    Connection Settings   ``ansible_connection: network_cli``
29
+    Connection Settings   ``ansible_connection: ansible.netcommon.network_cli``
30 30
 
31 31
     |enable_mode|         supported: use ``ansible_become: yes``
32 32
                           with ``ansible_become_method: enable``
... ...
@@ -37,7 +38,7 @@ Connections Available
37 37
 .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation)
38 38
 
39 39
 
40
-VOSS does not support ``ansible_connection: local``. You must use ``ansible_connection: network_cli``.
40
+VOSS does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``.
41 41
 
42 42
 Using CLI in Ansible
43 43
 ====================
... ...
@@ -47,8 +48,8 @@ Example CLI ``group_vars/voss.yml``
47 47
 
48 48
 .. code-block:: yaml
49 49
 
50
-   ansible_connection: network_cli
51
-   ansible_network_os: voss
50
+   ansible_connection: ansible.netcommon.network_cli
51
+   ansible_network_os: community.network.voss
52 52
    ansible_user: myuser
53 53
    ansible_become: yes
54 54
    ansible_become_method: enable
... ...
@@ -60,15 +61,15 @@ Example CLI ``group_vars/voss.yml``
60 60
 - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration.
61 61
 - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables.
62 62
 
63
-Example CLI Task
63
+Example CLI task
64 64
 ----------------
65 65
 
66 66
 .. code-block:: yaml
67 67
 
68 68
    - name: Retrieve VOSS info
69
-     voss_command:
69
+     community.network.voss_command:
70 70
        commands: show sys-info
71
-     when: ansible_network_os == 'voss'
71
+     when: ansible_network_os == 'community.network.voss'
72 72
 
73 73
 .. include:: shared_snippets/SSH_warning.txt
74 74
 
... ...
@@ -19,7 +19,7 @@ We suggest you read this page along with the `Ansible Changelog for 2.10 <https:
19 19
 
20 20
 Since 2.10, ansible consists of two parts:
21 21
 * ansible-base, which are the ansible command line tools with a very small selection of plugins and modules, and
22
-* a `set of collections <https://github.com/ansible-community/ansible-build-data/blob/main/2.10/acd.in>`_.
22
+* a `set of collections <https://github.com/ansible-community/ansible-build-data/blob/main/2.10/ansible.in>`_.
23 23
 
24 24
 The :ref:`porting_2.10_guide_base` is included in this porting guide. The complete list of porting guides can be found at :ref:`porting guides <porting_guides>`.
25 25
 
... ...
@@ -165,6 +165,71 @@ Networking
165 165
 
166 166
 No notable changes
167 167
 
168
+Porting Guide for v2.10.0a8
169
+===========================
170
+
171
+Breaking Changes
172
+----------------
173
+
174
+community.general
175
+~~~~~~~~~~~~~~~~~
176
+
177
+- log_plays callback - add missing information to the logs generated by the callback plugin. This changes the log message format (https://github.com/ansible-collections/community.general/pull/442).
178
+- pkgng - passing ``name: *`` with ``state: absent`` will no longer remove every installed package from the system. It is now a noop. (https://github.com/ansible-collections/community.general/pull/569).
179
+- pkgng - passing ``name: *`` with ``state: latest`` or ``state: present`` will no longer install every package from the configured package repositories. Instead, ``name: *, state: latest`` will upgrade all already-installed packages, and ``name: *, state: present`` is a noop. (https://github.com/ansible-collections/community.general/pull/569).
180
+
181
+community.vmware
182
+~~~~~~~~~~~~~~~~
183
+
184
+- vmware_datastore_maintenancemode - now returns ``datastore_status`` instead of Ansible internal key ``results``.
185
+- vmware_guest_custom_attributes - does not require VM name which was a required parameter for releases prior to Ansible 2.10.
186
+- vmware_guest_find - the ``datacenter`` option has been removed.
187
+- vmware_host_kernel_manager - now returns ``host_kernel_status`` instead of Ansible internal key ``results``.
188
+- vmware_host_ntp - now returns ``host_ntp_status`` instead of Ansible internal key ``results``.
189
+- vmware_host_service_manager - now returns ``host_service_status`` instead of Ansible internal key ``results``.
190
+- vmware_tag - now returns ``tag_status`` instead of Ansible internal key ``results``.
191
+- vmware_vmkernel - the options ``ip_address`` and ``subnet_mask`` have been removed; use the suboptions ``ip_address`` and ``subnet_mask`` of the ``network`` option instead.
192
+
193
+Removed Features
194
+----------------
195
+
196
+community.general
197
+~~~~~~~~~~~~~~~~~
198
+
199
+- conjur_variable lookup - has been moved to the ``cyberark.conjur`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/570).
200
+- digital_ocean_* - all DigitalOcean modules have been moved to the ``community.digitalocean`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/622).
201
+- infini_* - all infinidat modules have been moved to the ``infinidat.infinibox`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/607).
202
+- logicmonitor - the module has been removed in 1.0.0 since it is unmaintained and the API used by the module has been turned off in 2017 (https://github.com/ansible-collections/community.general/issues/539, https://github.com/ansible-collections/community.general/pull/541).
203
+- logicmonitor_facts - the module has been removed in 1.0.0 since it is unmaintained and the API used by the module has been turned off in 2017 (https://github.com/ansible-collections/community.general/issues/539, https://github.com/ansible-collections/community.general/pull/541).
204
+- mysql_* - all MySQL modules have been moved to the ``community.mysql`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/633).
205
+- proxysql_* - all ProxySQL modules have been moved to the ``community.proxysql`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/624).
206
+
207
+community.network
208
+~~~~~~~~~~~~~~~~~
209
+
210
+- onyx - all onyx modules and plugins have been moved to the mellanox.onyx collection. Redirects have been added that will be removed in community.network 2.0.0 (https://github.com/ansible-collections/community.network/pull/83).
211
+
212
+community.vmware
213
+~~~~~~~~~~~~~~~~
214
+
215
+- vmware_portgroup - removed 'inbound_policy', and 'rolling_order' deprecated options.
216
+
217
+Deprecated Features
218
+-------------------
219
+
220
+community.general
221
+~~~~~~~~~~~~~~~~~
222
+
223
+- The ldap_attr module has been deprecated and will be removed in a later release; use ldap_attrs instead.
224
+- xbps - the ``force`` option never had any effect. It is now deprecated, and will be removed in 3.0.0 (https://github.com/ansible-collections/community.general/pull/568).
225
+
226
+community.vmware
227
+~~~~~~~~~~~~~~~~
228
+
229
+- The vmware_dns_config module has been deprecated and will be removed in a later release; use vmware_host_dns instead.
230
+- vca - vca_fw, vca_nat, vca_app are deprecated since these modules rely on deprecated part of Pyvcloud library.
231
+- vmware_tag_info - in a later release, the module will not return ``tag_facts`` since it does not return multiple tags with the same name and different category id. To maintain the existing behavior use ``tag_info`` which is a list of tag metadata.
232
+
168 233
 Porting Guide for v2.10.0a7
169 234
 ===========================
170 235
 
... ...
@@ -283,8 +348,6 @@ community.general
283 283
 ~~~~~~~~~~~~~~~~~
284 284
 
285 285
 - core - remove support for ``check_invalid_arguments`` in ``UTMModule``.
286
-- logicmonitor - the module has been removed in 1.0.0 since it is unmaintained and the API used by the module has been turned off in 2017 (https://github.com/ansible-collections/community.general/issues/539, https://github.com/ansible-collections/community.general/pull/541).
287
-- logicmonitor_facts - the module has been removed in 1.0.0 since it is unmaintained and the API used by the module has been turned off in 2017 (https://github.com/ansible-collections/community.general/issues/539, https://github.com/ansible-collections/community.general/pull/541).
288 286
 - pacman - Removed deprecated ``recurse`` option, use ``extra_args=--recursive`` instead
289 287
 
290 288
 community.vmware
... ...
@@ -326,7 +389,6 @@ community.general
326 326
 - redfish_config - the ``bios_attribute_name`` and ``bios_attribute_value`` options will be removed. To maintain the existing behavior use the ``bios_attributes`` option instead.
327 327
 - redfish_config and redfish_command - the behavior to select the first System, Manager, or Chassis resource to modify when multiple are present will be removed. Use the new ``resource_id`` option to specify target resource to modify.
328 328
 - redfish_config, redfish_command - Behavior to modify the first System, Mananger, or Chassis resource when multiple are present is deprecated. Use the new ``resource_id`` option to specify target resource to modify.
329
-- xbps - the ``force`` option never had any effect. It is now deprecated, and will be removed in 3.0.0 (https://github.com/ansible-collections/community.general/pull/568).
330 329
 - zabbix_proxy - deprecates ``interface`` sub-options ``type`` and ``main`` when proxy type is set to passive via ``status=passive``. Make sure these suboptions are removed from your playbook as they were never supported by Zabbix in the first place.
331 330
 
332 331
 community.vmware
... ...
@@ -346,7 +408,6 @@ Breaking Changes
346 346
     * Junction points are no longer reported as ``islnk``, use ``isjunction`` to properly report these files. This behaviour matches the ansible.windows.win_stat module
347 347
     * Directories no longer return a ``size``, this matches the ``stat`` and ``find`` behaviour and has been removed due to the difficulties in correctly reporting the size of a directory
348 348
 - cisco.nxos.nxos_igmp_interface - no longer supports the deprecated ``oif_prefix`` and ``oif_source`` options. These have been superceeded by ``oif_ps``.
349
-- community.general.pacman - the deprecated ``recurse`` option has been removed, you should use ``extra_args=--recursive`` instead.
350 349
 - community.grafana.grafana_dashboard - the parameter ``message`` is renamed to ``commit_message`` since ``message`` is used by Ansible Core engine internally.
351 350
 - community.vmware.vmware_datastore_maintenancemode - now returns ``datastore_status`` instead of Ansible internal key ``results``.
352 351
 - community.vmware.vmware_guest_custom_attributes - does not require VM name which was a required parameter for releases prior to Ansible 2.10.
... ...
@@ -392,7 +453,6 @@ Removed Features
392 392
 Deprecated Features
393 393
 -------------------
394 394
 
395
-- The community.general.ldap_attr module has been deprecated and will be removed in a later release; use community.general.ldap_attrs instead.
396 395
 - The community.vmware.vmware_dns_config module has been deprecated and will be removed in a later release; use community.vmware.vmware_host_dns instead.
397 396
 - The vyos.vyos.vyos_static_route module has been deprecated and will be removed in a later release; use vyos.vyos.vyos_static_routes instead.
398 397
 - amazon.aws.cloudformation - the ``template_format`` option has been deprecated and will be removed in a later release. It has been ignored by the module since Ansible 2.3.
399 398
new file mode 100644
... ...
@@ -0,0 +1,156 @@
0
+
1
+.. _porting_2.11_guide_base:
2
+
3
+*******************************
4
+Ansible-base 2.11 Porting Guide
5
+*******************************
6
+
7
+This section discusses the behavioral changes between Ansible-base 2.10 and Ansible-base 2.11.
8
+
9
+It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible-base.
10
+
11
+We suggest you read this page along with the `Ansible-base Changelog for 2.11 <https://github.com/ansible/ansible/blob/stable-2.11/changelogs/CHANGELOG-v2.11.rst>`_ to understand what updates you may need to make.
12
+
13
+Ansible-base is mainly of interest for developers and users who only want to use a small, controlled subset of the available collections. Regular users should install ansible.
14
+
15
+The complete list of porting guides can be found at :ref:`porting guides <porting_guides>`.
16
+
17
+.. contents::
18
+
19
+
20
+Playbook
21
+========
22
+
23
+* Fixed a bug on boolean keywords that made random strings return 'False', now they should return an error if they are not a proper boolean
24
+  Example: `diff: yes-` was returning `False`.
25
+* A new fact, ``ansible_processor_nproc`` reflects the number of vcpus
26
+  available to processes (falls back to the number of vcpus available to
27
+  the scheduler).
28
+
29
+
30
+Command Line
31
+============
32
+
33
+No notable changes
34
+
35
+
36
+Deprecated
37
+==========
38
+
39
+* Windows Server 2008 and 2008 R2 will no longer be supported or tested in the next Ansible release, see :ref:`windows_faq_server2008`.
40
+
41
+
42
+Modules
43
+=======
44
+
45
+Change to Default File Permissions
46
+----------------------------------
47
+
48
+To address CVE-2020-1736, the default permissions for certain files created by Ansible using ``atomic_move()`` were changed from ``0o666`` to ``0o600``. The default permissions value was only used for the temporary file before it was moved into its place or newly created files. If the file existed when the new temporary file was moved into place, Ansible would use the permissions of the existing file. If there was no existing file, Ansible would retain the default file permissions, combined with the system ``umask``, of the temporary file.
49
+
50
+Most modules that call ``atomic_move()`` also call ``set_fs_attributes_if_different()`` or ``set_mode_if_different()``, which will set the permissions of the file to what is specified in the task.
51
+
52
+A new warning will be displayed when all of the following conditions are true:
53
+
54
+    - The file at the final destination, not the temporary file, does not exist
55
+    - A module supports setting ``mode`` but it was not specified for the task
56
+    - The module calls ``atomic_move()`` but does not later call ``set_fs_attributes_if_different()`` or ``set_mode_if_different()`` with a ``mode`` specified
57
+
58
+The following modules call ``atomic_move()`` but do not call ``set_fs_attributes_if_different()``  or ``set_mode_if_different()`` and do not support setting ``mode``. This means for files they create, the default permissions have changed and there is no indication:
59
+
60
+    - M(known_hosts)
61
+    - M(service)
62
+
63
+
64
+Code Audit
65
+~~~~~~~~~~
66
+
67
+The code was audited for modules that use ``atomic_move()`` but **do not** later call ``set_fs_attributes_if_different()`` or ``set_mode_if_different()``. Modules that provide no means for specifying the ``mode`` will not display a warning message since there is no way for the playbook author to remove the warning. The behavior of each module with regards to the default permissions of temporary files and the permissions of newly created files is explained below.
68
+
69
+known_hosts
70
+^^^^^^^^^^^
71
+
72
+The M(known_hosts) module uses ``atomic_move()`` to operate on the ``known_hosts`` file specified by the ``path`` parameter in the module. It creates a temporary file using ``tempfile.NamedTemporaryFile()`` which creates a temporary file that is readable and writable only by the creating user ID.
73
+
74
+service
75
+^^^^^^^
76
+
77
+The M(service) module uses ``atomic_move()`` to operate on the default rc file, which is the first found of ``/etc/rc.conf``,  ``/etc/rc.conf.local``, and ``/usr/local/etc/rc.conf``. Since these files almost always exist on the target system, they will not be created and the existing permissions of the file will be used.
78
+
79
+**The following modules were included in Ansible <= 2.9. They have moved to collections but are documented here for completeness.**
80
+
81
+authorized_key
82
+^^^^^^^^^^^^^^
83
+
84
+The M(authorized_key) module uses ``atomic_move()`` to operate on the the ``authorized_key`` file. A temporary file is created with ``tempfile.mkstemp()`` before being moved into place. The temporary file is readable and writable only by the creating user ID. The M(authorized_key) module manages the permissions of the the ``.ssh`` direcotry and ``authorized_keys`` files if ``managed_dirs`` is set to ``True``, which is the default. The module sets the ``ssh`` directory owner and group to the ``uid`` and ``gid`` of the user specified in the ``user`` parameter and directory permissions to ``700``. The module sets the ``authorized_key`` file owner and group to the ``uid`` and ``gid`` of the user specified in the ``user`` parameter and file permissions to ``600``. These values cannot be controlled by module parameters.
85
+
86
+interfaces_file
87
+^^^^^^^^^^^^^^^
88
+The M(interfaces_file) module uses ``atomic_move()`` to operate on ``/etc/network/serivces`` or the ``dest`` specified by the module. A temporary file is created with ``tempfile.mkstemp()`` before being moved into place. The temporary file is readable and writable only by the creating user ID. If the file specified by ``path`` does not exist it will retain the permissions of the temporary file once moved into place.
89
+
90
+pam_limits
91
+^^^^^^^^^^
92
+
93
+The M(pam_limits) module uses ``atomic_move()`` to operate on ``/etc/security/limits.conf`` or the value of ``dest``. A temporary file is created using ``tempfile.NamedTemporaryFile()``, which is only readable and writable by the creating user ID. The temporary file will inherit the permissions of the file specified by ``dest``, or it will retain the permissions that only allow the creating user ID to read and write the file.
94
+
95
+pamd
96
+^^^^
97
+
98
+The M(pamd) module uses ``atomic_move()`` to operate on a file in ``/etc/pam.d``. The path and the file can be specified by setting the ``path`` and ``name`` parameters. A temporary file is created using ``tempfile.NamedTemporaryFile()``, which is only readable and writable by the creating user ID. The temporary file will inherit the permissions of the file located at ``[dest]/[name]``, or it will retain the permissions of the temporary file that only allow the creating user ID to read and write the file.
99
+
100
+redhat_subscription
101
+^^^^^^^^^^^^^^^^^^^
102
+
103
+The M(redhat_subscription) module uses ``atomic_move()`` to operate on ``/etc/yum/pluginconf.d/rhnplugin.conf`` and ``/etc/yum/pluginconf.d/subscription-manager.conf``. A temporary file is created with ``tempfile.mkstemp()`` before being moved into place. The temporary file is readable and writable only by the creating user ID and the temporary file will inherit the permissions of the existing file once it is moved in to place.
104
+
105
+selinux
106
+^^^^^^^
107
+
108
+The M(selinux) module uses ``atomic_move()`` to operate on ``/etc/selinux/config`` on the value specified by ``configfile``. The module will fail if ``configfile`` does not exist before any temporary data is written to disk. A temporary file is created with ``tempfile.mkstemp()`` before being moved into place. The temporary file is readable and writable only by the creating user ID. Since the file specified by ``configfile`` must exist, the temporary file will inherit the permissions of that file once it is moved in to place.
109
+
110
+sysctl
111
+^^^^^^
112
+
113
+The M(sysctl) module uses ``atomic_move()`` to operate on ``/etc/sysctl.conf`` or the value specified by ``sysctl_file``. The module will fail if ``sysctl_file`` does not exist before any temporary data is written to disk. A temporary file is created with ``tempfile.mkstemp()`` before being moved into place. The temporary file is readable and writable only by the creating user ID. Since the file specified by ``sysctl_file`` must exist, the temporary file will inherit the permissions of that file once it is moved in to place.
114
+
115
+.. warning::
116
+
117
+	Links on this page may not point to the most recent versions of modules. We will update them when we can.
118
+
119
+
120
+Noteworthy module changes
121
+-------------------------
122
+
123
+* Ansible modules created with ``add_file_common_args=True`` added a number of undocumented arguments which were mostly there to ease implementing certain action plugins. The undocumented arguments ``src``, ``follow``, ``force``, ``content``, ``backup``, ``remote_src``, ``regexp``, ``delimiter``, and ``directory_mode`` are now no longer added. Modules relying on these options to be added need to specify them by themselves.
124
+* Ansible no longer looks for Python modules in the current working directory (typically the ``remote_user``'s home directory) when an Ansible module is run. This is to fix becoming an unprivileged user on OpenBSD and to mitigate any attack vector if the current working directory is writable by a malicious user. Install any Python modules needed to run the Ansible modules on the managed node in a system-wide location or in another directory which is in the ``remote_user``'s ``$PYTHONPATH`` and readable by the ``become_user``.
125
+
126
+
127
+Plugins
128
+=======
129
+
130
+Lookup plugin names case-sensitivity
131
+------------------------------------
132
+
133
+* Prior to Ansible ``2.10`` lookup plugin names passed in as an argument to the ``lookup()`` function were treated as case-insensitive as opposed to lookups invoked via ``with_<lookup_name>``. ``2.10`` brings consistency to ``lookup()`` and ``with_`` to be both case-sensitive.
134
+
135
+Noteworthy plugin changes
136
+-------------------------
137
+
138
+* Cache plugins in collections can be used to cache data from inventory plugins. Previously, cache plugins in collections could only be used for fact caching.
139
+* Some undocumented arguments from ``FILE_COMMON_ARGUMENTS`` have been removed; plugins using these, in particular action plugins, need to be adjusted. The undocumented arguments which were removed are ``src``, ``follow``, ``force``, ``content``, ``backup``, ``remote_src``, ``regexp``, ``delimiter``, and ``directory_mode``.
140
+
141
+Action plugins which execute modules should use fully-qualified module names
142
+----------------------------------------------------------------------------
143
+
144
+* Action plugins that call modules should pass explicit, fully-qualified module names to ``_execute_module()`` whenever possible (eg, ``ansible.builtin.file`` rather than ``file``). This ensures that the task's collection search order is not consulted to resolve the module. Otherwise, a module from a collection earlier in the search path could be used when not intended.
145
+
146
+Porting custom scripts
147
+======================
148
+
149
+No notable changes
150
+
151
+
152
+Networking
153
+==========
154
+
155
+No notable changes
... ...
@@ -12,6 +12,7 @@ Please note that this is not a complete list. If you believe any extra informati
12 12
    :maxdepth: 1
13 13
    :glob:
14 14
 
15
+   porting_guide_base_2.11
15 16
    porting_guide_2.10
16 17
    porting_guide_base_2.10
17 18
    porting_guide_2.9
... ...
@@ -20,55 +20,201 @@ backup_file
20 20
 ```````````
21 21
 For those modules that implement `backup=no|yes` when manipulating files, a path to the backup file created.
22 22
 
23
+    .. code-block:: console
24
+
25
+      "backup_file": "./foo.txt.32729.2020-07-30@06:24:19~"
26
+    
27
+
23 28
 changed
24 29
 ```````
25 30
 A boolean indicating if the task had to make changes.
26 31
 
32
+    .. code-block:: console
33
+
34
+        "changed": true
35
+
27 36
 diff
28 37
 ````
29
-
30 38
 Information on differences between the previous and current state. Often a dictionary with entries ``before`` and ``after``, which will then be formatted by the callback plugin to a diff view.
31 39
 
40
+    .. code-block:: console
41
+
42
+        "diff": [
43
+                {
44
+                    "after": "",
45
+                    "after_header": "foo.txt (content)",
46
+                    "before": "",
47
+                    "before_header": "foo.txt (content)"
48
+                },
49
+                {
50
+                    "after_header": "foo.txt (file attributes)",
51
+                    "before_header": "foo.txt (file attributes)"
52
+                }
53
+
32 54
 failed
33 55
 ``````
34 56
 A boolean that indicates if the task was failed or not.
35 57
 
58
+    .. code-block:: console
59
+
60
+        "failed": false
61
+
36 62
 invocation
37 63
 ``````````
38 64
 Information on how the module was invoked.
39 65
 
66
+    .. code-block:: console
67
+
68
+        "invocation": {
69
+                "module_args": {
70
+                    "_original_basename": "foo.txt",
71
+                    "attributes": null,
72
+                    "backup": true,
73
+                    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
74
+                    "content": null,
75
+                    "delimiter": null,
76
+                    "dest": "./foo.txt",
77
+                    "directory_mode": null,
78
+                    "follow": false,
79
+                    "force": true,
80
+                    "group": null,
81
+                    "local_follow": null,
82
+                    "mode": "666",
83
+                    "owner": null,
84
+                    "regexp": null,
85
+                    "remote_src": null,
86
+                    "selevel": null,
87
+                    "serole": null,
88
+                    "setype": null,
89
+                    "seuser": null,
90
+                    "src": "/Users/foo/.ansible/tmp/ansible-tmp-1596115458.110205-105717464505158/source",
91
+                    "unsafe_writes": null,
92
+                    "validate": null
93
+                }
94
+
40 95
 msg
41 96
 ```
42 97
 A string with a generic message relayed to the user.
43 98
 
99
+    .. code-block:: console
100
+
101
+        "msg": "line added"
102
+
44 103
 rc
45 104
 ``
46 105
 Some modules execute command line utilities or are geared for executing commands directly (raw, shell, command, etc), this field contains 'return code' of these utilities.
47 106
 
107
+    .. code-block:: console
108
+
109
+        "rc": 257
110
+
48 111
 results
49 112
 ```````
50 113
 If this key exists, it indicates that a loop was present for the task and that it contains a list of the normal module 'result' per item.
51 114
 
115
+    .. code-block:: console
116
+
117
+        "results": [
118
+            {
119
+                "ansible_loop_var": "item",
120
+                "backup": "foo.txt.83170.2020-07-30@07:03:05~",
121
+                "changed": true,
122
+                "diff": [
123
+                    {
124
+                        "after": "",
125
+                        "after_header": "foo.txt (content)",
126
+                        "before": "",
127
+                        "before_header": "foo.txt (content)"
128
+                    },
129
+                    {
130
+                        "after_header": "foo.txt (file attributes)",
131
+                        "before_header": "foo.txt (file attributes)"
132
+                    }
133
+                ],
134
+                "failed": false,
135
+                "invocation": {
136
+                    "module_args": {
137
+                        "attributes": null,
138
+                        "backrefs": false,
139
+                        "backup": true
140
+                    }
141
+                },
142
+                "item": "foo",
143
+                "msg": "line added"
144
+            },
145
+            {
146
+                "ansible_loop_var": "item", 
147
+                "backup": "foo.txt.83187.2020-07-30@07:03:05~",
148
+                "changed": true,
149
+                "diff": [
150
+                    {
151
+                        "after": "",
152
+                        "after_header": "foo.txt (content)",
153
+                        "before": "",
154
+                        "before_header": "foo.txt (content)"
155
+                    },
156
+                    {
157
+                        "after_header": "foo.txt (file attributes)",
158
+                        "before_header": "foo.txt (file attributes)"
159
+                    }
160
+                ],
161
+                "failed": false,
162
+                "invocation": {
163
+                    "module_args": {
164
+                        "attributes": null,
165
+                        "backrefs": false,
166
+                        "backup": true
167
+                    }
168
+                },
169
+                "item": "bar",
170
+                "msg": "line added"
171
+            }
172
+            ]
173
+
52 174
 skipped
53 175
 ```````
54 176
 A boolean that indicates if the task was skipped or not
55 177
 
178
+    .. code-block:: console
179
+    
180
+        "skipped": true
181
+
56 182
 stderr
57 183
 ``````
58 184
 Some modules execute command line utilities or are geared for executing commands directly (raw, shell, command, etc), this field contains the error output of these utilities.
59 185
 
186
+    .. code-block:: console
187
+
188
+        "stderr": "ls: foo: No such file or directory"
189
+
60 190
 stderr_lines
61 191
 ````````````
62 192
 When `stderr` is returned we also always provide this field which is a list of strings, one item per line from the original.
63 193
 
194
+    .. code-block:: console
195
+
196
+        "stderr_lines": [
197
+                "ls: doesntexist: No such file or directory"
198
+                ]
199
+
64 200
 stdout
65 201
 ``````
66 202
 Some modules execute command line utilities or are geared for executing commands directly (raw, shell, command, etc). This field contains the normal output of these utilities.
67 203
 
204
+    .. code-block:: console
205
+
206
+        "stdout": "foo!"
207
+
68 208
 stdout_lines
69 209
 ````````````
70 210
 When `stdout` is returned, Ansible always provides a list of strings, each containing one item per line from the original output.
71 211
 
212
+    .. code-block:: console
213
+
214
+        "stdout_lines": [
215
+        "foo!"
216
+        ]
217
+
72 218
 
73 219
 .. _internal_return_values:
74 220
 
... ...
@@ -283,6 +283,20 @@ There are a few common errors that one might run into when trying to execute Ans
283 283
     zos1 ansible_shell_executable=/usr/lpp/bash/bin/bash
284 284
 
285 285
 
286
+Running under fakeroot
287
+----------------------
288
+
289
+Some issues arise as ``fakeroot`` does not create a full nor POSIX compliant system by default.
290
+It is known that it will not correctly expand the default tmp directory Ansible uses (:file:`~/.ansible/tmp`).
291
+If you see module failures, this is likely the problem.
292
+The simple workaround is to set ``remote_tmp`` to a path that will expand correctly (see documentation of the shell plugin you are using for specifics).
293
+
294
+For example, in the ansible config file (or via environment variable) you can set::
295
+
296
+    remote_tmp=$HOME/.ansible/tmp
297
+
298
+
299
+
286 300
 .. _use_roles:
287 301
 
288 302
 What is the best way to make content reusable/redistributable?
289 303
new file mode 100644
... ...
@@ -0,0 +1,39 @@
0
+====================
1
+Ansible project 2.10
2
+====================
3
+
4
+This release schedule includes dates for the `ansible <https://pypi.org/project/ansible/>`_ package, with a few dates for the `ansible-base <https://pypi.org/project/ansible-base/>`_ package as well. All dates are subject to change. See :ref:`base_roadmap_2_10` for the most recent updates on ansible-base.
5
+
6
+.. contents::
7
+   :local:
8
+
9
+Release Schedule
10
+----------------
11
+
12
+.. note:: Dates subject to change.
13
+.. note:: We plan to post weekly alpha releases to the `PyPI ansible project <https://pypi.org/project/ansible/>`_ for testing.
14
+
15
+- 2020-06-23: ansible-2.10 alpha freeze.
16
+  No net new collections will be added to the ``ansible-2.10`` package after this date.
17
+- 2020-07-10: Ansible collections freeze date for content shuffling.
18
+  Content should be in its final collection for the ansible-2.10 series of releases. No more content should move out of the ``community.general`` or ``community.network`` collections.
19
+- 2020-08-13: ansible-base 2.10 Release date, see :ref:`base_roadmap_2_10`.
20
+- 2020-08-14: final ansible-2.10 alpha.
21
+- 2020-08-18: Ansible 2.10 beta freeze.
22
+  - No new modules or major features will be added after this date. In practice this means we will freeze the semver collection versions to compatible release versions. For example, if the version of community.crypto on this date was community-crypto-1.1.0; ansible-2.10.0 could ship with community-crypto-1.1.1.  It would not ship with community-crypto-1.2.0.
23
+- 2020-09-01: ansible-2.10.0 beta1.
24
+- 2020-09-08: ansible-2.10 final freeze/rc1.
25
+  - After this date only changes blocking a release are accepted.
26
+  - Collections will only be updated to a new version if a blocker is approved.  Collection owners should discuss any blockers at a community IRC meeting (on 9-10 and 9-17) to decide whether to bump the version of the collection for a fix. See the `Community IRC meeting agenda <https://github.com/ansible/community/issues/539>`_.
27
+
28
+** Additional release candidates to be published as needed as blockers are fixed **
29
+
30
+- 2020-09-22: ansible-2.10 GA release date.
31
+
32
+Ansible-2.10.x patch releases will occur roughly every three weeks if changes to collections have been made or if it is deemed necessary to force an upgrade to a later ansible-base-2.10.x.  Ansible-2.10.x patch releases may contain new features but not backwards incompatibilities.  In practice, this means we will include new collection versions where either the patch or the minor version number has changed but not when the major number has changed (example: Ansible-2.10 ships with community-crypto-1.1.0; ansible-2.10.1 may ship with community-crypto-1.2.0 but would not ship with community-crypto-2.0.0).
33
+
34
+Breaking changes may be introduced in ansible-2.11.0 although we encourage collection owners to use deprecation periods that will show up in at least one Ansible release before being changed incompatibly.
35
+
36
+The rough schedule for Ansible-2.11 and beyond (such as how many months we'll aim for between versions) is still to be discussed and likely will be made after 2.10.0 has been released.
37
+
38
+For more information, reach out on a mailing list or an IRC channel - see :ref:`communication` for more details.
... ...
@@ -1,3 +1,5 @@
1
+.. _base_roadmap_2_10:
2
+
1 3
 =================
2 4
 Ansible-base 2.10
3 5
 =================
... ...
@@ -19,8 +21,10 @@ PRs must be raised well in advance of the dates below to have a chance of being
19 19
 - 2020-06-16 Beta 1 **Feature freeze**
20 20
   No new functionality (including modules/plugins) to any code
21 21
 
22
-- 2020-07-14 Release Candidate 1
23
-- 2020-??-?? Release Candidate 2 if needed
22
+- 2020-07-21 Release Candidate 1 (bumped from 2020-07-14)
23
+- 2020-07-24 Release Candidate 2
24
+- 2020-07-25 Release Candidate 3
25
+- 2020-07-30 Release Candidate 4
24 26
 - 2020-08-13 Release
25 27
 
26 28
 Release Manager
... ...
@@ -24,6 +24,7 @@ See :ref:`Ansible communication channels <communication>` for details on how to
24 24
    :glob:
25 25
    :caption: Ansible Release Roadmaps
26 26
 
27
+   COLLECTIONS_2_10
27 28
    ROADMAP_2_10
28 29
    ROADMAP_2_9
29 30
    ROADMAP_2_8
... ...
@@ -18,6 +18,7 @@ To get started, please select one of the following topics.
18 18
    vmware_scenarios/vmware_requirements
19 19
    vmware_scenarios/vmware_inventory
20 20
    vmware_scenarios/vmware_inventory_vm_attributes
21
+   vmware_scenarios/vmware_inventory_hostnames
21 22
    vmware_scenarios/vmware_scenarios
22 23
    vmware_scenarios/vmware_troubleshooting
23 24
    vmware_scenarios/vmware_external_doc_links
24 25
new file mode 100644
... ...
@@ -0,0 +1,127 @@
0
+.. _vmware_ansible_inventory_using_hostnames:
1
+
2
+*************************************************
3
+Using VMware dynamic inventory plugin - Hostnames
4
+*************************************************
5
+
6
+.. contents:: Topics
7
+
8
+VMware dynamic inventory plugin - Customizing hostnames
9
+=======================================================
10
+
11
+
12
+VMware inventory plugin allows you to configure hostnames using the ``hostnames`` configuration parameter.
13
+
14
+In this scenario guide we will see how you configure hostnames from the given VMware guest in the inventory.
15
+
16
+Requirements
17
+------------
18
+
19
+To use the VMware dynamic inventory plugins, you must install `pyVmomi <https://github.com/vmware/pyvmomi>`_
20
+on your control node (the host running Ansible).
21
+
22
+To include tag-related information for the virtual machines in your dynamic inventory, you also need the `vSphere Automation SDK <https://code.vmware.com/web/sdk/65/vsphere-automation-python>`_, which supports REST API features such as tagging and content libraries, on your control node.
23
+You can install the ``vSphere Automation SDK`` following `these instructions <https://github.com/vmware/vsphere-automation-sdk-python#installing-required-python-packages>`_.
24
+
25
+.. code-block:: bash
26
+
27
+    $ pip install pyvmomi
28
+
29
+Starting in Ansible 2.10, the VMware dynamic inventory plugin is available in the ``community.vmware`` collection included Ansible.
30
+To install the latest ``community.vmware`` collection:
31
+
32
+.. code-block:: bash
33
+
34
+    $ ansible-galaxy collection install community.vmware
35
+
36
+To use this VMware dynamic inventory plugin:
37
+
38
+ 1. Enable it first by specifying the following in the ``ansible.cfg`` file:
39
+
40
+.. code-block:: ini
41
+
42
+  [inventory]
43
+  enable_plugins = community.vmware.vmware_vm_inventory
44
+
45
+ 2. Create a file that ends in ``.vmware.yml`` or ``.vmware.yaml`` in your working directory.
46
+
47
+The ``vmware_vm_inventory`` inventory plugin takes in the same authentication information as any other VMware modules does.
48
+
49
+Here's an example of a valid inventory file with custom hostname for the given VMware guest:
50
+
51
+.. code-block:: yaml
52
+
53
+    plugin: community.vmware.vmware_vm_inventory
54
+    strict: False
55
+    hostname: 10.65.223.31
56
+    username: administrator@vsphere.local
57
+    password: Esxi@123$%
58
+    validate_certs: False
59
+    with_tags: False
60
+    hostnames:
61
+    - config.name
62
+
63
+
64
+Here, we have configured a custom hostname by setting the ``hostnames`` parameter to ``config.name``. This will retrieve
65
+the ``config.name`` property from the virtual machine and populate it in the inventory.
66
+
67
+You can check all allowed properties for the given virtual machine at :ref:`vmware_inventory_vm_attributes`.
68
+
69
+Executing ``ansible-inventory --list -i <filename>.vmware.yml`` will create a list of the virtual machines that are ready to be configured using Ansible.
70
+
71
+What to expect
72
+--------------
73
+
74
+You will notice that instead of default behavior of representing the hostname as ``config.name + _ + config.uuid``,
75
+the inventory hosts show value as ``config.name``.
76
+
77
+
78
+.. code-block:: yaml
79
+
80
+    {
81
+      "_meta": {
82
+        "hostvars": {
83
+            "template_001": {
84
+                "config.name": "template_001",
85
+                "guest.toolsRunningStatus": "guestToolsNotRunning",
86
+                ...
87
+                "guest.toolsStatus": "toolsNotInstalled",
88
+                "name": "template_001"
89
+            },
90
+            "vm_8046": {
91
+                "config.name": "vm_8046",
92
+                "guest.toolsRunningStatus": "guestToolsNotRunning",
93
+                ...
94
+                "guest.toolsStatus": "toolsNotInstalled",
95
+                "name": "vm_8046"
96
+            },
97
+        ...
98
+    }
99
+
100
+Troubleshooting
101
+---------------
102
+
103
+If the custom property specified in ``hostnames`` fails:
104
+
105
+- Check if the values provided for username and password are correct.
106
+- Make sure it is a valid property, see :ref:`vmware_inventory_vm_attributes`.
107
+- Use ``strict: True`` to get more information about the error.
108
+- Please make sure that you are using latest version VMware collection.
109
+
110
+
111
+.. seealso::
112
+
113
+    `pyVmomi <https://github.com/vmware/pyvmomi>`_
114
+        The GitHub Page of pyVmomi
115
+    `pyVmomi Issue Tracker <https://github.com/vmware/pyvmomi/issues>`_
116
+        The issue tracker for the pyVmomi project
117
+    `vSphere Automation SDK GitHub Page <https://github.com/vmware/vsphere-automation-sdk-python>`_
118
+        The GitHub Page of vSphere Automation SDK for Python
119
+    `vSphere Automation SDK Issue Tracker <https://github.com/vmware/vsphere-automation-sdk-python/issues>`_
120
+        The issue tracker for vSphere Automation SDK for Python
121
+    :ref:`vmware_inventory_vm_attributes`
122
+        Using Virtual machine attributes in VMware dynamic inventory plugin
123
+    :ref:`working_with_playbooks`
124
+        An introduction to playbooks
125
+    :ref:`playbooks_vault`
126
+        Using Vault in playbooks
... ...
@@ -124,6 +124,10 @@ also has powerful configuration management and deployment features.
124 124
        Examples of basic commands
125 125
    :ref:`working_with_playbooks`
126 126
        Learning Ansible's configuration management language
127
+   `Ansible Demos <https://github.com/ansible/product-demos>`_
128
+       Demonstrations of different Ansible usecases
129
+   `RHEL Labs <https://katacoda.com/rhel-labs>`_
130
+       Labs to provide further knowledge on different topics
127 131
    `Mailing List <https://groups.google.com/group/ansible-project>`_
128 132
        Questions? Help? Ideas?  Stop by the list on Google Groups
129 133
    `irc.freenode.net <http://irc.freenode.net>`_
... ...
@@ -240,6 +240,24 @@ for example::
240 240
     - set_fact:
241 241
         myvar: "{{ result.stdout | from_json }}"
242 242
 
243
+
244
+Filter `to_json` and Unicode support
245
+------------------------------------
246
+
247
+By default `to_json` and `to_nice_json` will convert data received to ASCII, so::
248
+
249
+    {{ 'München'| to_json }}
250
+
251
+will return::
252
+
253
+    'M\u00fcnchen'
254
+
255
+To keep Unicode characters, pass the parameter `ensure_ascii=False` to the filter::
256
+
257
+    {{ 'München'| to_json(ensure_ascii=False) }}
258
+
259
+    'München'
260
+
243 261
 .. versionadded:: 2.7
244 262
 
245 263
 To parse multi-document YAML strings, the ``from_yaml_all`` filter is provided.
... ...
@@ -59,7 +59,9 @@ To match strings against a substring or a regular expression, use the ``match``,
59 59
             msg: "matched pattern 4"
60 60
           when: url is regex("example.com/\w+/foo")
61 61
 
62
-``match`` succeeds if it finds the pattern at the beginning of the string, while ``search`` succeeds if it finds the pattern anywhere within string. By default, ``regex`` works like ``search``, but ``regex`` can be configured to perform other tests as well.
62
+``match`` succeeds if it finds the pattern at the beginning of the string, while ``search`` succeeds if it finds the pattern anywhere within string. By default, ``regex`` works like ``search``, but ``regex`` can be configured to perform other tests as well, by passing the ``match_type`` keyword argument. In particular, ``match_type`` determines the ``re`` method that gets used to perform the search. The full list can be found in the relevant Python documentation `here <https://docs.python.org/3/library/re.html#regular-expression-objects>`_.
63
+
64
+All of the string tests also take optional ``ignorecase`` and ``multiline`` arguments. These correspond to ``re.I`` and ``re.M`` from Python's ``re`` library, respectively.
63 65
 
64 66
 .. _testing_vault:
65 67
 
... ...
@@ -491,6 +491,15 @@ To reference the system hostname::
491 491
 
492 492
 You can use facts in conditionals (see :ref:`playbooks_conditionals`) and also in templates. You can also use facts to create dynamic groups of hosts that match particular criteria, see the :ref:`group_by module <group_by_module>` documentation for details.
493 493
 
494
+.. _fact_requirements:
495
+
496
+Package requirements for fact gathering
497
+---------------------------------------
498
+
499
+On some distros, you may see missing fact values or facts set to default values because the packages that support gathering those facts are not installed by default. You can install the necessary packages on your remote hosts using the OS package manager. Known dependencies include:
500
+
501
+* Linux Network fact gathering -  Depends on  the ``ip`` binary, commonly included in the ``iproute2`` package.
502
+
494 503
 .. _fact_caching:
495 504
 
496 505
 Caching facts
... ...
@@ -514,7 +514,7 @@ class TaskExecutor:
514 514
         try:
515 515
             # TODO: remove play_context as this does not take delegation into account, task itself should hold values
516 516
             #  for connection/shell/become/terminal plugin options to finalize.
517
-            #  Kept for now for backwards compatiblity and a few functions that are still exclusive to it.
517
+            #  Kept for now for backwards compatibility and a few functions that are still exclusive to it.
518 518
 
519 519
             # apply the given task's information to the connection info,
520 520
             # which may override some fields already set by the play or
... ...
@@ -232,7 +232,7 @@ class ConnectionBase(AnsiblePlugin):
232 232
     # NOTE: these password functions are all become specific, the name is
233 233
     # confusing as it does not handle 'protocol passwords'
234 234
     # DEPRECATED:
235
-    # These are kept for backwards compatiblity
235
+    # These are kept for backwards compatibility
236 236
     # Use the methods provided by the become plugins instead
237 237
     def check_become_success(self, b_output):
238 238
         display.deprecated(
... ...
@@ -62,8 +62,9 @@ class HttpApiBase(AnsiblePlugin):
62 62
             * True if the code has been handled in a way that the request
63 63
             may be resent without changes.
64 64
             * False if the error cannot be handled or recovered from by the
65
-            plugin. This will result in the HTTPError being returned to the
66
-            caller to deal with as appropriate.
65
+            plugin. This will result in the HTTPError being raised as an
66
+            exception for the caller to deal with as appropriate (most likely
67
+            by failing).
67 68
             * Any other value returned is taken as a valid response from the
68 69
             server without making another request. In many cases, this can just
69 70
             be the original exception.
... ...
@@ -179,7 +179,7 @@ def is_template(data, jinja_env):
179 179
     comment = False
180 180
     d2 = jinja_env.preprocess(data)
181 181
 
182
-    # This wraps a lot of code, but this is due to lex returing a generator
182
+    # This wraps a lot of code, but this is due to lex returning a generator
183 183
     # so we may get an exception at any part of the loop
184 184
     try:
185 185
         for token in jinja_env.lex(d2):
... ...
@@ -288,7 +288,7 @@ portable between the two. The following changes were made:
288 288
     * True, False and None are reserved keywords (these are reserved keywords
289 289
       on Python 3 as opposed to Python 2)
290 290
 
291
-:arg ident: A text string of indentifier to check. Note: It is callers
291
+:arg ident: A text string of identifier to check. Note: It is callers
292 292
     responsibility to convert ident to text if it is not already.
293 293
 
294 294
 Originally posted at http://stackoverflow.com/a/29586366
... ...
@@ -69,7 +69,7 @@ $powershell = [PowerShell]::Create()
69 69
 $powershell.Runspace.SessionStateProxy.SetVariable("ErrorActionPreference", "Stop")
70 70
 
71 71
 # Load the PowerShell module utils as the module may be using them to refer to shared module options. Currently we
72
-# can only load the PowerShell utils due to cross platform compatiblity issues.
72
+# can only load the PowerShell utils due to cross platform compatibility issues.
73 73
 if ($manifest.Contains('ps_utils')) {
74 74
     foreach ($util_info in $manifest.ps_utils.GetEnumerator()) {
75 75
         $util_name = $util_info.Key