Say you're writing a module to ensure a cat.jpg file exists but the out of the box file
module isn't cutting it for you! Typically, you'd bring up the documentation and start plugging away at your new, special module! Everytime you hit a major milestone of functionality, you'd write a little playbook using the new module, move over to your CLI and run ansible-playbook cat-module-test.yml
$cat cat-module-test.yml
---
- hosts: localhost
connection: local
gather_facts: false
tasks:
- cat_module:
state: present
src: cat.jpg
dest: /tmp
While this DOES work, there are a couple problems:
- you are only testing if the module works; you can't see any debug outputs during execution
- cannot watch variables during execution
- cannot set break points
- output is ansible-ized, less friendly to read while testing
Instead, I will show you a new way to easily test this code by passing arguments directly. First we need to make an args file:
$ cat args.json
{ "ANSIBLE_MODULE_ARGS": {
"state": "present",
"src": "cat.jpg",
"dest": "/tmp"
}
}
Test via CLI
Using this args.json
file you can easily test without invoking ansible
!
python ./cat_module.py args.json
Test via VSCode
Alternatively, you can use an IDE, here's an example of how to use in VSCode
- after opening your folder, click the
debug
menu option on the left pane - create a new debug config and adjust the appropriate stanza in
launch.json
{
"name": "Python: Terminal (integrated)",
"type": "python",
"request": "launch",
"program": "/home/rmullen/git/library/cat_module/cat_module.py",
"console": "integratedTerminal",
"args":["/home/rmullen/git/library/cat_module/args.json"]
},
Press play! (literally, the play button in the debug menu)
With this method, you can now set break points, see print() statements, and step through code the way you would hope when writing python!
Top comments (0)