Minor grammatical corrections and improvements (#23886)

pull/23892/head
David Mahler 8 years ago committed by scottb
parent 00ebd0c89d
commit 09b247dd34

@ -13,14 +13,14 @@ This section discusses how to develop, debug, review, and test modules.
Ansible modules are reusable, standalone scripts that can be used by the Ansible API, Ansible modules are reusable, standalone scripts that can be used by the Ansible API,
or by the :command:`ansible` or :command:`ansible-playbook` programs. They or by the :command:`ansible` or :command:`ansible-playbook` programs. They
return information to ansible by printing a JSON string to stdout before return information to ansible by printing a JSON string to stdout before
exiting. They take arguments in in one of several ways which we'll go into exiting. They take arguments in one of several ways which we'll go into
as we work through this tutorial. as we work through this tutorial.
See :doc:`../modules` for a list of existing modules. See :doc:`../modules` for a list of existing modules.
Modules can be written in any language and are found in the path specified Modules can be written in any language and are found in the path specified
by :envvar:`ANSIBLE_LIBRARY` or the ``--module-path`` command line option or by :envvar:`ANSIBLE_LIBRARY` or the ``--module-path`` command line option or
in the `library section of the Ansible configration file <http://docs.ansible.com/ansible/intro_configuration.html#library>`_. in the `library section of the Ansible configuration file <http://docs.ansible.com/ansible/intro_configuration.html#library>`_.
.. _module_dev_should_you: .. _module_dev_should_you:

@ -18,7 +18,7 @@ and guidelines:
* If packaging modules in an RPM, they only need to be installed on the control machine and should be dropped into /usr/share/ansible. This is entirely optional and up to you. * If packaging modules in an RPM, they only need to be installed on the control machine and should be dropped into /usr/share/ansible. This is entirely optional and up to you.
* Modules must output valid JSON only. The toplevel return type must be a hash (dictionary) although they can be nested. Lists or simple scalar values are not supported, though they can be trivially contained inside a dictionary. * Modules must output valid JSON only. The top level return type must be a hash (dictionary) although they can be nested. Lists or simple scalar values are not supported, though they can be trivially contained inside a dictionary.
* In the event of failure, a key of 'failed' should be included, along with a string explanation in 'msg'. Modules that raise tracebacks (stacktraces) are generally considered 'poor' modules, though Ansible can deal with these returns and will automatically convert anything unparseable into a failed result. If you are using the AnsibleModule common Python code, the 'failed' element will be included for you automatically when you call 'fail_json'. * In the event of failure, a key of 'failed' should be included, along with a string explanation in 'msg'. Modules that raise tracebacks (stacktraces) are generally considered 'poor' modules, though Ansible can deal with these returns and will automatically convert anything unparseable into a failed result. If you are using the AnsibleModule common Python code, the 'failed' element will be included for you automatically when you call 'fail_json'.
@ -72,7 +72,7 @@ your debugging session will start:
Setting :envvar:`ANSIBLE_KEEP_REMOTE_FILES` to ``1`` tells Ansible to keep the Setting :envvar:`ANSIBLE_KEEP_REMOTE_FILES` to ``1`` tells Ansible to keep the
remote module files instead of deleting them after the module finishes remote module files instead of deleting them after the module finishes
executing. Giving Ansible the ``-vvv`` optin makes Ansible more verbose. executing. Giving Ansible the ``-vvv`` option makes Ansible more verbose.
That way it prints the file name of the temporary module file for you to see. That way it prints the file name of the temporary module file for you to see.
If you want to examine the wrapper file you can. It will show a small python If you want to examine the wrapper file you can. It will show a small python
@ -103,13 +103,13 @@ When you look into the debug_dir you'll see a directory structure like this::
* The :file:`args` file contains a JSON string. The string is a dictionary * The :file:`args` file contains a JSON string. The string is a dictionary
containing the module arguments and other variables that Ansible passes into containing the module arguments and other variables that Ansible passes into
the module to change it's behaviour. If you want to modify the parameters the module to change its behaviour. If you want to modify the parameters
that are passed to the module, this is the file to do it in. that are passed to the module, this is the file to do it in.
* The :file:`ansible` directory contains code from * The :file:`ansible` directory contains code from
:mod:`ansible.module_utils` that is used by the module. Ansible includes :mod:`ansible.module_utils` that is used by the module. Ansible includes
files for any :`module:`ansible.module_utils` imports in the module but not files for any :`module:`ansible.module_utils` imports in the module but not
no files from any other module. So if your module uses any files from any other module. So if your module uses
:mod:`ansible.module_utils.url` Ansible will include it for you, but if :mod:`ansible.module_utils.url` Ansible will include it for you, but if
your module includes :mod:`requests` then you'll have to make sure that your module includes :mod:`requests` then you'll have to make sure that
the python requests library is installed on the system before running the the python requests library is installed on the system before running the
@ -183,7 +183,7 @@ how the command module is implemented.
If a module returns stderr or otherwise fails to produce valid JSON, the actual output If a module returns stderr or otherwise fails to produce valid JSON, the actual output
will still be shown in Ansible, but the command will not succeed. will still be shown in Ansible, but the command will not succeed.
Don't write to files directly; use a temporary file and then use the `atomic_move` function from `ansibile.module_utils.basic` to move the updated temporary file into place. This prevents data corruption and ensures that the correct context for the file is kept. Don't write to files directly; use a temporary file and then use the `atomic_move` function from `ansible.module_utils.basic` to move the updated temporary file into place. This prevents data corruption and ensures that the correct context for the file is kept.
Avoid creating a module that does the work of other modules; this leads to code duplication and divergence, and makes things less uniform, unpredictable and harder to maintain. Modules should be the building blocks. Instead of creating a module that does the work of other modules, use Plays and Roles instead. Avoid creating a module that does the work of other modules; this leads to code duplication and divergence, and makes things less uniform, unpredictable and harder to maintain. Modules should be the building blocks. Instead of creating a module that does the work of other modules, use Plays and Roles instead.

@ -3,7 +3,7 @@
Building A Simple Module Building A Simple Module
```````````````````````` ````````````````````````
Let's build a very-basic module to get and set the system time. For starters, let's build Let's build a very basic module to get and set the system time. For starters, let's build
a module that just outputs the current time. a module that just outputs the current time.
We are going to use Python here but any language is possible. Only File I/O and outputting to standard We are going to use Python here but any language is possible. Only File I/O and outputting to standard
@ -71,7 +71,7 @@ If you did not, you might have a typo in your module, so recheck it and try agai
Reading Input Reading Input
````````````` `````````````
Let's modify the module to allow setting the current time. We'll do this by seeing Let's modify the module to allow setting the current time. We'll do this by seeing
if a key value pair in the form `time=<string>` is passed in to the module. if a key value pair in the form `time=<string>` is passed into the module.
Ansible internally saves arguments to an arguments file. So we must read the file Ansible internally saves arguments to an arguments file. So we must read the file
and parse it. The arguments file is just a string, so any form of arguments are legal. and parse it. The arguments file is just a string, so any form of arguments are legal.

@ -1,7 +1,7 @@
Frequently Asked Questions Frequently Asked Questions
========================== ==========================
Here are some commonly-asked questions and their answers. Here are some commonly asked questions and their answers.
.. _set_environment: .. _set_environment:
@ -9,7 +9,7 @@ Here are some commonly-asked questions and their answers.
How can I set the PATH or any other environment variable for a task or entire playbook? How can I set the PATH or any other environment variable for a task or entire playbook?
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Setting environment variables can be done with the `environment` keyword. It can be used at task or play level:: Setting environment variables can be done with the `environment` keyword. It can be used at the task or the play level::
environment: environment:
PATH: "{{ ansible_env.PATH }}:/thingy/bin" PATH: "{{ ansible_env.PATH }}:/thingy/bin"
@ -111,10 +111,10 @@ How do I handle python pathing not having a Python 2.X in /usr/bin/python on a r
While you can write ansible modules in any language, most ansible modules are written in Python, and some of these While you can write ansible modules in any language, most ansible modules are written in Python, and some of these
are important core ones. are important core ones.
By default Ansible assumes it can find a /usr/bin/python on your remote system that is a 2.X version of Python, specifically By default, Ansible assumes it can find a /usr/bin/python on your remote system that is a 2.X version of Python, specifically
2.6 or higher. 2.6 or higher.
Setting of an inventory variable 'ansible_python_interpreter' on any host will allow Ansible to auto-replace the interpreter Setting the inventory variable 'ansible_python_interpreter' on any host will allow Ansible to auto-replace the interpreter
used when executing python modules. Thus, you can point to any python you want on the system if /usr/bin/python on your used when executing python modules. Thus, you can point to any python you want on the system if /usr/bin/python on your
system does not point to a Python 2.X interpreter. system does not point to a Python 2.X interpreter.
@ -173,7 +173,7 @@ This will print out a dictionary of all of the facts that are available for that
How do I see all the inventory vars defined for my host? How do I see all the inventory vars defined for my host?
++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
You can see the resulting vars you define in inventory running the following command: By running the following command, you can see vars resulting from what you've defined in the inventory:
.. code-block:: shell-session .. code-block:: shell-session
@ -229,7 +229,7 @@ How do I access a variable of the first host in a group?
What happens if we want the ip address of the first webserver in the webservers group? Well, we can do that too. Note that if we What happens if we want the ip address of the first webserver in the webservers group? Well, we can do that too. Note that if we
are using dynamic inventory, which host is the 'first' may not be consistent, so you wouldn't want to do this unless your inventory are using dynamic inventory, which host is the 'first' may not be consistent, so you wouldn't want to do this unless your inventory
was static and predictable. (If you are using :doc:`tower`, it will use database order, so this isn't a problem even if you are using cloud is static and predictable. (If you are using :doc:`tower`, it will use database order, so this isn't a problem even if you are using cloud
based inventory scripts). based inventory scripts).
Anyway, here's the trick: Anyway, here's the trick:
@ -252,7 +252,7 @@ Notice how we interchanged the bracket syntax for dots -- that can be done anywh
How do I copy files recursively onto a target host? How do I copy files recursively onto a target host?
+++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++
The "copy" module has a recursive parameter, though if you want to do something more efficient for a large number of files, take a look at the "synchronize" module instead, which wraps rsync. See the module index for info on both of these modules. The "copy" module has a recursive parameter. However, take a look at the "synchronize" module if you want to do something more efficient for a large number of files. The "synchronize" module wraps rsync. See the module index for info on both of these modules.
.. _shell_env: .. _shell_env:
@ -260,7 +260,7 @@ How do I access shell environment variables?
++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++
If you just need to access existing variables, use the 'env' lookup plugin. For example, to access the value of the HOME If you just need to access existing variables, use the 'env' lookup plugin. For example, to access the value of the HOME
environment variable on management machine:: environment variable on the management machine::
--- ---
# ... # ...
@ -269,7 +269,7 @@ environment variable on management machine::
If you need to set environment variables, see the Advanced Playbooks section about environments. If you need to set environment variables, see the Advanced Playbooks section about environments.
Ansible 1.4 will also make remote environment variables available via facts in the 'ansible_env' variable: Starting with Ansible 1.4, remote environment variables are available via facts in the 'ansible_env' variable:
.. code-block:: jinja .. code-block:: jinja
@ -325,7 +325,7 @@ and easy to use. See :doc:`tower`.
How do I submit a change to the documentation? How do I submit a change to the documentation?
++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++
Great question! Documentation for Ansible is kept in the main project git repository, and complete instructions for contributing can be found in the docs README `viewable on GitHub <https://github.com/ansible/ansible/blob/devel/docsite/README.md>`_. Thanks! Great question! Documentation for Ansible is kept in the main project git repository, and complete instructions for contributing can be found in the docs README `viewable on GitHub <https://github.com/ansible/ansible/blob/devel/docs/docsite/README.md>`_. Thanks!
.. _keep_secret_data: .. _keep_secret_data:
@ -364,7 +364,7 @@ A steadfast rule is 'always use {{ }} except when `when:`'.
Conditionals are always run through Jinja2 as to resolve the expression, Conditionals are always run through Jinja2 as to resolve the expression,
so `when:`, `failed_when:` and `changed_when:` are always templated and you should avoid adding `{{}}`. so `when:`, `failed_when:` and `changed_when:` are always templated and you should avoid adding `{{}}`.
In most other cases you should always use the brackets, even if previouslly you could use variables without specifying (like `with_` clauses), In most other cases you should always use the brackets, even if previously you could use variables without specifying (like `with_` clauses),
as this made it hard to distinguish between an undefined variable and a string. as this made it hard to distinguish between an undefined variable and a string.
Another rule is 'moustaches don't stack'. We often see this: Another rule is 'moustaches don't stack'. We often see this:

Loading…
Cancel
Save