From 3078b54d5fbbad6d4386ade3e73af7fd81ad05c8 Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Wed, 25 May 2022 10:38:47 -0700 Subject: [PATCH] Add inline_python module I thought this would be a handy module to have in case we have something we want to do in 3 lines of python but don't want to write all the boilerplate ansible module. This just execs a python script which is expected to have an exit_json or fail_json call at the end. Change-Id: I10f30828a5086bd639f5caa7b6aa71477f86124e --- playbooks/library/inline_python.py | 40 ++++++++++++++++++++++++++++++ playbooks/test-inline-python.yaml | 8 ++++++ 2 files changed, 48 insertions(+) create mode 100644 playbooks/library/inline_python.py create mode 100644 playbooks/test-inline-python.yaml diff --git a/playbooks/library/inline_python.py b/playbooks/library/inline_python.py new file mode 100644 index 0000000000..c1ae624a88 --- /dev/null +++ b/playbooks/library/inline_python.py @@ -0,0 +1,40 @@ +# Copyright 2022 Acme Gating, LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from ansible.module_utils.basic import AnsibleModule + +def run_module(): + module = AnsibleModule( + argument_spec=dict( + script=dict(type='str', required=True), + args=dict(type='dict'), + ) + ) + args = module.params['args'] + if not args: + args = {} + local_vars = args.copy() + local_vars['exit_json'] = module.exit_json + local_vars['fail_json'] = module.fail_json + + exec(module.params['script'], globals(), local_vars) + module.exit_json(changed=False) + + +def main(): + run_module() + + +if __name__ == '__main__': + main() diff --git a/playbooks/test-inline-python.yaml b/playbooks/test-inline-python.yaml new file mode 100644 index 0000000000..80ab8a1f84 --- /dev/null +++ b/playbooks/test-inline-python.yaml @@ -0,0 +1,8 @@ +- hosts: localhost + tasks: + - inline_python: + args: + foo: 1 + bar: 2 + script: | + exit_json(changed=True, result=foo+bar)