Provided by: masakari-common_9.0.0-0ubuntu0.20.04.5_all 

NAME
masakari - masakari Masakari is an OpenStack project designed to ensure high availability of instances and compute processes running on hosts. This documentation is intended to help explain the current scope of the Masakari project and the architectural decisions made to support this scope. The documentation will include the future architectural roadmap and the current development process and policies.
MASAKARI API REFERENCES
The Masakari API is extensive. We provide a concept guide which gives some of the high level details, as well as a more detailed API reference.
OPERATOR GUIDE
Architecture Overview • Masakari architecture: An overview of how all the components in masakari work together. Installation A detailed install guide for masakari. Masakari services Masakari service overview Masakari provides Virtual Machines High Availability(VMHA), and rescues KVM-based Virtual Machines(VM) from a failure events described below: • VM process down - restart vm (use nova stop API, and nova start API). Libvirt events will be also emitted by other failures. • Provisioning process down - restarts process, changes nova-compute service status to maintenance mode (use nova service-disable). • nova-compute host failure - evacuate all the VMs from failure host to reserved host (use nova evacuate API). The below services enables deplores to integrate with the Masakari directly or through custom plug-ins. The Masakari service consists of the following components: masakari-api An OpenStack-native REST API that processes API requests by sending them to the masakari-engine over Remote Procedure Call (RPC). masakari-engine Processes the notifications received from masakari-api by executing the recovery workflow in asynchronous way. Install and configure This section describes how to install and configure Masakari services on the compute node. This section assumes that you already have a working OpenStack environment with the following components installed: Nova, Glance, Cinder, Neutron and Identity. The installation and configuration vary by distribution. Install and configure for Ubuntu This section describes how to install and configure Masakari for Ubuntu 18.04 (bionic). Prerequisites Before you install and configure the masakari service, you must create databases, service credentials, and API endpoints. 1. To create the masakari database, follow these steps: • Use the database access client to connect to the database server as the root user: # mysql • Create the masakari database: mysql> CREATE DATABASE masakari CHARACTER SET utf8; • Grant access privileges to the databases: mysql> GRANT ALL PRIVILEGES ON masakari.* TO 'username'@'localhost' \ IDENTIFIED BY 'MASAKARI_DBPASS'; mysql> GRANT ALL PRIVILEGES ON masakari.* TO 'username'@'%' \ IDENTIFIED BY 'MASAKARI_DBPASS'; Replace MASAKARI_DBPASS with a suitable password. • Exit the database access client. 2. Source the admin credentials to gain access to admin-only CLI commands: $ . admin-openrc 3. Create the Masakari service credentials: • Create the masakari user with password as masakari: $ openstack user create --password-prompt masakari User Password: Repeat User Password: +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | 8a7dbf5279404537b1c7b86c033620fe | | name | masakari | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+ • Add the admin role to the masakari user: $ openstack role add --project service --user masakari admin • Create the masakari service entity: $ openstack service create --name masakari \ --description "masakari high availability" instance-ha +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | masakari high availability | | enabled | True | | id | 060d59eac51b4594815603d75a00aba2 | | name | masakari | | type | instance-ha | +-------------+----------------------------------+ 4. Create the Masakari API service endpoints: $ openstack endpoint create --region RegionOne \ masakari public http:// <CONTROLLER_IP>/instance-ha/v1/$\(tenant_id\)s +--------------+-------------------------------------------------------+ | Field | Value | +--------------+-------------------------------------------------------+ | enabled | True | | id | 38f7af91666a47cfb97b4dc790b94424 | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 060d59eac51b4594815603d75a00aba2 | | service_name | masakari | | service_type | instance-ha | | url | http://<CONTROLLER_IP>/instance-ha/v1/$(tenant_id)s | +--------------+-------------------------------------------------------+ $ openstack endpoint create --region RegionOne \ masakari internal http:// <CONTROLLER_IP>/instance-ha/v1/$\(tenant_id\)s +--------------+-------------------------------------------------------+ | Field | Value | +--------------+-------------------------------------------------------+ | enabled | True | | id | 38f7af91666a47cfb97b4dc790b94424 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | 060d59eac51b4594815603d75a00aba2 | | service_name | masakari | | service_type | instance-ha | | url | http://<CONTROLLER_IP>/instance-ha/v1/$(tenant_id)s | +--------------+-------------------------------------------------------+ $ openstack endpoint create --region RegionOne \ masakari admin http://<CONTROLLER_IP>/instance-ha/v1/$\(tenant_id\)s +--------------+-------------------------------------------------------+ | Field | Value | +--------------+-------------------------------------------------------+ | enabled | True | | id | 38f7af91666a47cfb97b4dc790b94424 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 060d59eac51b4594815603d75a00aba2 | | service_name | masakari | | service_type | instance-ha | | url | http://<CONTROLLER_IP>/instance-ha/v1/$(tenant_id)s | +--------------+-------------------------------------------------------+ Install and configure Masakari NOTE: • You must install Masakari on the Controller Nodes only. 1. Clone masakari using: # git clone https://opendev.org/openstack/masakari.git 2. Prepare the masakari configuration files: 1. Generate via tox: Go to ‘opt/stack/masakari’ and execute the command below, this will generate masakari.conf.sample, sample configuration file at /opt/stack/masakari/etc/masakari/ # tox -egenconfig 2. Download from: # masakari.conf.sample 3. Rename masakari.conf.sample file to masakari.conf, and edit sections as shown below: [default] transport_url = rabbit://stackrabbit:admin@<CONTROLLER_IP>:5672/ graceful_shutdown_timeout = 5 os_privileged_user_tenant = service os_privileged_user_password = admin os_privileged_user_auth_url = http://<CONTROLLER_IP>/identity os_privileged_user_name = nova logging_exception_prefix = %(color)s%(asctime)s.%(msecs)03d TRACE %(name)s [01;35m%(instance)s[00m logging_debug_format_suffix = [00;33mfrom (pid=%(process)d) %(funcName)s %(pathname)s:%(lineno)d[00m logging_default_format_string = %(asctime)s.%(msecs)03d %(color)s%(levelname)s %(name)s [[00;36m-%(color)s] [01;35m%(instance)s%(color)s%(message)s[00m logging_context_format_string = %(asctime)s.%(msecs)03d %(color)s%(levelname)s %(name)s [[01;36m%(request_id)s [00;36m%(project_name)s %(user_name)s%(color)s] [01;35m%(instance)s%(color)s%(message)s[00m use_syslog = False debug = True masakari_api_workers = 2 [database] connection = mysql+pymysql://root:admin@1<CONTROLLER_IP>/masakari?charset=utf8 [keystone_authtoken] memcached_servers = localhost:11211 cafile = /opt/stack/data/ca-bundle.pem project_domain_name = Default project_name = service user_domain_name = Default password = <MASAKARI_PASS> username = masakari auth_url = http://<CONTROLLER_IP>/identity auth_type = password [taskflow] connection = mysql+pymysql://root:admin@<CONTROLLER_IP>/masakari?charset=utf8 NOTE: Replace CONTROLLER_IP with the IP address of controller node. Replace MASAKARI_PASS with the password you chose for the masakari user in the Identity service. 4. Create masakari directory in /etc/: Copy masakari.conf file to /etc/masakari/ # cp -p etc/masakari/masakari.conf.sample /etc/masakari/masakari.conf 3. To install masakari run setup.py from masakari: # cd masakari # sudo python setup.py install 4. Run below db command to sync database: # masakari-manage db sync Finalize installation • Start masakari services: # masakari-api # masakari-engine Verify operation Verify Masakari installation. 1. Source the admin credentials to gain access to admin-only CLI commands: $ . admin-openrc 2. List API endpoints in the Identity service to verify connectivity with the Identity service: NOTE: Below endpoints list may differ depending on the installation of OpenStack components. $ openstack endpoint list +-------------+----------------+--------------------------------------------------------+ | Name | Type | Endpoints | +-------------+----------------+--------------------------------------------------------+ | nova_legacy | compute_legacy | RegionOne | | | | public: http://controller/compute/v2/<tenant_id> | | | | | | nova | compute | RegionOne | | | | public: http://controller/compute/v2.1 | | | | | | cinder | block-storage | RegionOne | | | | public: http://controller/volume/v3/<tenant_id> | | | | | | glance | image | RegionOne | | | | public: http://controller/image | | | | | | cinderv3 | volumev3 | RegionOne | | | | public: http://controller/volume/v3/<tenant_id> | | | | | | masakari | instance-ha | RegionOne | | | | internal: http://controller/instance-ha/v1/<tenant_id> | | | | RegionOne | | | | admin: http://controller/instance-ha/v1/<tenant_id> | | | | RegionOne | | | | public: http://controller/instance-ha/v1/<tenant_id> | | | | | | keystone | identity | RegionOne | | | | public: http://controller/identity | | | | RegionOne | | | | admin: http://controller/identity | | | | | | cinderv2 | volumev2 | RegionOne | | | | public: http://controller/volume/v2/<tenant_id> | | | | | | placement | placement | RegionOne | | | | public: http://controller/placement | | | | | | neutron | network | RegionOne | | | | public: http://controller:9696/ | | | | | +-------------+----------------+--------------------------------------------------------+ 3. Run segment list command to verify masakari-api is running properly. This will return empty segment list as you haven't yet configured Failover segments. $ openstack segment list NOTE: Since Failover segments are not configured, there is no way to verify masakari-engine is running properly as the notification cannot be sent from masakari-api to masakari-engine. Reference Material • Configuration Guide: Information on configuration files. • Custom Recovery Workflow Configuration Guide • CLI Commands for Masakari: The complete command reference for Masakari. • Versioned Notifications: This provides the list of existing versioned notifications with sample payloads. • Masakari team process • Getting started with Masakari: This will help newcomers understand basics of Masakari • Nova Docs: A collection of guides for Nova. Masakari CLI Documentation In this section you will find information on Masakari’s command line interface. masakari-status CLI interface for Masakari status commands Synopsis masakari-status <category> <command> [<args>] Description masakari-status is a tool that provides routines for checking the status of a Masakari deployment. Options The standard pattern for executing a masakari-status command is: masakari-status <category> <command> [<args>] Run without arguments to see a list of available command categories: masakari-status Categories are: • upgrade Detailed descriptions are below: You can also run with a category argument such as upgrade to see a list of all commands in that category: masakari-status upgrade These sections describe the available categories and arguments for masakari-status. Upgrade masakari-status upgrade check Performs a release-specific readiness check before restarting services with new code. For example, missing or changed configuration options, incompatible object states, or other conditions that could lead to failures while upgrading. Return Codes ┌────────────┬───────────────────────────────────────┐ │Return code │ Description │ ├────────────┼───────────────────────────────────────┤ │0 │ All upgrade readiness checks passed │ │ │ successfully and there is nothing to │ │ │ do. │ ├────────────┼───────────────────────────────────────┤ │1 │ At least one check encountered an │ │ │ issue and requires further │ │ │ investigation. This is considered a │ │ │ warning but the upgrade may be OK. │ ├────────────┼───────────────────────────────────────┤ │2 │ There was an upgrade status check │ │ │ failure that needs to be │ │ │ investigated. This should be │ │ │ considered something that stops an │ │ │ upgrade. │ ├────────────┼───────────────────────────────────────┤ │255 │ An unexpected error occurred. │ └────────────┴───────────────────────────────────────┘ History of Checks 7.0.0 (Stein) • Sample check to be filled in with checks as they are added in Stein. masakari-manage Control and manage masakari database Synopsis masakari-manage <category> <action> [<args>] Description masakari-manage controls DB by managing various admin-only aspects of masakari. Options The standard pattern for executing a masakari-manage command is: masakari-manage <category> <command> [<args>] Run without arguments to see a list of available command categories: masakari-manage You can also run with a category argument such as db to see a list of all commands in that category: masakari-manage db These sections describe the available categories and arguments for masakari-manage. Masakari Database masakari-manage db version Print the current main database version. masakari-manage db sync [--version <version>] Upgrade the main database schema up to the most recent version or --version if specified. masakari-manage db purge Deleting rows older than 30 day(s) from table hosts, failover_segments and notifications. openstack masakari To control and manage masakari operations, the extended command list available in openstack command. api-paste.ini The masakari service stores its API configuration settings in the api-paste.ini file. [composite:masakari_api] use = call:masakari.api.urlmap:urlmap_factory /: apiversions /v1: masakari_api_v1 [composite:masakari_api_v1] use = call:masakari.api.auth:pipeline_factory_v1 keystone = cors http_proxy_to_wsgi request_id faultwrap sizelimit authtoken keystonecontext osapi_masakari_app_v1 noauth2 = cors http_proxy_to_wsgi request_id faultwrap sizelimit noauth2 osapi_masakari_app_v1 # filters [filter:cors] paste.filter_factory = oslo_middleware.cors:filter_factory oslo_config_project = masakari [filter:http_proxy_to_wsgi] paste.filter_factory = oslo_middleware.http_proxy_to_wsgi:HTTPProxyToWSGI.factory [filter:request_id] paste.filter_factory = oslo_middleware:RequestId.factory [filter:faultwrap] paste.filter_factory = masakari.api.openstack:FaultWrapper.factory [filter:sizelimit] paste.filter_factory = oslo_middleware:RequestBodySizeLimiter.factory [filter:authtoken] paste.filter_factory = keystonemiddleware.auth_token:filter_factory [filter:keystonecontext] paste.filter_factory = masakari.api.auth:MasakariKeystoneContext.factory [filter:noauth2] paste.filter_factory = masakari.api.auth:NoAuthMiddleware.factory # apps [app:osapi_masakari_app_v1] paste.app_factory = masakari.api.openstack.ha:APIRouterV1.factory [pipeline:apiversions] pipeline = faultwrap http_proxy_to_wsgi apiversionsapp [app:apiversionsapp] paste.app_factory = masakari.api.openstack.ha.versions:Versions.factory Configuration Options The following is an overview of all available configuration options in Masakari. For a sample configuration file, refer to sample_config. DEFAULT auth_strategy Type string Default keystone Valid Values keystone, noauth2 This determines the strategy to use for authentication: keystone or noauth2. 'noauth2' is designed for testing only, as it does no actual credential checking. 'noauth2' provides administrative credentials only if 'admin' is specified as the username. • Possible values: Either 'keystone' (default) or 'noauth2'. • Services that use this: masakari-api • Related options: None use_forwarded_for Type boolean Default false When True, the 'X-Forwarded-For' header is treated as the canonical remote address. When False (the default), the 'remote_address' header is used. You should only enable this if you have an HTML sanitizing proxy. • Possible values: True, False (default) • Services that use this: masakari-api • Related options: None osapi_max_limit Type integer Default 1000 As a query can potentially return many thousands of items, you can limit the maximum number of items in a single response by setting this option. • Possible values: Any positive integer. Default is 1000. • Services that use this: masakari-api • Related options: None osapi_masakari_link_prefix Type string Default <None> This string is prepended to the normal URL that is returned in links to the OpenStack Masakari API. If it is empty (the default), the URLs are returned unchanged. • Possible values: Any string, including an empty string (the default). • Services that use this: masakari-api • Related options: None tempdir Type string Default <None> Explicitly specify the temporary working directory. monkey_patch Type boolean Default false Determine if monkey patching should be applied. Related options: • monkey_patch_modules: This must have values set for this option to have any effect monkey_patch_modules Type list Default masakari.api:masakari.cmd List of modules/decorators to monkey patch. This option allows you to patch a decorator for all functions in specified modules. Related options: • monkey_patch: This must be set to True for this option to have any effect masakari_topic Type string Default ha_engine This is the message queue topic that the masakari engine 'listens' on. It is used when the masakari engine is started up to configure the queue, and whenever an RPC call to the masakari engine is made. • Possible values: Any string, but there is almost never any reason to ever change this value from its default of 'engine'. • Services that use this: masakari-engine • Related options: None WARNING: This option is deprecated for removal since 3.0.0. Its value may be silently ignored in the future. Reason Configurable RPC topic provides little value and it can easily break Masakari if operator configures it to the same topic used by other OpenStack services. duplicate_notification_detection_interval Type integer Default 180 Minimum Value 0 Interval in seconds for identifying duplicate notifications. If the notification received is identical to the previous ones whose status is either new or running and if it's created_timestamp and the current timestamp is less than this config option value, then the notification will be considered as duplicate and it will be ignored. wait_period_after_service_update Type integer Default 180 Number of seconds to wait after a service is enabled or disabled. wait_period_after_evacuation Type integer Default 90 Wait until instance is evacuated verify_interval Type integer Default 1 The monitoring interval for looping wait_period_after_power_off Type integer Default 180 Number of seconds to wait for instance to shut down wait_period_after_power_on Type integer Default 60 Number of seconds to wait for instance to start process_unfinished_notifications_interval Type integer Default 120 Interval in seconds for processing notifications which are in error or new state. retry_notification_new_status_interval Type integer Default 60 Mutable This option can be changed without restarting. Interval in seconds for identifying notifications which are in new state. If the notification is in new state till this config option value after it's generated_time, then it is considered that notification is ignored by the messaging queue and will be processed by 'process_unfinished_notifications' periodic task. check_expired_notifications_interval Type integer Default 600 Interval in seconds for checking running notifications. notifications_expired_interval Type integer Default 86400 Interval in seconds for identifying running notifications expired. host_failure_recovery_threads Type integer Default 3 Minimum Value 1 Number of threads to be used for evacuating and confirming instances during execution of host_failure workflow. notification_driver Type string Default taskflow_driver Defines which driver to use for executing notification workflows. fatal_exception_format_errors Type boolean Default false Make exception message format errors fatal nova_catalog_admin_info Type string Default compute:nova:publicURL Match this value when searching for nova in the service catalog. Format is: separated values of the form: <service_type>:<service_name>:<endpoint_type> os_region_name Type string Default <None> Region name of this node nova_ca_certificates_file Type string Default <None> Location of ca certificates file to use for nova client requests. nova_api_insecure Type boolean Default false Allow to perform insecure SSL requests to nova os_privileged_user_name Type string Default <None> OpenStack privileged account username. Used for requests to other services (such as Nova) that require an account with special rights. os_privileged_user_password Type string Default <None> Password associated with the OpenStack privileged account. os_privileged_user_tenant Type string Default <None> Tenant name associated with the OpenStack privileged account. os_privileged_user_auth_url Type URI Default <None> Auth URL associated with the OpenStack privileged account. os_user_domain_name Type string Default default User domain name associated with the OpenStack privileged account. os_project_domain_name Type string Default default Project domain name associated with the OpenStack privileged account. pybasedir Type string Default /build/masakari-VZrMuh/masakari-9.0.0 Directory where the masakari python module is installed bindir Type string Default /usr/local/bin Directory where masakari binaries are installed state_path Type string Default $pybasedir Top-level directory for maintaining masakari's state host Type host address Default lgw01-amd64-035 Hostname, FQDN or IP address of this host. Must be valid within AMQP key. Possible values: • String with hostname, FQDN or IP address. Default is hostname of this host. engine_manager Type string Default masakari.engine.manager.MasakariManager Full class name for the Manager for masakari engine report_interval Type integer Default 10 Seconds between nodes reporting state to datastore periodic_enable Type boolean Default true Enable periodic tasks periodic_interval_max Type integer Default 300 Max interval time between periodic tasks execution in seconds. periodic_fuzzy_delay Type integer Default 60 Range of seconds to randomly delay when starting the periodic task scheduler to reduce stampeding. (Disable by setting to 0) use_ssl Type boolean Default false Use APIs with SSL enabled masakari_api_listen Type host address Default 0.0.0.0 The IP address on which the Masakari API will listen. masakari_api_listen_port Type integer Default 15868 Minimum Value 1 Maximum Value 65535 The port on which the Masakari API will listen. masakari_api_workers Type integer Default <None> Number of workers for Masakari API service. The default will be the number of CPUs available. service_down_time Type integer Default 60 Maximum time since last check-in for up service backdoor_port Type string Default <None> Enable eventlet backdoor. Acceptable values are 0, <port>, and <start>:<end>, where 0 results in listening on a random tcp port number; <port> results in listening on the specified port number (and not enabling backdoor if that port is in use); and <start>:<end> results in listening on the smallest unused port number within the specified range of port numbers. The chosen port is displayed in the service's log file. backdoor_socket Type string Default <None> Enable eventlet backdoor, using the provided path as a unix socket that can receive connections. This option is mutually exclusive with 'backdoor_port' in that only one should be provided. If both are provided then the existence of this option overrides the usage of that option. Inside the path {pid} will be replaced with the PID of the current process. log_options Type boolean Default true Enables or disables logging values of all registered options when starting a service (at DEBUG level). graceful_shutdown_timeout Type integer Default 60 Specify a timeout after which a gracefully shutdown server will exit. Zero value means endless wait. api_paste_config Type string Default api-paste.ini File name for the paste.deploy config for api service wsgi_log_format Type string Default %(client_ip)s "%(request_line)s" status: %(status_code)s len: %(body_length)s time: %(wall_seconds).7f A python format string that is used as the template to generate log lines. The following values can beformatted into it: client_ip, date_time, request_line, status_code, body_length, wall_seconds. tcp_keepidle Type integer Default 600 Sets the value of TCP_KEEPIDLE in seconds for each server socket. Not supported on OS X. wsgi_default_pool_size Type integer Default 100 Size of the pool of greenthreads used by wsgi max_header_line Type integer Default 16384 Maximum line size of message headers to be accepted. max_header_line may need to be increased when using large tokens (typically those generated when keystone is configured to use PKI tokens with big service catalogs). wsgi_keep_alive Type boolean Default true If False, closes the client socket connection explicitly. client_socket_timeout Type integer Default 900 Timeout for client connections' socket operations. If an incoming connection is idle for this number of seconds it will be closed. A value of '0' means wait forever. rpc_conn_pool_size Type integer Default 30 Size of RPC connection pool. Deprecated Variations ┌────────┬────────────────────┐ │Group │ Name │ ├────────┼────────────────────┤ │DEFAULT │ rpc_conn_pool_size │ └────────┴────────────────────┘ conn_pool_min_size Type integer Default 2 The pool size limit for connections expiration policy conn_pool_ttl Type integer Default 1200 The time-to-live in sec of idle connections in the pool executor_thread_pool_size Type integer Default 64 Size of executor thread pool when executor is threading or eventlet. Deprecated Variations ┌────────┬──────────────────────┐ │Group │ Name │ ├────────┼──────────────────────┤ │DEFAULT │ rpc_thread_pool_size │ └────────┴──────────────────────┘ rpc_response_timeout Type integer Default 60 Seconds to wait for a response from a call. transport_url Type string Default rabbit:// The network address and optional user credentials for connecting to the messaging backend, in URL format. The expected format is: driver://[user:pass@]host:port[,[userN:passN@]hostN:portN]/virtual_host?query Example: rabbit://rabbitmq:password@127.0.0.1:5672// For full details on the fields in the URL see the documentation of oslo_messaging.TransportURL at https://docs.openstack.org/oslo.messaging/latest/reference/transport.html control_exchange Type string Default openstack The default exchange under which topics are scoped. May be overridden by an exchange name specified in the transport_url option. debug Type boolean Default false Mutable This option can be changed without restarting. If set to true, the logging level will be set to DEBUG instead of the default INFO level. log_config_append Type string Default <None> Mutable This option can be changed without restarting. The name of a logging configuration file. This file is appended to any existing logging configuration files. For details about logging configuration files, see the Python logging module documentation. Note that when logging configuration files are used then all logging configuration is set in the configuration file and other logging configuration options are ignored (for example, log-date-format). Deprecated Variations ┌────────┬────────────┐ │Group │ Name │ ├────────┼────────────┤ │DEFAULT │ log-config │ ├────────┼────────────┤ │DEFAULT │ log_config │ └────────┴────────────┘ log_date_format Type string Default %Y-%m-%d %H:%M:%S Defines the format string for %(asctime)s in log records. Default: the value above . This option is ignored if log_config_append is set. log_file Type string Default <None> (Optional) Name of log file to send logging output to. If no default is set, logging will go to stderr as defined by use_stderr. This option is ignored if log_config_append is set. Deprecated Variations ┌────────┬─────────┐ │Group │ Name │ ├────────┼─────────┤ │DEFAULT │ logfile │ └────────┴─────────┘ log_dir Type string Default <None> (Optional) The base directory used for relative log_file paths. This option is ignored if log_config_append is set. Deprecated Variations ┌────────┬────────┐ │Group │ Name │ ├────────┼────────┤ │DEFAULT │ logdir │ └────────┴────────┘ watch_log_file Type boolean Default false Uses logging handler designed to watch file system. When log file is moved or removed this handler will open a new log file with specified path instantaneously. It makes sense only if log_file option is specified and Linux platform is used. This option is ignored if log_config_append is set. use_syslog Type boolean Default false Use syslog for logging. Existing syslog format is DEPRECATED and will be changed later to honor RFC5424. This option is ignored if log_config_append is set. use_journal Type boolean Default false Enable journald for logging. If running in a systemd environment you may wish to enable journal support. Doing so will use the journal native protocol which includes structured metadata in addition to log messages.This option is ignored if log_config_append is set. syslog_log_facility Type string Default LOG_USER Syslog facility to receive log lines. This option is ignored if log_config_append is set. use_json Type boolean Default false Use JSON formatting for logging. This option is ignored if log_config_append is set. use_stderr Type boolean Default false Log output to standard error. This option is ignored if log_config_append is set. use_eventlog Type boolean Default false Log output to Windows Event Log. log_rotate_interval Type integer Default 1 The amount of time before the log files are rotated. This option is ignored unless log_rotation_type is setto "interval". log_rotate_interval_type Type string Default days Valid Values Seconds, Minutes, Hours, Days, Weekday, Midnight Rotation interval type. The time of the last file change (or the time when the service was started) is used when scheduling the next rotation. max_logfile_count Type integer Default 30 Maximum number of rotated log files. max_logfile_size_mb Type integer Default 200 Log file maximum size in MB. This option is ignored if "log_rotation_type" is not set to "size". log_rotation_type Type string Default none Valid Values interval, size, none Log rotation type. Possible values.INDENT 7.0 interval Rotate logs at predefined time intervals. size Rotate logs once they reach a predefined size. none Do not rotate log files. logging_context_format_string Type string Default %(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s Format string to use for log messages with context. Used by oslo_log.formatters.ContextFormatter logging_default_format_string Type string Default %(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s Format string to use for log messages when context is undefined. Used by oslo_log.formatters.ContextFormatter logging_debug_format_suffix Type string Default %(funcName)s %(pathname)s:%(lineno)d Additional data to append to log message when logging level for the message is DEBUG. Used by oslo_log.formatters.ContextFormatter logging_exception_prefix Type string Default %(asctime)s.%(msecs)03d %(process)d ERROR %(name)s %(instance)s Prefix each line of exception output with this format. Used by oslo_log.formatters.ContextFormatter logging_user_identity_format Type string Default %(user)s %(tenant)s %(domain)s %(user_domain)s %(project_domain)s Defines the format string for %(user_identity)s that is used in logging_context_format_string. Used by oslo_log.formatters.ContextFormatter default_log_levels Type list Default amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,oslo_messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,requests.packages.urllib3.util.retry=WARN,urllib3.util.retry=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN,taskflow=WARN,keystoneauth=WARN,oslo.cache=INFO,oslo_policy=INFO,dogpile.core.dogpile=INFO List of package logging levels in logger=LEVEL pairs. This option is ignored if log_config_append is set. publish_errors Type boolean Default false Enables or disables publication of error events. instance_format Type string Default "[instance: %(uuid)s] " The format for an instance that is passed with the log message. instance_uuid_format Type string Default "[instance: %(uuid)s] " The format for an instance UUID that is passed with the log message. rate_limit_interval Type integer Default 0 Interval, number of seconds, of log rate limiting. rate_limit_burst Type integer Default 0 Maximum number of logged messages per rate_limit_interval. rate_limit_except_level Type string Default CRITICAL Log level name used by rate limiting: CRITICAL, ERROR, INFO, WARNING, DEBUG or empty string. Logs with level greater or equal to rate_limit_except_level are not filtered. An empty string means that all levels are filtered. fatal_deprecations Type boolean Default false Enables or disables fatal status of deprecations. cors allowed_origin Type list Default <None> Indicate whether this resource may be shared with the domain received in the requests "origin" header. Format: "<protocol>://<host>[:<port>]", no trailing slash. Example: https://horizon.example.com allow_credentials Type boolean Default true Indicate that the actual request can include user credentials expose_headers Type list Default '' Indicate which headers are safe to expose to the API. Defaults to HTTP Simple Headers. max_age Type integer Default 3600 Maximum cache age of CORS preflight requests. allow_methods Type list Default OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,PATCH Indicate which methods can be used during the actual request. allow_headers Type list Default '' Indicate which header field names may be used during the actual request. database sqlite_synchronous Type boolean Default true If True, SQLite uses synchronous mode. Deprecated Variations ┌────────┬────────────────────┐ │Group │ Name │ ├────────┼────────────────────┤ │DEFAULT │ sqlite_synchronous │ └────────┴────────────────────┘ backend Type string Default sqlalchemy The back end to use for the database. Deprecated Variations ┌────────┬────────────┐ │Group │ Name │ ├────────┼────────────┤ │DEFAULT │ db_backend │ └────────┴────────────┘ connection Type string Default <None> The SQLAlchemy connection string to use to connect to the database. Deprecated Variations ┌─────────┬────────────────┐ │Group │ Name │ ├─────────┼────────────────┤ │DEFAULT │ sql_connection │ ├─────────┼────────────────┤ │DATABASE │ sql_connection │ ├─────────┼────────────────┤ │sql │ connection │ └─────────┴────────────────┘ slave_connection Type string Default <None> The SQLAlchemy connection string to use to connect to the slave database. mysql_sql_mode Type string Default TRADITIONAL The SQL mode to be used for MySQL sessions. This option, including the default, overrides any server-set SQL mode. To use whatever SQL mode is set by the server configuration, set this to no value. Example: mysql_sql_mode= mysql_enable_ndb Type boolean Default false If True, transparently enables support for handling MySQL Cluster (NDB). connection_recycle_time Type integer Default 3600 Connections which have been present in the connection pool longer than this number of seconds will be replaced with a new one the next time they are checked out from the pool. Deprecated Variations ┌─────────┬──────────────────┐ │Group │ Name │ ├─────────┼──────────────────┤ │DATABASE │ idle_timeout │ ├─────────┼──────────────────┤ │database │ idle_timeout │ ├─────────┼──────────────────┤ │DEFAULT │ sql_idle_timeout │ ├─────────┼──────────────────┤ │DATABASE │ sql_idle_timeout │ ├─────────┼──────────────────┤ │sql │ idle_timeout │ └─────────┴──────────────────┘ max_pool_size Type integer Default 5 Maximum number of SQL connections to keep open in a pool. Setting a value of 0 indicates no limit. Deprecated Variations ┌─────────┬───────────────────┐ │Group │ Name │ ├─────────┼───────────────────┤ │DEFAULT │ sql_max_pool_size │ ├─────────┼───────────────────┤ │DATABASE │ sql_max_pool_size │ └─────────┴───────────────────┘ max_retries Type integer Default 10 Maximum number of database connection retries during startup. Set to -1 to specify an infinite retry count. Deprecated Variations ┌─────────┬─────────────────┐ │Group │ Name │ ├─────────┼─────────────────┤ │DEFAULT │ sql_max_retries │ ├─────────┼─────────────────┤ │DATABASE │ sql_max_retries │ └─────────┴─────────────────┘ retry_interval Type integer Default 10 Interval between retries of opening a SQL connection. Deprecated Variations ┌─────────┬────────────────────┐ │Group │ Name │ ├─────────┼────────────────────┤ │DEFAULT │ sql_retry_interval │ ├─────────┼────────────────────┤ │DATABASE │ reconnect_interval │ └─────────┴────────────────────┘ max_overflow Type integer Default 50 If set, use this value for max_overflow with SQLAlchemy. Deprecated Variations ┌─────────┬─────────────────────────┐ │Group │ Name │ ├─────────┼─────────────────────────┤ │DEFAULT │ sql_max_overflow │ ├─────────┼─────────────────────────┤ │DATABASE │ sqlalchemy_max_overflow │ └─────────┴─────────────────────────┘ connection_debug Type integer Default 0 Minimum Value 0 Maximum Value 100 Verbosity of SQL debugging information: 0=None, 100=Everything. Deprecated Variations ┌────────┬──────────────────────┐ │Group │ Name │ ├────────┼──────────────────────┤ │DEFAULT │ sql_connection_debug │ └────────┴──────────────────────┘ connection_trace Type boolean Default false Add Python stack traces to SQL as comment strings. Deprecated Variations ┌────────┬──────────────────────┐ │Group │ Name │ ├────────┼──────────────────────┤ │DEFAULT │ sql_connection_trace │ └────────┴──────────────────────┘ pool_timeout Type integer Default <None> If set, use this value for pool_timeout with SQLAlchemy. Deprecated Variations ┌─────────┬─────────────────────────┐ │Group │ Name │ ├─────────┼─────────────────────────┤ │DATABASE │ sqlalchemy_pool_timeout │ └─────────┴─────────────────────────┘ use_db_reconnect Type boolean Default false Enable the experimental use of database reconnect on connection lost. db_retry_interval Type integer Default 1 Seconds between retries of a database transaction. db_inc_retry_interval Type boolean Default true If True, increases the interval between retries of a database operation up to db_max_retry_interval. db_max_retry_interval Type integer Default 10 If db_inc_retry_interval is set, the maximum seconds between retries of a database operation. db_max_retries Type integer Default 20 Maximum retries in case of connection error or deadlock error before error is raised. Set to -1 to specify an infinite retry count. connection_parameters Type string Default '' Optional URL parameters to append onto the connection URL at connect time; specify as param1=value1¶m2=value2&... use_tpool Type boolean Default false Enable the experimental use of thread pooling for all DB API calls Deprecated Variations ┌────────┬─────────────────┐ │Group │ Name │ ├────────┼─────────────────┤ │DEFAULT │ dbapi_use_tpool │ └────────┴─────────────────┘ healthcheck path Type string Default /healthcheck The path to respond to healtcheck requests on. WARNING: This option is deprecated for removal. Its value may be silently ignored in the future. detailed Type boolean Default false Show more detailed information as part of the response. Security note: Enabling this option may expose sensitive details about the service being monitored. Be sure to verify that it will not violate your security policies. backends Type list Default '' Additional backends that can perform health checks and report that information back as part of a request. disable_by_file_path Type string Default <None> Check the presence of a file to determine if an application is running on a port. Used by DisableByFileHealthcheck plugin. disable_by_file_paths Type list Default '' Check the presence of a file based on a port to determine if an application is running on a port. Expects a "port:path" list of strings. Used by DisableByFilesPortsHealthcheck plugin. host_failure evacuate_all_instances Type boolean Default true Operators can decide whether all instances or only those instances which contain metadata key 'HA_Enabled=True' should be allowed for evacuation from a failed source compute node. When set to True, it will evacuate all instances from a failed source compute node. First preference will be given to those instances which contain 'HA_Enabled=True' metadata key, and then it will evacuate the remaining ones. When set to False, it will evacuate only those instances which contain 'HA_Enabled=True' metadata key. ignore_instances_in_error_state Type boolean Default false Operators can decide whether error instances should be allowed for evacuation from a failed source compute node or not. When set to True, it will ignore error instances from evacuation from a failed source compute node. When set to False, it will evacuate error instances along with other instances from a failed source compute node. add_reserved_host_to_aggregate Type boolean Default false Operators can decide whether reserved_host should be added to aggregate group of failed compute host. When set to True, reserved host will be added to the aggregate group of failed compute host. When set to False, the reserved_host will not be added to the aggregate group of failed compute host. instance_failure process_all_instances Type boolean Default false Operators can decide whether all instances or only those instances which contain metadata key 'HA_Enabled=True' should be taken into account to recover from instance failure events. When set to True, it will execute instance failure recovery actions for an instance irrespective of whether that particular instance contains metadata key 'HA_Enabled=True' or not. When set to False, it will only execute instance failure recovery actions for an instance which contain metadata key 'HA_Enabled=True'. keystone_authtoken www_authenticate_uri Type string Default <None> Complete "public" Identity API endpoint. This endpoint should not be an "admin" endpoint, as it should be accessible by all end users. Unauthenticated clients are redirected to this endpoint to authenticate. Although this endpoint should ideally be unversioned, client support in the wild varies. If you're using a versioned v2 endpoint here, then this should not be the same endpoint the service user utilizes for validating tokens, because normal end users may not be able to reach that endpoint. Deprecated Variations ┌───────────────────┬──────────┐ │Group │ Name │ ├───────────────────┼──────────┤ │keystone_authtoken │ auth_uri │ └───────────────────┴──────────┘ auth_uri Type string Default <None> Complete "public" Identity API endpoint. This endpoint should not be an "admin" endpoint, as it should be accessible by all end users. Unauthenticated clients are redirected to this endpoint to authenticate. Although this endpoint should ideally be unversioned, client support in the wild varies. If you're using a versioned v2 endpoint here, then this should not be the same endpoint the service user utilizes for validating tokens, because normal end users may not be able to reach that endpoint. This option is deprecated in favor of www_authenticate_uri and will be removed in the S release. WARNING: This option is deprecated for removal since Queens. Its value may be silently ignored in the future. Reason The auth_uri option is deprecated in favor of www_authenticate_uri and will be removed in the S release. auth_version Type string Default <None> API version of the Identity API endpoint. interface Type string Default admin Interface to use for the Identity API endpoint. Valid values are "public", "internal" or "admin"(default). delay_auth_decision Type boolean Default false Do not handle authorization requests within the middleware, but delegate the authorization decision to downstream WSGI components. http_connect_timeout Type integer Default <None> Request timeout value for communicating with Identity API server. http_request_max_retries Type integer Default 3 How many times are we trying to reconnect when communicating with Identity API Server. cache Type string Default <None> Request environment key where the Swift cache object is stored. When auth_token middleware is deployed with a Swift cache, use this option to have the middleware share a caching backend with swift. Otherwise, use the memcached_servers option instead. certfile Type string Default <None> Required if identity server requires client certificate keyfile Type string Default <None> Required if identity server requires client certificate cafile Type string Default <None> A PEM encoded Certificate Authority to use when verifying HTTPs connections. Defaults to system CAs. insecure Type boolean Default false Verify HTTPS connections. region_name Type string Default <None> The region in which the identity server can be found. memcached_servers Type list Default <None> Optionally specify a list of memcached server(s) to use for caching. If left undefined, tokens will instead be cached in-process. Deprecated Variations ┌───────────────────┬──────────────────┐ │Group │ Name │ ├───────────────────┼──────────────────┤ │keystone_authtoken │ memcache_servers │ └───────────────────┴──────────────────┘ token_cache_time Type integer Default 300 In order to prevent excessive effort spent validating tokens, the middleware caches previously-seen tokens for a configurable duration (in seconds). Set to -1 to disable caching completely. memcache_security_strategy Type string Default None Valid Values None, MAC, ENCRYPT (Optional) If defined, indicate whether token data should be authenticated or authenticated and encrypted. If MAC, token data is authenticated (with HMAC) in the cache. If ENCRYPT, token data is encrypted and authenticated in the cache. If the value is not one of these options or empty, auth_token will raise an exception on initialization. memcache_secret_key Type string Default <None> (Optional, mandatory if memcache_security_strategy is defined) This string is used for key derivation. memcache_pool_dead_retry Type integer Default 300 (Optional) Number of seconds memcached server is considered dead before it is tried again. memcache_pool_maxsize Type integer Default 10 (Optional) Maximum total number of open connections to every memcached server. memcache_pool_socket_timeout Type integer Default 3 (Optional) Socket timeout in seconds for communicating with a memcached server. memcache_pool_unused_timeout Type integer Default 60 (Optional) Number of seconds a connection to memcached is held unused in the pool before it is closed. memcache_pool_conn_get_timeout Type integer Default 10 (Optional) Number of seconds that an operation will wait to get a memcached client connection from the pool. memcache_use_advanced_pool Type boolean Default false (Optional) Use the advanced (eventlet safe) memcached client pool. The advanced pool will only work under python 2.x. include_service_catalog Type boolean Default true (Optional) Indicate whether to set the X-Service-Catalog header. If False, middleware will not ask for service catalog on token validation and will not set the X-Service-Catalog header. enforce_token_bind Type string Default permissive Used to control the use and type of token binding. Can be set to: "disabled" to not check token binding. "permissive" (default) to validate binding information if the bind type is of a form known to the server and ignore it if not. "strict" like "permissive" but if the bind type is unknown the token will be rejected. "required" any form of token binding is needed to be allowed. Finally the name of a binding method that must be present in tokens. service_token_roles Type list Default service A choice of roles that must be present in a service token. Service tokens are allowed to request that an expired token can be used and so this check should tightly control that only actual services should be sending this token. Roles here are applied as an ANY check so any role in this list must be present. For backwards compatibility reasons this currently only affects the allow_expired check. service_token_roles_required Type boolean Default false For backwards compatibility reasons we must let valid service tokens pass that don't pass the service_token_roles check as valid. Setting this true will become the default in a future release and should be enabled if possible. service_type Type string Default <None> The name or type of the service as it appears in the service catalog. This is used to validate tokens that have restricted access rules. auth_type Type unknown type Default <None> Authentication type to load Deprecated Variations ┌───────────────────┬─────────────┐ │Group │ Name │ ├───────────────────┼─────────────┤ │keystone_authtoken │ auth_plugin │ └───────────────────┴─────────────┘ auth_section Type unknown type Default <None> Config Section from which to load plugin specific options osapi_v1 extensions_blacklist Type list Default '' DEPRECATED This option is a list of all of the v2.1 API extensions to never load. However, it will be removed in the near future, after which the all the functionality that was previously in extensions will be part of the standard API, and thus always accessible. • Possible values: A list of strings, each being the alias of an extension that you do not wish to load. • Services that use this: masakari-api • Related options: enabled, extensions_whitelist Deprecated Variations ┌─────────┬──────────────────────┐ │Group │ Name │ ├─────────┼──────────────────────┤ │osapi_v1 │ extensions_blacklist │ └─────────┴──────────────────────┘ WARNING: This option is deprecated for removal. Its value may be silently ignored in the future. extensions_whitelist Type list Default '' DEPRECATED This is a list of extensions. If it is empty, then all extensions except those specified in the extensions_blacklist option will be loaded. If it is not empty, then only those extensions in this list will be loaded, provided that they are also not in the extensions_blacklist option. Once this deprecated option is removed, after which the all the functionality that was previously in extensions will be part of the standard API, and thus always accessible. • Possible values: A list of strings, each being the alias of an extension that you wish to load, or an empty list, which indicates that all extensions are to be run. • Services that use this: masakari-api • Related options: enabled, extensions_blacklist Deprecated Variations ┌─────────┬──────────────────────┐ │Group │ Name │ ├─────────┼──────────────────────┤ │osapi_v1 │ extensions_whitelist │ └─────────┴──────────────────────┘ WARNING: This option is deprecated for removal. Its value may be silently ignored in the future. project_id_regex Type string Default <None> DEPRECATED This option is a string representing a regular expression (regex) that matches the project_id as contained in URLs. If not set, it will match normal UUIDs created by keystone. • Possible values: A string representing any legal regular expression • Services that use this: masakari-api • Related options: None Deprecated Variations ┌─────────┬──────────────────┐ │Group │ Name │ ├─────────┼──────────────────┤ │osapi_v1 │ project_id_regex │ └─────────┴──────────────────┘ WARNING: This option is deprecated for removal. Its value may be silently ignored in the future. oslo_messaging_amqp container_name Type string Default <None> Name for the AMQP container. must be globally unique. Defaults to a generated UUID Deprecated Variations ┌──────┬────────────────┐ │Group │ Name │ ├──────┼────────────────┤ │amqp1 │ container_name │ └──────┴────────────────┘ idle_timeout Type integer Default 0 Timeout for inactive connections (in seconds) Deprecated Variations ┌──────┬──────────────┐ │Group │ Name │ ├──────┼──────────────┤ │amqp1 │ idle_timeout │ └──────┴──────────────┘ trace Type boolean Default false Debug: dump AMQP frames to stdout Deprecated Variations ┌──────┬───────┐ │Group │ Name │ ├──────┼───────┤ │amqp1 │ trace │ └──────┴───────┘ ssl Type boolean Default false Attempt to connect via SSL. If no other ssl-related parameters are given, it will use the system's CA-bundle to verify the server's certificate. ssl_ca_file Type string Default '' CA certificate PEM file used to verify the server's certificate Deprecated Variations ┌──────┬─────────────┐ │Group │ Name │ ├──────┼─────────────┤ │amqp1 │ ssl_ca_file │ └──────┴─────────────┘ ssl_cert_file Type string Default '' Self-identifying certificate PEM file for client authentication Deprecated Variations ┌──────┬───────────────┐ │Group │ Name │ ├──────┼───────────────┤ │amqp1 │ ssl_cert_file │ └──────┴───────────────┘ ssl_key_file Type string Default '' Private key PEM file used to sign ssl_cert_file certificate (optional) Deprecated Variations ┌──────┬──────────────┐ │Group │ Name │ ├──────┼──────────────┤ │amqp1 │ ssl_key_file │ └──────┴──────────────┘ ssl_key_password Type string Default <None> Password for decrypting ssl_key_file (if encrypted) Deprecated Variations ┌──────┬──────────────────┐ │Group │ Name │ ├──────┼──────────────────┤ │amqp1 │ ssl_key_password │ └──────┴──────────────────┘ ssl_verify_vhost Type boolean Default false By default SSL checks that the name in the server's certificate matches the hostname in the transport_url. In some configurations it may be preferable to use the virtual hostname instead, for example if the server uses the Server Name Indication TLS extension (rfc6066) to provide a certificate per virtual host. Set ssl_verify_vhost to True if the server's SSL certificate uses the virtual host name instead of the DNS name. sasl_mechanisms Type string Default '' Space separated list of acceptable SASL mechanisms Deprecated Variations ┌──────┬─────────────────┐ │Group │ Name │ ├──────┼─────────────────┤ │amqp1 │ sasl_mechanisms │ └──────┴─────────────────┘ sasl_config_dir Type string Default '' Path to directory that contains the SASL configuration Deprecated Variations ┌──────┬─────────────────┐ │Group │ Name │ ├──────┼─────────────────┤ │amqp1 │ sasl_config_dir │ └──────┴─────────────────┘ sasl_config_name Type string Default '' Name of configuration file (without .conf suffix) Deprecated Variations ┌──────┬──────────────────┐ │Group │ Name │ ├──────┼──────────────────┤ │amqp1 │ sasl_config_name │ └──────┴──────────────────┘ sasl_default_realm Type string Default '' SASL realm to use if no realm present in username connection_retry_interval Type integer Default 1 Minimum Value 1 Seconds to pause before attempting to re-connect. connection_retry_backoff Type integer Default 2 Minimum Value 0 Increase the connection_retry_interval by this many seconds after each unsuccessful failover attempt. connection_retry_interval_max Type integer Default 30 Minimum Value 1 Maximum limit for connection_retry_interval + connection_retry_backoff link_retry_delay Type integer Default 10 Minimum Value 1 Time to pause between re-connecting an AMQP 1.0 link that failed due to a recoverable error. default_reply_retry Type integer Default 0 Minimum Value -1 The maximum number of attempts to re-send a reply message which failed due to a recoverable error. default_reply_timeout Type integer Default 30 Minimum Value 5 The deadline for an rpc reply message delivery. default_send_timeout Type integer Default 30 Minimum Value 5 The deadline for an rpc cast or call message delivery. Only used when caller does not provide a timeout expiry. default_notify_timeout Type integer Default 30 Minimum Value 5 The deadline for a sent notification message delivery. Only used when caller does not provide a timeout expiry. default_sender_link_timeout Type integer Default 600 Minimum Value 1 The duration to schedule a purge of idle sender links. Detach link after expiry. addressing_mode Type string Default dynamic Indicates the addressing mode used by the driver. Permitted values: 'legacy' - use legacy non-routable addressing 'routable' - use routable addresses 'dynamic' - use legacy addresses if the message bus does not support routing otherwise use routable addressing pseudo_vhost Type boolean Default true Enable virtual host support for those message buses that do not natively support virtual hosting (such as qpidd). When set to true the virtual host name will be added to all message bus addresses, effectively creating a private 'subnet' per virtual host. Set to False if the message bus supports virtual hosting using the 'hostname' field in the AMQP 1.0 Open performative as the name of the virtual host. server_request_prefix Type string Default exclusive address prefix used when sending to a specific server Deprecated Variations ┌──────┬───────────────────────┐ │Group │ Name │ ├──────┼───────────────────────┤ │amqp1 │ server_request_prefix │ └──────┴───────────────────────┘ broadcast_prefix Type string Default broadcast address prefix used when broadcasting to all servers Deprecated Variations ┌──────┬──────────────────┐ │Group │ Name │ ├──────┼──────────────────┤ │amqp1 │ broadcast_prefix │ └──────┴──────────────────┘ group_request_prefix Type string Default unicast address prefix when sending to any server in group Deprecated Variations ┌──────┬──────────────────────┐ │Group │ Name │ ├──────┼──────────────────────┤ │amqp1 │ group_request_prefix │ └──────┴──────────────────────┘ rpc_address_prefix Type string Default openstack.org/om/rpc Address prefix for all generated RPC addresses notify_address_prefix Type string Default openstack.org/om/notify Address prefix for all generated Notification addresses multicast_address Type string Default multicast Appended to the address prefix when sending a fanout message. Used by the message bus to identify fanout messages. unicast_address Type string Default unicast Appended to the address prefix when sending to a particular RPC/Notification server. Used by the message bus to identify messages sent to a single destination. anycast_address Type string Default anycast Appended to the address prefix when sending to a group of consumers. Used by the message bus to identify messages that should be delivered in a round-robin fashion across consumers. default_notification_exchange Type string Default <None> Exchange name used in notification addresses. Exchange name resolution precedence: Target.exchange if set else default_notification_exchange if set else control_exchange if set else 'notify' default_rpc_exchange Type string Default <None> Exchange name used in RPC addresses. Exchange name resolution precedence: Target.exchange if set else default_rpc_exchange if set else control_exchange if set else 'rpc' reply_link_credit Type integer Default 200 Minimum Value 1 Window size for incoming RPC Reply messages. rpc_server_credit Type integer Default 100 Minimum Value 1 Window size for incoming RPC Request messages notify_server_credit Type integer Default 100 Minimum Value 1 Window size for incoming Notification messages pre_settled Type multi-valued Default rpc-cast Default rpc-reply Send messages of this type pre-settled. Pre-settled messages will not receive acknowledgement from the peer. Note well: pre-settled messages may be silently discarded if the delivery fails. Permitted values: 'rpc-call' - send RPC Calls pre-settled 'rpc-reply'- send RPC Replies pre-settled 'rpc-cast' - Send RPC Casts pre-settled 'notify' - Send Notifications pre-settled oslo_messaging_kafka kafka_max_fetch_bytes Type integer Default 1048576 Max fetch bytes of Kafka consumer kafka_consumer_timeout Type floating point Default 1.0 Default timeout(s) for Kafka consumers pool_size Type integer Default 10 Pool Size for Kafka Consumers WARNING: This option is deprecated for removal. Its value may be silently ignored in the future. Reason Driver no longer uses connection pool. conn_pool_min_size Type integer Default 2 The pool size limit for connections expiration policy WARNING: This option is deprecated for removal. Its value may be silently ignored in the future. Reason Driver no longer uses connection pool. conn_pool_ttl Type integer Default 1200 The time-to-live in sec of idle connections in the pool WARNING: This option is deprecated for removal. Its value may be silently ignored in the future. Reason Driver no longer uses connection pool. consumer_group Type string Default oslo_messaging_consumer Group id for Kafka consumer. Consumers in one group will coordinate message consumption producer_batch_timeout Type floating point Default 0.0 Upper bound on the delay for KafkaProducer batching in seconds producer_batch_size Type integer Default 16384 Size of batch for the producer async send compression_codec Type string Default none Valid Values none, gzip, snappy, lz4, zstd The compression codec for all data generated by the producer. If not set, compression will not be used. Note that the allowed values of this depend on the kafka version enable_auto_commit Type boolean Default false Enable asynchronous consumer commits max_poll_records Type integer Default 500 The maximum number of records returned in a poll call security_protocol Type string Default PLAINTEXT Valid Values PLAINTEXT, SASL_PLAINTEXT, SSL, SASL_SSL Protocol used to communicate with brokers sasl_mechanism Type string Default PLAIN Mechanism when security protocol is SASL ssl_cafile Type string Default '' CA certificate PEM file used to verify the server certificate ssl_client_cert_file Type string Default '' Client certificate PEM file used for authentication. ssl_client_key_file Type string Default '' Client key PEM file used for authentication. ssl_client_key_password Type string Default '' Client key password file used for authentication. oslo_messaging_notifications driver Type multi-valued Default '' The Drivers(s) to handle sending notifications. Possible values are messaging, messagingv2, routing, log, test, noop Deprecated Variations ┌────────┬─────────────────────┐ │Group │ Name │ ├────────┼─────────────────────┤ │DEFAULT │ notification_driver │ └────────┴─────────────────────┘ transport_url Type string Default <None> A URL representing the messaging driver to use for notifications. If not set, we fall back to the same configuration used for RPC. Deprecated Variations ┌────────┬────────────────────────────┐ │Group │ Name │ └────────┴────────────────────────────┘ │DEFAULT │ notification_transport_url │ └────────┴────────────────────────────┘ topics Type list Default notifications AMQP topic used for OpenStack notifications. Deprecated Variations ┌──────────────┬─────────────────────┐ │Group │ Name │ ├──────────────┼─────────────────────┤ │rpc_notifier2 │ topics │ ├──────────────┼─────────────────────┤ │DEFAULT │ notification_topics │ └──────────────┴─────────────────────┘ retry Type integer Default -1 The maximum number of attempts to re-send a notification message which failed to be delivered due to a recoverable error. 0 - No retry, -1 - indefinite oslo_messaging_rabbit amqp_durable_queues Type boolean Default false Use durable queues in AMQP. amqp_auto_delete Type boolean Default false Auto-delete queues in AMQP. Deprecated Variations ┌────────┬──────────────────┐ │Group │ Name │ ├────────┼──────────────────┤ │DEFAULT │ amqp_auto_delete │ └────────┴──────────────────┘ ssl Type boolean Default false Connect over SSL. Deprecated Variations ┌──────────────────────┬────────────────┐ │Group │ Name │ ├──────────────────────┼────────────────┤ │oslo_messaging_rabbit │ rabbit_use_ssl │ └──────────────────────┴────────────────┘ ssl_version Type string Default '' SSL version to use (valid only if SSL enabled). Valid values are TLSv1 and SSLv23. SSLv2, SSLv3, TLSv1_1, and TLSv1_2 may be available on some distributions. Deprecated Variations ┌──────────────────────┬───────────────────┐ │Group │ Name │ ├──────────────────────┼───────────────────┤ │oslo_messaging_rabbit │ kombu_ssl_version │ └──────────────────────┴───────────────────┘ ssl_key_file Type string Default '' SSL key file (valid only if SSL enabled). Deprecated Variations ┌──────────────────────┬───────────────────┐ │Group │ Name │ ├──────────────────────┼───────────────────┤ │oslo_messaging_rabbit │ kombu_ssl_keyfile │ └──────────────────────┴───────────────────┘ ssl_cert_file Type string Default '' SSL cert file (valid only if SSL enabled). Deprecated Variations ┌──────────────────────┬────────────────────┐ │Group │ Name │ ├──────────────────────┼────────────────────┤ │oslo_messaging_rabbit │ kombu_ssl_certfile │ └──────────────────────┴────────────────────┘ ssl_ca_file Type string Default '' SSL certification authority file (valid only if SSL enabled). Deprecated Variations ┌──────────────────────┬────────────────────┐ │Group │ Name │ ├──────────────────────┼────────────────────┤ │oslo_messaging_rabbit │ kombu_ssl_ca_certs │ └──────────────────────┴────────────────────┘ heartbeat_in_pthread Type boolean Default false EXPERIMENTAL: Run the health check heartbeat thread through a native python thread. By default if this option isn't provided the health check heartbeat will inherit the execution model from the parent process. By example if the parent process have monkey patched the stdlib by using eventlet/greenlet then the heartbeat will be run through a green thread. kombu_reconnect_delay Type floating point Default 1.0 How long to wait before reconnecting in response to an AMQP consumer cancel notification. Deprecated Variations ┌────────┬───────────────────────┐ │Group │ Name │ ├────────┼───────────────────────┤ │DEFAULT │ kombu_reconnect_delay │ └────────┴───────────────────────┘ kombu_compression Type string Default <None> EXPERIMENTAL: Possible values are: gzip, bz2. If not set compression will not be used. This option may not be available in future versions. kombu_missing_consumer_retry_timeout Type integer Default 60 How long to wait a missing client before abandoning to send it its replies. This value should not be longer than rpc_response_timeout. Deprecated Variations ┌──────────────────────┬─────────────────────────┐ │Group │ Name │ ├──────────────────────┼─────────────────────────┤ │oslo_messaging_rabbit │ kombu_reconnect_timeout │ └──────────────────────┴─────────────────────────┘ kombu_failover_strategy Type string Default round-robin Valid Values round-robin, shuffle Determines how the next RabbitMQ node is chosen in case the one we are currently connected to becomes unavailable. Takes effect only if more than one RabbitMQ node is provided in config. rabbit_login_method Type string Default AMQPLAIN Valid Values PLAIN, AMQPLAIN, RABBIT-CR-DEMO The RabbitMQ login method. Deprecated Variations ┌────────┬─────────────────────┐ │Group │ Name │ ├────────┼─────────────────────┤ │DEFAULT │ rabbit_login_method │ └────────┴─────────────────────┘ rabbit_retry_interval Type integer Default 1 How frequently to retry connecting with RabbitMQ. rabbit_retry_backoff Type integer Default 2 How long to backoff for between retries when connecting to RabbitMQ. Deprecated Variations ┌────────┬──────────────────────┐ │Group │ Name │ ├────────┼──────────────────────┤ │DEFAULT │ rabbit_retry_backoff │ └────────┴──────────────────────┘ rabbit_interval_max Type integer Default 30 Maximum interval of RabbitMQ connection retries. Default is 30 seconds. rabbit_ha_queues Type boolean Default false Try to use HA queues in RabbitMQ (x-ha-policy: all). If you change this option, you must wipe the RabbitMQ database. In RabbitMQ 3.0, queue mirroring is no longer controlled by the x-ha-policy argument when declaring a queue. If you just want to make sure that all queues (except those with auto-generated names) are mirrored across all nodes, run: "rabbitmqctl set_policy HA '^(?!amq.).*' '{"ha-mode": "all"}' " Deprecated Variations ┌────────┬──────────────────┐ │Group │ Name │ ├────────┼──────────────────┤ │DEFAULT │ rabbit_ha_queues │ └────────┴──────────────────┘ rabbit_transient_queues_ttl Type integer Default 1800 Minimum Value 1 Positive integer representing duration in seconds for queue TTL (x-expires). Queues which are unused for the duration of the TTL are automatically deleted. The parameter affects only reply and fanout queues. rabbit_qos_prefetch_count Type integer Default 0 Specifies the number of messages to prefetch. Setting to zero allows unlimited messages. heartbeat_timeout_threshold Type integer Default 60 Number of seconds after which the Rabbit broker is considered down if heartbeat's keep-alive fails (0 disables heartbeat). heartbeat_rate Type integer Default 2 How often times during the heartbeat_timeout_threshold we check the heartbeat. direct_mandatory_flag Type integer Default True Enable/Disable the RabbitMQ mandatory flag for direct send. The direct send is used as reply, so the MessageUndeliverable exception is raised in case the client queue does not exist. oslo_middleware max_request_body_size Type integer Default 114688 The maximum body size for each request, in bytes. Deprecated Variations ┌────────┬─────────────────────────────┐ │Group │ Name │ ├────────┼─────────────────────────────┤ │DEFAULT │ osapi_max_request_body_size │ ├────────┼─────────────────────────────┤ │DEFAULT │ max_request_body_size │ └────────┴─────────────────────────────┘ secure_proxy_ssl_header Type string Default X-Forwarded-Proto The HTTP Header that will be used to determine what the original request protocol scheme was, even if it was hidden by a SSL termination proxy. WARNING: This option is deprecated for removal. Its value may be silently ignored in the future. enable_proxy_headers_parsing Type boolean Default false Whether the application is behind a proxy or not. This determines if the middleware should parse the headers or not. oslo_policy enforce_scope Type boolean Default false This option controls whether or not to enforce scope when evaluating policies. If True, the scope of the token used in the request is compared to the scope_types of the policy being enforced. If the scopes do not match, an InvalidScope exception will be raised. If False, a message will be logged informing operators that policies are being invoked with mismatching scope. enforce_new_defaults Type boolean Default false This option controls whether or not to use old deprecated defaults when evaluating policies. If True, the old deprecated defaults are not going to be evaluated. This means if any existing token is allowed for old defaults but is disallowed for new defaults, it will be disallowed. It is encouraged to enable this flag along with the enforce_scope flag so that you can get the benefits of new defaults and scope_type together policy_file Type string Default policy.json The relative or absolute path of a file that maps roles to permissions for a given service. Relative paths must be specified in relation to the configuration file setting this option. Deprecated Variations ┌────────┬─────────────┐ │Group │ Name │ ├────────┼─────────────┤ │DEFAULT │ policy_file │ └────────┴─────────────┘ policy_default_rule Type string Default default Default rule. Enforced when a requested rule is not found. Deprecated Variations ┌────────┬─────────────────────┐ │Group │ Name │ ├────────┼─────────────────────┤ │DEFAULT │ policy_default_rule │ └────────┴─────────────────────┘ policy_dirs Type multi-valued Default policy.d Directories where policy configuration files are stored. They can be relative to any directory in the search path defined by the config_dir option, or absolute paths. The file defined by policy_file must exist for these directories to be searched. Missing or empty directories are ignored. Deprecated Variations ┌────────┬─────────────┐ │Group │ Name │ ├────────┼─────────────┤ │DEFAULT │ policy_dirs │ └────────┴─────────────┘ remote_content_type Type string Default application/x-www-form-urlencoded Valid Values application/x-www-form-urlencoded, application/json Content Type to send and receive data for REST based policy check remote_ssl_verify_server_crt Type boolean Default false server identity verification for REST based policy check remote_ssl_ca_crt_file Type string Default <None> Absolute path to ca cert file for REST based policy check remote_ssl_client_crt_file Type string Default <None> Absolute path to client cert for REST based policy check remote_ssl_client_key_file Type string Default <None> Absolute path client key file REST based policy check oslo_versionedobjects fatal_exception_format_errors Type boolean Default false Make exception message format errors fatal ssl ca_file Type string Default <None> CA certificate file to use to verify connecting clients. Deprecated Variations ┌────────┬─────────────┐ │Group │ Name │ ├────────┼─────────────┤ │DEFAULT │ ssl_ca_file │ └────────┴─────────────┘ cert_file Type string Default <None> Certificate file to use when starting the server securely. Deprecated Variations ┌────────┬───────────────┐ │Group │ Name │ ├────────┼───────────────┤ │DEFAULT │ ssl_cert_file │ └────────┴───────────────┘ key_file Type string Default <None> Private key file to use when starting the server securely. Deprecated Variations ┌────────┬──────────────┐ │Group │ Name │ ├────────┼──────────────┤ │DEFAULT │ ssl_key_file │ └────────┴──────────────┘ version Type string Default <None> SSL version to use (valid only if SSL enabled). Valid values are TLSv1 and SSLv23. SSLv2, SSLv3, TLSv1_1, and TLSv1_2 may be available on some distributions. ciphers Type string Default <None> Sets the list of available ciphers. value should be a string in the OpenSSL cipher list format. taskflow connection Type string Default <None> The SQLAlchemy connection string to use to connect to the taskflow database. wsgi api_paste_config Type string Default api-paste.ini File name for the paste.deploy config for masakari-api Deprecated Variations ┌────────┬──────────────────┐ │Group │ Name │ ├────────┼──────────────────┤ │DEFAULT │ api_paste_config │ └────────┴──────────────────┘ wsgi_log_format Type string Default %(client_ip)s "%(request_line)s" status: %(status_code)s len: %(body_length)s time: %(wall_seconds).7f A python format string that is used as the template to generate log lines. The following values can be formatted into it: client_ip, date_time, request_line, status_code, body_length, wall_seconds. Deprecated Variations ┌────────┬─────────────────┐ │Group │ Name │ ├────────┼─────────────────┤ │DEFAULT │ wsgi_log_format │ └────────┴─────────────────┘ secure_proxy_ssl_header Type string Default <None> The HTTP header used to determine the scheme for the original request, even if it was removed by an SSL terminating proxy. Typical value is "HTTP_X_FORWARDED_PROTO". Deprecated Variations ┌────────┬─────────────────────────┐ │Group │ Name │ ├────────┼─────────────────────────┤ │DEFAULT │ secure_proxy_ssl_header │ └────────┴─────────────────────────┘ ssl_ca_file Type string Default <None> CA certificate file to use to verify connecting clients Deprecated Variations ┌────────┬─────────────┐ │Group │ Name │ ├────────┼─────────────┤ │DEFAULT │ ssl_ca_file │ └────────┴─────────────┘ ssl_cert_file Type string Default <None> SSL certificate of API server Deprecated Variations ┌────────┬───────────────┐ │Group │ Name │ ├────────┼───────────────┤ │DEFAULT │ ssl_cert_file │ └────────┴───────────────┘ ssl_key_file Type string Default <None> SSL private key of API server Deprecated Variations ┌────────┬──────────────┐ │Group │ Name │ ├────────┼──────────────┤ │DEFAULT │ ssl_key_file │ └────────┴──────────────┘ tcp_keepidle Type integer Default 600 Sets the value of TCP_KEEPIDLE in seconds for each server socket. Not supported on OS X. Deprecated Variations ┌────────┬──────────────┐ │Group │ Name │ ├────────┼──────────────┤ │DEFAULT │ tcp_keepidle │ └────────┴──────────────┘ default_pool_size Type integer Default 1000 Size of the pool of greenthreads used by wsgi Deprecated Variations ┌────────┬────────────────────────┐ │Group │ Name │ ├────────┼────────────────────────┤ │DEFAULT │ wsgi_default_pool_size │ └────────┴────────────────────────┘ max_header_line Type integer Default 16384 Maximum line size of message headers to be accepted. max_header_line may need to be increased when using large tokens (typically those generated by the Keystone v3 API with big service catalogs). Deprecated Variations ┌────────┬─────────────────┐ │Group │ Name │ ├────────┼─────────────────┤ │DEFAULT │ max_header_line │ └────────┴─────────────────┘ keep_alive Type boolean Default true If False, closes the client socket connection explicitly. Deprecated Variations ┌────────┬─────────────────┐ │Group │ Name │ ├────────┼─────────────────┤ │DEFAULT │ wsgi_keep_alive │ └────────┴─────────────────┘ client_socket_timeout Type integer Default 900 Timeout for client connections' socket operations. If an incoming connection is idle for this number of seconds it will be closed. A value of '0' means wait forever. Deprecated Variations ┌────────┬───────────────────────┐ │Group │ Name │ ├────────┼───────────────────────┤ │DEFAULT │ client_socket_timeout │ └────────┴───────────────────────┘ Configuration Guide The configuration for masakari lies in below described files. Configuration Masakari has two main config files: masakari.conf and recovery_workflow_sample_config.conf. • Config Reference: A complete reference of all config points in masakari and what they impact. • Sample Config File: A sample config file with inline documentation. • Recovery Config Reference: A complete reference of all config points in masakari and what they impact. • Sample recovery workflow File: A complete reference of defining the monitoring processes. Policy Masakari, like most OpenStack projects, uses a policy language to restrict permissions on REST API actions. • Policy Reference: A complete reference of all policy points in masakari and what they impact. • Sample policy File: A sample policy file with inline documentation. API configuration settings • API configuration: A complete reference of API configuration settings. Masakari Policies The following is an overview of all available policies in masakari. For a sample configuration file, refer to sample_policy. masakari context_is_admin Default role:admin Decides what is required for the 'is_admin:True' check to succeed. admin_or_owner Default is_admin:True or project_id:%(project_id)s Default rule for most non-Admin APIs. admin_api Default is_admin:True Default rule for most Admin APIs. os_masakari_api:extensions:index Default rule:admin_api Operations • GET /extensions List available extensions. os_masakari_api:extensions:detail Default rule:admin_api Operations • GET /extensions/{extensions_id} Shows information for an extension. os_masakari_api:extensions:discoverable Default rule:admin_api Extension Info API extensions to change the API. os_masakari_api:os-hosts:index Default rule:admin_api Operations • GET /segments/{segment_id}/hosts Lists IDs, names, type, reserved, on_maintenance for all hosts. os_masakari_api:os-hosts:detail Default rule:admin_api Operations • GET /segments/{segment_id}/hosts/{host_id} Shows details for a host. os_masakari_api:os-hosts:create Default rule:admin_api Operations • POST /segments/{segment_id}/hosts Creates a host under given segment. os_masakari_api:os-hosts:update Default rule:admin_api Operations • PUT /segments/{segment_id}/hosts/{host_id} Updates the editable attributes of an existing host. os_masakari_api:os-hosts:delete Default rule:admin_api Operations • DELETE /segments/{segment_id}/hosts/{host_id} Deletes a host from given segment. os_masakari_api:os-hosts:discoverable Default rule:admin_api Host API extensions to change the API. os_masakari_api:notifications:index Default rule:admin_api Operations • GET /notifications Lists IDs, notification types, host_name, generated_time, payload and status for all notifications. os_masakari_api:notifications:detail Default rule:admin_api Operations • GET /notifications/{notification_id} Shows details for a notification. os_masakari_api:notifications:create Default rule:admin_api Operations • POST /notifications Creates a notification. os_masakari_api:notifications:discoverable Default rule:admin_api Notification API extensions to change the API. os_masakari_api:segments:index Default rule:admin_api Operations • GET /segments Lists IDs, names, description, recovery_method, service_type for all segments. os_masakari_api:segments:detail Default rule:admin_api Operations • GET /segments/{segment_id} Shows details for a segment. os_masakari_api:segments:create Default rule:admin_api Operations • POST /segments Creates a segment. os_masakari_api:segments:update Default rule:admin_api Operations • PUT /segments/{segment_id} Updates the editable attributes of an existing host. os_masakari_api:segments:delete Default rule:admin_api Operations • DELETE /segments/{segment_id} Deletes a segment. os_masakari_api:segments:discoverable Default rule:admin_api Segment API extensions to change the API. os_masakari_api:versions:index Default @ Operations • GET / List all versions. os_masakari_api:versions:discoverable Default @ Version API extensions to change the API. Configuration Options The following is an overview of all available configuration options in Masakari. For a sample configuration file, refer to recovery_workflow_sample_config. taskflow_driver_recovery_flows host_auto_failure_recovery_tasks Type unknown type Default {'pre': ['disable_compute_service_task'], 'main': ['prepare_HA_enabled_instances_task'], 'post': ['evacuate_instances_task']} This option allows operator to customize tasks to be executed for host failure auto recovery workflow. Provide list of strings reflecting to the task classes that should be included to the host failure recovery workflow. The full classname path of all task classes should be defined in the 'masakari.task_flow.tasks' of setup.cfg and these classes may be implemented by OpenStack Masaskari project team, deployer or third party. By default below three tasks will be part of this config option:- 1. disable_compute_service_task 2. prepare_HA_enabled_instances_task 3. evacuate_instances_task The allowed values for this option is comma separated dictionary of object names in between { and }. host_rh_failure_recovery_tasks Type unknown type Default {'pre': ['disable_compute_service_task'], 'main': ['prepare_HA_enabled_instances_task', 'evacuate_instances_task'], 'post': []} This option allows operator to customize tasks to be executed for host failure reserved_host recovery workflow. Provide list of strings reflecting to the task classes that should be included to the host failure recovery workflow. The full classname path of all task classes should be defined in the 'masakari.task_flow.tasks' of setup.cfg and these classes may be implemented by OpenStack Masaskari project team, deployer or third party. By default below three tasks will be part of this config option:- 1. disable_compute_service_task 2. prepare_HA_enabled_instances_task 3. evacuate_instances_task The allowed values for this option is comma separated dictionary of object names in between { and }. instance_failure_recovery_tasks Type unknown type Default {'pre': ['stop_instance_task'], 'main': ['start_instance_task'], 'post': ['confirm_instance_active_task']} This option allows operator to customize tasks to be executed for instance failure recovery workflow. Provide list of strings reflecting to the task classes that should be included to the instance failure recovery workflow. The full classname path of all task classes should be defined in the 'masakari.task_flow.tasks' of setup.cfg and these classes may be implemented by OpenStack Masaskari project team, deployer or third party. By default below three tasks will be part of this config option:- 1. stop_instance_task 2. start_instance_task 3. confirm_instance_active_task The allowed values for this option is comma separated dictionary of object names in between { and }. process_failure_recovery_tasks Type unknown type Default {'pre': ['disable_compute_node_task'], 'main': ['confirm_compute_node_disabled_task'], 'post': []} This option allows operator to customize tasks to be executed for process failure recovery workflow. Provide list of strings reflecting to the task classes that should be included to the process failure recovery workflow. The full classname path of all task classes should be defined in the 'masakari.task_flow.tasks' of setup.cfg and these classes may be implemented by OpenStack Masaskari project team, deployer or third party. By default below two tasks will be part of this config option:- 1. disable_compute_node_task 2. confirm_compute_node_disabled_task The allowed values for this option is comma separated dictionary of object names in between { and }. Guide for Custom Recovery Workflow Configuration If operator wants customized recovery workflow, so here is guidelines mentioned for how to associate custom tasks from Third Party Library along with standard recovery workflows in Masakari.: 1. First make sure required Third Party Library is installed on the Masakari engine node. Below is the sample custom task file. For example: from oslo_log import log as logging from taskflow import task LOG = logging.getLogger(__name__) class Noop(task.Task): def __init__(self, novaclient): self.novaclient = novaclient super(Noop, self).__init__() def execute(self, **kwargs): LOG.info("Custom task executed successfully..!!") return 1. Configure custom task in Third Party Library's setup.cfg as below: For example, Third Party Library's setup.cfg will have following entry points masakari.task_flow.tasks = custom_pre_task = <custom_task_class_path_from_third_party_library> custom_main_task = <custom_task_class_path_from_third_party_library> custom_post_task = <custom_task_class_path_from_third_party_library> Note: Entry point in Third Party Library's setup.cfg should have same key as in Masakari setup.cfg for respective failure recovery. 1. Configure custom task in Masakari's new conf file custom-recovery-methods.conf with same name which was given in the setup.cfg to locate class path. For example(custom task added in host auto failure config option): host_auto_failure_recovery_tasks = { 'pre': ['disable_compute_service_task', 'custom_pre_task'], 'main': ['custom_main_task', 'prepare_HA_enabled_instances_task'], 'post': ['evacuate_instances_task', 'custom_post_task']} 1. If there are any configuration parameters required for custom task, then add them into custom-recovery-methods.conf under the same group/section where they are registered in Third Party Library. All config parameters related to recovery method customization should be part of newly added conf file. Operator will be responsible to generate masakari.conf and related configuration files by themselves. 2. Operator should ensure output of each task should be made available to the next tasks needing them. Masakari Customized Recovery Workflow Configuration Options masakari-custom-recovery-methods.conf.sample The following is a sample Masakari recovery workflow configuration for adaptation and use. The sample configuration can also be downloaded from here. [DEFAULT] [taskflow_driver_recovery_flows] # # From customized_recovery_flow_opts # # # This option allows operator to customize tasks to be executed for host failure # auto recovery workflow. # # Provide list of strings reflecting to the task classes that should be included # to the host failure recovery workflow. The full classname path of all task # classes should be defined in the 'masakari.task_flow.tasks' of setup.cfg and # these classes may be implemented by OpenStack Masaskari project team, deployer # or third party. # # By default below three tasks will be part of this config option:- # 1. disable_compute_service_task # 2. prepare_HA_enabled_instances_task # 3. evacuate_instances_task # # The allowed values for this option is comma separated dictionary of object # names in between ``{`` and ``}``. (dict value) #host_auto_failure_recovery_tasks = main:['prepare_HA_enabled_instances_task'],post:['evacuate_instances_task'],pre:['disable_compute_service_task'] # # This option allows operator to customize tasks to be executed for host failure # reserved_host recovery workflow. # # Provide list of strings reflecting to the task classes that should be included # to the host failure recovery workflow. The full classname path of all task # classes should be defined in the 'masakari.task_flow.tasks' of setup.cfg and # these classes may be implemented by OpenStack Masaskari project team, deployer # or third party. # # By default below three tasks will be part of this config option:- # 1. disable_compute_service_task # 2. prepare_HA_enabled_instances_task # 3. evacuate_instances_task # # The allowed values for this option is comma separated dictionary of object # names in between ``{`` and ``}``. (dict value) #host_rh_failure_recovery_tasks = main:['prepare_HA_enabled_instances_task', 'evacuate_instances_task'],post:[],pre:['disable_compute_service_task'] # # This option allows operator to customize tasks to be executed for instance # failure recovery workflow. # # Provide list of strings reflecting to the task classes that should be included # to the instance failure recovery workflow. The full classname path of all task # classes should be defined in the 'masakari.task_flow.tasks' of setup.cfg and # these classes may be implemented by OpenStack Masaskari project team, deployer # or third party. # # By default below three tasks will be part of this config option:- # 1. stop_instance_task # 2. start_instance_task # 3. confirm_instance_active_task # # The allowed values for this option is comma separated dictionary of object # names in between ``{`` and ``}``. (dict value) #instance_failure_recovery_tasks = main:['start_instance_task'],post:['confirm_instance_active_task'],pre:['stop_instance_task'] # # This option allows operator to customize tasks to be executed for process # failure recovery workflow. # # Provide list of strings reflecting to the task classes that should be included # to the process failure recovery workflow. The full classname path of all task # classes should be defined in the 'masakari.task_flow.tasks' of setup.cfg and # these classes may be implemented by OpenStack Masaskari project team, deployer # or third party. # # By default below two tasks will be part of this config option:- # 1. disable_compute_node_task # 2. confirm_compute_node_disabled_task # # The allowed values for this option is comma separated dictionary of object # names in between ``{`` and ``}``. (dict value) #process_failure_recovery_tasks = main:['confirm_compute_node_disabled_task'],post:[],pre:['disable_compute_node_task'] Masakari Configuration Options The following is a sample Masakari configuration for adaptation and use. It is auto-generated from Masakari when this documentation is built, so if you are having issues with an option, please compare your version of Masakari with the version of this documentation. The sample configuration can also be downloaded from here. [DEFAULT] # # From masakari.conf # # # This determines the strategy to use for authentication: keystone or noauth2. # 'noauth2' is designed for testing only, as it does no actual credential # checking. 'noauth2' provides administrative credentials only if 'admin' is # specified as the username. # # * Possible values: # # Either 'keystone' (default) or 'noauth2'. # # * Services that use this: # # ``masakari-api`` # # * Related options: # # None # (string value) # Possible values: # keystone - <No description provided> # noauth2 - <No description provided> #auth_strategy = keystone # # When True, the 'X-Forwarded-For' header is treated as the canonical remote # address. When False (the default), the 'remote_address' header is used. # # You should only enable this if you have an HTML sanitizing proxy. # # * Possible values: # # True, False (default) # # * Services that use this: # # ``masakari-api`` # # * Related options: # # None # (boolean value) #use_forwarded_for = false # # As a query can potentially return many thousands of items, you can limit the # maximum number of items in a single response by setting this option. # # * Possible values: # # Any positive integer. Default is 1000. # # * Services that use this: # # ``masakari-api`` # # * Related options: # # None # (integer value) #osapi_max_limit = 1000 # # This string is prepended to the normal URL that is returned in links to the # OpenStack Masakari API. If it is empty (the default), the URLs are returned # unchanged. # # * Possible values: # # Any string, including an empty string (the default). # # * Services that use this: # # ``masakari-api`` # # * Related options: # # None # (string value) #osapi_masakari_link_prefix = <None> # Explicitly specify the temporary working directory. (string value) #tempdir = <None> # # Determine if monkey patching should be applied. # # Related options: # # * ``monkey_patch_modules``: This must have values set for this option to # have # any effect # (boolean value) #monkey_patch = false # # List of modules/decorators to monkey patch. # # This option allows you to patch a decorator for all functions in specified # modules. # # Related options: # # * ``monkey_patch``: This must be set to ``True`` for this option to # have any effect # (list value) #monkey_patch_modules = masakari.api:masakari.cmd # DEPRECATED: # This is the message queue topic that the masakari engine 'listens' on. It is # used when the masakari engine is started up to configure the queue, and # whenever an RPC call to the masakari engine is made. # # * Possible values: # # Any string, but there is almost never any reason to ever change this value # from its default of 'engine'. # # * Services that use this: # # ``masakari-engine`` # # * Related options: # # None # (string value) # This option is deprecated for removal since 3.0.0. # Its value may be silently ignored in the future. # Reason: # Configurable RPC topic provides little value and it can easily break # Masakari if operator configures it to the same topic used by other OpenStack # services. #masakari_topic = ha_engine # Interval in seconds for identifying duplicate notifications. If the # notification received is identical to the previous ones whose status is either # new or running and if it's created_timestamp and the current timestamp is less # than this config option value, then the notification will be considered as # duplicate and it will be ignored. (integer value) # Minimum value: 0 #duplicate_notification_detection_interval = 180 # Number of seconds to wait after a service is enabled or disabled. (integer # value) #wait_period_after_service_update = 180 # Wait until instance is evacuated (integer value) #wait_period_after_evacuation = 90 # The monitoring interval for looping (integer value) #verify_interval = 1 # Number of seconds to wait for instance to shut down (integer value) #wait_period_after_power_off = 180 # Number of seconds to wait for instance to start (integer value) #wait_period_after_power_on = 60 # Interval in seconds for processing notifications which are in error or new # state. (integer value) #process_unfinished_notifications_interval = 120 # Interval in seconds for identifying notifications which are in new state. If # the notification is in new state till this config option value after it's # generated_time, then it is considered that notification is ignored by the # messaging queue and will be processed by 'process_unfinished_notifications' # periodic task. (integer value) # Note: This option can be changed without restarting. #retry_notification_new_status_interval = 60 # Interval in seconds for checking running notifications. (integer value) #check_expired_notifications_interval = 600 # Interval in seconds for identifying running notifications expired. (integer # value) #notifications_expired_interval = 86400 # Number of threads to be used for evacuating and confirming instances during # execution of host_failure workflow. (integer value) # Minimum value: 1 #host_failure_recovery_threads = 3 # # Defines which driver to use for executing notification workflows. # (string value) #notification_driver = taskflow_driver # Make exception message format errors fatal (boolean value) #fatal_exception_format_errors = false # Match this value when searching for nova in the service catalog. Format is: # separated values of the form: <service_type>:<service_name>:<endpoint_type> # (string value) #nova_catalog_admin_info = compute:nova:publicURL # Region name of this node (string value) #os_region_name = <None> # Location of ca certificates file to use for nova client requests. (string # value) #nova_ca_certificates_file = <None> # Allow to perform insecure SSL requests to nova (boolean value) #nova_api_insecure = false # OpenStack privileged account username. Used for requests to other services # (such as Nova) that require an account with special rights. (string value) #os_privileged_user_name = <None> # Password associated with the OpenStack privileged account. (string value) #os_privileged_user_password = <None> # Tenant name associated with the OpenStack privileged account. (string value) #os_privileged_user_tenant = <None> # Auth URL associated with the OpenStack privileged account. (uri value) #os_privileged_user_auth_url = <None> # User domain name associated with the OpenStack privileged account. (string # value) #os_user_domain_name = default # Project domain name associated with the OpenStack privileged account. (string # value) #os_project_domain_name = default # Directory where the masakari python module is installed (string value) #pybasedir = /build/masakari-VZrMuh/masakari-9.0.0 # Directory where masakari binaries are installed (string value) #bindir = /usr/local/bin # Top-level directory for maintaining masakari's state (string value) #state_path = $pybasedir # # Hostname, FQDN or IP address of this host. Must be valid within AMQP key. # # Possible values: # # * String with hostname, FQDN or IP address. Default is hostname of this host. # (host address value) #host = lgw01-amd64-035 # Full class name for the Manager for masakari engine (string value) #engine_manager = masakari.engine.manager.MasakariManager # Seconds between nodes reporting state to datastore (integer value) #report_interval = 10 # Enable periodic tasks (boolean value) #periodic_enable = true # Max interval time between periodic tasks execution in seconds. (integer value) #periodic_interval_max = 300 # Range of seconds to randomly delay when starting the periodic task scheduler # to reduce stampeding. (Disable by setting to 0) (integer value) #periodic_fuzzy_delay = 60 # Use APIs with SSL enabled (boolean value) #use_ssl = false # The IP address on which the Masakari API will listen. (host address value) #masakari_api_listen = 0.0.0.0 # The port on which the Masakari API will listen. (integer value) # Minimum value: 1 # Maximum value: 65535 #masakari_api_listen_port = 15868 # Number of workers for Masakari API service. The default will be the number of # CPUs available. (integer value) #masakari_api_workers = <None> # Maximum time since last check-in for up service (integer value) #service_down_time = 60 # # From oslo.log # # If set to true, the logging level will be set to DEBUG instead of the default # INFO level. (boolean value) # Note: This option can be changed without restarting. #debug = false # The name of a logging configuration file. This file is appended to any # existing logging configuration files. For details about logging configuration # files, see the Python logging module documentation. Note that when logging # configuration files are used then all logging configuration is set in the # configuration file and other logging configuration options are ignored (for # example, log-date-format). (string value) # Note: This option can be changed without restarting. # Deprecated group/name - [DEFAULT]/log_config #log_config_append = <None> # Defines the format string for %%(asctime)s in log records. Default: # %(default)s . This option is ignored if log_config_append is set. (string # value) #log_date_format = %Y-%m-%d %H:%M:%S # (Optional) Name of log file to send logging output to. If no default is set, # logging will go to stderr as defined by use_stderr. This option is ignored if # log_config_append is set. (string value) # Deprecated group/name - [DEFAULT]/logfile #log_file = <None> # (Optional) The base directory used for relative log_file paths. This option # is ignored if log_config_append is set. (string value) # Deprecated group/name - [DEFAULT]/logdir #log_dir = <None> # Uses logging handler designed to watch file system. When log file is moved or # removed this handler will open a new log file with specified path # instantaneously. It makes sense only if log_file option is specified and Linux # platform is used. This option is ignored if log_config_append is set. (boolean # value) #watch_log_file = false # Use syslog for logging. Existing syslog format is DEPRECATED and will be # changed later to honor RFC5424. This option is ignored if log_config_append is # set. (boolean value) #use_syslog = false # Enable journald for logging. If running in a systemd environment you may wish # to enable journal support. Doing so will use the journal native protocol which # includes structured metadata in addition to log messages.This option is # ignored if log_config_append is set. (boolean value) #use_journal = false # Syslog facility to receive log lines. This option is ignored if # log_config_append is set. (string value) #syslog_log_facility = LOG_USER # Use JSON formatting for logging. This option is ignored if log_config_append # is set. (boolean value) #use_json = false # Log output to standard error. This option is ignored if log_config_append is # set. (boolean value) #use_stderr = false # Log output to Windows Event Log. (boolean value) #use_eventlog = false # The amount of time before the log files are rotated. This option is ignored # unless log_rotation_type is setto "interval". (integer value) #log_rotate_interval = 1 # Rotation interval type. The time of the last file change (or the time when the # service was started) is used when scheduling the next rotation. (string value) # Possible values: # Seconds - <No description provided> # Minutes - <No description provided> # Hours - <No description provided> # Days - <No description provided> # Weekday - <No description provided> # Midnight - <No description provided> #log_rotate_interval_type = days # Maximum number of rotated log files. (integer value) #max_logfile_count = 30 # Log file maximum size in MB. This option is ignored if "log_rotation_type" is # not set to "size". (integer value) #max_logfile_size_mb = 200 # Log rotation type. (string value) # Possible values: # interval - Rotate logs at predefined time intervals. # size - Rotate logs once they reach a predefined size. # none - Do not rotate log files. #log_rotation_type = none # Format string to use for log messages with context. Used by # oslo_log.formatters.ContextFormatter (string value) #logging_context_format_string = %(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s # Format string to use for log messages when context is undefined. Used by # oslo_log.formatters.ContextFormatter (string value) #logging_default_format_string = %(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s # Additional data to append to log message when logging level for the message is # DEBUG. Used by oslo_log.formatters.ContextFormatter (string value) #logging_debug_format_suffix = %(funcName)s %(pathname)s:%(lineno)d # Prefix each line of exception output with this format. Used by # oslo_log.formatters.ContextFormatter (string value) #logging_exception_prefix = %(asctime)s.%(msecs)03d %(process)d ERROR %(name)s %(instance)s # Defines the format string for %(user_identity)s that is used in # logging_context_format_string. Used by oslo_log.formatters.ContextFormatter # (string value) #logging_user_identity_format = %(user)s %(tenant)s %(domain)s %(user_domain)s %(project_domain)s # List of package logging levels in logger=LEVEL pairs. This option is ignored # if log_config_append is set. (list value) #default_log_levels = amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,oslo_messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,requests.packages.urllib3.util.retry=WARN,urllib3.util.retry=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN,taskflow=WARN,keystoneauth=WARN,oslo.cache=INFO,oslo_policy=INFO,dogpile.core.dogpile=INFO # Enables or disables publication of error events. (boolean value) #publish_errors = false # The format for an instance that is passed with the log message. (string value) #instance_format = "[instance: %(uuid)s] " # The format for an instance UUID that is passed with the log message. (string # value) #instance_uuid_format = "[instance: %(uuid)s] " # Interval, number of seconds, of log rate limiting. (integer value) #rate_limit_interval = 0 # Maximum number of logged messages per rate_limit_interval. (integer value) #rate_limit_burst = 0 # Log level name used by rate limiting: CRITICAL, ERROR, INFO, WARNING, DEBUG or # empty string. Logs with level greater or equal to rate_limit_except_level are # not filtered. An empty string means that all levels are filtered. (string # value) #rate_limit_except_level = CRITICAL # Enables or disables fatal status of deprecations. (boolean value) #fatal_deprecations = false # # From oslo.messaging # # Size of RPC connection pool. (integer value) #rpc_conn_pool_size = 30 # The pool size limit for connections expiration policy (integer value) #conn_pool_min_size = 2 # The time-to-live in sec of idle connections in the pool (integer value) #conn_pool_ttl = 1200 # Size of executor thread pool when executor is threading or eventlet. (integer # value) # Deprecated group/name - [DEFAULT]/rpc_thread_pool_size #executor_thread_pool_size = 64 # Seconds to wait for a response from a call. (integer value) #rpc_response_timeout = 60 # The network address and optional user credentials for connecting to the # messaging backend, in URL format. The expected format is: # # driver://[user:pass@]host:port[,[userN:passN@]hostN:portN]/virtual_host?query # # Example: rabbit://rabbitmq:password@127.0.0.1:5672// # # For full details on the fields in the URL see the documentation of # oslo_messaging.TransportURL at # https://docs.openstack.org/oslo.messaging/latest/reference/transport.html # (string value) #transport_url = rabbit:// # The default exchange under which topics are scoped. May be overridden by an # exchange name specified in the transport_url option. (string value) #control_exchange = openstack # # From oslo.service.service # # Enable eventlet backdoor. Acceptable values are 0, <port>, and <start>:<end>, # where 0 results in listening on a random tcp port number; <port> results in # listening on the specified port number (and not enabling backdoor if that port # is in use); and <start>:<end> results in listening on the smallest unused port # number within the specified range of port numbers. The chosen port is # displayed in the service's log file. (string value) #backdoor_port = <None> # Enable eventlet backdoor, using the provided path as a unix socket that can # receive connections. This option is mutually exclusive with 'backdoor_port' in # that only one should be provided. If both are provided then the existence of # this option overrides the usage of that option. Inside the path {pid} will be # replaced with the PID of the current process. (string value) #backdoor_socket = <None> # Enables or disables logging values of all registered options when starting a # service (at DEBUG level). (boolean value) #log_options = true # Specify a timeout after which a gracefully shutdown server will exit. Zero # value means endless wait. (integer value) #graceful_shutdown_timeout = 60 # # From oslo.service.wsgi # # File name for the paste.deploy config for api service (string value) #api_paste_config = api-paste.ini # A python format string that is used as the template to generate log lines. The # following values can beformatted into it: client_ip, date_time, request_line, # status_code, body_length, wall_seconds. (string value) #wsgi_log_format = %(client_ip)s "%(request_line)s" status: %(status_code)s len: %(body_length)s time: %(wall_seconds).7f # Sets the value of TCP_KEEPIDLE in seconds for each server socket. Not # supported on OS X. (integer value) #tcp_keepidle = 600 # Size of the pool of greenthreads used by wsgi (integer value) #wsgi_default_pool_size = 100 # Maximum line size of message headers to be accepted. max_header_line may need # to be increased when using large tokens (typically those generated when # keystone is configured to use PKI tokens with big service catalogs). (integer # value) #max_header_line = 16384 # If False, closes the client socket connection explicitly. (boolean value) #wsgi_keep_alive = true # Timeout for client connections' socket operations. If an incoming connection # is idle for this number of seconds it will be closed. A value of '0' means # wait forever. (integer value) #client_socket_timeout = 900 [cors] # # From oslo.middleware # # Indicate whether this resource may be shared with the domain received in the # requests "origin" header. Format: "<protocol>://<host>[:<port>]", no trailing # slash. Example: https://horizon.example.com (list value) #allowed_origin = <None> # Indicate that the actual request can include user credentials (boolean value) #allow_credentials = true # Indicate which headers are safe to expose to the API. Defaults to HTTP Simple # Headers. (list value) #expose_headers = # Maximum cache age of CORS preflight requests. (integer value) #max_age = 3600 # Indicate which methods can be used during the actual request. (list value) #allow_methods = OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,PATCH # Indicate which header field names may be used during the actual request. (list # value) #allow_headers = [database] # # From oslo.db # # If True, SQLite uses synchronous mode. (boolean value) #sqlite_synchronous = true # The back end to use for the database. (string value) # Deprecated group/name - [DEFAULT]/db_backend #backend = sqlalchemy # The SQLAlchemy connection string to use to connect to the database. (string # value) # Deprecated group/name - [DEFAULT]/sql_connection # Deprecated group/name - [DATABASE]/sql_connection # Deprecated group/name - [sql]/connection #connection = <None> # The SQLAlchemy connection string to use to connect to the slave database. # (string value) #slave_connection = <None> # The SQL mode to be used for MySQL sessions. This option, including the # default, overrides any server-set SQL mode. To use whatever SQL mode is set by # the server configuration, set this to no value. Example: mysql_sql_mode= # (string value) #mysql_sql_mode = TRADITIONAL # If True, transparently enables support for handling MySQL Cluster (NDB). # (boolean value) #mysql_enable_ndb = false # Connections which have been present in the connection pool longer than this # number of seconds will be replaced with a new one the next time they are # checked out from the pool. (integer value) # Deprecated group/name - [DATABASE]/idle_timeout # Deprecated group/name - [database]/idle_timeout # Deprecated group/name - [DEFAULT]/sql_idle_timeout # Deprecated group/name - [DATABASE]/sql_idle_timeout # Deprecated group/name - [sql]/idle_timeout #connection_recycle_time = 3600 # Maximum number of SQL connections to keep open in a pool. Setting a value of 0 # indicates no limit. (integer value) # Deprecated group/name - [DEFAULT]/sql_max_pool_size # Deprecated group/name - [DATABASE]/sql_max_pool_size #max_pool_size = 5 # Maximum number of database connection retries during startup. Set to -1 to # specify an infinite retry count. (integer value) # Deprecated group/name - [DEFAULT]/sql_max_retries # Deprecated group/name - [DATABASE]/sql_max_retries #max_retries = 10 # Interval between retries of opening a SQL connection. (integer value) # Deprecated group/name - [DEFAULT]/sql_retry_interval # Deprecated group/name - [DATABASE]/reconnect_interval #retry_interval = 10 # If set, use this value for max_overflow with SQLAlchemy. (integer value) # Deprecated group/name - [DEFAULT]/sql_max_overflow # Deprecated group/name - [DATABASE]/sqlalchemy_max_overflow #max_overflow = 50 # Verbosity of SQL debugging information: 0=None, 100=Everything. (integer # value) # Minimum value: 0 # Maximum value: 100 # Deprecated group/name - [DEFAULT]/sql_connection_debug #connection_debug = 0 # Add Python stack traces to SQL as comment strings. (boolean value) # Deprecated group/name - [DEFAULT]/sql_connection_trace #connection_trace = false # If set, use this value for pool_timeout with SQLAlchemy. (integer value) # Deprecated group/name - [DATABASE]/sqlalchemy_pool_timeout #pool_timeout = <None> # Enable the experimental use of database reconnect on connection lost. (boolean # value) #use_db_reconnect = false # Seconds between retries of a database transaction. (integer value) #db_retry_interval = 1 # If True, increases the interval between retries of a database operation up to # db_max_retry_interval. (boolean value) #db_inc_retry_interval = true # If db_inc_retry_interval is set, the maximum seconds between retries of a # database operation. (integer value) #db_max_retry_interval = 10 # Maximum retries in case of connection error or deadlock error before error is # raised. Set to -1 to specify an infinite retry count. (integer value) #db_max_retries = 20 # Optional URL parameters to append onto the connection URL at connect time; # specify as param1=value1¶m2=value2&... (string value) #connection_parameters = # # From oslo.db.concurrency # # Enable the experimental use of thread pooling for all DB API calls (boolean # value) # Deprecated group/name - [DEFAULT]/dbapi_use_tpool #use_tpool = false [healthcheck] # # From oslo.middleware # # DEPRECATED: The path to respond to healtcheck requests on. (string value) # This option is deprecated for removal. # Its value may be silently ignored in the future. #path = /healthcheck # Show more detailed information as part of the response. Security note: # Enabling this option may expose sensitive details about the service being # monitored. Be sure to verify that it will not violate your security policies. # (boolean value) #detailed = false # Additional backends that can perform health checks and report that information # back as part of a request. (list value) #backends = # Check the presence of a file to determine if an application is running on a # port. Used by DisableByFileHealthcheck plugin. (string value) #disable_by_file_path = <None> # Check the presence of a file based on a port to determine if an application is # running on a port. Expects a "port:path" list of strings. Used by # DisableByFilesPortsHealthcheck plugin. (list value) #disable_by_file_paths = [host_failure] # # From masakari.conf # # # Operators can decide whether all instances or only those instances which # contain metadata key 'HA_Enabled=True' should be allowed for evacuation from # a failed source compute node. When set to True, it will evacuate all instances # from a failed source compute node. First preference will be given to those # instances which contain 'HA_Enabled=True' metadata key, and then it will # evacuate the remaining ones. When set to False, it will evacuate only those # instances which contain 'HA_Enabled=True' metadata key. (boolean value) #evacuate_all_instances = true # # Operators can decide whether error instances should be allowed for evacuation # from a failed source compute node or not. When set to True, it will ignore # error instances from evacuation from a failed source compute node. When set to # False, it will evacuate error instances along with other instances from a # failed source compute node. (boolean value) #ignore_instances_in_error_state = false # # Operators can decide whether reserved_host should be added to aggregate group # of failed compute host. When set to True, reserved host will be added to the # aggregate group of failed compute host. When set to False, the reserved_host # will not be added to the aggregate group of failed compute host. (boolean # value) #add_reserved_host_to_aggregate = false [instance_failure] # # From masakari.conf # # # Operators can decide whether all instances or only those instances which # contain metadata key 'HA_Enabled=True' should be taken into account to # recover from instance failure events. When set to True, it will execute # instance failure recovery actions for an instance irrespective of whether # that particular instance contains metadata key 'HA_Enabled=True' or not. # When set to False, it will only execute instance failure recovery actions # for an instance which contain metadata key 'HA_Enabled=True'. (boolean value) #process_all_instances = false [keystone_authtoken] # # From keystonemiddleware.auth_token # # Complete "public" Identity API endpoint. This endpoint should not be an # "admin" endpoint, as it should be accessible by all end users. Unauthenticated # clients are redirected to this endpoint to authenticate. Although this # endpoint should ideally be unversioned, client support in the wild varies. If # you're using a versioned v2 endpoint here, then this should *not* be the same # endpoint the service user utilizes for validating tokens, because normal end # users may not be able to reach that endpoint. (string value) # Deprecated group/name - [keystone_authtoken]/auth_uri #www_authenticate_uri = <None> # DEPRECATED: Complete "public" Identity API endpoint. This endpoint should not # be an "admin" endpoint, as it should be accessible by all end users. # Unauthenticated clients are redirected to this endpoint to authenticate. # Although this endpoint should ideally be unversioned, client support in the # wild varies. If you're using a versioned v2 endpoint here, then this should # *not* be the same endpoint the service user utilizes for validating tokens, # because normal end users may not be able to reach that endpoint. This option # is deprecated in favor of www_authenticate_uri and will be removed in the S # release. (string value) # This option is deprecated for removal since Queens. # Its value may be silently ignored in the future. # Reason: The auth_uri option is deprecated in favor of www_authenticate_uri and # will be removed in the S release. #auth_uri = <None> # API version of the Identity API endpoint. (string value) #auth_version = <None> # Interface to use for the Identity API endpoint. Valid values are "public", # "internal" or "admin"(default). (string value) #interface = admin # Do not handle authorization requests within the middleware, but delegate the # authorization decision to downstream WSGI components. (boolean value) #delay_auth_decision = false # Request timeout value for communicating with Identity API server. (integer # value) #http_connect_timeout = <None> # How many times are we trying to reconnect when communicating with Identity API # Server. (integer value) #http_request_max_retries = 3 # Request environment key where the Swift cache object is stored. When # auth_token middleware is deployed with a Swift cache, use this option to have # the middleware share a caching backend with swift. Otherwise, use the # ``memcached_servers`` option instead. (string value) #cache = <None> # Required if identity server requires client certificate (string value) #certfile = <None> # Required if identity server requires client certificate (string value) #keyfile = <None> # A PEM encoded Certificate Authority to use when verifying HTTPs connections. # Defaults to system CAs. (string value) #cafile = <None> # Verify HTTPS connections. (boolean value) #insecure = false # The region in which the identity server can be found. (string value) #region_name = <None> # Optionally specify a list of memcached server(s) to use for caching. If left # undefined, tokens will instead be cached in-process. (list value) # Deprecated group/name - [keystone_authtoken]/memcache_servers #memcached_servers = <None> # In order to prevent excessive effort spent validating tokens, the middleware # caches previously-seen tokens for a configurable duration (in seconds). Set to # -1 to disable caching completely. (integer value) #token_cache_time = 300 # (Optional) If defined, indicate whether token data should be authenticated or # authenticated and encrypted. If MAC, token data is authenticated (with HMAC) # in the cache. If ENCRYPT, token data is encrypted and authenticated in the # cache. If the value is not one of these options or empty, auth_token will # raise an exception on initialization. (string value) # Possible values: # None - <No description provided> # MAC - <No description provided> # ENCRYPT - <No description provided> #memcache_security_strategy = None # (Optional, mandatory if memcache_security_strategy is defined) This string is # used for key derivation. (string value) #memcache_secret_key = <None> # (Optional) Number of seconds memcached server is considered dead before it is # tried again. (integer value) #memcache_pool_dead_retry = 300 # (Optional) Maximum total number of open connections to every memcached server. # (integer value) #memcache_pool_maxsize = 10 # (Optional) Socket timeout in seconds for communicating with a memcached # server. (integer value) #memcache_pool_socket_timeout = 3 # (Optional) Number of seconds a connection to memcached is held unused in the # pool before it is closed. (integer value) #memcache_pool_unused_timeout = 60 # (Optional) Number of seconds that an operation will wait to get a memcached # client connection from the pool. (integer value) #memcache_pool_conn_get_timeout = 10 # (Optional) Use the advanced (eventlet safe) memcached client pool. The # advanced pool will only work under python 2.x. (boolean value) #memcache_use_advanced_pool = false # (Optional) Indicate whether to set the X-Service-Catalog header. If False, # middleware will not ask for service catalog on token validation and will not # set the X-Service-Catalog header. (boolean value) #include_service_catalog = true # Used to control the use and type of token binding. Can be set to: "disabled" # to not check token binding. "permissive" (default) to validate binding # information if the bind type is of a form known to the server and ignore it if # not. "strict" like "permissive" but if the bind type is unknown the token will # be rejected. "required" any form of token binding is needed to be allowed. # Finally the name of a binding method that must be present in tokens. (string # value) #enforce_token_bind = permissive # A choice of roles that must be present in a service token. Service tokens are # allowed to request that an expired token can be used and so this check should # tightly control that only actual services should be sending this token. Roles # here are applied as an ANY check so any role in this list must be present. For # backwards compatibility reasons this currently only affects the allow_expired # check. (list value) #service_token_roles = service # For backwards compatibility reasons we must let valid service tokens pass that # don't pass the service_token_roles check as valid. Setting this true will # become the default in a future release and should be enabled if possible. # (boolean value) #service_token_roles_required = false # The name or type of the service as it appears in the service catalog. This is # used to validate tokens that have restricted access rules. (string value) #service_type = <None> # Authentication type to load (string value) # Deprecated group/name - [keystone_authtoken]/auth_plugin #auth_type = <None> # Config Section from which to load plugin specific options (string value) #auth_section = <None> [osapi_v1] # # From masakari.conf # # DEPRECATED: # *DEPRECATED* # # This option is a list of all of the v2.1 API extensions to never load. # However, # it will be removed in the near future, after which the all the functionality # that was previously in extensions will be part of the standard API, and thus # always accessible. # # * Possible values: # # A list of strings, each being the alias of an extension that you do not # wish to load. # # * Services that use this: # # ``masakari-api`` # # * Related options: # # enabled, extensions_whitelist # (list value) # This option is deprecated for removal. # Its value may be silently ignored in the future. #extensions_blacklist = # DEPRECATED: # *DEPRECATED* # # This is a list of extensions. If it is empty, then *all* extensions except # those specified in the extensions_blacklist option will be loaded. If it is # not # empty, then only those extensions in this list will be loaded, provided that # they are also not in the extensions_blacklist option. Once this deprecated # option is removed, after which the all the functionality that was previously # in # extensions will be part of the standard API, and thus always accessible. # # * Possible values: # # A list of strings, each being the alias of an extension that you wish to # load, or an empty list, which indicates that all extensions are to be run. # # * Services that use this: # # ``masakari-api`` # # * Related options: # # enabled, extensions_blacklist # (list value) # This option is deprecated for removal. # Its value may be silently ignored in the future. #extensions_whitelist = # DEPRECATED: # *DEPRECATED* # # This option is a string representing a regular expression (regex) that matches # the project_id as contained in URLs. If not set, it will match normal UUIDs # created by keystone. # # * Possible values: # # A string representing any legal regular expression # # * Services that use this: # # ``masakari-api`` # # * Related options: # # None # (string value) # This option is deprecated for removal. # Its value may be silently ignored in the future. #project_id_regex = <None> [oslo_messaging_amqp] # # From oslo.messaging # # Name for the AMQP container. must be globally unique. Defaults to a generated # UUID (string value) #container_name = <None> # Timeout for inactive connections (in seconds) (integer value) #idle_timeout = 0 # Debug: dump AMQP frames to stdout (boolean value) #trace = false # Attempt to connect via SSL. If no other ssl-related parameters are given, it # will use the system's CA-bundle to verify the server's certificate. (boolean # value) #ssl = false # CA certificate PEM file used to verify the server's certificate (string value) #ssl_ca_file = # Self-identifying certificate PEM file for client authentication (string value) #ssl_cert_file = # Private key PEM file used to sign ssl_cert_file certificate (optional) (string # value) #ssl_key_file = # Password for decrypting ssl_key_file (if encrypted) (string value) #ssl_key_password = <None> # By default SSL checks that the name in the server's certificate matches the # hostname in the transport_url. In some configurations it may be preferable to # use the virtual hostname instead, for example if the server uses the Server # Name Indication TLS extension (rfc6066) to provide a certificate per virtual # host. Set ssl_verify_vhost to True if the server's SSL certificate uses the # virtual host name instead of the DNS name. (boolean value) #ssl_verify_vhost = false # Space separated list of acceptable SASL mechanisms (string value) #sasl_mechanisms = # Path to directory that contains the SASL configuration (string value) #sasl_config_dir = # Name of configuration file (without .conf suffix) (string value) #sasl_config_name = # SASL realm to use if no realm present in username (string value) #sasl_default_realm = # Seconds to pause before attempting to re-connect. (integer value) # Minimum value: 1 #connection_retry_interval = 1 # Increase the connection_retry_interval by this many seconds after each # unsuccessful failover attempt. (integer value) # Minimum value: 0 #connection_retry_backoff = 2 # Maximum limit for connection_retry_interval + connection_retry_backoff # (integer value) # Minimum value: 1 #connection_retry_interval_max = 30 # Time to pause between re-connecting an AMQP 1.0 link that failed due to a # recoverable error. (integer value) # Minimum value: 1 #link_retry_delay = 10 # The maximum number of attempts to re-send a reply message which failed due to # a recoverable error. (integer value) # Minimum value: -1 #default_reply_retry = 0 # The deadline for an rpc reply message delivery. (integer value) # Minimum value: 5 #default_reply_timeout = 30 # The deadline for an rpc cast or call message delivery. Only used when caller # does not provide a timeout expiry. (integer value) # Minimum value: 5 #default_send_timeout = 30 # The deadline for a sent notification message delivery. Only used when caller # does not provide a timeout expiry. (integer value) # Minimum value: 5 #default_notify_timeout = 30 # The duration to schedule a purge of idle sender links. Detach link after # expiry. (integer value) # Minimum value: 1 #default_sender_link_timeout = 600 # Indicates the addressing mode used by the driver. # Permitted values: # 'legacy' - use legacy non-routable addressing # 'routable' - use routable addresses # 'dynamic' - use legacy addresses if the message bus does not support routing # otherwise use routable addressing (string value) #addressing_mode = dynamic # Enable virtual host support for those message buses that do not natively # support virtual hosting (such as qpidd). When set to true the virtual host # name will be added to all message bus addresses, effectively creating a # private 'subnet' per virtual host. Set to False if the message bus supports # virtual hosting using the 'hostname' field in the AMQP 1.0 Open performative # as the name of the virtual host. (boolean value) #pseudo_vhost = true # address prefix used when sending to a specific server (string value) #server_request_prefix = exclusive # address prefix used when broadcasting to all servers (string value) #broadcast_prefix = broadcast # address prefix when sending to any server in group (string value) #group_request_prefix = unicast # Address prefix for all generated RPC addresses (string value) #rpc_address_prefix = openstack.org/om/rpc # Address prefix for all generated Notification addresses (string value) #notify_address_prefix = openstack.org/om/notify # Appended to the address prefix when sending a fanout message. Used by the # message bus to identify fanout messages. (string value) #multicast_address = multicast # Appended to the address prefix when sending to a particular RPC/Notification # server. Used by the message bus to identify messages sent to a single # destination. (string value) #unicast_address = unicast # Appended to the address prefix when sending to a group of consumers. Used by # the message bus to identify messages that should be delivered in a round-robin # fashion across consumers. (string value) #anycast_address = anycast # Exchange name used in notification addresses. # Exchange name resolution precedence: # Target.exchange if set # else default_notification_exchange if set # else control_exchange if set # else 'notify' (string value) #default_notification_exchange = <None> # Exchange name used in RPC addresses. # Exchange name resolution precedence: # Target.exchange if set # else default_rpc_exchange if set # else control_exchange if set # else 'rpc' (string value) #default_rpc_exchange = <None> # Window size for incoming RPC Reply messages. (integer value) # Minimum value: 1 #reply_link_credit = 200 # Window size for incoming RPC Request messages (integer value) # Minimum value: 1 #rpc_server_credit = 100 # Window size for incoming Notification messages (integer value) # Minimum value: 1 #notify_server_credit = 100 # Send messages of this type pre-settled. # Pre-settled messages will not receive acknowledgement # from the peer. Note well: pre-settled messages may be # silently discarded if the delivery fails. # Permitted values: # 'rpc-call' - send RPC Calls pre-settled # 'rpc-reply'- send RPC Replies pre-settled # 'rpc-cast' - Send RPC Casts pre-settled # 'notify' - Send Notifications pre-settled # (multi valued) #pre_settled = rpc-cast #pre_settled = rpc-reply [oslo_messaging_kafka] # # From oslo.messaging # # Max fetch bytes of Kafka consumer (integer value) #kafka_max_fetch_bytes = 1048576 # Default timeout(s) for Kafka consumers (floating point value) #kafka_consumer_timeout = 1.0 # DEPRECATED: Pool Size for Kafka Consumers (integer value) # This option is deprecated for removal. # Its value may be silently ignored in the future. # Reason: Driver no longer uses connection pool. #pool_size = 10 # DEPRECATED: The pool size limit for connections expiration policy (integer # value) # This option is deprecated for removal. # Its value may be silently ignored in the future. # Reason: Driver no longer uses connection pool. #conn_pool_min_size = 2 # DEPRECATED: The time-to-live in sec of idle connections in the pool (integer # value) # This option is deprecated for removal. # Its value may be silently ignored in the future. # Reason: Driver no longer uses connection pool. #conn_pool_ttl = 1200 # Group id for Kafka consumer. Consumers in one group will coordinate message # consumption (string value) #consumer_group = oslo_messaging_consumer # Upper bound on the delay for KafkaProducer batching in seconds (floating point # value) #producer_batch_timeout = 0.0 # Size of batch for the producer async send (integer value) #producer_batch_size = 16384 # The compression codec for all data generated by the producer. If not set, # compression will not be used. Note that the allowed values of this depend on # the kafka version (string value) # Possible values: # none - <No description provided> # gzip - <No description provided> # snappy - <No description provided> # lz4 - <No description provided> # zstd - <No description provided> #compression_codec = none # Enable asynchronous consumer commits (boolean value) #enable_auto_commit = false # The maximum number of records returned in a poll call (integer value) #max_poll_records = 500 # Protocol used to communicate with brokers (string value) # Possible values: # PLAINTEXT - <No description provided> # SASL_PLAINTEXT - <No description provided> # SSL - <No description provided> # SASL_SSL - <No description provided> #security_protocol = PLAINTEXT # Mechanism when security protocol is SASL (string value) #sasl_mechanism = PLAIN # CA certificate PEM file used to verify the server certificate (string value) #ssl_cafile = # Client certificate PEM file used for authentication. (string value) #ssl_client_cert_file = # Client key PEM file used for authentication. (string value) #ssl_client_key_file = # Client key password file used for authentication. (string value) #ssl_client_key_password = [oslo_messaging_notifications] # # From oslo.messaging # # The Drivers(s) to handle sending notifications. Possible values are messaging, # messagingv2, routing, log, test, noop (multi valued) # Deprecated group/name - [DEFAULT]/notification_driver #driver = # A URL representing the messaging driver to use for notifications. If not set, # we fall back to the same configuration used for RPC. (string value) # Deprecated group/name - [DEFAULT]/notification_transport_url #transport_url = <None> # AMQP topic used for OpenStack notifications. (list value) # Deprecated group/name - [rpc_notifier2]/topics # Deprecated group/name - [DEFAULT]/notification_topics #topics = notifications # The maximum number of attempts to re-send a notification message which failed # to be delivered due to a recoverable error. 0 - No retry, -1 - indefinite # (integer value) #retry = -1 [oslo_messaging_rabbit] # # From oslo.messaging # # Use durable queues in AMQP. (boolean value) #amqp_durable_queues = false # Auto-delete queues in AMQP. (boolean value) #amqp_auto_delete = false # Connect over SSL. (boolean value) # Deprecated group/name - [oslo_messaging_rabbit]/rabbit_use_ssl #ssl = false # SSL version to use (valid only if SSL enabled). Valid values are TLSv1 and # SSLv23. SSLv2, SSLv3, TLSv1_1, and TLSv1_2 may be available on some # distributions. (string value) # Deprecated group/name - [oslo_messaging_rabbit]/kombu_ssl_version #ssl_version = # SSL key file (valid only if SSL enabled). (string value) # Deprecated group/name - [oslo_messaging_rabbit]/kombu_ssl_keyfile #ssl_key_file = # SSL cert file (valid only if SSL enabled). (string value) # Deprecated group/name - [oslo_messaging_rabbit]/kombu_ssl_certfile #ssl_cert_file = # SSL certification authority file (valid only if SSL enabled). (string value) # Deprecated group/name - [oslo_messaging_rabbit]/kombu_ssl_ca_certs #ssl_ca_file = # EXPERIMENTAL: Run the health check heartbeat thread through a native python # thread. By default if this option isn't provided the health check heartbeat # will inherit the execution model from the parent process. By example if the # parent process have monkey patched the stdlib by using eventlet/greenlet then # the heartbeat will be run through a green thread. (boolean value) #heartbeat_in_pthread = false # How long to wait before reconnecting in response to an AMQP consumer cancel # notification. (floating point value) #kombu_reconnect_delay = 1.0 # EXPERIMENTAL: Possible values are: gzip, bz2. If not set compression will not # be used. This option may not be available in future versions. (string value) #kombu_compression = <None> # How long to wait a missing client before abandoning to send it its replies. # This value should not be longer than rpc_response_timeout. (integer value) # Deprecated group/name - [oslo_messaging_rabbit]/kombu_reconnect_timeout #kombu_missing_consumer_retry_timeout = 60 # Determines how the next RabbitMQ node is chosen in case the one we are # currently connected to becomes unavailable. Takes effect only if more than one # RabbitMQ node is provided in config. (string value) # Possible values: # round-robin - <No description provided> # shuffle - <No description provided> #kombu_failover_strategy = round-robin # The RabbitMQ login method. (string value) # Possible values: # PLAIN - <No description provided> # AMQPLAIN - <No description provided> # RABBIT-CR-DEMO - <No description provided> #rabbit_login_method = AMQPLAIN # How frequently to retry connecting with RabbitMQ. (integer value) #rabbit_retry_interval = 1 # How long to backoff for between retries when connecting to RabbitMQ. (integer # value) #rabbit_retry_backoff = 2 # Maximum interval of RabbitMQ connection retries. Default is 30 seconds. # (integer value) #rabbit_interval_max = 30 # Try to use HA queues in RabbitMQ (x-ha-policy: all). If you change this # option, you must wipe the RabbitMQ database. In RabbitMQ 3.0, queue mirroring # is no longer controlled by the x-ha-policy argument when declaring a queue. If # you just want to make sure that all queues (except those with auto-generated # names) are mirrored across all nodes, run: "rabbitmqctl set_policy HA # '^(?!amq\.).*' '{"ha-mode": "all"}' " (boolean value) #rabbit_ha_queues = false # Positive integer representing duration in seconds for queue TTL (x-expires). # Queues which are unused for the duration of the TTL are automatically deleted. # The parameter affects only reply and fanout queues. (integer value) # Minimum value: 1 #rabbit_transient_queues_ttl = 1800 # Specifies the number of messages to prefetch. Setting to zero allows unlimited # messages. (integer value) #rabbit_qos_prefetch_count = 0 # Number of seconds after which the Rabbit broker is considered down if # heartbeat's keep-alive fails (0 disables heartbeat). (integer value) #heartbeat_timeout_threshold = 60 # How often times during the heartbeat_timeout_threshold we check the heartbeat. # (integer value) #heartbeat_rate = 2 # Enable/Disable the RabbitMQ mandatory flag for direct send. The direct send is # used as reply, so the MessageUndeliverable exception is raised in case the # client queue does not exist. (integer value) #direct_mandatory_flag = True [oslo_middleware] # # From oslo.middleware # # The maximum body size for each request, in bytes. (integer value) # Deprecated group/name - [DEFAULT]/osapi_max_request_body_size # Deprecated group/name - [DEFAULT]/max_request_body_size #max_request_body_size = 114688 # DEPRECATED: The HTTP Header that will be used to determine what the original # request protocol scheme was, even if it was hidden by a SSL termination proxy. # (string value) # This option is deprecated for removal. # Its value may be silently ignored in the future. #secure_proxy_ssl_header = X-Forwarded-Proto # Whether the application is behind a proxy or not. This determines if the # middleware should parse the headers or not. (boolean value) #enable_proxy_headers_parsing = false [oslo_policy] # # From oslo.policy # # This option controls whether or not to enforce scope when evaluating policies. # If ``True``, the scope of the token used in the request is compared to the # ``scope_types`` of the policy being enforced. If the scopes do not match, an # ``InvalidScope`` exception will be raised. If ``False``, a message will be # logged informing operators that policies are being invoked with mismatching # scope. (boolean value) #enforce_scope = false # This option controls whether or not to use old deprecated defaults when # evaluating policies. If ``True``, the old deprecated defaults are not going to # be evaluated. This means if any existing token is allowed for old defaults but # is disallowed for new defaults, it will be disallowed. It is encouraged to # enable this flag along with the ``enforce_scope`` flag so that you can get the # benefits of new defaults and ``scope_type`` together (boolean value) #enforce_new_defaults = false # The relative or absolute path of a file that maps roles to permissions for a # given service. Relative paths must be specified in relation to the # configuration file setting this option. (string value) #policy_file = policy.json # Default rule. Enforced when a requested rule is not found. (string value) #policy_default_rule = default # Directories where policy configuration files are stored. They can be relative # to any directory in the search path defined by the config_dir option, or # absolute paths. The file defined by policy_file must exist for these # directories to be searched. Missing or empty directories are ignored. (multi # valued) #policy_dirs = policy.d # Content Type to send and receive data for REST based policy check (string # value) # Possible values: # application/x-www-form-urlencoded - <No description provided> # application/json - <No description provided> #remote_content_type = application/x-www-form-urlencoded # server identity verification for REST based policy check (boolean value) #remote_ssl_verify_server_crt = false # Absolute path to ca cert file for REST based policy check (string value) #remote_ssl_ca_crt_file = <None> # Absolute path to client cert for REST based policy check (string value) #remote_ssl_client_crt_file = <None> # Absolute path client key file REST based policy check (string value) #remote_ssl_client_key_file = <None> [oslo_versionedobjects] # # From oslo.versionedobjects # # Make exception message format errors fatal (boolean value) #fatal_exception_format_errors = false [ssl] # # From masakari.conf # # CA certificate file to use to verify connecting clients. (string value) # Deprecated group/name - [DEFAULT]/ssl_ca_file #ca_file = <None> # Certificate file to use when starting the server securely. (string value) # Deprecated group/name - [DEFAULT]/ssl_cert_file #cert_file = <None> # Private key file to use when starting the server securely. (string value) # Deprecated group/name - [DEFAULT]/ssl_key_file #key_file = <None> # SSL version to use (valid only if SSL enabled). Valid values are TLSv1 and # SSLv23. SSLv2, SSLv3, TLSv1_1, and TLSv1_2 may be available on some # distributions. (string value) #version = <None> # Sets the list of available ciphers. value should be a string in the OpenSSL # cipher list format. (string value) #ciphers = <None> [taskflow] # # From masakari.conf # # # The SQLAlchemy connection string to use to connect to the taskflow database. # (string value) #connection = <None> [wsgi] # # From masakari.conf # # File name for the paste.deploy config for masakari-api (string value) #api_paste_config = api-paste.ini # A python format string that is used as the template to generate log lines. The # following values can be formatted into it: client_ip, date_time, request_line, # status_code, body_length, wall_seconds. (string value) #wsgi_log_format = %(client_ip)s "%(request_line)s" status: %(status_code)s len: %(body_length)s time: %(wall_seconds).7f # The HTTP header used to determine the scheme for the original request, even if # it was removed by an SSL terminating proxy. Typical value is # "HTTP_X_FORWARDED_PROTO". (string value) #secure_proxy_ssl_header = <None> # CA certificate file to use to verify connecting clients (string value) #ssl_ca_file = <None> # SSL certificate of API server (string value) #ssl_cert_file = <None> # SSL private key of API server (string value) #ssl_key_file = <None> # Sets the value of TCP_KEEPIDLE in seconds for each server socket. Not # supported on OS X. (integer value) #tcp_keepidle = 600 # Size of the pool of greenthreads used by wsgi (integer value) # Deprecated group/name - [DEFAULT]/wsgi_default_pool_size #default_pool_size = 1000 # Maximum line size of message headers to be accepted. max_header_line may need # to be increased when using large tokens (typically those generated by the # Keystone v3 API with big service catalogs). (integer value) #max_header_line = 16384 # If False, closes the client socket connection explicitly. (boolean value) # Deprecated group/name - [DEFAULT]/wsgi_keep_alive #keep_alive = true # Timeout for client connections' socket operations. If an incoming connection # is idle for this number of seconds it will be closed. A value of '0' means # wait forever. (integer value) #client_socket_timeout = 900 Minimal Configuration Edit the /etc/masakari/masakari.conf file and complete the following actions In the [DEFAULT] section, set following options: auth_strategy = keystone masakari_topic = ha_engine os_privileged_user_tenant = service os_privileged_user_auth_url = http://controller/identity os_privileged_user_name = nova os_privileged_user_password = PRIVILEGED_USER_PASS Replace PRIVILEGED_USER_PASS with the password you chose for the privileged user in the Identity service. In the [database] section, configure database access: connection = mysql+pymysql://root:MASAKARI_DBPASS@controller/masakari?charset=utf8 In the [keystone_authtoken] sections, configure Identity service access: auth_url = http://controller/identity memcached_servers = controller:11211 signing_dir = /var/cache/masakari project_domain_name = Default user_domain_name = Default project_name = service username = masakari password = MASAKARI_PASS auth_type = password cafile = /opt/stack/data/ca-bundle.pem Replace MASAKARI_PASS with the password you chose for the masakari user in the Identity service. Sample Masakari Policy File The following is a sample masakari policy file for adaptation and use. The sample policy can also be viewed in file form. IMPORTANT: The sample policy file is auto-generated from masakari when this documentation is built. # Decides what is required for the 'is_admin:True' check to succeed. #"context_is_admin": "role:admin" # Default rule for most non-Admin APIs. #"admin_or_owner": "is_admin:True or project_id:%(project_id)s" # Default rule for most Admin APIs. #"admin_api": "is_admin:True" # List available extensions. # GET /extensions #"os_masakari_api:extensions:index": "rule:admin_api" # Shows information for an extension. # GET /extensions/{extensions_id} #"os_masakari_api:extensions:detail": "rule:admin_api" # Extension Info API extensions to change the API. #"os_masakari_api:extensions:discoverable": "rule:admin_api" # Lists IDs, names, type, reserved, on_maintenance for all hosts. # GET /segments/{segment_id}/hosts #"os_masakari_api:os-hosts:index": "rule:admin_api" # Shows details for a host. # GET /segments/{segment_id}/hosts/{host_id} #"os_masakari_api:os-hosts:detail": "rule:admin_api" # Creates a host under given segment. # POST /segments/{segment_id}/hosts #"os_masakari_api:os-hosts:create": "rule:admin_api" # Updates the editable attributes of an existing host. # PUT /segments/{segment_id}/hosts/{host_id} #"os_masakari_api:os-hosts:update": "rule:admin_api" # Deletes a host from given segment. # DELETE /segments/{segment_id}/hosts/{host_id} #"os_masakari_api:os-hosts:delete": "rule:admin_api" # Host API extensions to change the API. #"os_masakari_api:os-hosts:discoverable": "rule:admin_api" # Lists IDs, notification types, host_name, generated_time, payload # and status for all notifications. # GET /notifications #"os_masakari_api:notifications:index": "rule:admin_api" # Shows details for a notification. # GET /notifications/{notification_id} #"os_masakari_api:notifications:detail": "rule:admin_api" # Creates a notification. # POST /notifications #"os_masakari_api:notifications:create": "rule:admin_api" # Notification API extensions to change the API. #"os_masakari_api:notifications:discoverable": "rule:admin_api" # Lists IDs, names, description, recovery_method, service_type for all # segments. # GET /segments #"os_masakari_api:segments:index": "rule:admin_api" # Shows details for a segment. # GET /segments/{segment_id} #"os_masakari_api:segments:detail": "rule:admin_api" # Creates a segment. # POST /segments #"os_masakari_api:segments:create": "rule:admin_api" # Updates the editable attributes of an existing host. # PUT /segments/{segment_id} #"os_masakari_api:segments:update": "rule:admin_api" # Deletes a segment. # DELETE /segments/{segment_id} #"os_masakari_api:segments:delete": "rule:admin_api" # Segment API extensions to change the API. #"os_masakari_api:segments:discoverable": "rule:admin_api" # List all versions. # GET / #"os_masakari_api:versions:index": "@" # Version API extensions to change the API. #"os_masakari_api:versions:discoverable": "@" Development Quickstart This page describes how to setup and use a working Python development environment that can be used in developing masakari on Ubuntu. These instructions assume you're already familiar with git. Following these instructions will allow you to build the documentation and run the masakari unit tests. NOTE: For how to contribute to Masakari, refer: http://docs.openstack.org/infra/manual/developers.html Masakari uses the Gerrit code review system, refer: http://docs.openstack.org/infra/manual/developers.html#development-workflow Setup There are two ways to create a development environment: using DevStack, or explicitly installing and cloning just what you need. Using DevStack To enable Masakari in DevStack, perform the following steps: Download DevStack export DEVSTACK_DIR=~/devstack git clone https://opendev.org/openstack/devstack.git $DEVSTACK_DIR Enable the Masakari plugin Enable the plugin by adding the following section to $DEVSTACK_DIR/local.conf [[local|localrc]] enable_plugin masakari https://opendev.org/openstack/masakari Optionally, a git refspec (branch or tag or commit) may be provided as follows: [[local|localrc]] enable_plugin masakari https://opendev.org/openstack/masakari <refspec> Run the DevStack utility cd $DEVSTACK_DIR ./stack.sh Explicit Install/Clone DevStack installs a complete OpenStack environment. Alternatively, to clone and install Masakari explicitly refer: install_and_configure_ubuntu Building the Documentation For a full documentation build, issue the following command from the masakari directory tox -e docs That will create a Python virtual environment, install the needed Python prerequisites in that environment, and build all the documentation in that environment. Running unit tests See Running Python Unit Tests Masakari System Architecture Masakari comprises of two services api and engine, each performing different functions. The user-facing interface is a REST API, while internally Masakari communicates via an RPC message passing mechanism. The API servers process REST requests, which typically involve database reads/writes, sending RPC messages to other Masakari engine, and generating responses to the REST calls. RPC messaging is done via the oslo.messaging library, an abstraction on top of message queues. The Masakari engine will run on the same host where the Masakari api is running, and has a manager that is listening for RPC messages. The manager too has periodic tasks. Components Below you will find a helpful explanation of the key components of a typical Masakari deployment. [image] • DB: sql database for data storage. • API: component that receives HTTP requests, converts commands and communicates with masakari engine via the oslo.messaging queue. • Engine: Executes recovery workflow and communicates with nova via HTTP. How to get (more) involved with Masakari So you want to get more involved with Masakari? Or you are new to Masakari and wondering where to start? We are working on building easy ways for you to get help and ideas on how to learn more about Masakari and how the Masakari community works. How do I get started? There are quite a few global docs on this: • http://www.openstack.org/assets/welcome-guide/OpenStackWelcomeGuide.pdf • https://wiki.openstack.org/wiki/How_To_Contribute • http://www.openstack.org/community/ There is more general info, non Masakari specific info here: • https://wiki.openstack.org/wiki/Mentors • https://wiki.openstack.org/wiki/OpenStack_Upstream_Training What should I work on? So you are starting out your Masakari journey, where is a good place to start? If you'd like to learn how Masakari works before changing anything (good idea!), we recommend looking for reviews with -1s and -2s and seeing why they got down voted. Once you have some understanding, start reviewing patches. It's OK to ask people to explain things you don't understand. It's also OK to see some potential problems but put a +0. Once you're ready to write code, take a look at some of the work already marked as low-hanging fruit: • https://bugs.launchpad.net/masakari/+bugs?field.tag=low-hanging-fruit How do I get my feature in? The best way of getting your feature in is... well it depends. First concentrate on solving your problem and/or use case, don't fixate on getting the code you have working merged. It’s likely things will need significant re-work after you discuss how your needs match up with all the existing ways Masakari is currently being used. The good news, is this process should leave you with a feature that's more flexible and doesn't lock you into your current way of thinking. A key part of getting code merged, is helping with reviewing other people's code. Great reviews of others code will help free up more core reviewer time to look at your own patches. In addition, you will understand how the review is thinking when they review your code. Also, work out if any ongoing efforts are blocking your feature and helping out speeding those up. The spec review process should help with this effort. For more details on our process, please see: process. What is expected of a good contributor? TODO - need more info on this Top Tips for working with the Masakari community Here are some top tips around engaging with the Masakari community: • IRC • we talk a lot in #openstack-masakari • do ask us questions in there, and we will try to help you • not sure about asking questions? feel free to listen in around other people's questions • we recommend you setup an IRC bouncer: https://wiki.openstack.org/wiki/IRC • Email • Use the [masakari] tag in the mailing lists • Filtering on [masakari] and [all] can help tame the list • Be Open • i.e. don't review your teams code in private, do it publicly in gerrit • i.e. be ready to talk about openly about problems you are having, not "theoretical" issues • that way you can start to gain the trust of the wider community • Got a problem? Please ask! • Please raise any problems and ask questions early • we want to help you before you are frustrated or annoyed • unsure who to ask? Just ask in IRC. • Talk about problems first, then solutions • Don't think about "merging your patch", instead think about "solving your problem" • conversations are more productive that way • It's not the decision that's important, it's the reason behind it that's important • Don't like the way the community is going? • Please ask why we were going that way, and please engage with the debate • If you don't, we are unable to learn from what you have to offer • No one will decide, this is stuck, who can help me? • it's rare, but it happens • ...but if you don't ask, it's hard for them to help you Process It can feel like you are faced with a wall of process. We are a big community, to make sure the right communication happens, we do use a minimal amount of process. If you find something that doesn't make sense, please: • ask questions to find out *why* it happens • if you know of a better way to do it, please speak up • one "better way" might be to remove the process if it no longer helps To learn more about Masakari's process, please read process. Why bother with any process? Why is it worth creating a bug or blueprint to track your code review? This may seem like silly process, but there is usually a good reason behind it. We have lots of code to review, and we have tools to try and get to really important code reviews first. If yours is really important, but not picked up by our tools, it's possible you just get lost in the bottom of a big queue. If you have a bug fix, you have done loads of work to identify the issue, and test out your fix, and submit it. By adding a bug report, you are making it easier for other folks who hit the same problem to find your work, possibly saving them the hours of pain you went through. With any luck that gives all those people the time to fix different bugs, all that might have affected you, if you had not given them the time go fix it. It's similar with blueprints. You have worked out how to scratch your itch, lets tell others about that great new feature you have added, so they can use that. Also, it stops someone with a similar idea going through all the pain of creating a feature only to find you already have that feature ready and up for review, or merged into the latest release. Hopefully this gives you an idea why we have applied a small layer of process to what we are doing. Having said all this, we need to unlearn old habits to move forward, there may be better ways to do things, and we are open to trying them. Please help be part of the solution. Why do code reviews if I am not in masakari-core? Code reviews are the life blood of the developer community. There is a good discussion on how you do good reviews, and how anyone can be a reviewer: http://docs.openstack.org/infra/manual/developers.html#peer-review In the draft process guide, I discuss how doing reviews can help get your code merged faster: process. Let’s look at some of the top reasons why participating with code reviews really helps you: • Doing more reviews, and seeing what other reviewers notice, will help you better understand what is expected of code that gets merged into master • Having more non-core people do great reviews, leaves less review work for the core reviewers to do, so we are able get more code merged • Empathy is one of the keys to a happy community. If you are used to doing code reviews, you will better understand the comments you get when people review your code. As you do more code reviews, and see what others notice, you will get a better idea of what people are looking for when then apply a +2 to your code. What are the most useful types of code review comments? Well here are a few to the top ones: • Fundamental flaws are the biggest thing to spot. Does the patch break a whole set of existing users, or an existing feature? • Consistency of behavior is really important. Does this bit of code do things differently to where similar things happen elsewhere in Masakari? • Is the code easy to maintain, well tested and easy to read? Code is read order of magnitude times more than it is written, so optimize for the reader of the code, not the writer. Let's look at some problems people hit when starting out doing code reviews: • My +1 doesn't mean anything, why should I bother? • So your +1 really does help. Some really useful -1 votes that lead to a +1 vote helps get code into a position • When to use -1 vs 0 vs +1 • Please see the guidelines here: http://docs.openstack.org/infra/manual/developers.html#peer-review • I have already reviewed this code internally, no point in adding a +1 externally? • Please talk to your company about doing all code reviews in the public, that is a much better way to get involved. Showing how the code has evolved upstream, is much better than trying to 'perfect' code internally, before uploading for public review. You can use Draft mode, and mark things as WIP if you prefer, but please do the reviews upstream. • Where do I start? What should I review? • There are various tools, but a good place to start is: https://etherpad.openstack.org/p/masakari-pike-workitems • Depending on the time in the cycle, it's worth looking at NeedsCodeReview blueprints: https://blueprints.launchpad.net/masakari/ • Maybe take a look at things you want to see merged, bug fixes and features, or little code fixes • Look for things that have been waiting a long time for a review: • If you get through the above lists, try other tools, such as: http://status.openstack.org/reviews How to do great code reviews? http://docs.openstack.org/infra/manual/developers.html#peer-review For more tips, please see: Why do code reviews if I am not in masakari-core? How do I become masakari-core? You don't have to be masakari-core to be a valued member of the Masakari community. There are many, many ways you can help. Every quality review that helps someone get their patch closer to being ready to merge helps everyone get their code merged faster. The first step to becoming masakari-core is learning how to be an active member of the Masakari community, including learning how to do great code reviews. If you feel like you have the time to commit to all the masakari-core membership expectations, reach out to the Masakari PTL who will be able to find you an existing member of masakari-core to help mentor you. If all goes well, and you seem like a good candidate, your mentor will contact the rest of the masakari-core team to ask them to start looking at your reviews, so they are able to vote for you, if you get nominated for join masakari-core. We encourage all mentoring, where possible, to occur on #openstack-masakari so everyone can learn and benefit from your discussions. The above mentoring is available to everyone who wants to learn how to better code reviews, even if you don't ever want to commit to becoming masakari-core. If you already have a mentor, that's great, the process is only there for folks who are still trying to find a mentor. Being admitted to the mentoring program no way guarantees you will become a member of masakari-core eventually, it's here to help you improve, and help you have the sort of involvement and conversations that can lead to becoming a member of masakari-core. Notifications in Masakari Similar to other OpenStack services Masakari emits notifications to the message bus with the Notifier class provided by oslo.messaging-doc. From the notification consumer point of view a notification consists of two parts: an envelope with a fixed structure defined by oslo.messaging and a payload defined by the service emitting the notification. The envelope format is the following: { "priority": <string, selected from a predefined list by the sender>, "event_type": <string, defined by the sender>, "timestamp": <string, the isotime of when the notification emitted>, "publisher_id": <string, defined by the sender>, "message_id": <uuid, generated by oslo>, "payload": <json serialized dict, defined by the sender> } oslo.messaging provides below choices of notification drivers: ┌────────────┬───────────────────────────────────────┐ │Driver │ Description │ ├────────────┼───────────────────────────────────────┤ │messaging │ Send notifications using the 1.0 │ │ │ message format │ ├────────────┼───────────────────────────────────────┤ │messagingv2 │ Send notifications using the 2.0 │ │ │ message format (with a message │ │ │ envelope) │ ├────────────┼───────────────────────────────────────┤ │routing │ Configurable routing notifier (by │ │ │ priority or event_type) │ ├────────────┼───────────────────────────────────────┤ │log │ Publish notifications via Python │ │ │ logging infrastructure │ └────────────┴───────────────────────────────────────┘ │test │ Store notifications in memory for │ │ │ test verification │ ├────────────┼───────────────────────────────────────┤ │noop │ Disable sending notifications │ │ │ entirely │ └────────────┴───────────────────────────────────────┘ So notifications can be completely disabled by setting the following in Masakari configuration file: [oslo_messaging_notifications] driver = noop Masakari supports only Versioned notifications. Versioned notifications Masakari code uses the masakari.rpc.get_notifier call to get a configured oslo.messaging Notifier object and it uses the oslo provided functions on the Notifier object to emit notifications. The configuration of the returned Notifier object depends on the parameters of the get_notifier call and the value of the oslo.messaging configuration options driver and topics. The versioned notification the the payload is not a free form dictionary but a serialized oslo.versionedobjects-doc. For example the wire format of the segment.update notification looks like the following: { "event_type": "api.update.segments.start", "timestamp": "2018-11-27 14:32:20.396940", "payload": { "masakari_object.name": "SegmentApiPayload", "masakari_object.data": { "description": null, "fault": null, "recovery_method": "auto", "name": "test", "service_type": "compute", "id": 877, "uuid": "89597691-bebd-4860-a93e-1b6e9de34b9e" }, " "masakari_object.version": "1.0", "masakari_object.namespace": "masakari" }, "priority": "INFO", "publisher_id": "masakari-api:test-virtualbox", "message_id": "e6322900-025d-4dd6-a3a1-3e0e1e9badeb" } The serialized oslo versionedobject as a payload provides a version number to the consumer so the consumer can detect if the structure of the payload is changed. Masakari provides the following contract regarding the versioned notification payload: • the payload version defined by the masakari_object.version field of the payload will be increased only if the syntax or the semantics of the masakari_object.data field of the payload is changed. • a minor version bump indicates a backward compatible change which means that only new fields are added to the payload so a well written consumer can still consume the new payload without any change. • a major version bump indicates a backward incompatible change of the payload which can mean removed fields, type change, etc in the payload. • there is an additional field 'masakari_object.name' for every payload besides 'masakari_object.data' and 'masakari_object.version'. This field contains the name of the Masakari internal representation of the payload type. Client code should not depend on this name. Existing versioned notifications • This provides the list of existing versioned notifications with sample payloads. ┌───────────────────────────┬─────────────────────────────┬────────────────────────┬────────┐ │Event type │ Notification class │ Payload class │ Sample │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │error.exception │ ExceptionNotification │ ExceptionPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │create.host.end │ HostApiNotification │ HostApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │create.host.start │ HostApiNotification │ HostApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │delete.host.end │ HostApiNotification │ HostApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │delete.host.start │ HostApiNotification │ HostApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │update.host.end │ HostApiNotification │ HostApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │update.host.start │ HostApiNotification │ HostApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │create.notification.end │ NotificationApiNotification │ NotificationApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │create.notification.start │ NotificationApiNotification │ NotificationApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │process.notification.end │ NotificationApiNotification │ NotificationApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │process.notification.error │ NotificationApiNotification │ NotificationApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │process.notification.start │ NotificationApiNotification │ NotificationApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │create.segment.end │ SegmentApiNotification │ SegmentApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │create.segment.start │ SegmentApiNotification │ SegmentApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │delete.segment.end │ SegmentApiNotification │ SegmentApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │delete.segment.start │ SegmentApiNotification │ SegmentApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │update.segment.end │ SegmentApiNotification │ SegmentApiPayload │ │ ├───────────────────────────┼─────────────────────────────┼────────────────────────┼────────┤ │update.segment.start │ SegmentApiNotification │ SegmentApiPayload │ │ └───────────────────────────┴─────────────────────────────┴────────────────────────┴────────┘ Masakari team process Masakari is always evolving its processes to ensure productive communication between all members of our community easily. OpenStack Wide Patterns Masakari follows most of the generally adopted norms for OpenStack projects. You can get more details here: • https://docs.openstack.org/infra/manual/developers.html • https://docs.openstack.org/project-team-guide/ If you are new to Masakari, please read this first: getting_involved. How do I get my code merged? OK, so you are new to Masakari, and you have been given a feature to implement. How do I make that happen? You can get most of your questions answered here: • https://docs.openstack.org/infra/manual/developers.html But let's put a Masakari specific twist on things... Overview [image: Flow chart showing the Masakari bug/feature process] [image] Where do you track bugs? We track bugs here: • https://bugs.launchpad.net/masakari If you fix an issue, please raise a bug so others who spot that issue can find the fix you kindly created for them. Also before submitting your patch it's worth checking to see if someone has already fixed it for you (Launchpad helps you with that, at little, when you create the bug report). When do I need a blueprint vs. a spec? To understand this question, we need to understand why blueprints and specs are useful. But here is the rough idea: • if it needs a spec, it will need a blueprint. • if it's an API change, it needs a spec. • if it's a single small patch that touches a small amount of code, with limited deployer and doc impact, it probably doesn't need a spec. If you are unsure, please ask PTL or one of the other masakari-core on IRC. How do I get my blueprint approved? So you need your blueprint approved? Here is how: • if you don't need a spec, please add a link to your blueprint to the agenda for the next masakari meeting: https://wiki.openstack.org/wiki/Meetings/Masakari • be sure your blueprint description has enough context for the review in that meeting. • if you need a spec, then please submit a masakari-spec for review. Got any more questions? Contact samP or one of the other masakari-core who are awake at the same time as you. IRC is best as you will often get an immediate response, if they are too busy send him/her an email. How do I get a procedural -2 removed from my patch? When feature freeze hits, any patches for blueprints that are still in review get a procedural -2 to stop them merging. In Masakari a blueprint is only approved for a single release. To have the -2 removed, you need to get the blueprint approved for the current release (see How do I get my blueprint approved?). My code review seems stuck, what can I do? First and foremost - address any -1s and -2s! A few tips: • Be precise. Ensure you're not talking at cross purposes. • Try to understand where the reviewer is coming from. They may have a very different perspective and/or use-case to you. • If you don't understand the problem, ask them to explain - this is common and helpful behavior. • Be positive. Everyone's patches have issues, including core reviewers. No-one cares once the issues are fixed. • Try not to flip-flop. When two reviewers are pulling you in different directions, stop pushing code and negotiate the best way forward. • If the reviewer does not respond to replies left on the patchset, reach out to them on IRC or email. If they still don't respond, you can try to ask their colleagues if they're on holiday (or simply wait). Finally, you can ask for mediation in the Masakari meeting by adding it to the agenda (‐ https://wiki.openstack.org/wiki/Meetings/Masakari). This is also what you should do if you are unable to negotiate a resolution to an issue. Eventually you should get some +1s from people working through the review queue. Expect to get -1s as well. You can ask for reviews within your company, 1-2 are useful (not more), especially if those reviewers are known to give good reviews. You can spend some time while you wait reviewing other people's code - they may reciprocate and you may learn something (Why do code reviews when I'm not core?). If you've waited an appropriate amount of time and you haven't had any +1s, you can ask on IRC for reviews. Please don't ask for core review straight away, especially not directly (IRC or email). Core reviewer time is very valuable and gaining some +1s is a good way to show your patch meets basic quality standards. Once you have a few +1s, be patient. Remember the average wait times. You can ask for reviews each week in IRC, it helps to ask when cores are awake. Bugs It helps to apply correct tracking information. • Put "Closes-Bug", "Partial-Bug" or "Related-Bug" in the commit message tags as necessary. • If you have to raise a bug in Launchpad first, do it - this helps someone else find your fix. • Make sure the bug has the correct priority and tag set. Features Again, it helps to apply correct tracking information. For blueprint-only features: • Put your blueprint in the commit message, EG "blueprint simple-feature". • Mark the blueprint as NeedsCodeReview if you are finished. • Maintain the whiteboard on the blueprint so it's easy to understand which patches need reviews. • Use a single topic for all related patches. All patches for one blueprint should share a topic. For blueprint and spec features, do everything for blueprint-only features and also: • If it's a project or subteam priority, add it to: https://etherpad.openstack.org/p/masakari-pike-workitems • Ensure your spec is approved for the current release cycle. If it's not a priority, your blueprint/spec has been approved for the cycle and you have been patient, you can raise it during the Masakari meeting. The outcome may be that your spec gets unapproved for the cycle, so that priority items can take focus. If this happens to you, sorry - it should not have been approved in the first place, Masakari team bit off more than they could chew, it is their mistake not yours. You can re-propose it for the next cycle. If it's not a priority and your spec has not been approved, your code will not merge this cycle. Please re-propose your spec for the next cycle.
SEARCH
• search: Search the contents of this document. • OpenStack wide search: Search the wider set of OpenStack documentation, including forums.
COPYRIGHT
2021, OpenStack Foundation Jun 11, 2021 MASAKARI(1)