diff --git a/bin/ansible-playbook b/bin/ansible-playbook index a3b33292be4..0f8f2b29ae7 100755 --- a/bin/ansible-playbook +++ b/bin/ansible-playbook @@ -94,10 +94,20 @@ def main(args): options.ask_sudo_pass = options.ask_sudo_pass or C.DEFAULT_ASK_SUDO_PASS ( sshpass, sudopass ) = utils.ask_passwords(ask_pass=options.ask_pass, ask_sudo_pass=options.ask_sudo_pass) options.sudo_user = options.sudo_user or C.DEFAULT_SUDO_USER - if options.extra_vars and options.extra_vars[0] in '[{': - extra_vars = utils.json_loads(options.extra_vars) - else: - extra_vars = utils.parse_kv(options.extra_vars) + + extra_vars = {} + if options.extra_vars: + if options.extra_vars.startswith("@"): + # Argument is a JSON file + with open(options.extra_vars[1:]) as fd: + extra_vars = utils.json_loads(fd.read()) + elif options.extra_vars[0] in '[{': + # Arguments as JSON + extra_vars = utils.json_loads(options.extra_vars) + else: + # Arguments as Key-value + extra_vars = utils.parse_kv(options.extra_vars) + only_tags = options.tags.split(",") skip_tags = options.skip_tags if options.skip_tags is not None: