redis-based group membership coordination for ceilometer
If CONFIG_CEILOMETER_COORDINATION_BACKEND is set to 'redis' then a redis manifest is created to install redis on the appropriate host and configure the ceilometer-central-agent and ceilometer-alarm-evaluator to use it for group membership coordination. The other valid option is 'none', in which case no coordination will be done. 'redis' is the default. Change-Id: I07261f5fd433c13a57a614c15b13f0cad6c79d6a
This commit is contained in:
parent
8c3150285d
commit
4832b747a1
@ -422,6 +422,15 @@ Ceilometer Config Parameters
|
|||||||
**CONFIG_CEILOMETER_KS_PW**
|
**CONFIG_CEILOMETER_KS_PW**
|
||||||
The password to use for Ceilometer to authenticate with Keystone.
|
The password to use for Ceilometer to authenticate with Keystone.
|
||||||
|
|
||||||
|
**CONFIG_CEILOMETER_COORDINATION_BACKEND**
|
||||||
|
Specify an optional backend for group membership coordination in the alarm evaluator and central agent. Currently the only valid option are 'redis' or 'none'. The default is 'redis'.
|
||||||
|
|
||||||
|
**CONFIG_REDIS_HOST**
|
||||||
|
The IP address of the server on which to install Redis, if Redis is being used for coordination.
|
||||||
|
|
||||||
|
**CONFIG_REDIS_PORT**
|
||||||
|
The port on which the Redis server will listen, if Redis is being used for coordination.
|
||||||
|
|
||||||
Heat Config Parameters
|
Heat Config Parameters
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
@ -51,6 +51,18 @@ def initConfig(controller):
|
|||||||
"USE_DEFAULT": False,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": True,
|
"NEED_CONFIRM": True,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
|
|
||||||
|
{"CONF_NAME": "CONFIG_CEILOMETER_COORDINATION_BACKEND",
|
||||||
|
"CMD_OPTION": "ceilometer-coordination-backend",
|
||||||
|
"USAGE": "Backend driver for group membership coordination",
|
||||||
|
"PROMPT": "Enter the coordination driver",
|
||||||
|
"OPTION_LIST": ['redis', 'none'],
|
||||||
|
"VALIDATORS": [validators.validate_options],
|
||||||
|
"DEFAULT_VALUE": 'redis',
|
||||||
|
"MASK_INPUT": False,
|
||||||
|
"USE_DEFAULT": True,
|
||||||
|
"NEED_CONFIRM": False,
|
||||||
|
"CONDITION": False},
|
||||||
],
|
],
|
||||||
|
|
||||||
"MONGODB": [
|
"MONGODB": [
|
||||||
@ -68,6 +80,33 @@ def initConfig(controller):
|
|||||||
"NEED_CONFIRM": False,
|
"NEED_CONFIRM": False,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
],
|
],
|
||||||
|
"REDIS": [
|
||||||
|
{"CMD_OPTION": "redis-host",
|
||||||
|
"USAGE": ("The IP address of the server on which to install "
|
||||||
|
"redis"),
|
||||||
|
"PROMPT": "Enter the IP address of the redis server",
|
||||||
|
"OPTION_LIST": [],
|
||||||
|
"VALIDATORS": [validators.validate_ssh],
|
||||||
|
"DEFAULT_VALUE": utils.get_localhost_ip(),
|
||||||
|
"MASK_INPUT": False,
|
||||||
|
"LOOSE_VALIDATION": True,
|
||||||
|
"CONF_NAME": "CONFIG_REDIS_HOST",
|
||||||
|
"USE_DEFAULT": False,
|
||||||
|
"NEED_CONFIRM": False,
|
||||||
|
"CONDITION": False},
|
||||||
|
{"CMD_OPTION": "redis-port",
|
||||||
|
"USAGE": "The port on which the redis server listens",
|
||||||
|
"PROMPT": "Enter the port of the redis server",
|
||||||
|
"OPTION_LIST": [],
|
||||||
|
"VALIDATORS": [validators.validate_port],
|
||||||
|
"DEFAULT_VALUE": 6379,
|
||||||
|
"MASK_INPUT": False,
|
||||||
|
"LOOSE_VALIDATION": True,
|
||||||
|
"CONF_NAME": "CONFIG_REDIS_PORT",
|
||||||
|
"USE_DEFAULT": False,
|
||||||
|
"NEED_CONFIRM": False,
|
||||||
|
"CONDITION": False},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
ceilometer_groups = [
|
ceilometer_groups = [
|
||||||
@ -84,6 +123,13 @@ def initConfig(controller):
|
|||||||
"PRE_CONDITION_MATCH": "y",
|
"PRE_CONDITION_MATCH": "y",
|
||||||
"POST_CONDITION": False,
|
"POST_CONDITION": False,
|
||||||
"POST_CONDITION_MATCH": True},
|
"POST_CONDITION_MATCH": True},
|
||||||
|
|
||||||
|
{"GROUP_NAME": "REDIS",
|
||||||
|
"DESCRIPTION": "Redis Config parameters",
|
||||||
|
"PRE_CONDITION": "CONFIG_CEILOMETER_COORDINATION_BACKEND",
|
||||||
|
"PRE_CONDITION_MATCH": "redis",
|
||||||
|
"POST_CONDITION": False,
|
||||||
|
"POST_CONDITION_MATCH": True},
|
||||||
]
|
]
|
||||||
for group in ceilometer_groups:
|
for group in ceilometer_groups:
|
||||||
paramList = ceilometer_params[group["GROUP_NAME"]]
|
paramList = ceilometer_params[group["GROUP_NAME"]]
|
||||||
@ -96,6 +142,8 @@ def initSequences(controller):
|
|||||||
|
|
||||||
steps = [{'title': 'Adding MongoDB manifest entries',
|
steps = [{'title': 'Adding MongoDB manifest entries',
|
||||||
'functions': [create_mongodb_manifest]},
|
'functions': [create_mongodb_manifest]},
|
||||||
|
{'title': 'Adding Redis manifest entries',
|
||||||
|
'functions': [create_redis_manifest]},
|
||||||
{'title': 'Adding Ceilometer manifest entries',
|
{'title': 'Adding Ceilometer manifest entries',
|
||||||
'functions': [create_manifest]},
|
'functions': [create_manifest]},
|
||||||
{'title': 'Adding Ceilometer Keystone manifest entries',
|
{'title': 'Adding Ceilometer Keystone manifest entries',
|
||||||
@ -126,7 +174,7 @@ def create_manifest(config, messages):
|
|||||||
# class needs it
|
# class needs it
|
||||||
if config['CONFIG_NOVA_INSTALL'] == 'n':
|
if config['CONFIG_NOVA_INSTALL'] == 'n':
|
||||||
manifestdata += getManifestTemplate("ceilometer_nova_disabled.pp")
|
manifestdata += getManifestTemplate("ceilometer_nova_disabled.pp")
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
appendManifestFile(manifestfile, manifestdata, 'ceilometer')
|
||||||
|
|
||||||
|
|
||||||
def create_mongodb_manifest(config, messages):
|
def create_mongodb_manifest(config, messages):
|
||||||
@ -147,6 +195,25 @@ def create_mongodb_manifest(config, messages):
|
|||||||
appendManifestFile(manifestfile, manifestdata, 'pre')
|
appendManifestFile(manifestfile, manifestdata, 'pre')
|
||||||
|
|
||||||
|
|
||||||
|
def create_redis_manifest(config, messages):
|
||||||
|
if config['CONFIG_CEILOMETER_COORDINATION_BACKEND'] == 'redis':
|
||||||
|
manifestfile = "%s_redis.pp" % config['CONFIG_REDIS_HOST']
|
||||||
|
manifestdata = getManifestTemplate("redis.pp")
|
||||||
|
|
||||||
|
fw_details = dict()
|
||||||
|
key = "redis_server"
|
||||||
|
fw_details.setdefault(key, {})
|
||||||
|
fw_details[key]['host'] = "%s" % config['CONFIG_CONTROLLER_HOST']
|
||||||
|
fw_details[key]['service_name'] = "redis-server"
|
||||||
|
fw_details[key]['chain'] = "INPUT"
|
||||||
|
fw_details[key]['ports'] = config['CONFIG_REDIS_PORT']
|
||||||
|
fw_details[key]['proto'] = "tcp"
|
||||||
|
config['FIREWALL_REDIS_RULES'] = fw_details
|
||||||
|
|
||||||
|
manifestdata += createFirewallResources('FIREWALL_REDIS_RULES')
|
||||||
|
appendManifestFile(manifestfile, manifestdata, 'pre')
|
||||||
|
|
||||||
|
|
||||||
def create_keystone_manifest(config, messages):
|
def create_keystone_manifest(config, messages):
|
||||||
manifestfile = "%s_keystone.pp" % config['CONFIG_CONTROLLER_HOST']
|
manifestfile = "%s_keystone.pp" % config['CONFIG_CONTROLLER_HOST']
|
||||||
manifestdata = getManifestTemplate("keystone_ceilometer.pp")
|
manifestdata = getManifestTemplate("keystone_ceilometer.pp")
|
||||||
|
@ -175,9 +175,9 @@ def copy_puppet_modules(config, messages):
|
|||||||
'concat', 'firewall', 'glance', 'heat', 'horizon',
|
'concat', 'firewall', 'glance', 'heat', 'horizon',
|
||||||
'inifile', 'keystone', 'memcached', 'mongodb',
|
'inifile', 'keystone', 'memcached', 'mongodb',
|
||||||
'mysql', 'neutron', 'nova', 'nssdb', 'openstack',
|
'mysql', 'neutron', 'nova', 'nssdb', 'openstack',
|
||||||
'packstack', 'qpid', 'rabbitmq', 'remote', 'rsync',
|
'packstack', 'qpid', 'rabbitmq', 'redis', 'remote',
|
||||||
'ssh', 'stdlib', 'swift', 'sysctl', 'tempest',
|
'rsync', 'ssh', 'stdlib', 'swift', 'sysctl',
|
||||||
'vcsrepo', 'vlan', 'vswitch', 'xinetd',
|
'tempest', 'vcsrepo', 'vlan', 'vswitch', 'xinetd',
|
||||||
'openstacklib'))
|
'openstacklib'))
|
||||||
|
|
||||||
# write puppet manifest to disk
|
# write puppet manifest to disk
|
||||||
|
@ -1,5 +1,15 @@
|
|||||||
$config_mongodb_host = hiera('CONFIG_MONGODB_HOST')
|
$config_mongodb_host = hiera('CONFIG_MONGODB_HOST')
|
||||||
|
|
||||||
|
$config_ceilometer_coordination_backend = hiera('CONFIG_CEILOMETER_COORDINATION_BACKEND')
|
||||||
|
|
||||||
|
if $config_ceilometer_coordination_backend == 'redis' {
|
||||||
|
$redis_host = hiera('CONFIG_REDIS_HOST')
|
||||||
|
$redis_port = hiera('CONFIG_REDIS_PORT')
|
||||||
|
$coordination_url = "redis://${redis_host}:${redis_port}"
|
||||||
|
} else {
|
||||||
|
$coordination_url = ''
|
||||||
|
}
|
||||||
|
|
||||||
class { 'ceilometer::db':
|
class { 'ceilometer::db':
|
||||||
database_connection => "mongodb://${config_mongodb_host}:27017/ceilometer",
|
database_connection => "mongodb://${config_mongodb_host}:27017/ceilometer",
|
||||||
}
|
}
|
||||||
@ -15,14 +25,17 @@ class { 'ceilometer::agent::auth':
|
|||||||
auth_password => hiera('CONFIG_CEILOMETER_KS_PW'),
|
auth_password => hiera('CONFIG_CEILOMETER_KS_PW'),
|
||||||
}
|
}
|
||||||
|
|
||||||
class { 'ceilometer::agent::central': }
|
class { 'ceilometer::agent::central':
|
||||||
|
coordination_url => $coordination_url,
|
||||||
|
}
|
||||||
|
|
||||||
class { 'ceilometer::alarm::notifier':}
|
class { 'ceilometer::alarm::notifier':}
|
||||||
|
|
||||||
class { 'ceilometer::alarm::evaluator':}
|
class { 'ceilometer::alarm::evaluator':
|
||||||
|
coordination_url => $coordination_url,
|
||||||
|
}
|
||||||
|
|
||||||
class { 'ceilometer::api':
|
class { 'ceilometer::api':
|
||||||
keystone_host => hiera('CONFIG_CONTROLLER_HOST'),
|
keystone_host => hiera('CONFIG_CONTROLLER_HOST'),
|
||||||
keystone_password => hiera('CONFIG_CEILOMETER_KS_PW'),
|
keystone_password => hiera('CONFIG_CEILOMETER_KS_PW'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
9
packstack/puppet/templates/redis.pp
Normal file
9
packstack/puppet/templates/redis.pp
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
$redis_host = hiera('CONFIG_REDIS_HOST')
|
||||||
|
$redis_port = hiera('CONFIG_REDIS_PORT')
|
||||||
|
|
||||||
|
class { 'redis':
|
||||||
|
bind => $redis_host,
|
||||||
|
port => $redis_port,
|
||||||
|
appendonly => true,
|
||||||
|
daemonize => false,
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user