Update CONFspirator with example and toml support

Example config generation now is in CONFspirator so we can instead
use that.

We now also natively get toml support through the new version of the
library.

Change-Id: Ic3a46d075dd83e11ee3cccc1ad2bbdb81005c60d
This commit is contained in:
Adrian Turjak 2020-08-07 17:44:09 +12:00
parent 9ef78c436e
commit 9dd1f3a302
6 changed files with 269 additions and 476 deletions

View File

@ -1,76 +1,12 @@
import yaml
from django.core.management.base import BaseCommand
from confspirator import groups
import confspirator
from adjutant import config
def make_yaml_lines(val, depth, comment=False):
new_lines = []
line_prefix = " " * (depth + 1)
for line in yaml.dump(val).split("\n"):
if line == "":
continue
if comment:
new_lines.append(line_prefix + "# %s" % line)
else:
new_lines.append(line_prefix + line)
return new_lines
def make_field_lines(field, depth):
field_lines = []
line_prefix = " " * (depth + 1)
field_type = field.type.__class__.__name__
field_lines.append(line_prefix + "# %s" % field_type)
field_help_text = "# %s" % field.help_text
field_lines.append(line_prefix + field_help_text)
default = ""
if field.default is not None:
default = field.default
if not default and field.sample_default is not None:
default = field.sample_default
if field_type == "Dict":
if default:
field_lines.append(line_prefix + "%s:" % field.name)
field_lines += make_yaml_lines(default, depth + 1)
else:
field_lines.append(line_prefix + "# %s:" % field.name)
elif field_type == "List":
if default:
field_lines.append(line_prefix + "%s:" % field.name)
field_lines += make_yaml_lines(default, depth + 1)
else:
field_lines.append(line_prefix + "# %s:" % field.name)
else:
if default == "":
field_lines.append(line_prefix + "# %s: <your_value>" % field.name)
else:
default_str = " " + str(default)
field_lines.append(line_prefix + "%s:%s" % (field.name, default_str))
return field_lines
def make_group_lines(group, depth=0):
group_lines = []
line_prefix = " " * depth
group_lines.append(line_prefix + "%s:" % group.name)
for child in group:
if isinstance(child, groups.ConfigGroup):
group_lines += make_group_lines(child, depth=depth + 1)
else:
group_lines += make_field_lines(child, depth)
return group_lines
class Command(BaseCommand):
help = ""
help = "Produce an example config file for Adjutant."
def add_arguments(self, parser):
parser.add_argument("--output-file", default="adjutant.yaml")
@ -78,12 +14,4 @@ class Command(BaseCommand):
def handle(self, *args, **options):
print("Generating example file to: '%s'" % options["output_file"])
base_lines = []
for group in config._root_config:
base_lines += make_group_lines(group)
base_lines.append("")
with open(options["output_file"], "w") as f:
for line in base_lines:
f.write(line)
f.write("\n")
confspirator.create_example_config(config._root_config, options["output_file"])

View File

@ -14,9 +14,8 @@
import os
import sys
import yaml
from confspirator import load
import confspirator
from confspirator import groups
from adjutant.config import api
@ -34,7 +33,10 @@ _root_config.register_child_config(notification.config_group)
_root_config.register_child_config(workflow.config_group)
_root_config.register_child_config(quota.config_group)
_config_file = "/etc/adjutant/adjutant.yaml"
_config_files = [
"/etc/adjutant/adjutant.yaml",
"/etc/adjutant/adjutant.toml",
]
_old_config_file = "/etc/adjutant/conf.yaml"
@ -56,24 +58,27 @@ def _load_config():
else:
test_mode = False
config_file_locations = [_config_file, _old_config_file]
config_file_locations = list(_config_files)
config_file_locations.append(_old_config_file)
conf_file = os.environ.get("ADJUTANT_CONFIG_FILE", None)
if conf_file:
config_file_locations.insert(0, conf_file)
conf_dict = None
loaded_config = None
used_config_loc = None
for conf_file_loc in config_file_locations:
try:
with open(conf_file_loc) as f:
# NOTE(adriant): we print because we don't yet know
# where to log to
print("Loading config from '%s'" % conf_file_loc)
conf_dict = yaml.load(f, Loader=yaml.FullLoader)
used_config_loc = conf_file_loc
break
# NOTE(adriant): we print because we don't yet know
# where to log to
if not test_mode:
print("Checking for config at '%s'" % conf_file_loc)
loaded_config = confspirator.load_file(
_root_config, conf_file_loc, test_mode=test_mode
)
used_config_loc = conf_file_loc
break
except IOError:
if not test_mode:
print(
@ -88,22 +93,21 @@ def _load_config():
):
print(
"DEPRECATED: Using the old default config location '%s' is deprecated "
"in favor of '%s', or setting a config location via the environment "
"variable 'ADJUTANT_CONFIG_FILE'." % (_old_config_file, _config_file)
"in favor of one of '%s', or setting a config location via the environment "
"variable 'ADJUTANT_CONFIG_FILE'." % (_old_config_file, _config_files)
)
if conf_dict is None:
if loaded_config is None:
if not test_mode:
print(
"No valid conf file not found, will rely on defaults and "
"environment variables.\n"
"Config should be placed at '%s' or a location defined via the "
"environment variable 'ADJUTANT_CONFIG_FILE'." % _config_file
"Config should be placed at one of '%s' or a location defined via the "
"environment variable 'ADJUTANT_CONFIG_FILE'." % _config_files
)
conf_dict = {}
return confspirator.load_dict(_root_config, {}, test_mode=test_mode)
conf_dict = {"adjutant": conf_dict}
return load(_root_config, conf_dict, test_mode=test_mode)
return loaded_config
CONF = _load_config()

View File

@ -14,14 +14,23 @@ can be generated by running::
tox -e venv -- adjutant-api exampleconfig --output-file /etc/adjutant/adjutant.yaml
With ``--output-file`` controlling where the file goes.
With ``--output-file`` controlling where the file goes. If the file extension
is given as ``toml`` rather than ``yaml``, a toml format config file will be
generated instead.
This example file should be your starting point for configuring the service,
and your core source of documentation for what each config does.
Adjutant will read the file from ``/etc/adjutant/adjutant.yaml`` or if the
environment variable ``ADJUTANT_CONFIG_FILE`` is set, will look for the file
in the specified location.
Adjutant will read the file from ``/etc/adjutant/adjutant.yaml`` or
``/etc/adjutant/adjutant.toml``, and if the environment variable
``ADJUTANT_CONFIG_FILE`` is set, will look for the file in the
specified location.
.. note::
While Adjutant does support toml as a config format, you are likely
better off sticking with yaml as it may prove easier and more reliable,
but for those who much prefer an ini type format, that might feel closer.
Configuration options
+++++++++++++++++++++

View File

@ -1,22 +1,16 @@
django:
# String
# The Django secret key.
# String - The Django secret key.
secret_key: Do not ever use this awful secret in prod!!!!
# Boolean
# Django debug mode is turned on.
debug: False
# List
# The Django allowed hosts
# Boolean - Django debug mode is turned on.
debug: false
# List - The Django allowed hosts
allowed_hosts:
- '*'
# String
# The header representing a HTTP header/value combination that signifies a request is secure.
# String - The header representing a HTTP header/value combination that signifies a request is secure.
secure_proxy_ssl_header: HTTP_X_FORWARDED_PROTO
# String
# The value representing a HTTP header/value combination that signifies a request is secure.
# String - The value representing a HTTP header/value combination that signifies a request is secure.
secure_proxy_ssl_header_value: https
# Dict
# Django databases config.
# Dict - Django databases config.
databases:
default:
ATOMIC_REQUESTS: false
@ -35,88 +29,67 @@ django:
NAME: null
TIME_ZONE: null
USER: ''
# Dict
# A full override of the Django logging config for more customised logging.
# Dict - A full override of the Django logging config for more customised logging.
# logging:
# String
# The name and location of the Adjutant log file, superceded by 'adjutant.django.logging'.
# String - The name and location of the Adjutant log file, superceded by 'adjutant.django.logging'.
log_file: adjutant.log
email:
# String
# Django email backend to use.
# String - Django email backend to use.
email_backend: django.core.mail.backends.console.EmailBackend
# Integer
# Email backend timeout.
# Integer - Email backend timeout.
# timeout: <your_value>
# Hostname
# Email backend server location.
# Hostname - Email backend server location.
# host: <your_value>
# Port
# Email backend server port.
# Port - Email backend server port.
# port: <your_value>
# String
# Email backend user.
# String - Email backend user.
# host_user: <your_value>
# String
# Email backend user password.
# String - Email backend user password.
# host_password: <your_value>
# Boolean
# Whether to use TLS for email. Mutually exclusive with 'use_ssl'.
use_tls: False
# Boolean
# Whether to use SSL for email. Mutually exclusive with 'use_tls'.
use_ssl: False
# Boolean - Whether to use TLS for email. Mutually exclusive with 'use_ssl'.
use_tls: false
# Boolean - Whether to use SSL for email. Mutually exclusive with 'use_tls'.
use_ssl: false
identity:
# Integer
# Cache time for Keystone Tokens in the Keystone Middleware.
# Integer - Cache time for Keystone Tokens in the Keystone Middleware.
token_cache_time: -1
# Boolean
# Is Adjutant allowed (or able) to edit users in Keystone.
can_edit_users: True
# Boolean
# Should Adjutant assume and treat all usernames as emails.
username_is_email: True
# Dict
# A mapping from held role to roles it is allowed to manage.
# Boolean - Is Adjutant allowed (or able) to edit users in Keystone.
can_edit_users: true
# Boolean - Should Adjutant assume and treat all usernames as emails.
username_is_email: true
# Dict - A mapping from held role to roles it is allowed to manage.
role_mapping:
admin:
- project_admin
- project_mod
- heat_stack_owner
- member
- project_admin
- project_mod
- heat_stack_owner
- member
project_admin:
- project_admin
- project_mod
- heat_stack_owner
- member
- project_admin
- project_mod
- heat_stack_owner
- member
project_mod:
- project_mod
- heat_stack_owner
- member
- project_mod
- heat_stack_owner
- member
auth:
# String
# Username for Adjutant Keystone admin user.
# String - Username for Adjutant Keystone admin user.
# username: <your_value>
# String
# Password for Adjutant Keystone admin user.
# String - Password for Adjutant Keystone admin user.
# password: <your_value>
# String
# Project name for Adjutant Keystone admin user.
# String - Project name for Adjutant Keystone admin user.
# project_name: <your_value>
# String
# Project domain id for Adjutant Keystone admin user.
# String - Project domain id for Adjutant Keystone admin user.
project_domain_id: default
# String
# User domain id for Adjutant Keystone admin user.
# String - User domain id for Adjutant Keystone admin user.
user_domain_id: default
# URI
# Keystone auth url that Adjutant will use.
# URI - Keystone auth url that Adjutant will use.
# auth_url: <your_value>
api:
# List
# List of Active Delegate APIs.
# List - List of Active Delegate APIs.
active_delegate_apis:
- UserRoles
- UserDetail
@ -125,328 +98,236 @@ api:
- RoleList
delegate_apis:
CreateProjectAndUser:
# String
# Default region in which any potential resources may be created.
# String - Default region in which any potential resources may be created.
default_region: RegionOne
# String
# Domain in which project and users will be created.
# String - Domain in which project and users will be created.
default_domain_id: default
# String
# Parent id under which this project will be created. Default is None, and will create under default domain.
# String - Parent id under which this project will be created. Default is None, and will create under default domain.
# default_parent_id: <your_value>
UserList:
# List
# Users with any of these roles will be hidden from the user list.
# List - Users with any of these roles will be hidden from the user list.
blacklisted_roles:
- admin
UserDetail:
# List
# User with these roles will return not found.
# List - User with these roles will return not found.
blacklisted_roles:
- admin
UserRoles:
# List
# User with these roles will return not found.
# List - User with these roles will return not found.
blacklisted_roles:
- admin
SignUp:
# String
# Default region in which any potential resources may be created.
# String - Default region in which any potential resources may be created.
default_region: RegionOne
# String
# Domain in which project and users will be created.
# String - Domain in which project and users will be created.
default_domain_id: default
# String
# Parent id under which this project will be created. Default is None, and will create under default domain.
# String - Parent id under which this project will be created. Default is None, and will create under default domain.
# default_parent_id: <your_value>
notifications:
handler_defaults:
EmailNotification:
# List
# List of email addresses to send this notification to.
# List - List of email addresses to send this notification to.
# emails:
# String
# From email for this notification.
# String - From email for this notification.
from: bounce+%(task_uuid)s@example.com
# String
# Reply-to email for this notification.
# String - Reply-to email for this notification.
reply: no-reply@example.com
# String
# Email template for this notification. No template will cause the email not to send.
# String - Email template for this notification. No template will cause the email not to send.
template: notification.txt
# String
# Email html template for this notification.
# String - Email html template for this notification.
# html_template: <your_value>
workflow:
# URI
# The base Horizon url for Adjutant to use when producing links to Horizon.
# URI - The base Horizon url for Adjutant to use when producing links to Horizon.
horizon_url: http://localhost/
# Integer
# The default token expiry time for Task tokens.
# Integer - The default token expiry time for Task tokens.
default_token_expiry: 86400
task_defaults:
emails:
initial:
# String
# Default email subject for this stage
# String - Default email subject for this stage
subject: Task Confirmation
# String
# Default from email for this stage
# String - Default from email for this stage
from: bounce+%(task_uuid)s@example.com
# String
# Default reply-to email for this stage
# String - Default reply-to email for this stage
reply: no-reply@example.com
# String
# Default email template for this stage
# String - Default email template for this stage
template: initial.txt
# String
# Default email html template for this stage
# String - Default email html template for this stage
# html_template: <your_value>
token:
# String
# Default email subject for this stage
# String - Default email subject for this stage
subject: Task Token
# String
# Default from email for this stage
# String - Default from email for this stage
from: bounce+%(task_uuid)s@example.com
# String
# Default reply-to email for this stage
# String - Default reply-to email for this stage
reply: no-reply@example.com
# String
# Default email template for this stage
# String - Default email template for this stage
template: token.txt
# String
# Default email html template for this stage
# String - Default email html template for this stage
# html_template: <your_value>
completed:
# String
# Default email subject for this stage
# String - Default email subject for this stage
subject: Task Completed
# String
# Default from email for this stage
# String - Default from email for this stage
from: bounce+%(task_uuid)s@example.com
# String
# Default reply-to email for this stage
# String - Default reply-to email for this stage
reply: no-reply@example.com
# String
# Default email template for this stage
# String - Default email template for this stage
template: completed.txt
# String
# Default email html template for this stage
# String - Default email html template for this stage
# html_template: <your_value>
notifications:
# List
# Handlers to use for standard notifications.
# List - Handlers to use for standard notifications.
standard_handlers:
- EmailNotification
# List
# Handlers to use for error notifications.
# List - Handlers to use for error notifications.
error_handlers:
- EmailNotification
# Dict
# Settings for standard notification handlers.
# Dict - Settings for standard notification handlers.
# standard_handler_config:
# Dict
# Settings for error notification handlers.
# Dict - Settings for error notification handlers.
# error_handler_config:
# List
# Error types which are safe to acknowledge automatically.
# List - Error types which are safe to acknowledge automatically.
safe_errors:
- SMTPException
action_defaults:
NewProjectWithUserAction:
# List
# Roles to be given on project for the user.
# List - Roles to be given on project for the user.
default_roles:
- member
- project_admin
NewProjectAction:
# List
# Roles to be given on project to the creating user.
# List - Roles to be given on project to the creating user.
default_roles:
- member
- project_admin
AddDefaultUsersToProjectAction:
# List
# Users which this action should add to the project.
# List - Users which this action should add to the project.
# default_users:
# List
# Roles which those users should get.
# List - Roles which those users should get.
# default_roles:
NewDefaultNetworkAction:
region_defaults:
# String
# Name to be given to the default network.
network_name: default_network
# String
# Name to be given to the default subnet.
subnet_name: default_subnet
# String
# Name to be given to the default router.
router_name: default_router
# String
# ID of the public network.
# public_network: <your_value>
# String
# CIDR for the default subnet.
# subnet_cidr: <your_value>
# List
# DNS nameservers for the subnet.
# dns_nameservers:
# Dict
# Specific per region config for default network. See 'region_defaults'.
# Dict - Specific per region config for default network. See 'region_defaults'.
# regions:
region_defaults:
# String - Name to be given to the default network.
network_name: default_network
# String - Name to be given to the default subnet.
subnet_name: default_subnet
# String - Name to be given to the default router.
router_name: default_router
# String - ID of the public network.
# public_network: <your_value>
# String - CIDR for the default subnet.
# subnet_cidr: <your_value>
# List - DNS nameservers for the subnet.
# dns_nameservers:
NewProjectDefaultNetworkAction:
region_defaults:
# String
# Name to be given to the default network.
network_name: default_network
# String
# Name to be given to the default subnet.
subnet_name: default_subnet
# String
# Name to be given to the default router.
router_name: default_router
# String
# ID of the public network.
# public_network: <your_value>
# String
# CIDR for the default subnet.
# subnet_cidr: <your_value>
# List
# DNS nameservers for the subnet.
# dns_nameservers:
# Dict
# Specific per region config for default network. See 'region_defaults'.
# Dict - Specific per region config for default network. See 'region_defaults'.
# regions:
region_defaults:
# String - Name to be given to the default network.
network_name: default_network
# String - Name to be given to the default subnet.
subnet_name: default_subnet
# String - Name to be given to the default router.
router_name: default_router
# String - ID of the public network.
# public_network: <your_value>
# String - CIDR for the default subnet.
# subnet_cidr: <your_value>
# List - DNS nameservers for the subnet.
# dns_nameservers:
SetProjectQuotaAction:
# Float
# Precentage different allowed when matching quota sizes.
# Float - Precentage different allowed when matching quota sizes.
size_difference_threshold: 0.1
# Integer
# The allowed number of days between auto approved quota changes.
# Integer - The allowed number of days between auto approved quota changes.
days_between_autoapprove: 30
# Dict
# Which quota size to use for which region.
# Dict - Which quota size to use for which region.
region_sizes:
RegionOne: small
UpdateProjectQuotasAction:
# Float
# Precentage different allowed when matching quota sizes.
# Float - Precentage different allowed when matching quota sizes.
size_difference_threshold: 0.1
# Integer
# The allowed number of days between auto approved quota changes.
# Integer - The allowed number of days between auto approved quota changes.
days_between_autoapprove: 30
ResetUserPasswordAction:
# List
# Users with these roles cannot reset their passwords.
# List - Users with these roles cannot reset their passwords.
blacklisted_roles:
- admin
SendAdditionalEmailAction:
prepare:
# String
# Email subject for this stage.
# String - Email subject for this stage.
subject: Openstack Email Notification
# String
# From email for this stage.
# String - From email for this stage.
from: bounce+%(task_uuid)s@example.com
# String
# Reply-to email for this stage.
# String - Reply-to email for this stage.
reply: no-reply@example.com
# String
# Email template for this stage. No template will cause the email not to send.
# String - Email template for this stage. No template will cause the email not to send.
# template: <your_value>
# String
# Email html template for this stage. No template will cause the email not to send.
# String - Email html template for this stage. No template will cause the email not to send.
# html_template: <your_value>
# Boolean
# Email the user who started the task.
email_current_user: False
# Boolean
# Send to an email set in the task cache.
email_task_cache: False
# List
# Send emails to the given roles on the project.
# Boolean - Email the user who started the task.
email_current_user: false
# Boolean - Send to an email set in the task cache.
email_task_cache: false
# List - Send emails to the given roles on the project.
# email_roles:
# List
# Send emails to an arbitrary admin emails
# List - Send emails to an arbitrary admin emails
# email_additional_addresses:
approve:
# String
# Email subject for this stage.
# String - Email subject for this stage.
subject: Openstack Email Notification
# String
# From email for this stage.
# String - From email for this stage.
from: bounce+%(task_uuid)s@example.com
# String
# Reply-to email for this stage.
# String - Reply-to email for this stage.
reply: no-reply@example.com
# String
# Email template for this stage. No template will cause the email not to send.
# String - Email template for this stage. No template will cause the email not to send.
# template: <your_value>
# String
# Email html template for this stage. No template will cause the email not to send.
# String - Email html template for this stage. No template will cause the email not to send.
# html_template: <your_value>
# Boolean
# Email the user who started the task.
email_current_user: False
# Boolean
# Send to an email set in the task cache.
email_task_cache: False
# List
# Send emails to the given roles on the project.
# Boolean - Email the user who started the task.
email_current_user: false
# Boolean - Send to an email set in the task cache.
email_task_cache: false
# List - Send emails to the given roles on the project.
# email_roles:
# List
# Send emails to an arbitrary admin emails
# List - Send emails to an arbitrary admin emails
# email_additional_addresses:
submit:
# String
# Email subject for this stage.
# String - Email subject for this stage.
subject: Openstack Email Notification
# String
# From email for this stage.
# String - From email for this stage.
from: bounce+%(task_uuid)s@example.com
# String
# Reply-to email for this stage.
# String - Reply-to email for this stage.
reply: no-reply@example.com
# String
# Email template for this stage. No template will cause the email not to send.
# String - Email template for this stage. No template will cause the email not to send.
# template: <your_value>
# String
# Email html template for this stage. No template will cause the email not to send.
# String - Email html template for this stage. No template will cause the email not to send.
# html_template: <your_value>
# Boolean
# Email the user who started the task.
email_current_user: False
# Boolean
# Send to an email set in the task cache.
email_task_cache: False
# List
# Send emails to the given roles on the project.
# Boolean - Email the user who started the task.
email_current_user: false
# Boolean - Send to an email set in the task cache.
email_task_cache: false
# List - Send emails to the given roles on the project.
# email_roles:
# List
# Send emails to an arbitrary admin emails
# List - Send emails to an arbitrary admin emails
# email_additional_addresses:
tasks:
create_project_and_user:
# Boolean
# Override if this task allows auto_approval. Otherwise uses task default.
allow_auto_approve: True
# List
# Additional actions to be run as part of the task after default actions.
# Boolean - Override if this task allows auto_approval. Otherwise uses task default.
allow_auto_approve: true
# List - Additional actions to be run as part of the task after default actions.
# additional_actions:
# Integer
# Override for the task token expiry. Otherwise uses task default.
# Integer - Override for the task token expiry. Otherwise uses task default.
# token_expiry: <your_value>
# Dict
# Action config overrides over the action defaults. See 'adjutant.workflow.action_defaults'.
# Dict - Action config overrides over the action defaults. See 'adjutant.workflow.action_defaults'.
actions:
SomeCustomAction:
some_action_setting: <a-uuid-probably>
# Dict
# Email config overrides for this task over task defaults.See 'adjutant.workflow.emails'.
# Dict - Email config overrides for this task over task defaults.See 'adjutant.workflow.emails'.
emails:
completed:
subject: signup completed
@ -457,78 +338,66 @@ workflow:
token:
subject: signup approved
template: create_project_and_user_token.txt
# Dict
# Notification config overrides for this task over task defaults.See 'adjutant.workflow.notifications'.
# Dict - Notification config overrides for this task over task defaults.See 'adjutant.workflow.notifications'.
notifications:
error_handler_config:
EmailNotification:
emails:
- example@example.com
- example@example.com
reply: no-reply@example.com
error_handlers:
- EmailNotification
- EmailNotification
standard_handler_config:
EmailNotification:
emails:
- example@example.com
- example@example.com
reply: no-reply@example.com
standard_handlers:
- EmailNotification
- EmailNotification
edit_user_roles:
# Boolean
# Override if this task allows auto_approval. Otherwise uses task default.
allow_auto_approve: True
# List
# Additional actions to be run as part of the task after default actions.
# Boolean - Override if this task allows auto_approval. Otherwise uses task default.
allow_auto_approve: true
# List - Additional actions to be run as part of the task after default actions.
# additional_actions:
# Integer
# Override for the task token expiry. Otherwise uses task default.
# Integer - Override for the task token expiry. Otherwise uses task default.
# token_expiry: <your_value>
# Dict
# Action config overrides over the action defaults. See 'adjutant.workflow.action_defaults'.
# Dict - Action config overrides over the action defaults. See 'adjutant.workflow.action_defaults'.
actions:
SomeCustomAction:
some_action_setting: <a-uuid-probably>
# Dict
# Email config overrides for this task over task defaults.See 'adjutant.workflow.emails'.
# Dict - Email config overrides for this task over task defaults.See 'adjutant.workflow.emails'.
emails:
completed: null
initial: null
token: null
# Dict
# Notification config overrides for this task over task defaults.See 'adjutant.workflow.notifications'.
# Dict - Notification config overrides for this task over task defaults.See 'adjutant.workflow.notifications'.
notifications:
error_handler_config:
EmailNotification:
emails:
- example@example.com
- example@example.com
reply: no-reply@example.com
error_handlers:
- EmailNotification
- EmailNotification
standard_handler_config:
EmailNotification:
emails:
- example@example.com
- example@example.com
reply: no-reply@example.com
standard_handlers:
- EmailNotification
- EmailNotification
invite_user_to_project:
# Boolean
# Override if this task allows auto_approval. Otherwise uses task default.
allow_auto_approve: True
# List
# Additional actions to be run as part of the task after default actions.
# Boolean - Override if this task allows auto_approval. Otherwise uses task default.
allow_auto_approve: true
# List - Additional actions to be run as part of the task after default actions.
# additional_actions:
# Integer
# Override for the task token expiry. Otherwise uses task default.
# Integer - Override for the task token expiry. Otherwise uses task default.
# token_expiry: <your_value>
# Dict
# Action config overrides over the action defaults. See 'adjutant.workflow.action_defaults'.
# Dict - Action config overrides over the action defaults. See 'adjutant.workflow.action_defaults'.
actions:
SomeCustomAction:
some_action_setting: <a-uuid-probably>
# Dict
# Email config overrides for this task over task defaults.See 'adjutant.workflow.emails'.
# Dict - Email config overrides for this task over task defaults.See 'adjutant.workflow.emails'.
emails:
completed:
subject: invite_user_to_project
@ -537,40 +406,34 @@ workflow:
token:
subject: invite_user_to_project
template: invite_user_to_project_token.txt
# Dict
# Notification config overrides for this task over task defaults.See 'adjutant.workflow.notifications'.
# Dict - Notification config overrides for this task over task defaults.See 'adjutant.workflow.notifications'.
notifications:
error_handler_config:
EmailNotification:
emails:
- example@example.com
- example@example.com
reply: no-reply@example.com
error_handlers:
- EmailNotification
- EmailNotification
standard_handler_config:
EmailNotification:
emails:
- example@example.com
- example@example.com
reply: no-reply@example.com
standard_handlers:
- EmailNotification
- EmailNotification
reset_user_password:
# Boolean
# Override if this task allows auto_approval. Otherwise uses task default.
allow_auto_approve: True
# List
# Additional actions to be run as part of the task after default actions.
# Boolean - Override if this task allows auto_approval. Otherwise uses task default.
allow_auto_approve: true
# List - Additional actions to be run as part of the task after default actions.
# additional_actions:
# Integer
# Override for the task token expiry. Otherwise uses task default.
# Integer - Override for the task token expiry. Otherwise uses task default.
# token_expiry: <your_value>
# Dict
# Action config overrides over the action defaults. See 'adjutant.workflow.action_defaults'.
# Dict - Action config overrides over the action defaults. See 'adjutant.workflow.action_defaults'.
actions:
SomeCustomAction:
some_action_setting: <a-uuid-probably>
# Dict
# Email config overrides for this task over task defaults.See 'adjutant.workflow.emails'.
# Dict - Email config overrides for this task over task defaults.See 'adjutant.workflow.emails'.
emails:
completed:
subject: Password Reset for OpenStack
@ -579,44 +442,38 @@ workflow:
token:
subject: Password Reset for OpenStack
template: reset_user_password_token.txt
# Dict
# Notification config overrides for this task over task defaults.See 'adjutant.workflow.notifications'.
# Dict - Notification config overrides for this task over task defaults.See 'adjutant.workflow.notifications'.
notifications:
error_handler_config:
EmailNotification:
emails:
- example@example.com
- example@example.com
reply: no-reply@example.com
error_handlers:
- EmailNotification
- EmailNotification
standard_handler_config:
EmailNotification:
emails:
- example@example.com
- example@example.com
reply: no-reply@example.com
standard_handlers:
- EmailNotification
- EmailNotification
update_user_email:
# Boolean
# Override if this task allows auto_approval. Otherwise uses task default.
allow_auto_approve: True
# List
# Additional actions to be run as part of the task after default actions.
# Boolean - Override if this task allows auto_approval. Otherwise uses task default.
allow_auto_approve: true
# List - Additional actions to be run as part of the task after default actions.
additional_actions:
- SendAdditionalEmailAction
# Integer
# Override for the task token expiry. Otherwise uses task default.
# Integer - Override for the task token expiry. Otherwise uses task default.
# token_expiry: <your_value>
# Dict
# Action config overrides over the action defaults. See 'adjutant.workflow.action_defaults'.
# Dict - Action config overrides over the action defaults. See 'adjutant.workflow.action_defaults'.
actions:
SendAdditionalEmailAction:
initial:
email_current_user: true
subject: OpenStack Email Update Requested
template: update_user_email_started.txt
# Dict
# Email config overrides for this task over task defaults.See 'adjutant.workflow.emails'.
# Dict - Email config overrides for this task over task defaults.See 'adjutant.workflow.emails'.
emails:
completed:
subject: Email Update Complete
@ -625,67 +482,59 @@ workflow:
token:
subject: update_user_email_token
template: update_user_email_token.txt
# Dict
# Notification config overrides for this task over task defaults.See 'adjutant.workflow.notifications'.
# Dict - Notification config overrides for this task over task defaults.See 'adjutant.workflow.notifications'.
notifications:
error_handler_config:
EmailNotification:
emails:
- example@example.com
- example@example.com
reply: no-reply@example.com
error_handlers:
- EmailNotification
- EmailNotification
standard_handler_config:
EmailNotification:
emails:
- example@example.com
- example@example.com
reply: no-reply@example.com
standard_handlers:
- EmailNotification
- EmailNotification
update_quota:
# Boolean
# Override if this task allows auto_approval. Otherwise uses task default.
allow_auto_approve: True
# List
# Additional actions to be run as part of the task after default actions.
# Boolean - Override if this task allows auto_approval. Otherwise uses task default.
allow_auto_approve: true
# List - Additional actions to be run as part of the task after default actions.
# additional_actions:
# Integer
# Override for the task token expiry. Otherwise uses task default.
# Integer - Override for the task token expiry. Otherwise uses task default.
# token_expiry: <your_value>
# Dict
# Action config overrides over the action defaults. See 'adjutant.workflow.action_defaults'.
# Dict - Action config overrides over the action defaults. See 'adjutant.workflow.action_defaults'.
actions:
SomeCustomAction:
some_action_setting: <a-uuid-probably>
# Dict
# Email config overrides for this task over task defaults.See 'adjutant.workflow.emails'.
# Dict - Email config overrides for this task over task defaults.See 'adjutant.workflow.emails'.
emails:
completed:
subject: signup completed
template: create_project_and_user_completed.txt
initial: null
token: null
# Dict
# Notification config overrides for this task over task defaults.See 'adjutant.workflow.notifications'.
# Dict - Notification config overrides for this task over task defaults.See 'adjutant.workflow.notifications'.
notifications:
error_handler_config:
EmailNotification:
emails:
- example@example.com
- example@example.com
reply: no-reply@example.com
error_handlers:
- EmailNotification
- EmailNotification
standard_handler_config:
EmailNotification:
emails:
- example@example.com
- example@example.com
reply: no-reply@example.com
standard_handlers:
- EmailNotification
- EmailNotification
quota:
# Dict
# A definition of the quota size groups that Adjutant should use.
# Dict - A definition of the quota size groups that Adjutant should use.
sizes:
large:
cinder:
@ -780,17 +629,15 @@ quota:
load_balancer: 1
member: 2
pool: 1
# List
# An ascending list of all the quota size names, so that Adjutant knows their relative sizes/order.
# List - An ascending list of all the quota size names, so that Adjutant knows their relative sizes/order.
sizes_ascending:
- small
- medium
- large
# Dict
# A per region definition of what services Adjutant should manage quotas for. '*' means all or default region.
# Dict - A per region definition of what services Adjutant should manage quotas for. '*' means all or default region.
services:
'*':
- cinder
- neutron
- nova
- cinder
- neutron
- nova

View File

@ -0,0 +1,6 @@
---
features:
- |
Adjutant now optionally supports toml as a config file format,
although yaml is still considered the default. Both can now be
exported as example configs.

View File

@ -13,7 +13,6 @@ python-keystoneclient>=3.19.0
python-neutronclient>=6.12.0
python-novaclient>=14.0.0
python-octaviaclient>=1.8.0
PyYAML>=5.1
six>=1.12.0
confspirator>=0.1.6
confspirator>=0.2.2
mysqlclient>=1.4.6