Skip to content

Instantly share code, notes, and snippets.

@yosshy
Created July 15, 2014 16:02
Show Gist options
  • Save yosshy/1b65d439a9f4fba2dc18 to your computer and use it in GitHub Desktop.
Save yosshy/1b65d439a9f4fba2dc18 to your computer and use it in GitHub Desktop.
Monkey Patch for Glance
[DEFAULT]
rabbit_hosts = 192.168.33.102
rpc_backend = glance.openstack.common.rpc.impl_kombu
notification_driver = messaging
use_syslog = False
sql_connection = mysql://root:[email protected]/glance?charset=utf8
debug = True
# Show more verbose log output (sets INFO log level output)
#verbose = False
# Show debugging output in logs (sets DEBUG log level output)
#debug = False
# Which backend scheme should Glance use by default is not specified
# in a request to add a new image to Glance? Known schemes are determined
# by the known_stores option below.
# Default: 'file'
default_store = file
# List of which store classes and store class locations are
# currently known to glance at startup.
# Existing but disabled stores:
# glance.store.rbd.Store,
# glance.store.s3.Store,
# glance.store.swift.Store,
# glance.store.sheepdog.Store,
# glance.store.cinder.Store,
# glance.store.gridfs.Store,
# glance.store.vmware_datastore.Store,
#known_stores = glance.store.filesystem.Store,
# glance.store.http.Store
# Maximum image size (in bytes) that may be uploaded through the
# Glance API server. Defaults to 1 TB.
# WARNING: this value should only be increased after careful consideration
# and must be set to a value under 8 EB (9223372036854775808).
#image_size_cap = 1099511627776
# Address to bind the API server
bind_host = 0.0.0.0
# Port the bind the API server to
bind_port = 9292
# Log to this file. Make sure you do not set the same log file for both the API
# and registry servers!
#
# If `log_file` is omitted and `use_syslog` is false, then log messages are
# sent to stdout as a fallback.
#log_file = /var/log/glance/api.log
# Backlog requests when creating socket
backlog = 4096
# TCP_KEEPIDLE value in seconds when creating socket.
# Not supported on OS X.
#tcp_keepidle = 600
# API to use for accessing data. Default value points to sqlalchemy
# package, it is also possible to use: glance.db.registry.api
# data_api = glance.db.sqlalchemy.api
# Number of Glance API worker processes to start.
# On machines with more than one CPU increasing this value
# may improve performance (especially if using SSL with
# compression turned on). It is typically recommended to set
# this value to the number of CPUs present on your machine.
workers = 1
# 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)
# max_header_line = 16384
# Role used to identify an authenticated user as administrator
#admin_role = admin
# Allow unauthenticated users to access the API with read-only
# privileges. This only applies when using ContextMiddleware.
#allow_anonymous_access = False
# Allow access to version 1 of glance api
#enable_v1_api = True
# Allow access to version 2 of glance api
#enable_v2_api = True
# Return the URL that references where the data is stored on
# the backend storage system. For example, if using the
# file system store a URL of 'file:///path/to/image' will
# be returned to the user in the 'direct_url' meta-data field.
# The default value is false.
#show_image_direct_url = False
# Send headers containing user and tenant information when making requests to
# the v1 glance registry. This allows the registry to function as if a user is
# authenticated without the need to authenticate a user itself using the
# auth_token middleware.
# The default value is false.
#send_identity_headers = False
# Supported values for the 'container_format' image attribute
#container_formats=ami,ari,aki,bare,ovf,ova
# Supported values for the 'disk_format' image attribute
#disk_formats=ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso
# Directory to use for lock files. Default to a temp directory
# (string value). This setting needs to be the same for both
# glance-scrubber and glance-api.
#lock_path=<None>
# Property Protections config file
# This file contains the rules for property protections and the roles/policies
# associated with it.
# If this config value is not specified, by default, property protections
# won't be enforced.
# If a value is specified and the file is not found, then the glance-api
# service will not start.
#property_protection_file =
# Specify whether 'roles' or 'policies' are used in the
# property_protection_file.
# The default value for property_protection_rule_format is 'roles'.
#property_protection_rule_format = roles
# Specifies how long (in hours) a task is supposed to live in the tasks DB
# after succeeding or failing before getting soft-deleted.
# The default value for task_time_to_live is 48 hours.
# task_time_to_live = 48
# This value sets what strategy will be used to determine the image location
# order. Currently two strategies are packaged with Glance 'location_order'
# and 'store_type'.
#location_strategy = location_order
# ================= Syslog Options ============================
# Send logs to syslog (/dev/log) instead of to file specified
# by `log_file`
#use_syslog = False
# Facility to use. If unset defaults to LOG_USER.
#syslog_log_facility = LOG_LOCAL0
# ================= SSL Options ===============================
# Certificate file to use when starting API server securely
#cert_file = /path/to/certfile
# Private key file to use when starting API server securely
#key_file = /path/to/keyfile
# CA certificate file to use to verify connecting clients
#ca_file = /path/to/cafile
# ================= Security Options ==========================
# AES key for encrypting store 'location' metadata, including
# -- if used -- Swift or S3 credentials
# Should be set to a random string of length 16, 24 or 32 bytes
#metadata_encryption_key = <16, 24 or 32 char registry metadata key>
# ============ Registry Options ===============================
# Address to find the registry server
registry_host = 0.0.0.0
# Port the registry server is listening on
registry_port = 9191
# What protocol to use when connecting to the registry server?
# Set to https for secure HTTP communication
registry_client_protocol = http
# The path to the key file to use in SSL connections to the
# registry server, if any. Alternately, you may set the
# GLANCE_CLIENT_KEY_FILE environ variable to a filepath of the key file
#registry_client_key_file = /path/to/key/file
# The path to the cert file to use in SSL connections to the
# registry server, if any. Alternately, you may set the
# GLANCE_CLIENT_CERT_FILE environ variable to a filepath of the cert file
#registry_client_cert_file = /path/to/cert/file
# The path to the certifying authority cert file to use in SSL connections
# to the registry server, if any. Alternately, you may set the
# GLANCE_CLIENT_CA_FILE environ variable to a filepath of the CA cert file
#registry_client_ca_file = /path/to/ca/file
# When using SSL in connections to the registry server, do not require
# validation via a certifying authority. This is the registry's equivalent of
# specifying --insecure on the command line using glanceclient for the API
# Default: False
#registry_client_insecure = False
# The period of time, in seconds, that the API server will wait for a registry
# request to complete. A value of '0' implies no timeout.
# Default: 600
#registry_client_timeout = 600
# Whether to automatically create the database tables.
# Default: False
#db_auto_create = False
# Enable DEBUG log messages from sqlalchemy which prints every database
# query and response.
# Default: False
#sqlalchemy_debug = True
# Pass the user's token through for API requests to the registry.
# Default: True
#use_user_token = True
# If 'use_user_token' is not in effect then admin credentials
# can be specified. Requests to the registry on behalf of
# the API will use these credentials.
# Admin user name
#admin_user = None
# Admin password
#admin_password = None
# Admin tenant name
#admin_tenant_name = None
# Keystone endpoint
#auth_url = None
# Keystone region
#auth_region = None
# Auth strategy
#auth_strategy = keystone
# ============ Notification System Options =====================
# Notifications can be sent when images are create, updated or deleted.
# There are three methods of sending notifications, logging (via the
# log_file directive), rabbit (via a rabbitmq queue), qpid (via a Qpid
# message queue), or noop (no notifications sent, the default)
# NOTE: THIS CONFIGURATION OPTION HAS BEEN DEPRECATED IN FAVOR OF `notification_driver`
# notifier_strategy = default
# Driver or drivers to handle sending notifications
# notification_driver = noop
# Default publisher_id for outgoing notifications.
# default_publisher_id = image.localhost
# Configuration options if sending notifications via rabbitmq (these are
# the defaults)
rabbit_host = localhost
rabbit_port = 5672
rabbit_use_ssl = false
rabbit_userid = guest
rabbit_password = openstack
rabbit_virtual_host = /
rabbit_notification_exchange = glance
rabbit_notification_topic = notifications
rabbit_durable_queues = False
# Configuration options if sending notifications via Qpid (these are
# the defaults)
qpid_notification_exchange = glance
qpid_notification_topic = notifications
qpid_hostname = localhost
qpid_port = 5672
qpid_username =
qpid_password =
qpid_sasl_mechanisms =
qpid_reconnect_timeout = 0
qpid_reconnect_limit = 0
qpid_reconnect_interval_min = 0
qpid_reconnect_interval_max = 0
qpid_reconnect_interval = 0
qpid_heartbeat = 5
# Set to 'ssl' to enable SSL
qpid_protocol = tcp
qpid_tcp_nodelay = True
# ============ Filesystem Store Options ========================
# Directory that the Filesystem backend store
# writes image data to
filesystem_store_datadir = /opt/stack/data/glance/images/
# A list of directories where image data can be stored.
# This option may be specified multiple times for specifying multiple store
# directories. Either one of filesystem_store_datadirs or
# filesystem_store_datadir option is required. A priority number may be given
# after each directory entry, separated by a ":".
# When adding an image, the highest priority directory will be selected, unless
# there is not enough space available in cases where the image size is already
# known. If no priority is given, it is assumed to be zero and the directory
# will be considered for selection last. If multiple directories have the same
# priority, then the one with the most free space available is selected.
# If same store is specified multiple times then BadStoreConfiguration
# exception will be raised.
#filesystem_store_datadirs = /var/lib/glance/images/:1
# A path to a JSON file that contains metadata describing the storage
# system. When show_multiple_locations is True the information in this
# file will be returned with any location that is contained in this
# store.
#filesystem_store_metadata_file = None
# ============ Swift Store Options =============================
# Version of the authentication service to use
# Valid versions are '2' for keystone and '1' for swauth and rackspace
swift_store_auth_version = 2
# Address where the Swift authentication service lives
# Valid schemes are 'http://' and 'https://'
# If no scheme specified, default to 'https://'
# For swauth, use something like '127.0.0.1:8080/v1.0/'
swift_store_auth_address = 127.0.0.1:5000/v2.0/
# User to authenticate against the Swift authentication service
# If you use Swift authentication service, set it to 'account':'user'
# where 'account' is a Swift storage account and 'user'
# is a user in that account
swift_store_user = jdoe:jdoe
# Auth key for the user authenticating against the
# Swift authentication service
swift_store_key = a86850deb2742ec3cb41518e26aa2d89
# Container within the account that the account should use
# for storing images in Swift
swift_store_container = glance
# Do we create the container if it does not exist?
swift_store_create_container_on_put = False
# What size, in MB, should Glance start chunking image files
# and do a large object manifest in Swift? By default, this is
# the maximum object size in Swift, which is 5GB
swift_store_large_object_size = 5120
# When doing a large object manifest, what size, in MB, should
# Glance write chunks to Swift? This amount of data is written
# to a temporary disk buffer during the process of chunking
# the image file, and the default is 200MB
swift_store_large_object_chunk_size = 200
# Whether to use ServiceNET to communicate with the Swift storage servers.
# (If you aren't RACKSPACE, leave this False!)
#
# To use ServiceNET for authentication, prefix hostname of
# `swift_store_auth_address` with 'snet-'.
# Ex. https://example.com/v1.0/ -> https://snet-example.com/v1.0/
swift_enable_snet = False
# If set to True enables multi-tenant storage mode which causes Glance images
# to be stored in tenant specific Swift accounts.
#swift_store_multi_tenant = False
# A list of swift ACL strings that will be applied as both read and
# write ACLs to the containers created by Glance in multi-tenant
# mode. This grants the specified tenants/users read and write access
# to all newly created image objects. The standard swift ACL string
# formats are allowed, including:
# <tenant_id>:<username>
# <tenant_name>:<username>
# *:<username>
# Multiple ACLs can be combined using a comma separated list, for
# example: swift_store_admin_tenants = service:glance,*:admin
#swift_store_admin_tenants =
# The region of the swift endpoint to be used for single tenant. This setting
# is only necessary if the tenant has multiple swift endpoints.
#swift_store_region =
# If set to False, disables SSL layer compression of https swift requests.
# Setting to 'False' may improve performance for images which are already
# in a compressed format, eg qcow2. If set to True, enables SSL layer
# compression (provided it is supported by the target swift proxy).
#swift_store_ssl_compression = True
# The number of times a Swift download will be retried before the
# request fails
#swift_store_retry_get_count = 0
# ============ S3 Store Options =============================
# Address where the S3 authentication service lives
# Valid schemes are 'http://' and 'https://'
# If no scheme specified, default to 'http://'
s3_store_host = 127.0.0.1:8080/v1.0/
# User to authenticate against the S3 authentication service
s3_store_access_key = <20-char AWS access key>
# Auth key for the user authenticating against the
# S3 authentication service
s3_store_secret_key = <40-char AWS secret key>
# Container within the account that the account should use
# for storing images in S3. Note that S3 has a flat namespace,
# so you need a unique bucket name for your glance images. An
# easy way to do this is append your AWS access key to "glance".
# S3 buckets in AWS *must* be lowercased, so remember to lowercase
# your AWS access key if you use it in your bucket name below!
s3_store_bucket = <lowercased 20-char aws access key>glance
# Do we create the bucket if it does not exist?
s3_store_create_bucket_on_put = False
# When sending images to S3, the data will first be written to a
# temporary buffer on disk. By default the platform's temporary directory
# will be used. If required, an alternative directory can be specified here.
#s3_store_object_buffer_dir = /path/to/dir
# When forming a bucket url, boto will either set the bucket name as the
# subdomain or as the first token of the path. Amazon's S3 service will
# accept it as the subdomain, but Swift's S3 middleware requires it be
# in the path. Set this to 'path' or 'subdomain' - defaults to 'subdomain'.
#s3_store_bucket_url_format = subdomain
# ============ RBD Store Options =============================
# Ceph configuration file path
# If using cephx authentication, this file should
# include a reference to the right keyring
# in a client.<USER> section
#rbd_store_ceph_conf = /etc/ceph/ceph.conf
# RADOS user to authenticate as (only applicable if using cephx)
# If <None>, a default will be chosen based on the client. section
# in rbd_store_ceph_conf
#rbd_store_user = <None>
# RADOS pool in which images are stored
#rbd_store_pool = images
# RADOS images will be chunked into objects of this size (in megabytes).
# For best performance, this should be a power of two
#rbd_store_chunk_size = 8
# ============ Sheepdog Store Options =============================
sheepdog_store_address = localhost
sheepdog_store_port = 7000
# Images will be chunked into objects of this size (in megabytes).
# For best performance, this should be a power of two
sheepdog_store_chunk_size = 64
# ============ Cinder Store Options ===============================
# Info to match when looking for cinder in the service catalog
# Format is : separated values of the form:
# <service_type>:<service_name>:<endpoint_type> (string value)
#cinder_catalog_info = volume:cinder:publicURL
# Override service catalog lookup with template for cinder endpoint
# e.g. http://localhost:8776/v1/%(project_id)s (string value)
#cinder_endpoint_template = <None>
# Region name of this node (string value)
#os_region_name = <None>
# Location of ca certicates file to use for cinder client requests
# (string value)
#cinder_ca_certificates_file = <None>
# Number of cinderclient retries on failed http calls (integer value)
#cinder_http_retries = 3
# Allow to perform insecure SSL requests to cinder (boolean value)
#cinder_api_insecure = False
# ============ VMware Datastore Store Options =====================
# ESX/ESXi or vCenter Server target system.
# The server value can be an IP address or a DNS name
# e.g. 127.0.0.1, 127.0.0.1:443, www.vmware-infra.com
#vmware_server_host = <None>
# Server username (string value)
#vmware_server_username = <None>
# Server password (string value)
#vmware_server_password = <None>
# Inventory path to a datacenter (string value)
# Value optional when vmware_server_ip is an ESX/ESXi host: if specified
# should be `ha-datacenter`.
#vmware_datacenter_path = <None>
# Datastore associated with the datacenter (string value)
#vmware_datastore_name = <None>
# The number of times we retry on failures
# e.g., socket error, etc (integer value)
#vmware_api_retry_count = 10
# The interval used for polling remote tasks
# invoked on VMware ESX/VC server in seconds (integer value)
#vmware_task_poll_interval = 5
# Absolute path of the folder containing the images in the datastore
# (string value)
#vmware_store_image_dir = /openstack_glance
# Allow to perform insecure SSL requests to the target system (boolean value)
#vmware_api_insecure = False
# ============ Delayed Delete Options =============================
# Turn on/off delayed delete
delayed_delete = False
# Delayed delete time in seconds
scrub_time = 43200
# Directory that the scrubber will use to remind itself of what to delete
# Make sure this is also set in glance-scrubber.conf
scrubber_datadir = /var/lib/glance/scrubber
# =============== Quota Options ==================================
# The maximum number of image members allowed per image
#image_member_quota = 128
# The maximum number of image properties allowed per image
#image_property_quota = 128
# The maximum number of tags allowed per image
#image_tag_quota = 128
# The maximum number of locations allowed per image
#image_location_quota = 10
# Set a system wide quota for every user. This value is the total number
# of bytes that a user can use across all storage systems. A value of
# 0 means unlimited.
#user_storage_quota = 0
# =============== Image Cache Options =============================
# Base directory that the Image Cache uses
image_cache_dir = /opt/stack/data/glance/cache/
# =============== Manager Options =================================
# DEPRECATED. TO BE REMOVED IN THE JUNO RELEASE.
# Whether or not to enforce that all DB tables have charset utf8.
# If your database tables do not have charset utf8 you will
# need to convert before this option is removed. This option is
# only relevant if your database engine is MySQL.
#db_enforce_mysql_charset = True
# =============== Database Options =================================
[database]
# The file name to use with SQLite (string value)
#sqlite_db = glance.sqlite
# If True, SQLite uses synchronous mode (boolean value)
#sqlite_synchronous = True
# The backend to use for db (string value)
# Deprecated group/name - [DEFAULT]/db_backend
#backend = sqlalchemy
# The SQLAlchemy connection string used 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 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
# Timeout before idle sql connections are reaped (integer
# value)
# Deprecated group/name - [DEFAULT]/sql_idle_timeout
# Deprecated group/name - [DATABASE]/sql_idle_timeout
# Deprecated group/name - [sql]/idle_timeout
#idle_timeout = 3600
# Minimum number of SQL connections to keep open in a pool
# (integer value)
# Deprecated group/name - [DEFAULT]/sql_min_pool_size
# Deprecated group/name - [DATABASE]/sql_min_pool_size
#min_pool_size = 1
# Maximum number of SQL connections to keep open in a pool
# (integer value)
# Deprecated group/name - [DEFAULT]/sql_max_pool_size
# Deprecated group/name - [DATABASE]/sql_max_pool_size
#max_pool_size = <None>
# Maximum db connection retries during startup. (setting -1
# implies 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 = <None>
# Verbosity of SQL debugging information. 0=None,
# 100=Everything (integer value)
# 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 db connection retries (integer value)
#db_retry_interval = 1
# Whether to increase interval between db connection retries,
# up to db_max_retry_interval (boolean value)
#db_inc_retry_interval = True
# max seconds between db connection retries, if
# db_inc_retry_interval is enabled (integer value)
#db_max_retry_interval = 10
# maximum db connection retries before error is raised.
# (setting -1 implies an infinite retry count) (integer value)
#db_max_retries = 20
[keystone_authtoken]
signing_dir = /var/cache/glance/api
auth_uri = http://192.168.33.102:5000/v2.0
cafile =
auth_host = 192.168.33.102
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = openstack
[paste_deploy]
flavor = keystone+cachemanagement
# Name of the paste configuration file that defines the available pipelines
#config_file = glance-api-paste.ini
# Partial name of a pipeline in your paste configuration file with the
# service name removed. For example, if your paste section name is
# [pipeline:glance-api-keystone], you would configure the flavor below
# as 'keystone'.
#flavor=
[store_type_location_strategy]
# The scheme list to use to get store preference order. The scheme must be
# registered by one of the stores defined by the 'known_stores' config option.
# This option will be applied when you using 'store_type' option as image
# location strategy defined by the 'location_strategy' config option.
#store_type_preference =
[monkey_patch]
enabled = True
target_modules = %%%%
[DEFAULT]
use_syslog = False
sql_connection = mysql://root:[email protected]/glance?charset=utf8
debug = True
# Show more verbose log output (sets INFO log level output)
#verbose = False
# Show debugging output in logs (sets DEBUG log level output)
#debug = False
# Address to bind the registry server
bind_host = 0.0.0.0
# Port the bind the registry server to
bind_port = 9191
# Log to this file. Make sure you do not set the same log file for both the API
# and registry servers!
#
# If `log_file` is omitted and `use_syslog` is false, then log messages are
# sent to stdout as a fallback.
#log_file = /var/log/glance/registry.log
# Backlog requests when creating socket
backlog = 4096
# TCP_KEEPIDLE value in seconds when creating socket.
# Not supported on OS X.
#tcp_keepidle = 600
# API to use for accessing data. Default value points to sqlalchemy
# package.
#data_api = glance.db.sqlalchemy.api
# Enable Registry API versions individually or simultaneously
#enable_v1_registry = True
#enable_v2_registry = True
# Limit the api to return `param_limit_max` items in a call to a container. If
# a larger `limit` query param is provided, it will be reduced to this value.
api_limit_max = 1000
# If a `limit` query param is not provided in an api request, it will
# default to `limit_param_default`
limit_param_default = 25
# Role used to identify an authenticated user as administrator
#admin_role = admin
# Whether to automatically create the database tables.
# Default: False
#db_auto_create = False
# Enable DEBUG log messages from sqlalchemy which prints every database
# query and response.
# Default: False
#sqlalchemy_debug = True
# ================= Syslog Options ============================
# Send logs to syslog (/dev/log) instead of to file specified
# by `log_file`
#use_syslog = False
# Facility to use. If unset defaults to LOG_USER.
#syslog_log_facility = LOG_LOCAL1
# ================= SSL Options ===============================
# Certificate file to use when starting registry server securely
#cert_file = /path/to/certfile
# Private key file to use when starting registry server securely
#key_file = /path/to/keyfile
# CA certificate file to use to verify connecting clients
#ca_file = /path/to/cafile
# ================= Database Options ==========================
[database]
# The file name to use with SQLite (string value)
#sqlite_db = glance.sqlite
# If True, SQLite uses synchronous mode (boolean value)
#sqlite_synchronous = True
# The backend to use for db (string value)
# Deprecated group/name - [DEFAULT]/db_backend
#backend = sqlalchemy
# The SQLAlchemy connection string used 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 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
# Timeout before idle sql connections are reaped (integer
# value)
# Deprecated group/name - [DEFAULT]/sql_idle_timeout
# Deprecated group/name - [DATABASE]/sql_idle_timeout
# Deprecated group/name - [sql]/idle_timeout
#idle_timeout = 3600
# Minimum number of SQL connections to keep open in a pool
# (integer value)
# Deprecated group/name - [DEFAULT]/sql_min_pool_size
# Deprecated group/name - [DATABASE]/sql_min_pool_size
#min_pool_size = 1
# Maximum number of SQL connections to keep open in a pool
# (integer value)
# Deprecated group/name - [DEFAULT]/sql_max_pool_size
# Deprecated group/name - [DATABASE]/sql_max_pool_size
#max_pool_size = <None>
# Maximum db connection retries during startup. (setting -1
# implies 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 = <None>
# Verbosity of SQL debugging information. 0=None,
# 100=Everything (integer value)
# 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 db connection retries (integer value)
#db_retry_interval = 1
# Whether to increase interval between db connection retries,
# up to db_max_retry_interval (boolean value)
#db_inc_retry_interval = True
# max seconds between db connection retries, if
# db_inc_retry_interval is enabled (integer value)
#db_max_retry_interval = 10
# maximum db connection retries before error is raised.
# (setting -1 implies an infinite retry count) (integer value)
#db_max_retries = 20
[keystone_authtoken]
signing_dir = /var/cache/glance/registry
auth_uri = http://192.168.33.102:5000/v2.0
cafile =
auth_host = 192.168.33.102
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = openstack
[paste_deploy]
flavor = keystone
# Name of the paste configuration file that defines the available pipelines
#config_file = glance-registry-paste.ini
# Partial name of a pipeline in your paste configuration file with the
# service name removed. For example, if your paste section name is
# [pipeline:glance-registry-keystone], you would configure the flavor below
# as 'keystone'.
#flavor=
[monkey_patch]
enabled = True
target_modules = %%%%
commit 51d1bcf134ab50f0f19abfd1c15ff3aa9bb05275
Author: Akira Yoshiyama <[email protected]>
Date: Mon Jun 23 12:49:45 2014 +0000
Added calltrace monkey patch.
diff --git a/glance/cmd/api.py b/glance/cmd/api.py
index 37ab59a..27859f9 100755
--- a/glance/cmd/api.py
+++ b/glance/cmd/api.py
@@ -43,6 +43,7 @@ from glance.common import config
from glance.common import exception
from glance.common import wsgi
from glance.openstack.common import log
+from glance.openstack.common import monkeypatch_utils as mp
import glance.store
@@ -55,6 +56,7 @@ def main():
try:
config.parse_args()
log.setup('glance')
+ mp.monkey_patch()
glance.store.create_stores()
glance.store.verify_default_store()
diff --git a/glance/cmd/registry.py b/glance/cmd/registry.py
index 23623a8..8182287 100755
--- a/glance/cmd/registry.py
+++ b/glance/cmd/registry.py
@@ -39,12 +39,14 @@ if os.path.exists(os.path.join(possible_topdir, 'glance', '__init__.py')):
from glance.common import config
from glance.common import wsgi
from glance.openstack.common import log
+from glance.openstack.common import monkeypatch_utils as mp
def main():
try:
config.parse_args()
log.setup('glance')
+ mp.monkey_patch()
server = wsgi.Server()
server.start(config.load_paste_app('glance-registry'),
diff --git a/glance/ct.py b/glance/ct.py
new file mode 100644
index 0000000..6e3ab2e
--- /dev/null
+++ b/glance/ct.py
@@ -0,0 +1,47 @@
+import fcntl
+import inspect
+import os.path
+import eventlet.corolocal
+
+from oslo.config import cfg
+
+
+LOGFILE = "/tmp/calltrace.log"
+binary = os.path.basename(inspect.stack()[-1][1])
+
+PERIODIC_TASKS = [
+ "create_or_update_agent",
+ "get_dhcp_port",
+]
+
+tls = eventlet.corolocal.local()
+
+
+def ct(name, fn):
+
+ def wrapped_func(*args, **kwarg):
+ tid = eventlet.corolocal.get_ident()
+ if hasattr(tls, "periodic_task"):
+ return fn(*args, **kwarg)
+
+ func_name = name.rsplit('.')[-1]
+ if func_name in PERIODIC_TASKS:
+ tls.periodic_task = 1
+ return fn(*args, **kwarg)
+
+ if not hasattr(tls, "count"):
+ tls.count = 0
+ try:
+ with open(LOGFILE, "a") as f:
+ f.write("%s-%s %sentering %s\n" % (
+ binary, tid, "|" * tls.count, name))
+ tls.count += 1
+ return fn(*args, **kwarg)
+
+ finally:
+ tls.count -= 1
+ with open(LOGFILE, "a") as f:
+ f.write("%s-%s %sexiting %s\n" % (
+ binary, tid, "|" * tls.count, name))
+
+ return wrapped_func
diff --git a/glance/openstack/common/monkeypatch_utils.py b/glance/openstack/common/monkeypatch_utils.py
new file mode 100644
index 0000000..68e7ec1
--- /dev/null
+++ b/glance/openstack/common/monkeypatch_utils.py
@@ -0,0 +1,94 @@
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# Copyright 2011 Justin Santa Barbara
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""Monkey Patching Helper."""
+
+import inspect
+import pyclbr
+import sys
+
+import eventlet
+from oslo.config import cfg
+from neutron.openstack.common import importutils
+
+monkey_patch_opts = [
+ cfg.BoolOpt('enabled',
+ default=False,
+ help='Whether to log monkey patching'),
+ cfg.ListOpt('target_modules',
+ default=[],
+ help='List of modules/decorators to monkey patch'),
+ cfg.ListOpt('exclude_methods',
+ default=[],
+ help='List of methods not to monkey patch'),
+]
+
+CONF = cfg.CONF
+CONF.register_opts(monkey_patch_opts, 'monkey_patch')
+
+
+def monkey_patch():
+ """If the CONF.monkey_patch set as True,
+ this function patches a decorator
+ for all functions in specified modules.
+ You can set decorators for each modules
+ using CONF.monkey_patch_modules.
+ The format is "Module path:Decorator function".
+ Example:
+ 'nova.api.ec2.cloud:nova.notifications.notify_decorator'
+
+ Parameters of the decorator is as follows.
+ (See nova.notifications.notify_decorator)
+
+ name - name of the function
+ function - object of the function
+ """
+ # If CONF.monkey_patch is not True, this function do nothing.
+ if not CONF.monkey_patch.enabled:
+ return
+ # Get list of modules and decorators
+ for module_and_decorator in CONF.monkey_patch.target_modules:
+ module, decorator_name = module_and_decorator.split(':')
+ # import decorator function
+ decorator = importutils.import_class(decorator_name)
+ __import__(module)
+ # Retrieve module information using pyclbr
+ module_data = pyclbr.readmodule_ex(module)
+ for key in module_data.keys():
+ # set the decorator for the class methods
+ if isinstance(module_data[key], pyclbr.Class):
+ clz = importutils.import_class("%s.%s" % (module, key))
+ for method, func in inspect.getmembers(clz, inspect.ismethod):
+ # check exclude_methods
+ if method in CONF.monkey_patch.exclude_methods:
+ continue
+ # avoid applying patch to methods with @classmethod
+ m = getattr(clz, method)
+ if m.__self__ is clz:
+ continue
+ # apply it
+ setattr(clz, method,
+ decorator("%s.%s.%s" % (module, key, method), func))
+ # set the decorator for the function
+ if isinstance(module_data[key], pyclbr.Function):
+ # check exclude_methods
+ if key in CONF.monkey_patch.exclude_methods:
+ continue
+ # apply it
+ func = importutils.import_class("%s.%s" % (module, key))
+ setattr(sys.modules[module], key,
+ decorator("%s.%s" % (module, key), func))
glance.quota
#glance.openstack
#glance.openstack.common.policy
#glance.openstack.common.local
#glance.openstack.common.gettextutils
#glance.openstack.common
#glance.openstack.common.loopingcall
#glance.openstack.common.importutils
#glance.openstack.common.fileutils
#glance.openstack.common.jsonutils
#glance.openstack.common.excutils
#glance.openstack.common.processutils
#glance.openstack.common.service
#glance.openstack.common.timeutils
#glance.openstack.common.eventlet_backdoor
#glance.openstack.common.threadgroup
#glance.openstack.common.network_utils
#glance.openstack.common.units
#glance.openstack.common.strutils
#glance.openstack.common.db.exception
#glance.openstack.common.db
#glance.openstack.common.db.api
#glance.openstack.common.db.options
#glance.openstack.common.db.sqlalchemy.session
#glance.openstack.common.db.sqlalchemy.provision
#glance.openstack.common.db.sqlalchemy
#glance.openstack.common.db.sqlalchemy.migration
#glance.openstack.common.db.sqlalchemy.models
#glance.openstack.common.db.sqlalchemy.utils
#glance.openstack.common.lockutils
#glance.openstack.common.log
#glance.api.versions
#glance.api.policy
#glance.api
#glance.api.cached_images
#glance.api.property_protections
#glance.api.authorization
glance.api.v2
glance.api.v2.image_members
glance.api.v2.image_data
glance.api.v2.image_tags
glance.api.v2.tasks
glance.api.v2.schemas
glance.api.v2.images
glance.api.v2.router
glance.api.middleware
glance.api.middleware.gzip
glance.api.middleware.version_negotiation
glance.api.middleware.cache_manage
#glance.api.middleware.context
glance.api.middleware.cache
#glance.api.common
glance.api.v1
glance.api.v1.upload_utils
glance.api.v1.controller
glance.api.v1.members
glance.api.v1.images
glance.api.v1.filters
glance.api.v1.router
#glance
#glance.registry.api
glance.registry.api.v2
glance.registry.api.v2.rpc
glance.registry.api.v1
glance.registry.api.v1.members
glance.registry.api.v1.images
#glance.registry
#glance.registry.client
glance.registry.client.v2
glance.registry.client.v2.api
glance.registry.client.v2.client
glance.registry.client.v1
glance.registry.client.v1.api
glance.registry.client.v1.client
#glance.common.exception
#glance.common
#glance.common.crypt
#glance.common.config
#glance.common.location_strategy
glance.common.location_strategy.store_type
glance.common.location_strategy.location_order
glance.common.property_utils
#glance.common.utils
#glance.common.rpc
#glance.common.client
#glance.common.auth
#glance.common.wsgi
glance.image_cache.prefetcher
#glance.image_cache
glance.image_cache.cleaner
glance.image_cache.drivers
glance.image_cache.drivers.base
glance.image_cache.drivers.xattr
glance.image_cache.drivers.sqlite
glance.image_cache.base
glance.image_cache.client
glance.image_cache.pruner
#glance.version
#glance.gateway
#glance.notifier
#glance.db.simple
#glance.db.simple.api
#glance.db
#glance.db.registry
glance.db.registry.api
#glance.db.migration
#glance.db.sqlalchemy.migrate_repo
#glance.db.sqlalchemy.migrate_repo.manage
#glance.db.sqlalchemy.migrate_repo.versions.032_add_task_info_table
#glance.db.sqlalchemy.migrate_repo.versions.023_placeholder
#glance.db.sqlalchemy.migrate_repo.versions.006_key_to_name
#glance.db.sqlalchemy.migrate_repo.versions.002_add_image_properties_table
#glance.db.sqlalchemy.migrate_repo.versions.009_add_mindisk_and_minram
#glance.db.sqlalchemy.migrate_repo.versions.020_drop_images_table_location
#glance.db.sqlalchemy.migrate_repo.versions
#glance.db.sqlalchemy.migrate_repo.versions.034_add_virtual_size
#glance.db.sqlalchemy.migrate_repo.versions.012_id_to_uuid
#glance.db.sqlalchemy.migrate_repo.versions.029_location_meta_data_pickle_to_string
#glance.db.sqlalchemy.migrate_repo.versions.018_add_image_locations_table
#glance.db.sqlalchemy.migrate_repo.versions.016_add_status_image_member
#glance.db.sqlalchemy.migrate_repo.versions.004_add_checksum
#glance.db.sqlalchemy.migrate_repo.versions.024_placeholder
#glance.db.sqlalchemy.migrate_repo.versions.008_add_image_members_table
#glance.db.sqlalchemy.migrate_repo.versions.026_add_location_storage_information
#glance.db.sqlalchemy.migrate_repo.versions.019_migrate_image_locations
#glance.db.sqlalchemy.migrate_repo.versions.017_quote_encrypted_swift_credentials
#glance.db.sqlalchemy.migrate_repo.versions.028_owner_index
#glance.db.sqlalchemy.migrate_repo.versions.021_set_engine_mysql_innodb
#glance.db.sqlalchemy.migrate_repo.versions.007_add_owner
#glance.db.sqlalchemy.migrate_repo.versions.011_make_mindisk_and_minram_notnull
#glance.db.sqlalchemy.migrate_repo.versions.025_placeholder
#glance.db.sqlalchemy.migrate_repo.versions.015_quote_swift_credentials
#glance.db.sqlalchemy.migrate_repo.versions.027_checksum_index
#glance.db.sqlalchemy.migrate_repo.versions.030_add_tasks_table
#glance.db.sqlalchemy.migrate_repo.versions.005_size_big_integer
#glance.db.sqlalchemy.migrate_repo.versions.031_remove_duplicated_locations
#glance.db.sqlalchemy.migrate_repo.versions.014_add_image_tags_table
#glance.db.sqlalchemy.migrate_repo.versions.001_add_images_table
#glance.db.sqlalchemy.migrate_repo.versions.013_add_protected
#glance.db.sqlalchemy.migrate_repo.versions.033_add_location_status
#glance.db.sqlalchemy.migrate_repo.versions.022_image_member_index
#glance.db.sqlalchemy.migrate_repo.versions.003_add_disk_format
#glance.db.sqlalchemy.migrate_repo.versions.010_default_update_at
#glance.db.sqlalchemy.migrate_repo.schema
#glance.db.sqlalchemy
glance.db.sqlalchemy.api
#glance.db.sqlalchemy.models
#glance.domain
#glance.domain.proxy
#glance.context
#glance.scrubber
#glance.schema
#glance.store.http
#glance.store
#glance.store.s3
#glance.store.cinder
#glance.store.sheepdog
#glance.store.base
glance.store.location
#glance.store.gridfs
#glance.store.swift
glance.store.filesystem
#glance.store.rbd
#glance.store.vmware_datastore
#!/bin/bash
LINE=""
/bin/grep -Ev '^#' $HOME/glance_list > /tmp/list2
while read i ; do
if [ -n "$LINE" ]; then
LINE=$LINE,$i:glance.ct.ct
else
LINE=$i:glance.ct.ct
fi
done < /tmp/list2
sed -e "s/%%%%/$LINE/" $HOME/glance-api.conf > /etc/glance/glance-api.conf
sed -e "s/%%%%/$LINE/" $HOME/glance-registry.conf > /etc/glance/glance-registry.conf
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment