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!