mirror of
https://github.com/ansible/awx.git
synced 2026-02-26 07:26:03 -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:
@@ -70,9 +70,10 @@ class CLI(object):
|
|||||||
subparsers = {}
|
subparsers = {}
|
||||||
original_action = None
|
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.stdout = stdout
|
||||||
self.stderr = stderr
|
self.stderr = stderr
|
||||||
|
self.stdin = stdin
|
||||||
|
|
||||||
def get_config(self, key):
|
def get_config(self, key):
|
||||||
"""Helper method for looking up the value of a --conf.xyz flag"""
|
"""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):
|
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(
|
formatting.add_argument(
|
||||||
'-f',
|
'-f',
|
||||||
@@ -49,7 +49,7 @@ def add_output_formatting_arguments(parser, env):
|
|||||||
choices=FORMATTERS.keys(),
|
choices=FORMATTERS.keys(),
|
||||||
default=env.get('TOWER_FORMAT', 'json'),
|
default=env.get('TOWER_FORMAT', 'json'),
|
||||||
help=(
|
help=(
|
||||||
'specify an output format'
|
'specify a format for the input and output'
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
formatting.add_argument(
|
formatting.add_argument(
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
|
import yaml
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
|
|
||||||
from awxkit import api, config
|
from awxkit import api, config
|
||||||
|
from awxkit.exceptions import ImportExportError
|
||||||
from awxkit.utils import to_str
|
from awxkit.utils import to_str
|
||||||
from awxkit.api.pages import Page
|
from awxkit.api.pages import Page
|
||||||
from awxkit.api.pages.api import EXPORTABLE_RESOURCES
|
from awxkit.api.pages.api import EXPORTABLE_RESOURCES
|
||||||
@@ -135,7 +136,13 @@ class Import(CustomCommand):
|
|||||||
parser.print_help()
|
parser.print_help()
|
||||||
raise SystemExit()
|
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.authenticate()
|
||||||
client.v2.import_assets(data)
|
client.v2.import_assets(data)
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
|
import io
|
||||||
import json
|
import json
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
from awxkit.api.pages import Page
|
from awxkit.api.pages import Page
|
||||||
from awxkit.api.pages.users import Users, User
|
from awxkit.api.pages.users import Users, User
|
||||||
|
from awxkit.cli import CLI
|
||||||
from awxkit.cli.format import format_response
|
from awxkit.cli.format import format_response
|
||||||
|
from awxkit.cli.resource import Import
|
||||||
|
|
||||||
|
|
||||||
def test_json_empty_list():
|
def test_json_empty_list():
|
||||||
@@ -44,3 +47,26 @@ def test_yaml_list():
|
|||||||
page = Users.from_json(users)
|
page = Users.from_json(users)
|
||||||
formatted = format_response(page, fmt='yaml')
|
formatted = format_response(page, fmt='yaml')
|
||||||
assert yaml.safe_load(formatted) == users
|
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']
|
||||||
|
|||||||
Reference in New Issue
Block a user