mirror of
https://github.com/ansible/awx.git
synced 2026-05-20 23:37:39 -02:30
Configure Tower in Tower:
* 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.
This commit is contained in:
95
awx/conf/conf.py
Normal file
95
awx/conf/conf.py
Normal file
@@ -0,0 +1,95 @@
|
||||
# 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')
|
||||
Reference in New Issue
Block a user