Document play argument validation (#3079) (#3227)

* Document play argument spec validation

* Update docs/docsite/rst/playbook_guide/playbooks_intro.rst



* Move the play-level argument spec validation following the sections on variables

---------


(cherry picked from commit efcffedf86)

Co-authored-by: Sloane Hertel <19572925+s-hertel@users.noreply.github.com>
Co-authored-by: Don Naro <dnaro@redhat.com>
This commit is contained in:
patchback[bot]
2025-11-06 08:08:07 +00:00
committed by GitHub
parent bfd42cb670
commit 6b8535c8f3
2 changed files with 117 additions and 0 deletions

View File

@@ -37,4 +37,5 @@ There are multiple ways to organize playbooks and the files they include, and we
playbooks_prompts
playbooks_variables
playbooks_vars_facts
playbooks_variables_validation
guide_rolling_upgrade

View File

@@ -0,0 +1,116 @@
.. _play_argument_validation:
Play Argument Validation
------------------------
Beginning in version 2.20, you can enable argument validation using the play keyword ``validate_argspec``. This adds a :ansplugin:`validate_argument_spec <ansible.builtin.validate_argument_spec#module>` task following play-level fact gathering. This feature is tech preview.
Play argument validation has two main parts:
* The ``validate_argspec`` keyword.
* A ``.meta.yml`` file that defines argument specifications.
To enable play argument validation you:
#. Define the argument specification identifier by setting a value for the ``validate_argspec`` keyword. You can set the value to ``True`` to use the play ``name`` or you can set the value to a string.
#. Provide a valid argument specification in a ``<playbook_name>.meta.yml`` file in the same directory as the playbook.
The following example provides a valid, empty argument specification named ``setup webserver`` for the playbook ``create_webserver.yml``:
.. code-block:: yaml
# create_webserver.meta.yml
argument_specs:
setup webserver:
options: {}
In the following playbook, both plays validate the play arguments against the ``setup webserver`` arguments:
.. code-block:: yaml
# create_webserver.yml
- name: setup webserver
hosts: all
validate_argspec: True
- hosts: all
validate_argspec: setup webserver
Specification Format
--------------------
The play argument specification must be defined in a top-level ``argument_specs`` block within the playbook's ``.meta.yml`` file. All fields are lowercase.
:argument-spec-name:
* The name of the play or argument specification.
:description:
* A description of the play that may contain multiple lines.
* This can be a single string or a list of strings.
:options:
* This section defines the dictionary of play arguments.
* For each play option (argument), you may include:
:option-name:
* The name of the option/argument (required).
:description:
* Detailed explanation of what this option does. It should be written in full sentences.
* This can be a single string or a list of strings.
:type:
* The data type of the option. See :ref:`Argument spec <argument_spec>` for allowed values for ``type``. The default is ``str``.
* If an option is of type ``list``, ``elements`` should be specified.
:required:
* Only needed if ``true``.
* If missing, the option is not required.
:choices:
* List of option values.
* Should be absent if empty.
:elements:
* Specifies the data type for list elements when the type is ``list``.
:options:
* If this option takes a dict or list of dicts, you can define the structure here.
Sample Specification
--------------------
.. code-block:: yaml
# create_webservers.meta.yml
description: Set up basic HTTPS-enabled webserver to serve content from a specified document root.
argument_specs:
setup webserver:
options:
document_root:
description: Path to the directory containing static web content to be served.
type: str
required: True
port:
description:
- Port number on which the webserver listens for incoming HTTPS connections.
- When unspecified, the port is 443.
type: int
ssl_cert_path:
description: Path to the SSL certificate.
type: str
required: True
ssl_key_path:
description: Path to the private key corresponding to the SSL certificate.
type: str
required: True