From 8e58a4a7deda5256f2e7cb6fe7b01a2b042f8aa8 Mon Sep 17 00:00:00 2001 From: Ryan Petrello Date: Thu, 29 Aug 2019 14:34:36 -0400 Subject: [PATCH] cli: add support for loading JSON/YAML w/ the ansible-like @ syntax --- awxkit/awxkit/cli/docs/source/examples.rst | 15 ++++----------- awxkit/awxkit/cli/options.py | 11 +++++++++++ 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/awxkit/awxkit/cli/docs/source/examples.rst b/awxkit/awxkit/cli/docs/source/examples.rst index 0bf008c2ba..85cd0e9006 100644 --- a/awxkit/awxkit/cli/docs/source/examples.rst +++ b/awxkit/awxkit/cli/docs/source/examples.rst @@ -44,17 +44,10 @@ the output of) a playbook from that repository: -f jq --filter '.id') awx job_templates launch $TEMPLATE_ID --monitor -Importing an SSH Key --------------------- - -DOCUMENT ME - -Creating a Job Template with Extra Vars +Updating a Job Template with Extra Vars --------------------------------------- -DOCUMENT ME +.. code:: bash -Granting Membership to a Team or Organization ---------------------------------------------- - -DOCUMENT ME + awx job_templates modify 1 --extra_vars "@vars.yml" + awx job_templates modify 1 --extra_vars "@vars.json" diff --git a/awxkit/awxkit/cli/options.py b/awxkit/awxkit/cli/options.py index 9ea1f6477d..b1dfd72758 100644 --- a/awxkit/awxkit/cli/options.py +++ b/awxkit/awxkit/cli/options.py @@ -80,6 +80,8 @@ class ResourceOptionsParser(object): continue def json_or_yaml(v): + if v.startswith('@'): + v = open(v[1:]).read() try: return json.loads(v) except Exception: @@ -124,6 +126,15 @@ class ResourceOptionsParser(object): if param['type'] == 'id' and not kwargs.get('help'): kwargs['help'] = 'the ID of the associated {}'.format(k) + if param['type'] == 'json' and method != 'list': + help_parts = [] + if kwargs.get('help'): + help_parts.append(kwargs['help']) + else: + help_parts.append('a JSON or YAML string.') + help_parts.append('You can optionally specify a file path e.g., @path/to/file.yml') + kwargs['help'] = ' '.join(help_parts) + # SPECIAL CUSTOM LOGIC GOES HERE :'( # There are certain requirements that aren't captured well by our # HTTP OPTIONS due to $reasons