mirror of
https://github.com/ansible/awx.git
synced 2026-01-11 01:57:35 -03:30
Fix regression in tower_settings module
This commit is contained in:
parent
d5bdfa908a
commit
d6e94f9c6f
@ -31,6 +31,8 @@ options:
|
||||
value:
|
||||
description:
|
||||
- Value to be modified for given setting.
|
||||
- If given a non-string type, will make best effort to cast it to type API expects.
|
||||
- For better control over types, use the C(settings) param instead.
|
||||
required: False
|
||||
type: str
|
||||
settings:
|
||||
@ -45,6 +47,8 @@ options:
|
||||
required: False
|
||||
type: str
|
||||
version_added: "3.7"
|
||||
requirements:
|
||||
- pyyaml
|
||||
extends_documentation_fragment: awx.awx.auth
|
||||
'''
|
||||
|
||||
@ -78,8 +82,31 @@ EXAMPLES = '''
|
||||
'''
|
||||
|
||||
from ..module_utils.tower_api import TowerModule
|
||||
from json import loads
|
||||
import re
|
||||
|
||||
try:
|
||||
import yaml
|
||||
HAS_YAML = True
|
||||
except ImportError:
|
||||
HAS_YAML = False
|
||||
|
||||
|
||||
def coerce_type(module, value):
|
||||
yaml_ish = bool((
|
||||
value.startswith('{') and value.endswith('}')
|
||||
) or (
|
||||
value.startswith('[') and value.endswith(']'))
|
||||
)
|
||||
if yaml_ish:
|
||||
if not HAS_YAML:
|
||||
module.fail_json(msg="yaml is not installed, try 'pip install pyyaml'")
|
||||
return yaml.safe_load(value)
|
||||
elif value.lower in ('true', 'false', 't', 'f'):
|
||||
return {'t': True, 'f': False}[value[0].lower()]
|
||||
try:
|
||||
return int(value)
|
||||
except ValueError:
|
||||
pass
|
||||
return value
|
||||
|
||||
|
||||
def main():
|
||||
@ -106,14 +133,7 @@ def main():
|
||||
|
||||
# If we were given a name/value pair we will just make settings out of that and proceed normally
|
||||
if new_settings is None:
|
||||
new_value = value
|
||||
try:
|
||||
new_value = loads(value)
|
||||
except ValueError:
|
||||
# JSONDecodeError only available on Python 3.5+
|
||||
# Attempt to deal with old tower_cli array types
|
||||
if ',' in value:
|
||||
new_value = re.split(r",\s+", new_value)
|
||||
new_value = coerce_type(module, value)
|
||||
|
||||
new_settings = {name: new_value}
|
||||
|
||||
|
||||
67
awx_collection/test/awx/test_settings.py
Normal file
67
awx_collection/test/awx/test_settings.py
Normal file
@ -0,0 +1,67 @@
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
import pytest
|
||||
|
||||
from awx.conf.models import Setting
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_setting_flat_value(run_module, admin_user):
|
||||
the_value = 'CN=service_account,OU=ServiceAccounts,DC=domain,DC=company,DC=org'
|
||||
result = run_module('tower_settings', dict(
|
||||
name='AUTH_LDAP_BIND_DN',
|
||||
value=the_value
|
||||
), admin_user)
|
||||
assert not result.get('failed', False), result.get('msg', result)
|
||||
assert result.get('changed'), result
|
||||
|
||||
assert Setting.objects.get(key='AUTH_LDAP_BIND_DN').value == the_value
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_setting_dict_value(run_module, admin_user):
|
||||
the_value = {
|
||||
'email': 'mail',
|
||||
'first_name': 'givenName',
|
||||
'last_name': 'surname'
|
||||
}
|
||||
result = run_module('tower_settings', dict(
|
||||
name='AUTH_LDAP_USER_ATTR_MAP',
|
||||
value=the_value
|
||||
), admin_user)
|
||||
assert not result.get('failed', False), result.get('msg', result)
|
||||
assert result.get('changed'), result
|
||||
|
||||
assert Setting.objects.get(key='AUTH_LDAP_USER_ATTR_MAP').value == the_value
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_setting_nested_type(run_module, admin_user):
|
||||
the_value = {
|
||||
'email': 'mail',
|
||||
'first_name': 'givenName',
|
||||
'last_name': 'surname'
|
||||
}
|
||||
result = run_module('tower_settings', dict(
|
||||
settings={
|
||||
'AUTH_LDAP_USER_ATTR_MAP': the_value
|
||||
}
|
||||
), admin_user)
|
||||
assert not result.get('failed', False), result.get('msg', result)
|
||||
assert result.get('changed'), result
|
||||
|
||||
assert Setting.objects.get(key='AUTH_LDAP_USER_ATTR_MAP').value == the_value
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_setting_bool_value(run_module, admin_user):
|
||||
for the_value in (True, False):
|
||||
result = run_module('tower_settings', dict(
|
||||
name='ACTIVITY_STREAM_ENABLED_FOR_INVENTORY_SYNC',
|
||||
value=the_value
|
||||
), admin_user)
|
||||
assert not result.get('failed', False), result.get('msg', result)
|
||||
assert result.get('changed'), result
|
||||
|
||||
assert Setting.objects.get(key='ACTIVITY_STREAM_ENABLED_FOR_INVENTORY_SYNC').value is the_value
|
||||
Loading…
x
Reference in New Issue
Block a user