mirror of
https://github.com/ansible/awx.git
synced 2026-03-17 00:47:29 -02:30
* Add separate Django app for configuration: awx.conf. * Migrate from existing main.TowerSettings model to conf.Setting. * Add settings wrapper to allow get/set/del via django.conf.settings. * Update existing references to tower_settings to use django.conf.settings. * Add a settings registry to allow for each Django app to register configurable settings. * Support setting validation and conversion using Django REST Framework fields. * Add /api/v1/settings/ to display a list of setting categories. * Add /api/v1/settings/<slug>/ to display all settings in a category as a single object. * Allow PUT/PATCH to update setting singleton, DELETE to reset to defaults. * Add "all" category to display all settings across categories. * Add "changed" category to display only settings configured in the database. * Support per-user settings via "user" category (/api/v1/settings/user/). * Support defaults for user settings via "user-defaults" category (/api/v1/settings/user-defaults/). * Update serializer metadata to support category, category_slug and placeholder on OPTIONS responses. * Update serializer metadata to handle child fields of a list/dict. * Hide raw data form in browsable API for OPTIONS and DELETE. * Combine existing licensing code into single "TaskEnhancer" class. * Move license helper functions from awx.api.license into awx.conf.license. * Update /api/v1/config/ to read/verify/update license using TaskEnhancer and settings wrapper. * Add support for caching settings accessed via settings wrapper. * Invalidate cached settings when Setting model changes or is deleted. * Preload all database settings into cache on first access via settings wrapper. * Add support for read-only settings than can update their value depending on other settings. * Use setting_changed signal whenever a setting changes. * Register configurable authentication, jobs, system and ui settings. * Register configurable LDAP, RADIUS and social auth settings. * Add custom fields and validators for URL, LDAP, RADIUS and social auth settings. * Rewrite existing validator for Credential ssh_private_key to support validating private keys, certs or combinations of both. * Get all unit/functional tests working with above changes. * Add "migrate_to_database_settings" command to determine settings to be migrated into the database and comment them out when set in Python settings files. * Add support for migrating license key from file to database. * Remove database-configuable settings from local_settings.py example files. * Update setup role to no longer install files for database-configurable settings. f 94ff6ee More settings work. f af4c4e0 Even more db settings stuff. f 96ea9c0 More settings, attempt at singleton serializer for settings. f 937c760 More work on singleton/category views in API, add code to comment out settings in Python files, work on command to migrate settings to database. f 425b0d3 Minor fixes for sprint demo. f ea402a4 Add support for read-only settings, cleanup license engine, get license support working with DB settings. f ec289e4 Rename migration, minor fixmes, update setup role. f 603640b Rewrite key/cert validator, finish adding social auth fields, hook up signals for setting_changed, use None to imply a setting is not set. f 67d1b5a Get functional/unit tests passing. f 2919b62 Flake8 fixes. f e62f421 Add redbaron to requirements, get file to database migration working (except for license). f c564508 Add support for migrating license file. f 982f767 Add support for regex in social map fields.
96 lines
3.3 KiB
Python
96 lines
3.3 KiB
Python
# Django
|
|
from django.conf import settings
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
# Tower
|
|
from awx.conf import fields, register
|
|
from awx.conf import settings_registry
|
|
|
|
# Define a conf.py file within your app and register each setting similarly to
|
|
# the example below. Any field class from Django REST Framework or subclass
|
|
# thereof can be used for validation/conversion of the setting. All keyword
|
|
# arguments to the register function (except field_class, category,
|
|
# category_slug, depends_on, placeholder) will be used to initialize
|
|
# the field_class.
|
|
|
|
register(
|
|
'ANSIBLE_COW_SELECTION',
|
|
field_class=fields.ChoiceField,
|
|
choices=[
|
|
('bud-frogs', _('Bud Frogs')),
|
|
('bunny', _('Bunny')),
|
|
('cheese', _('Cheese')),
|
|
('daemon', _('Daemon')),
|
|
('default', _('Default Cow')),
|
|
('dragon', _('Dragon')),
|
|
('elephant-in-snake', _('Elephant in Snake')),
|
|
('elephant', _('Elephant')),
|
|
('eyes', _('Eyes')),
|
|
('hellokitty', _('Hello Kitty')),
|
|
('kitty', _('Kitty')),
|
|
('luke-koala', _('Luke Koala')),
|
|
('meow', _('Meow')),
|
|
('milk', _('Milk')),
|
|
('moofasa', _('Moofasa')),
|
|
('moose', _('Moose')),
|
|
('ren', _('Ren')),
|
|
('sheep', _('Sheep')),
|
|
('small', _('Small Cow')),
|
|
('stegosaurus', _('Stegosaurus')),
|
|
('stimpy', _('Stimpy')),
|
|
('supermilker', _('Super Milker')),
|
|
('three-eyes', _('Three Eyes')),
|
|
('turkey', _('Turkey')),
|
|
('turtle', _('Turtle')),
|
|
('tux', _('Tux')),
|
|
('udder', _('Udder')),
|
|
('vader-koala', _('Vader Koala')),
|
|
('vader', _('Vader')),
|
|
('www', _('WWW')),
|
|
],
|
|
default='default',
|
|
label=_('Cow Selection'),
|
|
help_text=_('Select which cow to use with cowsay when running jobs.'),
|
|
category=_('Cows'),
|
|
# Optional; category_slug will be slugified version of category if not
|
|
# explicitly provided.
|
|
category_slug='cows',
|
|
)
|
|
|
|
def _get_read_only_ansible_cow_selection_default():
|
|
return getattr(settings, 'ANSIBLE_COW_SELECTION', 'No default cow!')
|
|
|
|
register(
|
|
'READONLY_ANSIBLE_COW_SELECTION',
|
|
field_class=fields.CharField,
|
|
# read_only must be set via kwargs even if field_class sets it.
|
|
read_only=True,
|
|
# default can be a callable to dynamically compute the value; should be in
|
|
# the plain JSON format stored in the DB and used in the API.
|
|
default=_get_read_only_ansible_cow_selection_default,
|
|
label=_('Example Read-Only Setting'),
|
|
help_text=_('Example setting that cannot be changed.'),
|
|
category=_('Cows'),
|
|
category_slug='cows',
|
|
# Optional; list of other settings this read-only setting depends on. When
|
|
# the other settings change, the cached value for this setting will be
|
|
# cleared to require it to be recomputed.
|
|
depends_on=['ANSIBLE_COW_SELECTION'],
|
|
)
|
|
|
|
register(
|
|
'EXAMPLE_USER_SETTING',
|
|
field_class=fields.CharField,
|
|
allow_blank=True,
|
|
label=_('Example Setting'),
|
|
help_text=_('Example setting which can be different for each user.'),
|
|
category=_('User'),
|
|
category_slug='user',
|
|
default='',
|
|
)
|
|
|
|
# Unregister the example settings above.
|
|
settings_registry.unregister('ANSIBLE_COW_SELECTION')
|
|
settings_registry.unregister('READONLY_ANSIBLE_COW_SELECTION')
|
|
settings_registry.unregister('EXAMPLE_USER_SETTING')
|