mirror of
https://github.com/ansible/awx.git
synced 2026-01-09 23:12:08 -03:30
Merge pull request #7808 from zedr/feat-yaml-import
Allow YAML as a CLI import format Reviewed-by: https://github.com/apps/softwarefactory-project-zuul
This commit is contained in:
commit
3ca43e63b5
@ -70,9 +70,10 @@ class CLI(object):
|
||||
subparsers = {}
|
||||
original_action = None
|
||||
|
||||
def __init__(self, stdout=sys.stdout, stderr=sys.stderr):
|
||||
def __init__(self, stdout=sys.stdout, stderr=sys.stderr, stdin=sys.stdin):
|
||||
self.stdout = stdout
|
||||
self.stderr = stderr
|
||||
self.stdin = stdin
|
||||
|
||||
def get_config(self, key):
|
||||
"""Helper method for looking up the value of a --conf.xyz flag"""
|
||||
|
||||
@ -40,7 +40,7 @@ def add_authentication_arguments(parser, env):
|
||||
|
||||
|
||||
def add_output_formatting_arguments(parser, env):
|
||||
formatting = parser.add_argument_group('output formatting')
|
||||
formatting = parser.add_argument_group('input/output formatting')
|
||||
|
||||
formatting.add_argument(
|
||||
'-f',
|
||||
@ -49,7 +49,7 @@ def add_output_formatting_arguments(parser, env):
|
||||
choices=FORMATTERS.keys(),
|
||||
default=env.get('TOWER_FORMAT', 'json'),
|
||||
help=(
|
||||
'specify an output format'
|
||||
'specify a format for the input and output'
|
||||
),
|
||||
)
|
||||
formatting.add_argument(
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
import yaml
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
from awxkit import api, config
|
||||
from awxkit.exceptions import ImportExportError
|
||||
from awxkit.utils import to_str
|
||||
from awxkit.api.pages import Page
|
||||
from awxkit.api.pages.api import EXPORTABLE_RESOURCES
|
||||
@ -135,7 +136,13 @@ class Import(CustomCommand):
|
||||
parser.print_help()
|
||||
raise SystemExit()
|
||||
|
||||
data = json.load(sys.stdin)
|
||||
fmt = client.get_config('format')
|
||||
if fmt == 'json':
|
||||
data = json.load(client.stdin)
|
||||
elif fmt == 'yaml':
|
||||
data = yaml.safe_load(client.stdin)
|
||||
else:
|
||||
raise ImportExportError("Unsupported format for Import: " + fmt)
|
||||
|
||||
client.authenticate()
|
||||
client.v2.import_assets(data)
|
||||
|
||||
@ -1,10 +1,13 @@
|
||||
import io
|
||||
import json
|
||||
|
||||
import yaml
|
||||
|
||||
from awxkit.api.pages import Page
|
||||
from awxkit.api.pages.users import Users, User
|
||||
from awxkit.cli import CLI
|
||||
from awxkit.cli.format import format_response
|
||||
from awxkit.cli.resource import Import
|
||||
|
||||
|
||||
def test_json_empty_list():
|
||||
@ -44,3 +47,26 @@ def test_yaml_list():
|
||||
page = Users.from_json(users)
|
||||
formatted = format_response(page, fmt='yaml')
|
||||
assert yaml.safe_load(formatted) == users
|
||||
|
||||
|
||||
def test_yaml_import():
|
||||
class MockedV2:
|
||||
def import_assets(self, data):
|
||||
self._parsed_data = data
|
||||
|
||||
def _dummy_authenticate():
|
||||
pass
|
||||
|
||||
yaml_fd = io.StringIO(
|
||||
"""
|
||||
workflow_job_templates:
|
||||
- name: Workflow1
|
||||
"""
|
||||
)
|
||||
cli = CLI(stdin=yaml_fd)
|
||||
cli.parse_args(['--conf.format', 'yaml'])
|
||||
cli.v2 = MockedV2()
|
||||
cli.authenticate = _dummy_authenticate
|
||||
|
||||
Import().handle(cli, None)
|
||||
assert cli.v2._parsed_data['workflow_job_templates'][0]['name']
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user