summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSandra McCann <samccann@redhat.com>2020-12-01 12:42:48 -0500
committerGitHub <noreply@github.com>2020-12-01 09:42:48 -0800
commitbf14f1766fab15b75f6c134114ad52558460e720 (patch)
tree9e5984d88b515d7eacc60ca199bcf33e08878d9a
parent9c35740c90bebf490ab2e27c3ce90c10ced9cbb8 (diff)
downloadansible-stable-2.6.tar.gz
[backport][2.6]Update EOL Docs - batch fix for 2.6 (#72757)stable-2.6
* replace porting guides with stub pages - issue 71687 (#71988) (cherry picked from commit 5a3a2d1a39a610a820ec0142b93b0200222c05f3) * Remove Edit on GitHub (cherry picked from commit 304adf8481fa1cb52258d62a655b078cbecdf53c)
-rw-r--r--docs/docsite/rst/conf.py2
-rw-r--r--docs/docsite/rst/porting_guides/porting_guide_2.0.rst393
-rw-r--r--docs/docsite/rst/porting_guides/porting_guide_2.3.rst221
-rw-r--r--docs/docsite/rst/porting_guides/porting_guide_2.4.rst221
-rw-r--r--docs/docsite/rst/porting_guides/porting_guide_2.5.rst365
-rw-r--r--docs/docsite/rst/porting_guides/porting_guide_2.6.rst112
-rw-r--r--docs/docsite/rst/porting_guides/porting_guides.rst11
7 files changed, 28 insertions, 1297 deletions
diff --git a/docs/docsite/rst/conf.py b/docs/docsite/rst/conf.py
index 04744ef73d..6d47456539 100644
--- a/docs/docsite/rst/conf.py
+++ b/docs/docsite/rst/conf.py
@@ -134,7 +134,7 @@ html_theme_options = {
}
html_context = {
- 'display_github': 'True',
+ 'display_github': False,
'github_user': 'ansible',
'github_repo': 'ansible',
'github_version': 'devel/docs/docsite/rst/',
diff --git a/docs/docsite/rst/porting_guides/porting_guide_2.0.rst b/docs/docsite/rst/porting_guides/porting_guide_2.0.rst
index 5761c559e1..00879a6bb0 100644
--- a/docs/docsite/rst/porting_guides/porting_guide_2.0.rst
+++ b/docs/docsite/rst/porting_guides/porting_guide_2.0.rst
@@ -1,396 +1,13 @@
+:orphan:
+
.. _porting_2.0_guide:
*************************
Ansible 2.0 Porting Guide
*************************
-This section discusses the behavioral changes between Ansible 1.x and Ansible 2.0.
-
-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.
-
-
-We suggest you read this page along with `Ansible Changelog for 2.0 <https://github.com/ansible/ansible/blob/stable-2.0/CHANGELOG.md>`_ to understand what updates you may need to make.
-
-This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides <porting_guides>`.
-
-.. contents:: Topics
-
-Playbook
-========
-
-This section discusses any changes you may need to make to your playbooks.
-
-.. code-block:: yaml
-
- # Syntax in 1.9.x
- - debug:
- msg: "{{ 'test1_junk 1\\\\3' | regex_replace('(.*)_junk (.*)', '\\\\1 \\\\2') }}"
- # Syntax in 2.0.x
- - debug:
- msg: "{{ 'test1_junk 1\\3' | regex_replace('(.*)_junk (.*)', '\\1 \\2') }}"
-
- # Output:
- "msg": "test1 1\\3"
-
-To make an escaped string that will work on all versions you have two options::
-
-- debug: msg="{{ 'test1_junk 1\\3' | regex_replace('(.*)_junk (.*)', '\\1 \\2') }}"
-
-uses key=value escaping which has not changed. The other option is to check for the ansible version::
-
-"{{ (ansible_version|version_compare('2.0', 'ge'))|ternary( 'test1_junk 1\\3' | regex_replace('(.*)_junk (.*)', '\\1 \\2') , 'test1_junk 1\\\\3' | regex_replace('(.*)_junk (.*)', '\\\\1 \\\\2') ) }}"
-
-* trailing newline When a string with a trailing newline was specified in the
- playbook via yaml dict format, the trailing newline was stripped. When
- specified in key=value format, the trailing newlines were kept. In v2, both
- methods of specifying the string will keep the trailing newlines. If you
- relied on the trailing newline being stripped, you can change your playbook
- using the following as an example::
-
- # Syntax in 1.9.x
- vars:
- message: >
- Testing
- some things
- tasks:
- - debug:
- msg: "{{ message }}"
-
- # Syntax in 2.0.x
- vars:
- old_message: >
- Testing
- some things
- message: "{{ old_messsage[:-1] }}"
- - debug:
- msg: "{{ message }}"
- # Output
- "msg": "Testing some things"
-
-* Behavior of templating DOS-type text files changes with Ansible v2.
-
- A bug in Ansible v1 causes DOS-type text files (using a carriage return and newline) to be templated to Unix-type text files (using only a newline). In Ansible v2 this long-standing bug was finally fixed and DOS-type text files are preserved correctly. This may be confusing when you expect your playbook to not show any differences when migrating to Ansible v2, while in fact you will see every DOS-type file being completely replaced (with what appears to be the exact same content).
-
-* When specifying complex args as a variable, the variable must use the full jinja2
- variable syntax (```{{var_name}}```) - bare variable names there are no longer accepted.
- In fact, even specifying args with variables has been deprecated, and will not be
- allowed in future versions::
-
- ---
- - hosts: localhost
- connection: local
- gather_facts: false
- vars:
- my_dirs:
- - { path: /tmp/3a, state: directory, mode: 0755 }
- - { path: /tmp/3b, state: directory, mode: 0700 }
- tasks:
- - file:
- args: "{{item}}" # <- args here uses the full variable syntax
- with_items: "{{my_dirs}}"
-
-* porting task includes
-* More dynamic. Corner-case formats that were not supposed to work now do not, as expected.
-* variables defined in the yaml dict format https://github.com/ansible/ansible/issues/13324
-* templating (variables in playbooks and template lookups) has improved with regard to keeping the original instead of turning everything into a string.
- If you need the old behavior, quote the value to pass it around as a string.
-* Empty variables and variables set to null in yaml are no longer converted to empty strings. They will retain the value of `None`.
- You can override the `null_representation` setting to an empty string in your config file by setting the :envvar:`ANSIBLE_NULL_REPRESENTATION` environment variable.
-* Extras callbacks must be whitelisted in ansible.cfg. Copying is no longer necessary but whitelisting in ansible.cfg must be completed.
-* dnf module has been rewritten. Some minor changes in behavior may be observed.
-* win_updates has been rewritten and works as expected now.
-* from 2.0.1 onwards, the implicit setup task from gather_facts now correctly inherits everything from play, but this might cause issues for those setting
- `environment` at the play level and depending on `ansible_env` existing. Previously this was ignored but now might issue an 'Undefined' error.
-
-Deprecated
-----------
-
-While all items listed here will show a deprecation warning message, they still work as they did in 1.9.x. Please note that they will be removed in 2.2 (Ansible always waits two major releases to remove a deprecated feature).
-
-* Bare variables in ``with_`` loops should instead use the ``"{ {var }}"`` syntax, which helps eliminate ambiguity.
-* The ansible-galaxy text format requirements file. Users should use the YAML format for requirements instead.
-* Undefined variables within a ``with_`` loop's list currently do not interrupt the loop, but they do issue a warning; in the future, they will issue an error.
-* Using dictionary variables to set all task parameters is unsafe and will be removed in a future version. For example::
-
- - hosts: localhost
- gather_facts: no
- vars:
- debug_params:
- msg: "hello there"
- tasks:
- # These are both deprecated:
- - debug: "{{debug_params}}"
- - debug:
- args: "{{debug_params}}"
-
- # Use this instead:
- - debug:
- msg: "{{debug_params['msg']}}"
-
-* Host patterns should use a comma (,) or colon (:) instead of a semicolon (;) to separate hosts/groups in the pattern.
-* Ranges specified in host patterns should use the [x:y] syntax, instead of [x-y].
-* Playbooks using privilege escalation should always use "become*" options rather than the old su*/sudo* options.
-* The "short form" for vars_prompt is no longer supported.
- For example::
-
- vars_prompt:
- variable_name: "Prompt string"
-
-* Specifying variables at the top level of a task include statement is no longer supported. For example::
-
- - include_tasks: foo.yml
- a: 1
-
-Should now be::
-
- - include_tasks: foo.yml
- vars:
- a: 1
-
-* Setting any_errors_fatal on a task is no longer supported. This should be set at the play level only.
-* Bare variables in the `environment` dictionary (for plays/tasks/etc.) are no longer supported. Variables specified there should use the full variable syntax: '{{foo}}'.
-* Tags (or any directive) should no longer be specified with other parameters in a task include. Instead, they should be specified as an option on the task.
- For example::
-
- - include_tasks: foo.yml tags=a,b,c
-
- Should be::
-
- - include_tasks: foo.yml
- tags: [a, b, c]
-
-* The first_available_file option on tasks has been deprecated. Users should use the with_first_found option or lookup ('first_found', …) plugin.
-
-
-Other caveats
--------------
-
-Here are some corner cases encountered when updating. These are mostly caused by the more stringent parser validation and the capture of errors that were previously ignored.
-
-* Bad variable composition::
-
- with_items: myvar_{{rest_of_name}}
-
- This worked 'by accident' as the errors were retemplated and ended up resolving the variable, it was never intended as valid syntax and now properly returns an error, use the following instead.::
-
- hostvars[inventory_hostname]['myvar_' + rest_of_name]
-
-* Misspelled directives::
-
- - task: dostuf
- becom: yes
-
- The task always ran without using privilege escalation (for that you need `become`) but was also silently ignored so the play 'ran' even though it should not, now this is a parsing error.
-
-
-* Duplicate directives::
-
- - task: dostuf
- when: True
- when: False
-
- The first `when` was ignored and only the 2nd one was used as the play ran w/o warning it was ignoring one of the directives, now this produces a parsing error.
-
-* Conflating variables and directives::
-
- - role: {name=rosy, port=435 }
-
- # in tasks/main.yml
- - wait_for: port={{port}}
-
- The `port` variable is reserved as a play/task directive for overriding the connection port, in previous versions this got conflated with a variable named `port` and was usable
- later in the play, this created issues if a host tried to reconnect or was using a non caching connection. Now it will be correctly identified as a directive and the `port` variable
- will appear as undefined, this now forces the use of non conflicting names and removes ambiguity when adding settings and variables to a role invocation.
-
-* Bare operations on `with_`::
-
- with_items: var1 + var2
-
- An issue with the 'bare variable' features, which was supposed only template a single variable without the need of braces ({{ )}}, would in some versions of Ansible template full expressions.
- Now you need to use proper templating and braces for all expressions everywhere except conditionals (`when`)::
-
- with_items: "{{var1 + var2}}"
-
- The bare feature itself is deprecated as an undefined variable is indistinguishable from a string which makes it difficult to display a proper error.
-
-Porting plugins
-===============
-
-In ansible-1.9.x, you would generally copy an existing plugin to create a new one. Simply implementing the methods and attributes that the caller of the plugin expected made it a plugin of that type. In ansible-2.0, most plugins are implemented by subclassing a base class for each plugin type. This way the custom plugin does not need to contain methods which are not customized.
-
-
-Lookup plugins
---------------
-
-* lookup plugins ; import version
-
-
-Connection plugins
-------------------
-
-* connection plugins
-
-Action plugins
---------------
-
-
-* action plugins
-
-Callback plugins
-----------------
-
-Although Ansible 2.0 provides a new callback API the old one continues to work
-for most callback plugins. However, if your callback plugin makes use of
-:attr:`self.playbook`, :attr:`self.play`, or :attr:`self.task` then you will
-have to store the values for these yourself as ansible no longer automatically
-populates the callback with them. Here's a short snippet that shows you how:
-
-.. code-block:: python
-
- import os
- from ansible.plugins.callback import CallbackBase
-
- class CallbackModule(CallbackBase):
- def __init__(self):
- self.playbook = None
- self.playbook_name = None
- self.play = None
- self.task = None
-
- def v2_playbook_on_start(self, playbook):
- self.playbook = playbook
- self.playbook_name = os.path.basename(self.playbook._file_name)
-
- def v2_playbook_on_play_start(self, play):
- self.play = play
-
- def v2_playbook_on_task_start(self, task, is_conditional):
- self.task = task
-
- def v2_on_any(self, *args, **kwargs):
- self._display.display('%s: %s: %s' % (self.playbook_name,
- self.play.name, self.task))
-
-
-Connection plugins
-------------------
-
-* connection plugins
-
-
-Hybrid plugins
-==============
-
-In specific cases you may want a plugin that supports both ansible-1.9.x *and* ansible-2.0. Much like porting plugins from v1 to v2, you need to understand how plugins work in each version and support both requirements.
-
-Since the ansible-2.0 plugin system is more advanced, it is easier to adapt your plugin to provide similar pieces (subclasses, methods) for ansible-1.9.x as ansible-2.0 expects. This way your code will look a lot cleaner.
-
-You may find the following tips useful:
-
-* Check whether the ansible-2.0 class(es) are available and if they are missing (ansible-1.9.x) mimic them with the needed methods (e.g. ``__init__``)
-
-* When ansible-2.0 python modules are imported, and they fail (ansible-1.9.x), catch the ``ImportError`` exception and perform the equivalent imports for ansible-1.9.x. With possible translations (e.g. importing specific methods).
-
-* Use the existence of these methods as a qualifier to what version of Ansible you are running. So rather than using version checks, you can do capability checks instead. (See examples below)
-
-* Document for each if-then-else case for which specific version each block is needed. This will help others to understand how they have to adapt their plugins, but it will also help you to remove the older ansible-1.9.x support when it is deprecated.
-
-* When doing plugin development, it is very useful to have the ``warning()`` method during development, but it is also important to emit warnings for deadends (cases that you expect should never be triggered) or corner cases (e.g. cases where you expect misconfigurations).
-
-* It helps to look at other plugins in ansible-1.9.x and ansible-2.0 to understand how the API works and what modules, classes and methods are available.
-
-
-Lookup plugins
---------------
-
-As a simple example we are going to make a hybrid ``fileglob`` lookup plugin.
-
-.. code-block:: python
-
- from __future__ import (absolute_import, division, print_function)
- __metaclass__ = type
-
- import os
- import glob
-
- try:
- # ansible-2.0
- from ansible.plugins.lookup import LookupBase
- except ImportError:
- # ansible-1.9.x
-
- class LookupBase(object):
- def __init__(self, basedir=None, runner=None, **kwargs):
- self.runner = runner
- self.basedir = self.runner.basedir
-
- def get_basedir(self, variables):
- return self.basedir
-
- try:
- # ansible-1.9.x
- from ansible.utils import (listify_lookup_plugin_terms, path_dwim, warning)
- except ImportError:
- # ansible-2.0
- from __main__ import display
- warning = display.warning
-
- class LookupModule(LookupBase):
-
- # For ansible-1.9.x, we added inject=None as valid argument
- def run(self, terms, inject=None, variables=None, **kwargs):
-
- # ansible-2.0, but we made this work for ansible-1.9.x too !
- basedir = self.get_basedir(variables)
-
- # ansible-1.9.x
- if 'listify_lookup_plugin_terms' in globals():
- terms = listify_lookup_plugin_terms(terms, basedir, inject)
-
- ret = []
- for term in terms:
- term_file = os.path.basename(term)
-
- # For ansible-1.9.x, we imported path_dwim() from ansible.utils
- if 'path_dwim' in globals():
- # ansible-1.9.x
- dwimmed_path = path_dwim(basedir, os.path.dirname(term))
- else:
- # ansible-2.0
- dwimmed_path = self._loader.path_dwim_relative(basedir, 'files', os.path.dirname(term))
-
- globbed = glob.glob(os.path.join(dwimmed_path, term_file))
- ret.extend(g for g in globbed if os.path.isfile(g))
-
- return ret
-
-.. Note:: In the above example we did not use the ``warning()`` method as we had no direct use for it in the final version. However we left this code in so people can use this part during development/porting/use.
-
-
-
-Connection plugins
-------------------
-
-* connection plugins
-
-Action plugins
---------------
-
-* action plugins
-
-Callback plugins
-----------------
-
-* callback plugins
-
-Connection plugins
-------------------
-
-* connection plugins
-
-
-Porting custom scripts
-======================
+Ansible Porting Guides are maintained in the ``devel`` branch only. Please go to `the devel Ansible 2.0 Porting guide <https://docs.ansible.com/ansible/devel/porting_guides/porting_guide_2.0.html>`_ for up to date information.
-Custom scripts that used the ``ansible.runner.Runner`` API in 1.x have to be ported in 2.x. Please refer to: :ref:`developing_api`
+.. note::
+ This link takes you to a different version of the Ansible documentation. Use the version selection on the left or your browser back button to return to this version of the documentation.
diff --git a/docs/docsite/rst/porting_guides/porting_guide_2.3.rst b/docs/docsite/rst/porting_guides/porting_guide_2.3.rst
index 1d04692ba4..a003ba3f69 100644
--- a/docs/docsite/rst/porting_guides/porting_guide_2.3.rst
+++ b/docs/docsite/rst/porting_guides/porting_guide_2.3.rst
@@ -1,224 +1,13 @@
+:orphan:
+
.. _porting_2.3_guide:
*************************
Ansible 2.3 Porting Guide
*************************
-This section discusses the behavioral changes between Ansible 2.2 and Ansible 2.3.
-
-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.
-
-
-We suggest you read this page along with `Ansible Changelog for 2.3 <https://github.com/ansible/ansible/blob/stable-2.3/CHANGELOG.md>`_ to understand what updates you may need to make.
-
-This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides <porting_guides>`.
-
-.. contents:: Topics
-
-Playbook
-========
-
-Restructued async to work with action plugins
----------------------------------------------
-
-In Ansible 2.2 (and possibly earlier) the `async:` keyword could not be used in conjunction with the action plugins such as `service`. This limitation has been removed in Ansible 2.3
-
-**NEW** In Ansible 2.3:
-
-
-.. code-block:: guess
-
- - name: Install nginx asynchronously
- service:
- name: nginx
- state: restarted
- async: 45
-
-
-OpenBSD version facts
----------------------
-
-The `ansible_distribution_release` and `ansible_distribution_version` facts on OpenBSD hosts were reversed in Ansible 2.2 and earlier. This has been changed so that version has the numeric portion and release has the name of the release.
-
-**OLD** In Ansible 2.2 (and earlier)
-
-
-.. code-block:: guess
-
- "ansible_distribution": "OpenBSD"
- "ansible_distribution_release": "6.0",
- "ansible_distribution_version": "release",
-
-**NEW** In Ansible 2.3:
-
-
-.. code-block:: guess
-
- "ansible_distribution": "OpenBSD",
- "ansible_distribution_release": "release",
- "ansible_distribution_version": "6.0",
-
-
-Names Blocks
-------------
-
-Blocks can now have names, this allows you to avoid the ugly `# this block is for...` comments.
-
-
-**NEW** In Ansible 2.3:
-
-
-.. code-block:: guess
-
- - name: Block test case
- hosts: localhost
- tasks:
- - name: Attempt to setup foo
- block:
- - debug: msg='I execute normally'
- - command: /bin/false
- - debug: msg='I never execute, cause ERROR!'
- rescue:
- - debug: msg='I caught an error'
- - command: /bin/false
- - debug: msg='I also never execute :-('
- always:
- - debug: msg="this always executes"
-
-
-Use of multiple tags
---------------------
-
-Specifying ``--tags`` (or ``--skip-tags``) multiple times on the command line currently leads to the last specified tag overriding all the other specified tags. This behaviour is deprecated. In the future, if you specify --tags multiple times the tags will be merged together. From now on, using ``--tags`` multiple times on one command line will emit a deprecation warning. Setting the ``merge_multiple_cli_tags`` option to True in the ``ansible.cfg`` file will enable the new behaviour.
-
-In 2.4, the default will be to merge the tags. You can enable the old overwriting behavior via the config option.
-In 2.5, multiple ``--tags`` options will be merged with no way to go back to the old behaviour.
-
-
-Other caveats
--------------
-
-Here are some rare cases that might be encountered when updating. These are mostly caused by the more stringent parser validation and the capture of errors that were previously ignored.
-
-
-* Made ``any_errors_fatal`` inheritable from play to task and all other objects in between.
-
-Modules
-=======
-
-No major changes in this version.
-
-Modules removed
----------------
-
-No major changes in this version.
-
-Deprecation notices
--------------------
-
-The following modules will be removed in Ansible 2.5. Please update your playbooks accordingly.
-
-* :ref:`ec2_vpc <ec2_vpc_module>`
-* :ref:`cl_bond <cl_bond_module>`
-* :ref:`cl_bridge <cl_bridge_module>`
-* :ref:`cl_img_install <cl_img_install_module>`
-* :ref:`cl_interface <cl_interface_module>`
-* :ref:`cl_interface_policy <cl_interface_policy_module>`
-* :ref:`cl_license <cl_license_module>`
-* :ref:`cl_ports <cl_ports_module>`
-* :ref:`nxos_mtu <nxos_mtu_module>` use :ref:`nxos_system <nxos_system_module>` instead
-
-Noteworthy module changes
--------------------------
-
-AWS lambda
-^^^^^^^^^^
-Previously ignored changes that only affected one parameter. Existing deployments may have outstanding changes that this bug fix will apply.
-
-
-Mount
-^^^^^
-
-Mount: Some fixes so bind mounts are not mounted each time the playbook runs.
-
-
-Plugins
-=======
-
-No major changes in this version.
-
-Porting custom scripts
-======================
-
-No major changes in this version.
-
-Networking
-==========
-
-There have been a number of changes to number of changes to how Networking Modules operate.
-
-Playbooks should still use ``connection: local``.
-
-The following changes apply to:
-
-* dellos6
-* dellos9
-* dellos10
-* eos
-* ios
-* iosxr
-* junos
-* sros
-* vyos
-
-Deprecation of top-level connection arguments
----------------------------------------------
-
-**OLD** In Ansible 2.2:
-
-.. code-block:: guess
-
- - name: example of using top-level options for connection properties
- ios_command:
- commands: show version
- host: "{{ inventory_hostname }}"
- username: cisco
- password: cisco
- authorize: yes
- auth_pass: cisco
-
-Will result in:
-
-.. code-block:: guess
-
- [WARNING]: argument username has been deprecated and will be removed in a future version
- [WARNING]: argument host has been deprecated and will be removed in a future version
- [WARNING]: argument password has been deprecated and will be removed in a future version
-
-
-**NEW** In Ansible 2.3:
-
-
-.. code-block:: guess
-
- - name: Gather facts
- eos_facts:
- gather_subset: all
- provider:
- username: myuser
- password: "{{ networkpassword }}"
- transport: cli
- host: "{{ ansible_host }}"
-
-delegate_to vs ProxyCommand
----------------------------
-
-The new connection framework for Network Modules in Ansible 2.3 that uses ``cli`` transport
-no longer supports the use of the ``delegate_to`` directive.
-In order to use a bastion or intermediate jump host to connect to network devices over ``cli``
-transport, network modules now support the use of ``ProxyCommand``.
+Ansible Porting Guides are maintained in the ``devel`` branch only. Please go to `the devel Ansible 2.3 Porting guide <https://docs.ansible.com/ansible/devel/porting_guides/porting_guide_2.3.html>`_ for up to date information.
-To use ``ProxyCommand`` configure the proxy settings in the Ansible inventory
-file to specify the proxy host via ``ansible_ssh_common_args``.
+.. note::
-For details on how to do this see the :ref:`network proxy guide <network_delegate_to_vs_ProxyCommand>`.
+ This link takes you to a different version of the Ansible documentation. Use the version selection on the left or your browser back button to return to this version of the documentation.
diff --git a/docs/docsite/rst/porting_guides/porting_guide_2.4.rst b/docs/docsite/rst/porting_guides/porting_guide_2.4.rst
index e3499abe74..eb2d9954fa 100644
--- a/docs/docsite/rst/porting_guides/porting_guide_2.4.rst
+++ b/docs/docsite/rst/porting_guides/porting_guide_2.4.rst
@@ -1,226 +1,13 @@
+:orphan:
+
.. _porting_2.4_guide:
*************************
Ansible 2.4 Porting Guide
*************************
-This section discusses the behavioral changes between Ansible 2.3 and Ansible 2.4.
-
-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.
-
-
-We suggest you read this page along with `Ansible Changelog for 2.4 <https://github.com/ansible/ansible/blob/stable-2.4/CHANGELOG.md>`_ to understand what updates you may need to make.
-
-This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides <porting_guides>`.
-
-.. contents:: Topics
-
-Python version
-==============
-
-Ansible will not support Python 2.4 or 2.5 on the target hosts anymore. Going forward, Python 2.6+ will be required on targets, as already is the case on the controller.
-
-
-Inventory
-=========
-
-Inventory has been refactored to be implemented via plugins and now allows for multiple sources. This change is mostly transparent to users.
-
-One exception is the ``inventory_dir``, which is now a host variable; previously it could only have one value so it was set globally.
-This means you can no longer use it early in plays to determine ``hosts:`` or similar keywords.
-This also changes the behaviour of ``add_hosts`` and the implicit localhost;
-because they no longer automatically inherit the global value, they default to ``None``. See the module documentation for more information.
-
-The ``inventory_file`` remains mostly unchanged, as it was always host specific.
-
-Since there is no longer a single inventory, the 'implicit localhost' doesn't get either of these variables defined.
-
-A bug was fixed with the inventory path/directory, which was defaulting to the current working directory. This caused ``group_vars`` and ``host_vars`` to be picked up from the current working directory instead of just adjacent to the playbook or inventory directory when a host list (comma separated host names) was provided as inventory.
-
-Initial playbook relative group_vars and host_vars
---------------------------------------------------
-
-In Ansible versions prior to 2.4, the inventory system would maintain the context of the initial playbook that was executed. This allowed successively included playbooks from other directories to inherit group_vars and host_vars placed relative to the top level playbook file.
-
-Due to some behavioral inconsistencies, this functionality will not be included in the new
-inventory system starting with Ansible version 2.4.
-
-Similar functionality can still be achieved by using vars_files, include_vars, or group_vars and host_vars placed relative to the inventory file.
-
-Deprecated
-==========
-
-Specifying Inventory sources
------------------------------
-
-Use of ``--inventory-file`` on the command line is now deprecated. Use ``--inventory`` or ``-i``.
-The associated ini configuration key, ``hostfile``, and environment variable, :envvar:`ANSIBLE_HOSTS`,
-are also deprecated. Replace them with the configuration key ``inventory`` and environment variable :envvar:`ANSIBLE_INVENTORY`.
-
-Use of multiple tags
---------------------
-
-Specifying ``--tags`` (or ``--skip-tags``) multiple times on the command line currently leads to the last one overriding all the previous ones. This behavior is deprecated. In the future, if you specify --tags multiple times the tags will be merged together. From now on, using ``--tags`` multiple times on one command line will emit a deprecation warning. Setting the ``merge_multiple_cli_tags`` option to True in the ``ansible.cfg`` file will enable the new behavior.
-
-In 2.4, the default has change to merge the tags. You can enable the old overwriting behavior via the config option.
-
-In 2.5, multiple ``--tags`` options will be merged with no way to go back to the old behavior.
-
-
-Other caveats
--------------
-
-No major changes in this version.
-
-Modules
-=======
-
-Major changes in popular modules are detailed here
-
-* The :ref:`win_shell <win_shell_module>` and :ref:`win_command <win_command_module>` modules now properly preserve quoted arguments in the command-line. Tasks that attempted to work around the issue by adding extra quotes/escaping may need to be reworked to remove the superfluous escaping. See `Issue 23019 <https://github.com/ansible/ansible/issues/23019>`_ for additional detail.
-
-Modules removed
----------------
-
-The following modules no longer exist:
-
-* None
-
-Deprecation notices
--------------------
-
-The following modules will be removed in Ansible 2.8. Please update your playbooks accordingly.
-
-* :ref:`azure <azure_module>`, use :ref:`azure_rm_virtualmachine <azure_rm_virtualmachine_module>`, which uses the new Resource Manager SDK.
-* :ref:`win_msi <win_msi_module>`, use :ref:`win_package <win_package_module>` instead
-
-Noteworthy module changes
--------------------------
-
-* The :ref:`win_get_url <win_get_url_module>` module has the dictionary ``win_get_url`` in its results deprecated, its content is now also available directly in the resulting output, like other modules. This dictionary will be removed in Ansible 2.8.
-* The :ref:`win_unzip <win_unzip_module>` module no longer includes the dictionary ``win_unzip`` in its results; the contents are now included directly in the resulting output, like other modules.
-* The :ref:`win_package <win_package_module>` module return values ``exit_code`` and ``restart_required`` have been deprecated in favour of ``rc`` and ``reboot_required`` respectively. The deprecated return values will be removed in Ansible 2.6.
-
-
-Plugins
-=======
-
-A new way to configure and document plugins has been introduced. This does not require changes to existing setups but developers should start adapting to the new infrastructure now. More details will be available in the developer documentation for each plugin type.
-
-Vars plugin changes
--------------------
-
-There have been many changes to the implementation of vars plugins, but both users and developers should not need to change anything to keep current setups working. Developers should consider changing their plugins take advantage of new features.
-
-The most notable difference to users is that vars plugins now get invoked on demand instead of at inventory build time. This should make them more efficient for large inventories, especially when using a subset of the hosts.
-
+Ansible Porting Guides are maintained in the ``devel`` branch only. Please go to `the devel Ansible 2.4 Porting guide <https://docs.ansible.com/ansible/devel/porting_guides/porting_guide_2.4.html>`_ for up to date information.
.. note::
- - This also creates a difference with group/host_vars when using them adjacent to playbooks. Before, the 'first' playbook loaded determined the variables; now the 'current' playbook does. We are looking to fix this soon, since 'all playbooks' in the path should be considered for variable loading.
- - In 2.4.1 we added a toggle to allow you to control this behaviour, 'top' will be the pre 2.4, 'bottom' will use the current playbook hosting the task and 'all' will use them all from top to bottom.
-
-
-Inventory plugins
------------------
-
-Developers should start migrating from hardcoded inventory with dynamic inventory scripts to the new Inventory Plugins. The scripts will still work via the ``script`` inventory plugin but Ansible development efforts will now concentrate on writing plugins rather than enhancing existing scripts.
-
-Both users and developers should look into the new plugins because they are intended to alleviate the need for many of the hacks and workarounds found in the dynamic inventory scripts.
-
-Callback plugins
-----------------
-
-Users:
-
-* Callbacks are now using the new configuration system. Users should not need to change anything as the old system still works,
- but you might see a deprecation notice if any callbacks used are not inheriting from the built in classes. Developers need to update them as stated below.
-
-Developers:
-
-* If your callback does not inherit from ``CallbackBase`` (directly or indirectly via another callback), it will still work, but issue a deprecation notice.
- To avoid this and ensure it works in the future change it to inherit from ``CallbackBase`` so it has the new options handling methods and properties.
- You can also implement the new options handling methods and properties but that won't automatically inherit changes added in the future. You can look at ``CallbackBase`` itself and/or ``AnsiblePlugin`` for details.
-* Any callbacks inheriting from other callbacks might need to also be updated to contain the same documented options
- as the parent or the options won't be available. This is noted in the developer guide.
-
-Template lookup plugin: Escaping Strings
-----------------------------------------
-
-Prior to Ansible 2.4, backslashes in strings passed to the template lookup plugin would be escaped
-automatically. In 2.4, users are responsible for escaping backslashes themselves. This change
-brings the template lookup plugin inline with the template module so that the same backslash
-escaping rules apply to both.
-
-If you have a template lookup like this::
-
- - debug:
- msg: '{{ lookup("template", "template.j2") }}'
-
-**OLD** In Ansible 2.3 (and earlier) :file:`template.j2` would look like this:
-
-.. code-block:: jinja
-
- {{ "name surname" | regex_replace("^[^\s]+\s+(.*)", "\1") }}
-
-**NEW** In Ansible 2.4 it should be changed to look like this:
-
-.. code-block:: jinja
-
- {{ "name surname" | regex_replace("^[^\\s]+\\s+(.*)", "\\1") }}
-
-Tests
-=====
-
-Tests succeeded/failed
------------------------
-
-Prior to Ansible version 2.4, a task return code of ``rc`` would override a return code of ``failed``. In version 2.4, both ``rc`` and ``failed`` are used to calculate the state of the task. Because of this, test plugins ``succeeded``/``failed``` have also been changed. This means that overriding a task failure with ``failed_when: no`` will result in ``succeeded``/``failed`` returning ``True``/``False``. For example::
-
- - command: /bin/false
- register: result
- failed_when: no
-
- - debug:
- msg: 'This is printed on 2.3'
- when: result|failed
-
- - debug:
- msg: 'This is printed on 2.4'
- when: result|succeeded
-
- - debug:
- msg: 'This is always printed'
- when: result.rc != 0
-
-As we can see from the example above, in Ansible 2.3 ``succeeded``/``failed`` only checked the value of ``rc``.
-
-Networking
-==========
-
-There have been a number of changes to how Networking Modules operate.
-
-Playbooks should still use ``connection: local``.
-
-Persistent Connection
----------------------
-
-The configuration variables ``connection_retries`` and ``connect_interval`` which were added in Ansible 2.3 are now deprecated. For Ansible 2.4 and later use ``connection_retry_timeout``.
-
-To control timeouts use ``command_timeout`` rather than the previous top level ``timeout`` variable under ``[default]``
-
-See :ref:`Ansible Network debug guide <network_debug_troubleshooting>` for more information.
-
-
-Configuration
-=============
-
-
-The configuration system has had some major changes. Users should be unaffected except for the following:
-
-* All relative paths defined are relative to the `ansible.cfg` file itself. Previously they varied by setting. The new behavior should be more predictable.
-* A new macro ``{{CWD}}`` is available for paths, which will make paths relative to the 'current working directory',
- this is unsafe but some users really want to rely on this behaviour.
-
-Developers that were working directly with the previous API should revisit their usage as some methods (for example, ``get_config``) were kept for backwards compatibility but will warn users that the function has been deprecated.
-The new configuration has been designed to minimize the need for code changes in core for new plugins. The plugins just need to document their settings and the configuration system will use the documentation to provide what they need. This is still a work in progress; currently only 'callback' and 'connection' plugins support this. More details will be added to the specific plugin developer guides.
+ This link takes you to a different version of the Ansible documentation. Use the version selection on the left or your browser back button to return to this version of the documentation.
diff --git a/docs/docsite/rst/porting_guides/porting_guide_2.5.rst b/docs/docsite/rst/porting_guides/porting_guide_2.5.rst
index 5b9a72b080..439cbae060 100644
--- a/docs/docsite/rst/porting_guides/porting_guide_2.5.rst
+++ b/docs/docsite/rst/porting_guides/porting_guide_2.5.rst
@@ -1,368 +1,13 @@
+:orphan:
+
.. _porting_2.5_guide:
*************************
Ansible 2.5 Porting Guide
*************************
-This section discusses the behavioral changes between Ansible 2.4 and Ansible 2.5.
-
-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.
-
-We suggest you read this page along with `Ansible Changelog for 2.5 <https://github.com/ansible/ansible/blob/stable-2.5/changelogs/CHANGELOG-v2.5.rst>`_ to understand what updates you may need to make.
-
-This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides <porting_guides>`.
-
-.. contents:: Topics
-
-Playbook
-========
-
-Dynamic includes and attribute inheritance
-------------------------------------------
-
-In Ansible version 2.4, the concept of dynamic includes (``include_tasks``) versus static imports (``import_tasks``) was introduced to clearly define the differences in how ``include`` works between dynamic and static includes.
-
-All attributes applied to a dynamic ``include_*`` would only apply to the include itself, while attributes applied to a
-static ``import_*`` would be inherited by the tasks within.
-
-This separation was only partially implemented in Ansible version 2.4. As of Ansible version 2.5, this work is complete and the separation now behaves as designed; attributes applied to an ``include_*`` task will not be inherited by the tasks within.
-
-To achieve an outcome similar to how Ansible worked prior to version 2.5, playbooks should use an explicit application of the attribute on the needed tasks, or use blocks to apply the attribute to many tasks. Another option is to use a static ``import_*`` when possible instead of a dynamic task.
-
-**OLD** In Ansible 2.4:
-
-.. code-block:: yaml
-
- - include_tasks: "{{ ansible_distribution }}.yml"
- tags:
- - distro_include
-
-Included file:
-
-.. code-block:: yaml
-
- - block:
- - debug:
- msg: "In included file"
-
- - apt:
- name: nginx
- state: latest
-
-**NEW** In Ansible 2.5:
-
-Including task:
-
-.. code-block:: yaml
-
- - include_tasks: "{{ ansible_distribution }}.yml"
- tags:
- - distro_include
-
-Included file:
-
-.. code-block:: yaml
-
- - block:
- - debug:
- msg: "In included file"
-
- - apt:
- name: nginx
- state: latest
- tags:
- - distro_include
-
-The relevant change in those examples is, that in Ansible 2.5, the included file defines the tag ``distro_include`` again. The tag is not inherited automatically.
-
-Fixed handling of keywords and inline variables
------------------------------------------------
-
-We made several fixes to how we handle keywords and 'inline variables', to avoid conflating the two. Unfortunately these changes mean you must specify whether `name` is a keyword or a variable when calling roles. If you have playbooks that look like this::
-
- roles:
- - { role: myrole, name: Justin, othervar: othervalue, become: True}
-
-You will run into errors because Ansible reads name in this context as a keyword. Beginning in 2.5, if you want to use a variable name that is also a keyword, you must explicitly declare it as a variable for the role::
-
- roles:
- - { role: myrole, vars: {name: Justin, othervar: othervalue}, become: True}
-
-
-For a full list of keywords see ::ref::`Playbook Keywords`.
-
-Migrating from with_X to loop
------------------------------
-
-.. include:: ../user_guide/shared_snippets/with2loop.txt
-
-
-Deprecated
-==========
-
-Jinja tests used as filters
----------------------------
-
-Using Ansible-provided jinja tests as filters will be removed in Ansible 2.9.
-
-Prior to Ansible 2.5, jinja tests included within Ansible were most often used as filters. The large difference in use is that filters are referenced as ``variable | filter_name`` while jinja tests are referenced as ``variable is test_name``.
-
-Jinja tests are used for comparisons, while filters are used for data manipulation and have different applications in jinja. This change is to help differentiate the concepts for a better understanding of jinja, and where each can be appropriately used.
-
-As of Ansible 2.5, using an Ansible provided jinja test with filter syntax, will display a deprecation error.
-
-**OLD** In Ansible 2.4 (and earlier) the use of an Ansible included jinja test would likely look like this:
-
-.. code-block:: yaml
-
- when:
- - result | failed
- - not result | success
-
-**NEW** In Ansible 2.5 it should be changed to look like this:
-
-.. code-block:: yaml
-
- when:
- - result is failed
- - results is not successful
-
-In addition to the deprecation warnings, many new tests have been introduced that are aliases of the old tests. These new tests make more sense grammatically with the jinja test syntax, such as the new ``successful`` test which aliases ``success``.
-
-.. code-block:: yaml
-
- when: result is successful
-
-See :ref:`playbooks_tests` for more information.
-
-Additionally, a script was created to assist in the conversion for tests using filter syntax to proper jinja test syntax. This script has been used to convert all of the Ansible integration tests to the correct format. There are a few limitations documented, and all changes made by this script should be evaluated for correctness before executing the modified playbooks. The script can be found at `https://github.com/ansible/ansible/blob/devel/hacking/fix_test_syntax.py <https://github.com/ansible/ansible/blob/devel/hacking/fix_test_syntax.py>`_.
-
-Modules
-=======
-
-Major changes in popular modules are detailed here.
-
-github_release
---------------
-
-In Ansible versions 2.4 and older, after creating a GitHub release using the ``create_release`` state, the ``github_release`` module reported state as ``skipped``.
-In Ansible version 2.5 and later, after creating a GitHub release using the ``create_release`` state, the ``github_release`` module now reports state as ``changed``.
-
-
-Modules removed
----------------
-
-The following modules no longer exist:
-
-* :ref:`nxos_mtu <nxos_mtu_module>` use :ref:`nxos_system <nxos_system_module>`'s ``system_mtu`` option or :ref:`nxos_interface <nxos_interface_module>` instead
-* :ref:`cl_interface_policy <cl_interface_policy_module>` use :ref:`nclu <nclu_module>` instead
-* :ref:`cl_bridge <cl_bridge_module>` use :ref:`nclu <nclu_module>` instead
-* :ref:`cl_img_install <cl_img_install_module>` use :ref:`nclu <nclu_module>` instead
-* :ref:`cl_ports <cl_ports_module>` use :ref:`nclu <nclu_module>` instead
-* :ref:`cl_license <cl_license_module>` use :ref:`nclu <nclu_module>` instead
-* :ref:`cl_interface <cl_interface_module>` use :ref:`nclu <nclu_module>` instead
-* :ref:`cl_bond <cl_bond_module>` use :ref:`nclu <nclu_module>` instead
-* :ref:`ec2_vpc <ec2_vpc_module>` use :ref:`ec2_vpc_net <ec2_vpc_net_module>` along with supporting modules :ref:`ec2_vpc_igw <ec2_vpc_igw_module>`, :ref:`ec2_vpc_route_table <ec2_vpc_route_table_module>`, :ref:`ec2_vpc_subnet <ec2_vpc_subnet_module>`, :ref:`ec2_vpc_dhcp_option <ec2_vpc_dhcp_option_module>`, :ref:`ec2_vpc_nat_gateway <ec2_vpc_nat_gateway_module>`, :ref:`ec2_vpc_nacl <ec2_vpc_nacl_module>` instead.
-* :ref:`ec2_ami_search <ec2_ami_search_module>` use :ref:`ec2_ami_facts <ec2_ami_facts_module>` instead
-* :ref:`docker <docker_module>` use :ref:`docker_container <docker_container_module>` and :ref:`docker_image <docker_image_module>` instead
-
-Deprecation notices
--------------------
-
-The following modules will be removed in Ansible 2.9. Please update your playbooks accordingly.
-
-* Apstra's ``aos_*`` modules are deprecated as they do not work with AOS 2.1 or higher. See new modules at `https://github.com/apstra <https://github.com/apstra>`_.
-* :ref:`nxos_ip_interface <nxos_ip_interface_module>` use :ref:`nxos_l3_interface <nxos_l3_interface_module>` instead.
-* :ref:`nxos_portchannel <nxos_portchannel_module>` use :ref:`nxos_linkagg <nxos_linkagg_module>` instead.
-* :ref:`nxos_switchport <nxos_switchport_module>` use :ref:`nxos_l2_interface <nxos_l2_interface_module>` instead.
-* :ref:`panos_security_policy <panos_security_policy_module>` use :ref:`panos_security_rule <panos_security_rule_module>` instead.
-* :ref:`panos_nat_policy <panos_nat_policy_module>` use :ref:`panos_nat_rule <panos_nat_rule_module>` instead.
-* :ref:`vsphere_guest <vsphere_guest_module>` use :ref:`vmware_guest <vmware_guest_module>` instead.
-
-Noteworthy module changes
--------------------------
-
-* The :ref:`stat <stat_module>` and :ref:`win_stat <win_stat_module>` modules have changed the default of the option ``get_md5`` from ``true`` to ``false``.
-
-This option will be removed starting with Ansible version 2.9. The options ``get_checksum: True``
-and ``checksum_algorithm: md5`` can still be used if an MD5 checksum is
-desired.
-
-* ``osx_say`` module was renamed into :ref:`say <say_module>`.
-* Several modules which could deal with symlinks had the default value of their ``follow`` option
- changed as part of a feature to `standardize the behavior of follow
- <https://github.com/ansible/proposals/issues/69>`_:
-
- * The :ref:`file module <file_module>` changed from ``follow=False`` to ``follow=True`` because
- its purpose is to modify the attributes of a file and most systems do not allow attributes to be
- applied to symlinks, only to real files.
- * The :ref:`replace module <replace_module>` had its ``follow`` parameter removed because it
- inherently modifies the content of an existing file so it makes no sense to operate on the link
- itself.
- * The :ref:`blockinfile module <blockinfile_module>` had its ``follow`` parameter removed because
- it inherently modifies the content of an existing file so it makes no sense to operate on the
- link itself.
- * In Ansible-2.5.3, the :ref:`template module <template_module>` became more strict about its
- ``src`` file being proper utf-8. Previously, non-utf8 contents in a template module src file
- would result in a mangled output file (the non-utf8 characters would be replaced with a unicode
- replacement character). Now, on Python2, the module will error out with the message, "Template
- source files must be utf-8 encoded". On Python3, the module will first attempt to pass the
- non-utf8 characters through verbatim and fail if that does not succeed.
-
-Plugins
-=======
-
-As a developer, you can now use 'doc fragments' for common configuration options on plugin types that support the new plugin configuration system.
-
-Inventory
----------
-
-Inventory plugins have been fine tuned, and we have started to add some common features:
-
-* The ability to use a cache plugin to avoid costly API/DB queries is disabled by default.
- If using inventory scripts, some may already support a cache, but it is outside of Ansible's knowledge and control.
- Moving to the internal cache will allow you to use Ansible's existing cache refresh/invalidation mechanisms.
-
-* A new 'auto' plugin, enabled by default, that can automatically detect the correct plugin to use IF that plugin is using our 'common YAML configuration format'.
- The previous host_list, script, yaml and ini plugins still work as they did, the auto plugin is now the last one we attempt to use.
- If you had customized the enabled plugins you should revise the setting to include the new auto plugin.
-
-Shell
------
-
-Shell plugins have been migrated to the new plugin configuration framework. It is now possible to customize more settings, and settings which were previously 'global' can now also be overriden using host specific variables.
-
-For example, ``system_temps`` is a new setting that allows you to control what Ansible will consider a 'system temporary dir'. This is used when escalating privileges for a non-administrative user. Previously this was hardcoded to '/tmp', which some systems cannot use for privilege escalation. This setting now defaults to ``[ '/var/tmp', '/tmp']``.
-
-Another new setting is ``admin_users`` which allows you to specify a list of users to be considered 'administrators'. Previously this was hardcoded to ``root``. It now it defaults to ``[root, toor, admin]``. This information is used when choosing between your ``remote_temp`` and ``system_temps`` directory.
-
-For a full list, check the shell plugin you are using, the default shell plugin is ``sh``.
-
-Those that had to work around the global configuration limitations can now migrate to a per host/group settings,
-but also note that the new defaults might conflict with existing usage if the assumptions don't correlate to your environment.
-
-Filter
-------
-
-The lookup plugin API now throws an error if a non-iterable value is returned from a plugin. Previously, numbers or
-other non-iterable types returned by a plugin were accepted without error or warning. This change was made because plugins should always return a list. Please note that plugins that return strings and other non-list iterable values will not throw an error, but may cause unpredictable behavior. If you have a custom lookup plugin that does not return a list, you should modify it to wrap the return values in a list.
-
-Lookup
--------
-
-A new option was added to lookup plugins globally named ``error`` which allows you to control how errors produced by the lookup are handled, before this option they were always fatal. Valid values for this option are ``warn``, ``ignore`` and ``strict``. See the :doc:`lookup <../plugins/lookup>` page for more details.
-
-
-Porting custom scripts
-======================
-
-No notable changes.
-
-Network
-=======
-
-Expanding documentation
------------------------
-
-We're expanding the network documentation. There's new content and a :ref:`new Ansible Network landing page<network_guide>`. We will continue to build the network-related documentation moving forward.
-
-Top-level connection arguments will be removed in 2.9
------------------------------------------------------
-
-Top-level connection arguments like ``username``, ``host``, and ``password`` are deprecated and will be removed in version 2.9.
-
-**OLD** In Ansible < 2.4
-
-.. code-block:: yaml
-
- - name: example of using top-level options for connection properties
- ios_command:
- commands: show version
- host: "{{ inventory_hostname }}"
- username: cisco
- password: cisco
- authorize: yes
- auth_pass: cisco
-
-The deprecation warnings reflect this schedule. The task above, run in Ansible 2.5, will result in:
-
-.. code-block:: yaml
-
- [DEPRECATION WARNING]: Param 'username' is deprecated. See the module docs for more information. This feature will be removed in version
- 2.9. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
- [DEPRECATION WARNING]: Param 'password' is deprecated. See the module docs for more information. This feature will be removed in version
- 2.9. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
- [DEPRECATION WARNING]: Param 'host' is deprecated. See the module docs for more information. This feature will be removed in version 2.9.
- Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
-
-We recommend using the new connection types ``network_cli`` and ``netconf`` (see below), using standard Ansible connection properties, and setting those properties in inventory by group. As you update your playbooks and inventory files, you can easily make the change to ``become`` for privilege escalation (on platforms that support it). For more information, see the :ref:`using become with network modules<become-network>` guide and the :ref:`platform documentation<platform_options>`.
-
-Adding persistent connection types ``network_cli`` and ``netconf``
-------------------------------------------------------------------
-
-Ansible 2.5 introduces two top-level persistent connection types, ``network_cli`` and ``netconf``. With ``connection: local``, each task passed the connection parameters, which had to be stored in your playbooks. With ``network_cli`` and ``netconf`` the playbook passes the connection parameters once, so you can pass them at the command line if you prefer. We recommend you use ``network_cli`` and ``netconf`` whenever possible.
-Note that eAPI and NX-API still require ``local`` connections with ``provider`` dictionaries. See the :ref:`platform documentation<platform_options>` for more information. Unless you need a ``local`` connection, update your playbooks to use ``network_cli`` or ``netconf`` and to specify your connection variables with standard Ansible connection variables:
-
-**OLD** In Ansible 2.4
-
-.. code-block:: yaml
-
- ---
- vars:
- cli:
- host: "{{ inventory_hostname }}"
- username: operator
- password: secret
- transport: cli
-
- tasks:
- - nxos_config:
- src: config.j2
- provider: "{{ cli }}"
- username: admin
- password: admin
-
-**NEW** In Ansible 2.5
-
-.. code-block:: ini
-
- [nxos:vars]
- ansible_connection=network_cli
- ansible_network_os=nxos
- ansible_user=operator
- ansible_password=secret
-
-.. code-block:: yaml
-
- tasks:
- - nxos_config:
- src: config.j2
-
-Using a provider dictionary with either ``network_cli`` or ``netconf`` will result in a warning.
-
-
-Developers: Shared Module Utilities Moved
------------------------------------------
-
-Beginning with Ansible 2.5, shared module utilities for network modules moved to ``ansible.module_utils.network``.
-
-* Platform-independent utilities are found in ``ansible.module_utils.network.common``
-
-* Platform-specific utilities are found in ``ansible.module_utils.network.{{ platform }}``
-
-If your module uses shared module utilities, you must update all references. For example, change:
-
-**OLD** In Ansible 2.4
-
-.. code-block:: python
-
- from ansible.module_utils.vyos import get_config, load_config
-
-**NEW** In Ansible 2.5
-
-.. code-block:: python
-
- from ansible.module_utils.network.vyos.vyos import get_config, load_config
+Ansible Porting Guides are maintained in the ``devel`` branch only. Please go to `the devel Ansible 2.5 Porting guide <https://docs.ansible.com/ansible/devel/porting_guides/porting_guide_2.5.html>`_ for up to date information.
+.. note::
-See the module utilities developer guide see :ref:`appendix_module_utilities` for more information.
+ This link takes you to a different version of the Ansible documentation. Use the version selection on the left or your browser back button to return to this version of the documentation.
diff --git a/docs/docsite/rst/porting_guides/porting_guide_2.6.rst b/docs/docsite/rst/porting_guides/porting_guide_2.6.rst
index ab8cd05301..6150ccc940 100644
--- a/docs/docsite/rst/porting_guides/porting_guide_2.6.rst
+++ b/docs/docsite/rst/porting_guides/porting_guide_2.6.rst
@@ -1,115 +1,13 @@
+:orphan:
+
.. _porting_2.6_guide:
*************************
Ansible 2.6 Porting Guide
*************************
-This section discusses the behavioral changes between Ansible 2.5 and Ansible 2.6.
-
-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.
-
-We suggest you read this page along with `Ansible Changelog for 2.6 <https://github.com/ansible/ansible/blob/stable-2.6/changelogs/CHANGELOG-v2.6.rst>`_ to understand what updates you may need to make.
-
-This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides <porting_guides>`.
-
-.. contents:: Topics
-
-Playbook
-========
-
-* The deprecated task option ``always_run`` has been removed, please use ``check_mode: no`` instead.
-
-Deprecated
-==========
-
-* In the :ref:`nxos_igmp_interface module<nxos_igmp_interface_module>`, ``oif_prefix`` and ``oif_source`` properties are deprecated. Use ``ois_ps`` parameter with a dictionary of prefix and source to values instead.
-
-Modules
-=======
-
-Major changes in popular modules are detailed here
-
-
-
-Modules removed
----------------
-
-The following modules no longer exist:
-
-
-Deprecation notices
--------------------
-
-The following modules will be removed in Ansible 2.10. Please update your playbooks accordingly.
-
-* ``k8s_raw`` use :ref:`k8s <k8s_module>` instead.
-* ``openshift_raw`` use :ref:`k8s <k8s_module>` instead.
-* ``openshift_scale`` use :ref:`k8s_scale <k8s_scale_module>` instead.
-
-Noteworthy module changes
--------------------------
-
-* The ``upgrade`` module option for ``win_chocolatey`` has been removed; use ``state: latest`` instead.
-* The ``reboot`` module option for ``win_feature`` has been removed; use the ``win_reboot`` action plugin instead.
-* The ``win_iis_webapppool`` module no longer accepts a string for the ``attributes`` module option; use the free form dictionary value instead.
-* The ``name`` module option for ``win_package`` has been removed; this is not used anywhere and should just be removed from your playbooks.
-* The ``win_regedit`` module no longer automatically corrects the hive path ``HCCC`` to ``HKCC``; use ``HKCC`` because this is the correct hive path.
-* The :ref:`file_module` now emits a deprecation warning when ``src`` is specified with a state
- other than ``hard`` or ``link`` as it is only supposed to be useful with those. This could have
- an effect on people who were depending on a buggy interaction between src and other state's to
- place files into a subdirectory. For instance::
-
- $ ansible localhost -m file -a 'path=/var/lib src=/tmp/ state=directory'
-
- Would create a directory named ``/tmp/lib``. Instead of the above, simply spell out the entire
- destination path like this::
-
- $ ansible localhost -m file -a 'path=/tmp/lib state=directory'
-
-* The ``k8s_raw`` and ``openshift_raw`` modules have been aliased to the new ``k8s`` module.
-* The ``k8s`` module supports all Kubernetes resources including those from Custom Resource Definitions and aggregated API servers. This includes all OpenShift resources.
-* The ``k8s`` module will not accept resources where subkeys have been snake_cased. This was a workaround that was suggested with the ``k8s_raw`` and ``openshift_raw`` modules.
-* The ``k8s`` module may not accept resources where the ``api_version`` has been changed to match the shortened version in the Kubernetes Python client. You should now specify the proper full Kubernetes ``api_version`` for a resource.
-* The ``k8s`` module can now process multi-document YAML files if they are passed with the ``src`` parameter. It will process each document as a separate resource. Resources provided inline with the ``resource_definition`` parameter must still be a single document.
-* The ``k8s`` module will not automatically change ``Project`` creation requests into ``ProjectRequest`` creation requests as the ``openshift_raw`` module did. You must now specify the ``ProjectRequest`` kind explicitly.
-* The ``k8s`` module will not automatically remove secrets from the Ansible return values (and by extension the log). In order to prevent secret values in a task from being logged, specify the ``no_log`` parameter on the task block.
-* The ``k8s_scale`` module now supports scalable OpenShift objects, such as ``DeploymentConfig``.
-* The ``lineinfile`` module was changed to show a warning when using an empty string as a regexp.
- Since an empty regexp matches every line in a file, it will replace the last line in a file rather
- than inserting. If this is the desired behavior, use ``'^'`` which will match every line and
- will not trigger the warning.
-* Openstack modules are no longer using the ``shade`` library. Instead ``openstacksdk`` is used. Since ``openstacksdk`` should be already present as a dependency to ``shade`` no additional actions are required.
-
-Plugins
-=======
-
-Deprecation notices
--------------------
-
-The following modules will be removed in Ansible 2.10. Please update your playbooks accordingly.
-
-* ``openshift`` use ``k8s`` instead.
-
-
-Noteworthy plugin changes
--------------------------
-
-* The ``k8s`` lookup plugin now supports all Kubernetes resources including those from Custom Resource Definitions and aggregated API servers. This includes all OpenShift resources.
-* The ``k8s`` lookup plugin may not accept resources where the ``api_version`` has been changed to match the shortened version in the Kubernetes Python client. You should now specify the proper full Kubernetes ``api_version`` for a resource.
-* The ``k8s`` lookup plugin will no longer remove secrets from the Ansible return values (and by extension the log). In order to prevent secret values in a task from being logged, specify the ``no_log`` parameter on the task block.
-
-
-Porting custom scripts
-======================
-
-No notable changes.
-
-Networking
-==========
-
-No notable changes.
+Ansible Porting Guides are maintained in the ``devel`` branch only. Please go to `the devel Ansible 2.6 Porting guide <https://docs.ansible.com/ansible/devel/porting_guides/porting_guide_2.6.html>`_ for up to date information.
-Dynamic inventory scripts
-=========================
+.. note::
-* ``contrib/inventory/openstack.py`` has been renamed to ``contrib/inventory/openstack_inventory.py``. If you have used ``openstack.py`` as a name for your OpenStack dynamic inventory file, change it to ``openstack_inventory.py``. Otherwise the file name will conflict with imports from ``openstacksdk``.
+ This link takes you to a different version of the Ansible documentation. Use the version selection on the left or your browser back button to return to this version of the documentation.
diff --git a/docs/docsite/rst/porting_guides/porting_guides.rst b/docs/docsite/rst/porting_guides/porting_guides.rst
index 1f93b574c3..3dc29127ed 100644
--- a/docs/docsite/rst/porting_guides/porting_guides.rst
+++ b/docs/docsite/rst/porting_guides/porting_guides.rst
@@ -4,13 +4,8 @@
Ansible Porting Guides
**********************
-This section lists porting guides that can help you in updating playbooks, plugins and other parts of your Ansible infrastructure from one version of Ansible to the next.
+Ansible Porting Guides are maintained in the ``devel`` branch only. Please go to `the devel porting guides <https://docs.ansible.com/ansible/devel/porting_guides/porting_guides.html>`_ for up to date information.
-Please note that this is not a complete list. If you believe any extra information would be useful in these pages, you can edit by clicking `Edit on GitHub` on the top right, or raising an issue.
+.. note::
-.. toctree::
- :maxdepth: 2
- :glob:
- :reversed:
-
- porting_guide_*
+ This link takes you to a different version of the Ansible documentation. Use the version selection on the left or your browser back button to return to this version of the documentation.