This Ansible module provides support to display simple messages to the user running a Playbook. This provides a cleaner way to present messages to the user than with the built-in debug task. Optionally, the message can also be treated as a prompt to await user feedback. The response for these prompts can be registered as Ansible variables.
This plugin is made available in Ansible Galaxy. Once Ansible Galaxy is installed, you may install this plugin with the following command:
ansible-galaxy install andrewvaughan.prompt
To use this plugin, simply add the role to your playbook file with the following addition:
roles:
- andrewvaughan.prompt
Once completed, you may use the entire plugin as described in the Usage Guidelines
To add this plugin to your project, simply copy the /action_plugins/prompt.py
file to a folder named
action_plugins
in your playbook root directory. Ansible will automatically find and enable all commands made
available by the plugin, as detailed in the Usage Guidelines.
This module has been tested with Ansibe v2.0 and above. It may work with other versions, but they are not formally supported. Once Ansible and it's dependencies have been installed, this plugin should be usable.
Functionality is currently very limited for the Ansible Prompt module. At this point, only messaging the user is supported.
The Ansible Prompt plugin takes a single parameter, msg
, which can contain one-or-more messages for the user.
Examples tasks are as follows:
- name: Simple Message
prompt:
msg: Hello World
- name: Multiple Messages
prompt:
msg:
- Hello World
- Hello Universe
The
align
option does not work in tandem with theask
option
Messages can be aligned when presented to either left
(default), center
, or right
justification:
- name: Alignment Messages
msg:
- say: Left Alignment
align: left
- say: Center Alignment
align: center
- say: Right Alignment
align: right
The
newline
option does not work in tandem with theask
option
In order to prevent the Ansible Prompt module from automatically adding a newline to the end of a message, simply
set the optional newline
value to false
:
# Outputs "Start of line...middle of line...end of line" followed by newline
- name: No Newline Message
prompt:
msg:
- say: "Start of line..."
newline: false
- say: "middle of line"
newline: false
- say: "...end of line"
The strength of the prompt plugin comes from its ability to gather Ansible facts, as a task, during the run of a
playbook. To turn your prompt into a question, provide a say
and ask
set of variables for each question you wish
to ask.
The say
variable contains the message you wish to present, while the ask
variable is the Ansible variable to
set globally from the user's input:
- name: Simple Question
prompt:
msg:
say: "What is your first name?"
ask: first_name
- debug:
var: first_name
As you can see, a first_name
variable is set with the user's input during playback.
You may optionally ask multiple questions in the same prompt:
- name: Address Information
prompt:
msg:
- say: "Street Address:"
ask: address
- say: "City:"
ask: city
- say: "State:"
ask: state
- say: "Zip Code:"
ask: zipcode
At this time, all variables are created upon the task completion. Note that variables cannot be used until the task is completed, so this will not work:
- name: Address Information
prompt:
msg:
- say: "First Name:"
ask: first_name
- say: "Hello {{ first_name }}! What's your favorite color?"
ask: color
Instead, these questions should be split into two separate prompt
tasks.
While Ansible does provide some basic messaging and reporting functionality, the built in debug
and prompt_vars
methods have some drawbacks. Specifically:
debug
is intended only for debugging, and thus does not present output in a presentation-formatted mannerprompt_vars
can only be used at the beginning of the script, limiting options for users that wish to wish to gather input during task playbackprompt_vars
has limited, if any, support for conditional logic
There are many ways to contribute to this project! If you have an idea, or have discovered a bug, please open an issue so it can be addressed.
If you are interested in contributing to the project through design or development, please read our Contribution Guidelines.
A Makefile
is provided to assist with linting, testing, and code coverage generation. Dependencies will be managed
automatically during testing:
make test # Runs linting and test suites
make coverage # Runs linting, tests, and generates an HTML coverage report
Please note that full tests must be provided when making contributions to this project.
Releases of this project follow Semantic Versioning standards in a MAJOR.MINOR.PATCH
versioning scheme of the following format:
MAJOR
- modified when major, incompatible changes are made to the application,MINOR
- modified when functionality is added in a backwards-compatible manner, andPATCH
- patches to existing functionality, such as documentation and bug fixes.
This project is made available under the MIT License.
Copyright 2017 Andrew Vaughan
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.