diff --git a/openstack-placement-4.0.0.tar.gz b/openstack-placement-4.0.0.tar.gz new file mode 100644 index 0000000..e82d7a3 Binary files /dev/null and b/openstack-placement-4.0.0.tar.gz differ diff --git a/openstack-placement-api.conf.sample b/openstack-placement-api.conf.sample new file mode 100644 index 0000000..55877d0 --- /dev/null +++ b/openstack-placement-api.conf.sample @@ -0,0 +1,675 @@ +[DEFAULT] + +# +# 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 = + +# 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 = + +# (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 = + +# 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 - +# Minutes - +# Hours - +# Days - +# Weekday - +# Midnight - +#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 placement.conf +# + +# Explicitly specify the temporary working directory. (string value) +#tempdir = + +# +# The directory where the Placement python modules are installed. +# +# This is the default path for other config options which need to persist +# Placement internal data. It is very unlikely that you need to +# change this option from its default value. +# +# Possible values: +# +# * The full path to a directory. +# +# Related options: +# +# * ``state_path`` +# (string value) +# +# This option has a sample default set, which means that +# its actual default value may vary from the one documented +# below. +#pybasedir = + +# +# The top-level directory for maintaining state used in Placement. +# +# This directory is used to store Placement's internal state. It is used by some +# tests that have behaviors carried over from Nova. +# +# Possible values: +# +# * The full path to a directory. Defaults to value provided in ``pybasedir``. +# (string value) +#state_path = $pybasedir + + +[api] +# +# Options under this group are used to define Placement API. + +# +# From placement.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. +# (string value) +# Possible values: +# keystone - +# noauth2 - +#auth_strategy = keystone + + +[cors] + +# +# From oslo.middleware.cors +# + +# Indicate whether this resource may be shared with the domain received in the +# requests "origin" header. Format: "://[:]", no trailing +# slash. Example: https://horizon.example.com (list value) +#allowed_origin = + +# 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 = + + +[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 = + +# 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 = + +# API version of the Identity API endpoint. (string value) +#auth_version = + +# Interface to use for the Identity API endpoint. Valid values are "public", +# "internal" (default) or "admin". (string value) +#interface = internal + +# 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 = + +# 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 = + +# Required if identity server requires client certificate (string value) +#certfile = + +# Required if identity server requires client certificate (string value) +#keyfile = + +# A PEM encoded Certificate Authority to use when verifying HTTPs connections. +# Defaults to system CAs. (string value) +#cafile = + +# Verify HTTPS connections. (boolean value) +#insecure = false + +# The region in which the identity server can be found. (string value) +#region_name = + +# 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 = + +# 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 - +# MAC - +# ENCRYPT - +#memcache_security_strategy = None + +# (Optional, mandatory if memcache_security_strategy is defined) This string is +# used for key derivation. (string value) +#memcache_secret_key = + +# (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 = + +# Authentication type to load (string value) +# Deprecated group/name - [keystone_authtoken]/auth_plugin +#auth_type = + +# Config Section from which to load plugin specific options (string value) +#auth_section = + + +[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 - +# application/json - +#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 = + +# Absolute path to client cert for REST based policy check (string value) +#remote_ssl_client_crt_file = + +# Absolute path client key file REST based policy check (string value) +#remote_ssl_client_key_file = + + +[placement] + +# +# From placement.conf +# + +# +# If True, when limiting allocation candidate results, the results will be +# a random sampling of the full result set. If False, allocation candidates +# are returned in a deterministic but undefined order. That is, all things +# being equal, two requests for allocation candidates will return the same +# results in the same order; but no guarantees are made as to how that order +# is determined. +# (boolean value) +#randomize_allocation_candidates = false + +# +# Early API microversions (<1.8) allowed creating allocations and not specifying +# a project or user identifier for the consumer. In cleaning up the data +# modeling, we no longer allow missing project and user information. If an older +# client makes an allocation, we'll use this in place of the information it +# doesn't provide. +# (string value) +#incomplete_consumer_project_id = 00000000-0000-0000-0000-000000000000 + +# +# Early API microversions (<1.8) allowed creating allocations and not specifying +# a project or user identifier for the consumer. In cleaning up the data +# modeling, we no longer allow missing project and user information. If an older +# client makes an allocation, we'll use this in place of the information it +# doesn't provide. +# (string value) +#incomplete_consumer_user_id = 00000000-0000-0000-0000-000000000000 + +# +# The number of times to retry, server-side, writing allocations when there is +# a resource provider generation conflict. Raising this value may be useful +# when many concurrent allocations to the same resource provider are expected. +# (integer value) +#allocation_conflict_retry_count = 10 + + +[placement_database] +# +# The *Placement API Database* is a the database used with the placement +# service. If the connection option is not set, the placement service will +# not start. + +# +# From placement.conf +# + +# The SQLAlchemy connection string to use to connect to the database. (string +# value) +#connection = + +# Optional URL parameters to append onto the connection URL at connect time; +# specify as param1=value1¶m2=value2&... (string value) +#connection_parameters = + +# If True, SQLite uses synchronous mode. (boolean value) +#sqlite_synchronous = true + +# The SQLAlchemy connection string to use to connect to the slave database. +# (string value) +#slave_connection = + +# 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 + +# 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) +#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) +#max_pool_size = + +# Maximum number of database connection retries during startup. Set to -1 to +# specify an infinite retry count. (integer value) +#max_retries = 10 + +# Interval between retries of opening a SQL connection. (integer value) +#retry_interval = 10 + +# If set, use this value for max_overflow with SQLAlchemy. (integer value) +#max_overflow = + +# Verbosity of SQL debugging information: 0=None, 100=Everything. (integer +# value) +#connection_debug = 0 + +# Add Python stack traces to SQL as comment strings. (boolean value) +#connection_trace = false + +# If set, use this value for pool_timeout with SQLAlchemy. (integer value) +#pool_timeout = + +# If True, database schema migrations will be attempted when the web service +# starts. (boolean value) +#sync_on_startup = false + + +[profiler] + +# +# From osprofiler +# + +# +# Enable the profiling for all services on this node. +# +# Default value is False (fully disable the profiling feature). +# +# Possible values: +# +# * True: Enables the feature +# * False: Disables the feature. The profiling cannot be started via this +# project +# operations. If the profiling is triggered by another project, this project +# part will be empty. +# (boolean value) +# Deprecated group/name - [profiler]/profiler_enabled +#enabled = false + +# +# Enable SQL requests profiling in services. +# +# Default value is False (SQL requests won't be traced). +# +# Possible values: +# +# * True: Enables SQL requests profiling. Each SQL query will be part of the +# trace and can the be analyzed by how much time was spent for that. +# * False: Disables SQL requests profiling. The spent time is only shown on a +# higher level of operations. Single SQL queries cannot be analyzed this way. +# (boolean value) +#trace_sqlalchemy = false + +# +# Secret key(s) to use for encrypting context data for performance profiling. +# +# This string value should have the following format: [,,...], +# where each key is some random string. A user who triggers the profiling via +# the REST API has to set one of these keys in the headers of the REST API call +# to include profiling results of this node for this particular project. +# +# Both "enabled" flag and "hmac_keys" config options should be set to enable +# profiling. Also, to generate correct profiling information across all services +# at least one key needs to be consistent between OpenStack projects. This +# ensures it can be used from client side to generate the trace, containing +# information from all possible resources. +# (string value) +#hmac_keys = SECRET_KEY + +# +# Connection string for a notifier backend. +# +# Default value is ``messaging://`` which sets the notifier to oslo_messaging. +# +# Examples of possible values: +# +# * ``messaging://`` - use oslo_messaging driver for sending spans. +# * ``redis://127.0.0.1:6379`` - use redis driver for sending spans. +# * ``mongodb://127.0.0.1:27017`` - use mongodb driver for sending spans. +# * ``elasticsearch://127.0.0.1:9200`` - use elasticsearch driver for sending +# spans. +# * ``jaeger://127.0.0.1:6831`` - use jaeger tracing as driver for sending +# spans. +# (string value) +#connection_string = messaging:// + +# +# Document type for notification indexing in elasticsearch. +# (string value) +#es_doc_type = notification + +# +# This parameter is a time value parameter (for example: es_scroll_time=2m), +# indicating for how long the nodes that participate in the search will maintain +# relevant resources in order to continue and support it. +# (string value) +#es_scroll_time = 2m + +# +# Elasticsearch splits large requests in batches. This parameter defines +# maximum size of each batch (for example: es_scroll_size=10000). +# (integer value) +#es_scroll_size = 10000 + +# +# Redissentinel provides a timeout option on the connections. +# This parameter defines that timeout (for example: socket_timeout=0.1). +# (floating point value) +#socket_timeout = 0.1 + +# +# Redissentinel uses a service name to identify a master redis service. +# This parameter defines the name (for example: +# ``sentinal_service_name=mymaster``). +# (string value) +#sentinel_service_name = mymaster + +# +# Enable filter traces that contain error/exception to a separated place. +# +# Default value is set to False. +# +# Possible values: +# +# * True: Enable filter traces that contain error/exception. +# * False: Disable the filter. +# (boolean value) +#filter_error_trace = false diff --git a/openstack-placement.README.config b/openstack-placement.README.config new file mode 100644 index 0000000..151e102 --- /dev/null +++ b/openstack-placement.README.config @@ -0,0 +1,30 @@ +The main service configuration (/etc/$project/$project.conf) can still be used +for configuration but the preferred way is to add config file snippets into +/etc/$project/$project.conf.d/ instead. + +As part of the packaging, the package itself installs a config snippet at +/etc/$project/$project.conf.d/010-$project.conf with basic configuration. This +file should not be modified. In case there is a need to overwrite or add +settings, a XXX-$project.conf (XXX being a 3 digit number) should be created +instead. + +Config directory file snippet naming should follow these conventions: +- snippets should start with "XXX-" where "X" is a number +- snippets must end with ".conf" +- config management systems (Crowbar, Salt, ...) should use numbers + between 100 and 499 +- users should use numbers starting from 500 + +Configuring just a single $program (eg for Nova, $project is "nova" and +$program is "nova-api", "nova-compute", "nova-scheduler", ...) can be done +in a similar way. The config snippets should be placed in +/etc/$project/$program.conf.d/ . The same snippets rules apply here, too. + +$program reads the configuration files in the following order: +- /etc/$project/$project.conf +- /etc/$project/$project.conf.d/*.conf (lexically sorted) +- /etc/$project/$program.conf.d/*.conf (lexically sorted) + +The last configured key overwrites all previous ones. In particular, settings +in /etc/$project/$project.conf are overwritten by config values from any file +in /etc/$project/$project.conf.d/XXX-$project.conf . \ No newline at end of file diff --git a/openstack-placement.defaultconf b/openstack-placement.defaultconf new file mode 100644 index 0000000..c6634a0 --- /dev/null +++ b/openstack-placement.defaultconf @@ -0,0 +1,2 @@ +[DEFAULT] +log_dir=/var/log/placement diff --git a/openstack-placement.logrotate b/openstack-placement.logrotate new file mode 100644 index 0000000..640bd07 --- /dev/null +++ b/openstack-placement.logrotate @@ -0,0 +1,13 @@ +/var/log/placement/*.log { + compress + copytruncate + dateext + minsize 100k + missingok + notifempty + rotate 10 + sharedscripts + size 1M + su placement placement + weekly +} \ No newline at end of file diff --git a/openstack-placement.spec b/openstack-placement.spec new file mode 100644 index 0000000..50360f6 --- /dev/null +++ b/openstack-placement.spec @@ -0,0 +1,192 @@ +%{!?upstream_version: %global upstream_version %{version}%{?milestone}} + +Name: openstack-placement +Version: 4.0.0 +Release: 1 +Summary: OpenStack Placement + +License: ASL 2.0 +Group: System/Management +URL: https://docs.openstack.org/placement/ +Source0: openstack-placement-%{upstream_version}.tar.gz + +Source1: openstack-placement.logrotate +Source3: openstack-placement-api.conf.sample +Source4: openstack-placement.defaultconf +Source40: openstack-placement.README.config + +BuildArch: noarch + +BuildRequires: openstack-macros +BuildRequires: python3-routes +BuildRequires: python3-webob +BuildRequires: python3-jsonschema +BuildRequires: python3-keystonemiddleware +BuildRequires: python3-microversion-parse +BuildRequires: python3-mock +BuildRequires: python3-os-resource-classes +BuildRequires: python3-os-traits +BuildRequires: python3-oslo-concurrency +BuildRequires: python3-oslo-config +BuildRequires: python3-oslo-db +BuildRequires: python3-oslo-log +BuildRequires: python3-oslo-middleware +BuildRequires: python3-oslo-policy +BuildRequires: python3-oslotest +BuildRequires: python3-paramiko +BuildRequires: python3-pbr +BuildRequires: python3-stestr + +Requires: logrotate +Requires: python3-openstack-placement = %{version}-%{release} + +BuildRequires: systemd +Requires(post): systemd +Requires(postun): systemd +Requires(pre): shadow-utils +Requires(preun): systemd + + +%description +OpenStack Placement provides an HTTP service for managing, selecting, +and claiming providers of classes of inventory representing available +resources in a cloud. + +%package -n python3-openstack-placement +Summary: OpenStack Placement - Python module +Group: Development/Languages/Python +Requires: python3-routes +Requires: python3-sqlalchemy +Requires: python3-webob +Requires: python3-jsonschema +Requires: python3-keystonemiddleware +Requires: python3-microversion-parse +Requires: python3-os-resource-classes +Requires: python3-os-traits +Requires: python3-oslo-concurrency +Requires: python3-oslo-config +Requires: python3-oslo-context +Requires: python3-oslo-db +Requires: python3-oslo-log +Requires: python3-oslo-middleware +Requires: python3-oslo-policy +Requires: python3-oslo-serialization +Requires: python3-oslo-upgradecheck +Requires: python3-oslo-utils +Requires: python3-pbr +Requires: python3-requests +Requires: python3-six +Requires: python3-sqlalchemy +Requires: python3-wsgi_intercept + +%description -n python3-openstack-placement +This package contains the core Python module of OpenStack Placement. + +%package api +Summary: OpenStack Compute (Placement) - API +# prereq for creating the right openstack-placement user/group +Group: System/Management +Requires: %{name} = %{version} +Requires(pre): %{name} = %{version} +BuildRequires: python3-mod_wsgi +Requires: python3-mod_wsgi + +%description api +This package contains the OpenStack Placement API. + +%prep +%autosetup -p1 -n openstack-placement-%{upstream_version} +%py_req_cleanup + +%build +python3 setup.py build + +# sample config +PYTHONPATH=. oslo-config-generator --config-file=etc/placement/config-generator.conf +# sample policy +PYTHONPATH=. oslopolicy-sample-generator --config-file=etc/placement/policy-generator.conf + +%install +python3 setup.py install --root %{buildroot} --prefix %{_prefix} + +### directories +install -d -m 755 %{buildroot}%{_localstatedir}/lib/placement +install -d -m 755 %{buildroot}%{_localstatedir}/lib/placement/images +install -d -m 755 %{buildroot}%{_localstatedir}/lib/placement/instances +install -d -m 755 %{buildroot}%{_localstatedir}/lib/placement/keys +install -d -m 755 %{buildroot}%{_localstatedir}/lib/placement/networks +install -d -m 755 %{buildroot}%{_localstatedir}/lib/placement/tmp +install -d -m 750 %{buildroot}%{_localstatedir}/log/placement +install -d -m 700 %{buildroot}%{_rundir}/placement +install -d -m 700 %{buildroot}%{_localstatedir}/cache/placement +install -D -m 644 %{SOURCE4} %{buildroot}/%_tmpfilesdir/%name.conf +install -d %{buildroot}%apache_site_dir + +# apache vhost sample configs +install -p -D -m 644 %{SOURCE3} %{buildroot}%apache_site_dir + +### configuration files +install -d -m 755 %{buildroot}%{_sysconfdir}/placement/ +#mv %{buildroot}/usr/etc/placement/* %{buildroot}%{_sysconfdir}/placement/ +install -d -m 755 %{buildroot}%{_sysconfdir}/placement/placement.conf.d +install -p -D -m 640 %{SOURCE40} %{buildroot}%{_sysconfdir}/placement/README.config +install -p -D -m 640 etc/placement/placement.conf.sample %{buildroot}%{_sysconfdir}/placement/placement.conf +install -p -D -m 640 etc/placement/policy.yaml.sample %{buildroot}%{_sysconfdir}/placement/policy.yaml +# bash-completion/logrotate/etc. +install -p -D -m 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/logrotate.d/%{name} + + +### set default configuration +install -p -D -m 640 %{SOURCE4} %{buildroot}%{_sysconfdir}/placement/placement.conf.d/010-placement.conf + +%pre +%openstack_pre_user_group_create placement placement + +%post +%tmpfiles_create %{_tmpfilesdir}/%{name}.conf + +%post api +%systemd_post openstack-placement-api.service + +%preun api +%systemd_preun openstack-placement-api.service + +%postun api +%systemd_postun_with_restart openstack-placement-api.service + +%files +%license LICENSE +%doc README.rst +%config(noreplace) %{_sysconfdir}/logrotate.d/%{name} +%dir %{_sysconfdir}/placement +%dir %{_sysconfdir}/placement/placement.conf.d/ +%{_sysconfdir}/placement/README.config +%dir %attr(0750, placement, placement) %{_localstatedir}/cache/placement +%config(noreplace) %attr(0640, root, placement) %{_sysconfdir}/placement/placement.conf +%config(noreplace) %attr(0640, root, placement) %{_sysconfdir}/placement/placement.conf.d/010-placement.conf +%config %attr(0640, root, placement) %{_sysconfdir}/placement/policy.yaml +%dir %attr(0755, placement, placement) %{_localstatedir}/lib/placement +%dir %attr(0750, placement, placement) %{_localstatedir}/log/placement +%_tmpfilesdir/%name.conf +%{_bindir}/placement-manage +%{_bindir}/placement-status +%dir %attr(0755, root, root) %{_localstatedir}/lib/placement/images +%dir %attr(0755, placement, root) %{_localstatedir}/lib/placement/instances +%dir %attr(0755, root, root) %{_localstatedir}/lib/placement/keys +%dir %attr(0755, root, root) %{_localstatedir}/lib/placement/networks +%dir %attr(0755, root, root) %{_localstatedir}/lib/placement/tmp + +%files -n python3-openstack-placement +%license LICENSE +%{python3_sitelib}/placement/ +%{python3_sitelib}/placement_db_tools/ +%{python3_sitelib}/openstack_placement*egg-info + +%files api +%license LICENSE +%{_bindir}/placement-api +%{apache_site_dir}/openstack-placement-api.conf.sample + +%changelog +* Wed Feb 03 2021 ZhengZhenyu +- Update init