Mend ceilometer_radosgw_user provider

Fix exists() method of ceilometer_radosgw_user provider to properly
check desired vs current state. Also
- outdated central/compute agents have been replaced with the polling one
- "notification_driver" option has been unified

Change-Id: Ieb8e850dbde05705c838aa0090279acfe969b92d
Closes-Bug: #1526892
This commit is contained in:
Michael Polenchuk 2015-12-21 18:48:45 +03:00
parent 04382c1db8
commit eddcb94b70
22 changed files with 433 additions and 288 deletions

View File

@ -11,13 +11,13 @@ fixtures:
'firewall': 'https://github.com/puppetlabs/puppetlabs-firewall.git' 'firewall': 'https://github.com/puppetlabs/puppetlabs-firewall.git'
'openstacklib': 'openstacklib':
repo: 'https://review.fuel-infra.org/puppet-modules/puppet-openstacklib.git' repo: 'https://review.fuel-infra.org/puppet-modules/puppet-openstacklib.git'
branch: '7.0.0-mos-rc4' branch: '7.0.0-rc6'
'horizon': 'horizon':
repo: 'https://review.fuel-infra.org/puppet-modules/puppet-horizon.git' repo: 'https://review.fuel-infra.org/puppet-modules/puppet-horizon.git'
branch: '7.0.0-mos-rc3' branch: '7.0.0-mos-rc3'
'keystone': 'keystone':
repo: 'https://review.fuel-infra.org/puppet-modules/puppet-keystone.git' repo: 'https://review.fuel-infra.org/puppet-modules/puppet-keystone.git'
branch: '7.0.0-mos-rc3' branch: '7.0.0-rc4'
'neutron': 'neutron':
repo: 'https://review.fuel-infra.org/puppet-modules/puppet-neutron.git' repo: 'https://review.fuel-infra.org/puppet-modules/puppet-neutron.git'
branch: '7.0.0-mos-rc4' branch: '7.0.0-mos-rc4'
@ -32,10 +32,10 @@ fixtures:
branch: '7.0.0-mos-rc2' branch: '7.0.0-mos-rc2'
'ceilometer': 'ceilometer':
repo: 'https://review.fuel-infra.org/puppet-modules/puppet-ceilometer.git' repo: 'https://review.fuel-infra.org/puppet-modules/puppet-ceilometer.git'
branch: '7.0.0-mos-rc2' branch: '7.0.0-rc3'
'cinder': 'cinder':
repo: 'https://review.fuel-infra.org/puppet-modules/openstack-cinder.git' repo: 'https://review.fuel-infra.org/puppet-modules/openstack-cinder.git'
branch: '7.0.0-mos-rc2' branch: '7.0.0-rc3'
'sahara': 'sahara':
repo: 'https://review.fuel-infra.org/puppet-modules/puppet-sahara.git' repo: 'https://review.fuel-infra.org/puppet-modules/puppet-sahara.git'
branch: '7.0.0-mos-rc2' branch: '7.0.0-mos-rc2'
@ -55,3 +55,6 @@ fixtures:
'corosync': "#{source_dir}/../corosync" 'corosync': "#{source_dir}/../corosync"
'pacemaker': "#{source_dir}/../pacemaker" 'pacemaker': "#{source_dir}/../pacemaker"
'haproxy': "#{source_dir}/../haproxy" 'haproxy': "#{source_dir}/../haproxy"
'ceilometer_ha': "#{source_dir}/../ceilometer_ha"
'pacemaker_wrappers': "#{source_dir}/../pacemaker_wrappers"
'mellanox_openstack': "#{source_dir}/../mellanox_openstack"

View File

@ -89,7 +89,7 @@ class openstack::ceilometer (
if ($on_controller) { if ($on_controller) {
# Configure the ceilometer database # Configure the ceilometer database
# Only needed if ceilometer::agent::central or ceilometer::api are declared # Only needed if ceilometer::agent::polling or ceilometer::api are declared
if ( !$ext_mongo ) { if ( !$ext_mongo ) {
if ( $db_type == 'mysql' ) { if ( $db_type == 'mysql' ) {
@ -114,7 +114,7 @@ class openstack::ceilometer (
} }
ceilometer_config { 'service_credentials/os_endpoint_type': value => $os_endpoint_type} -> ceilometer_config { 'service_credentials/os_endpoint_type': value => $os_endpoint_type} ->
Service<| title == 'ceilometer-agent-central'|> Service<| title == 'ceilometer-polling'|>
class { '::ceilometer::db': class { '::ceilometer::db':
database_connection => $current_database_connection, database_connection => $current_database_connection,
@ -147,8 +147,6 @@ class openstack::ceilometer (
collector_workers => $collector_workers, collector_workers => $collector_workers,
} }
class { '::ceilometer::agent::central': }
class { '::ceilometer::alarm::evaluator': class { '::ceilometer::alarm::evaluator':
evaluation_interval => 60, evaluation_interval => 60,
} }
@ -162,13 +160,13 @@ class openstack::ceilometer (
if $ha_mode { if $ha_mode {
include ceilometer_ha::agent::central include ceilometer_ha::agent::central
Service['ceilometer-polling'] -> Class['::ceilometer_ha::agent::central']
Package[$::ceilometer::params::common_package_name] -> Class['::ceilometer_ha::agent::central']
Package[$::ceilometer::params::agent_central_package_name] -> Class['::ceilometer_ha::agent::central']
} }
else {
Package[$::ceilometer::params::common_package_name] -> Service[$::ceilometer::params::agent_central_service_name] class { '::ceilometer::agent::polling':
Package[$::ceilometer::params::agent_central_package_name] -> Service[$::ceilometer::params::agent_central_service_name] enabled => !$ha_mode,
compute_namespace => false,
ipmi_namespace => false
} }
} }
@ -217,11 +215,13 @@ class openstack::ceilometer (
} }
} }
} }
# Install compute agent # Install polling agent
class { 'ceilometer::agent::compute': class { '::ceilometer::agent::polling':
enabled => true, central_namespace => false,
ipmi_namespace => false
} }
ceilometer_config { 'service_credentials/os_endpoint_type': value => $os_endpoint_type} -> ceilometer_config { 'service_credentials/os_endpoint_type': value => $os_endpoint_type} ->
Service<| title == 'ceilometer-agent-compute'|> Service<| title == 'ceilometer-polling'|>
} }
} }

View File

@ -3,7 +3,7 @@
# [*syslog_log_facility*] Facility for syslog, if used. Optional. Note: duplicating conf option # [*syslog_log_facility*] Facility for syslog, if used. Optional. Note: duplicating conf option
# wouldn't have been used, but more powerfull rsyslog features managed via conf template instead # wouldn't have been used, but more powerfull rsyslog features managed via conf template instead
# [*ceilometer*] true if we use ceilometer # [*notification_driver*] The driver(s) name to handle notifications. Defaults to undef.
class openstack::cinder( class openstack::cinder(
$sql_connection, $sql_connection,
@ -42,7 +42,7 @@ class openstack::cinder(
$identity_uri = false, $identity_uri = false,
$keystone_user = 'cinder', $keystone_user = 'cinder',
$region = 'RegionOne', $region = 'RegionOne',
$ceilometer = false, $notification_driver = undef,
$service_workers = $::processorcount, $service_workers = $::processorcount,
$vmware_host_ip = '10.10.10.10', $vmware_host_ip = '10.10.10.10',
$vmware_host_username = 'administrator@vsphere.local', $vmware_host_username = 'administrator@vsphere.local',
@ -266,9 +266,9 @@ class openstack::cinder(
} }
} }
if $ceilometer { if $notification_driver {
class { 'cinder::ceilometer': class { 'cinder::ceilometer':
notification_driver => 'messagingv2' notification_driver => $notification_driver
} }
} }
} }

View File

@ -135,7 +135,7 @@ class openstack::compute (
$cinder_rate_limits = undef, $cinder_rate_limits = undef,
$create_networks = false, $create_networks = false,
$state_path = '/var/lib/nova', $state_path = '/var/lib/nova',
$ceilometer = false, $notification_driver = 'noop',
$ceilometer_metering_secret = 'ceilometer', $ceilometer_metering_secret = 'ceilometer',
$libvirt_vif_driver = 'nova.virt.libvirt.vif.LibvirtGenericVIFDriver', $libvirt_vif_driver = 'nova.virt.libvirt.vif.LibvirtGenericVIFDriver',
$storage_hash = {}, $storage_hash = {},
@ -267,6 +267,7 @@ class openstack::compute (
report_interval => $nova_report_interval, report_interval => $nova_report_interval,
service_down_time => $nova_service_down_time, service_down_time => $nova_service_down_time,
notify_on_state_change => $notify_on_state_change, notify_on_state_change => $notify_on_state_change,
notification_driver => $notification_driver,
memcached_servers => $memcached_addresses, memcached_servers => $memcached_addresses,
} }
@ -311,10 +312,8 @@ class openstack::compute (
nova_config { nova_config {
'libvirt/live_migration_flag': value => 'VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST'; 'libvirt/live_migration_flag': value => 'VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST';
'libvirt/block_migration_flag': value => 'VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_NON_SHARED_INC'; 'libvirt/block_migration_flag': value => 'VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_NON_SHARED_INC';
} 'cinder/catalog_info': value => pick($nova_hash['cinder_catalog_info'], 'volume:cinder:internalURL');
'DEFAULT/connection_type': value => 'libvirt';
nova_config {
'cinder/catalog_info': value => pick($nova_hash['cinder_catalog_info'], 'volume:cinder:internalURL')
} }
if $use_syslog { if $use_syslog {
@ -456,10 +455,6 @@ on packages update": }
} }
} }
nova_config {
'DEFAULT/connection_type': value => 'libvirt';
}
Package<| title == 'nova-compute'|> ~> Service<| title == 'nova-compute'|> Package<| title == 'nova-compute'|> ~> Service<| title == 'nova-compute'|>
if !defined(Service['nova-compute']) { if !defined(Service['nova-compute']) {
notify{ "Module ${module_name} cannot notify service nova-compute\ notify{ "Module ${module_name} cannot notify service nova-compute\

View File

@ -93,7 +93,7 @@ class openstack::controller (
$nova_user_tenant = 'services', $nova_user_tenant = 'services',
$nova_hash = {}, $nova_hash = {},
# Required Ceilometer # Required Ceilometer
$ceilometer = false, $ceilometer_notification_driver = false,
$ceilometer_db_password = 'ceilometer_pass', $ceilometer_db_password = 'ceilometer_pass',
$ceilometer_user_password = 'ceilometer_pass', $ceilometer_user_password = 'ceilometer_pass',
$ceilometer_db_user = 'ceilometer', $ceilometer_db_user = 'ceilometer',
@ -330,7 +330,7 @@ class openstack::controller (
idle_timeout => $idle_timeout, idle_timeout => $idle_timeout,
novnc_address => $novnc_address, novnc_address => $novnc_address,
ha_mode => $ha_mode, ha_mode => $ha_mode,
ceilometer => $ceilometer, ceilometer_notification_driver => $ceilometer_notification_driver,
neutron_metadata_proxy_shared_secret => $network_provider ? {'nova'=>undef, 'neutron'=>$neutron_metadata_proxy_secret }, neutron_metadata_proxy_shared_secret => $network_provider ? {'nova'=>undef, 'neutron'=>$neutron_metadata_proxy_secret },
} }

View File

@ -93,7 +93,7 @@ class openstack::glance (
$rbd_store_user = 'images', $rbd_store_user = 'images',
$rbd_store_pool = 'images', $rbd_store_pool = 'images',
$rados_connect_timeout = '0', $rados_connect_timeout = '0',
$ceilometer = false, $notification_driver = undef,
$service_workers = $::processorcount, $service_workers = $::processorcount,
) { ) {
validate_string($glance_user_password) validate_string($glance_user_password)
@ -220,14 +220,6 @@ class openstack::glance (
$rabbit_hosts_real = $rabbit_hosts $rabbit_hosts_real = $rabbit_hosts
} }
# Configure rabbitmq notifications
# TODO(bogdando) sync qpid support from upstream
if $ceilometer {
$notification_driver = 'messaging'
} else {
$notification_driver = 'noop'
}
class { 'glance::notify::rabbitmq': class { 'glance::notify::rabbitmq':
rabbit_password => $rabbit_password, rabbit_password => $rabbit_password,
rabbit_userid => $rabbit_userid, rabbit_userid => $rabbit_userid,

View File

@ -80,7 +80,7 @@ class openstack::keystone (
$cache_backend = 'keystone.cache.memcache_pool', $cache_backend = 'keystone.cache.memcache_pool',
$token_provider = undef, $token_provider = undef,
$revoke_driver = false, $revoke_driver = false,
$ceilometer = false, $notification_driver = undef,
$service_workers = $::processorcount, $service_workers = $::processorcount,
$fernet_src_repository = undef, $fernet_src_repository = undef,
$fernet_key_repository = '/etc/keystone/fernet-keys', $fernet_key_repository = '/etc/keystone/fernet-keys',
@ -106,14 +106,6 @@ class openstack::keystone (
$admin_real = $internal_real $admin_real = $internal_real
} }
if $ceilometer {
$notification_driver = 'messagingv2'
$notification_topics = 'notifications'
} else {
$notification_driver = false
$notification_topics = false
}
if $memcache_servers { if $memcache_servers {
$memcache_servers_real = suffix($memcache_servers, inline_template(':<%= @memcache_server_port %>')) $memcache_servers_real = suffix($memcache_servers, inline_template(':<%= @memcache_server_port %>'))
$token_driver = 'keystone.token.persistence.backends.memcache_pool.Token' $token_driver = 'keystone.token.persistence.backends.memcache_pool.Token'
@ -162,7 +154,6 @@ class openstack::keystone (
token_driver => $token_driver, token_driver => $token_driver,
token_provider => $token_provider, token_provider => $token_provider,
notification_driver => $notification_driver, notification_driver => $notification_driver,
notification_topics => $notification_topics,
token_caching => $token_caching, token_caching => $token_caching,
cache_backend => $cache_backend, cache_backend => $cache_backend,
revoke_driver => $revoke_driver, revoke_driver => $revoke_driver,

View File

@ -98,7 +98,7 @@ class openstack::nova::controller (
$nova_report_interval = '10', $nova_report_interval = '10',
$nova_service_down_time = '60', $nova_service_down_time = '60',
$cinder = true, $cinder = true,
$ceilometer = false, $ceilometer_notification_driver = false,
$service_workers = $::processorcount, $service_workers = $::processorcount,
# SQLAlchemy backend # SQLAlchemy backend
$idle_timeout = '3600', $idle_timeout = '3600',
@ -218,9 +218,9 @@ class openstack::nova::controller (
} }
# From legacy ceilometer notifications for nova # From legacy ceilometer notifications for nova
if ($ceilometer) { if ($ceilometer_notification_driver) {
$notify_on_state_change = 'vm_and_task_state' $notify_on_state_change = 'vm_and_task_state'
$notification_driver = concat(['messaging'], $nova_notification_driver) $notification_driver = concat([$ceilometer_notification_driver], $nova_notification_driver)
} else { } else {
$notification_driver = $nova_notification_driver $notification_driver = $nova_notification_driver
} }

View File

@ -0,0 +1,119 @@
require 'spec_helper'
describe 'openstack::ceilometer' do
shared_examples_for 'ceilometer services config' do
[true, false].each do |ha_mode|
context "on controller node with HA mode set to '#{ha_mode}'" do
let :params do
{
:on_controller => true,
:ha_mode => ha_mode,
}
end
it 'contains class ceilometer::agent::polling' do
is_expected.to contain_class('ceilometer::agent::polling').with(
:enabled => !ha_mode,
:compute_namespace => false,
:ipmi_namespace => false
)
end
if ha_mode
it { is_expected.to contain_class('ceilometer_ha::agent::central') }
end
end
end
context "on conroller node" do
let :params do
{
:on_controller => true,
:keystone_password => 'cEilomEtEr_pAss',
:keystone_user => 'ceilometer',
:keystone_tenant => 'services',
:keystone_region => 'Region007',
:keystone_protocol => 'http',
:keystone_host => '127.0.0.1',
:api_workers => facts[:processorcount],
:host => '10.254.0.9',
:port => '8777',
}
end
it { is_expected.to contain_class('ceilometer') }
it { is_expected.to contain_class('ceilometer::logging') }
it { is_expected.to contain_class('ceilometer::db') }
it { is_expected.to contain_class('ceilometer::expirer') }
it { is_expected.to contain_class('ceilometer::agent::notification') }
it { is_expected.to contain_class('ceilometer::alarm::evaluator') }
it { is_expected.to contain_class('ceilometer::collector') }
it { is_expected.to contain_class('ceilometer::alarm::notifier') }
it { is_expected.to contain_class('ceilometer::client') }
it { is_expected.to contain_class('ceilometer::agent::auth').with(
:auth_url => "#{params[:keystone_protocol]}://#{params[:keystone_host]}:5000/v2.0",
:auth_password => params[:keystone_password],
:auth_region => params[:keystone_region],
:auth_tenant_name => params[:keystone_tenant],
:auth_user => params[:keystone_user],
) }
it { is_expected.to contain_class('ceilometer::api').with(
:keystone_protocol => params[:keystone_protocol],
:keystone_host => params[:keystone_host],
:keystone_user => params[:keystone_user],
:keystone_password => params[:keystone_password],
:keystone_tenant => params[:keystone_tenant],
:host => params[:host],
:port => params[:port],
:api_workers => params[:api_workers],
) }
end
context "on compute node" do
let :params do
{
:on_compute => true,
}
end
it 'contains class ceilometer::agent::polling' do
is_expected.to contain_class('ceilometer::agent::polling').with(
:central_namespace => false,
:ipmi_namespace => false
)
end
end
end
context 'on Debian platforms' do
let :facts do
{
:osfamily => 'Debian',
:operatingsystem => 'Debian',
:processorcount => 2,
:memorysize_mb => 4096,
}
end
it_configures 'ceilometer services config'
end
context 'on RedHat platforms' do
let :facts do
{
:osfamily => 'RedHat',
:operatingsystem => 'RedHat',
:processorcount => 2,
:memorysize_mb => 4096,
}
end
it_configures 'ceilometer services config'
end
end

View File

@ -2,62 +2,74 @@ require 'spec_helper'
describe 'openstack::cinder' do describe 'openstack::cinder' do
let(:default_params) do { let :default_params do
:sql_connection => 'mysql://user:pass@127.0.0.1/cinder', {
:cinder_user_password => 'secret', :sql_connection => 'sqlite:///relative/path/to/file.db',
:glance_api_servers => 'http://127.0.0.1:9292', :cinder_user_password => 'cindeRUserPAssw0rD',
:glance_api_servers => ['glance-001:9292', 'glance-002:9292'],
} }
end end
let(:params) do
default_params.merge(params)
end
shared_examples_for 'cinder configuration' do shared_examples_for 'cinder configuration' do
let :p do
default_params.merge(params)
end
context 'with a default config' do context 'with a default config' do
#let :params do {} end let :params do
default_params
it 'contains openstack::cinder' do
should contain_class('openstack::cinder')
end end
it 'contains cinder::glance' do it { is_expected.to contain_class('cinder') }
should contain_class('cinder::glance') it { is_expected.to contain_class('cinder::glance') }
it { is_expected.to contain_class('cinder::logging') }
it { is_expected.to contain_class('cinder::scheduler') }
end end
it 'configures with the default params' do context 'with custom config' do
end let :params do
end default_params.merge(
:bind_host => '156.151.59.35',
context 'with keystone config' do
let :params do {
:identity_uri => 'http://192.168.0.1:5000', :identity_uri => 'http://192.168.0.1:5000',
} :notification_driver => 'messagingv2',
end :manage_volumes => true,
let :p do
default_params.merge(params)
end
it 'contains keymgr keystone config' do
should contain_class('cinder::api').with(
:identity_uri => 'http://192.168.1.:5000',
:keymgr_encryption_auth_url => 'http://192.168.0.1:5000/v3',
) )
end end
it 'contains cinder::glance' do it { is_expected.to contain_class('cinder::volume') }
should contain_class('cinder::glance')
it { is_expected.to contain_class('cinder::api').with(
:bind_host => params[:bind_host],
:identity_uri => params[:identity_uri],
:keymgr_encryption_auth_url => "#{params[:identity_uri]}/v3",
) }
it { is_expected.to contain_class('cinder::ceilometer').with(
:notification_driver => params[:notification_driver],
) }
end
end end
it 'configures with the default params' do context 'on Debian platforms' do
let :facts do
{ :osfamily => 'Debian',
:operatingsystem => 'Debian',
:physicalprocessorcount => 2,
:memorysize_mb => 1024,
:openstack_version => { 'nova' => 'present' },
}
end end
it_configures 'cinder configuration'
end end
context 'on RedHat platforms' do
let :facts do
{ :osfamily => 'RedHat',
:operatingsystem => 'RedHat',
:physicalprocessorcount => 2,
:memorysize_mb => 1024,
:openstack_version => { 'nova' => 'present' },
}
end end
it_configures 'cinder configuration'
end
end end

View File

@ -10,10 +10,11 @@ Puppet::Type.type(:ceilometer_radosgw_user).provide(:user) do
INI_FILENAME = '/etc/ceilometer/ceilometer.conf' INI_FILENAME = '/etc/ceilometer/ceilometer.conf'
def exists? def exists?
!(@property_hash[:ensure] == :absent or @property_hash.empty?) radosgw_user_keys == access_keys_from_config
end end
def create def create
create_radosgw_user unless radosgw_user_keys
set_access_keys set_access_keys
end end
@ -30,13 +31,15 @@ Puppet::Type.type(:ceilometer_radosgw_user).provide(:user) do
['access_key', 'secret_key'] ['access_key', 'secret_key']
end end
def radosgw_user_keys
@radosgw_user_keys ||= get_radosgw_user_keys
end
def set_access_keys def set_access_keys
user_keys = get_user_keys if ceilometer_file
keys = get_access_keys_from_config
if ceilometer_file and user_keys != keys
ceilometer_file.add_section(section, ini_filename) unless ceilometer_file.include?(section) ceilometer_file.add_section(section, ini_filename) unless ceilometer_file.include?(section)
user_keys.keys.each do |key| radosgw_user_keys.keys.each do |key|
ceilometer_file[section][key] = user_keys[key] ceilometer_file[section][key] = radosgw_user_keys[key]
end end
ceilometer_file.store ceilometer_file.store
end end
@ -55,8 +58,8 @@ Puppet::Type.type(:ceilometer_radosgw_user).provide(:user) do
end end
end end
def get_access_keys_from_config def access_keys_from_config
keys = Hash.new keys = {}
if ceilometer_file if ceilometer_file
key_settings.each do |setting| key_settings.each do |setting|
keys[setting] = ceilometer_file[section][setting] if ceilometer_file[section] && ceilometer_file[section][setting] keys[setting] = ceilometer_file[section][setting] if ceilometer_file[section] && ceilometer_file[section][setting]
@ -65,38 +68,37 @@ Puppet::Type.type(:ceilometer_radosgw_user).provide(:user) do
keys keys
end end
def get_user_keys def get_radosgw_user_keys
cmd = ['user', 'info', "--uid=#{@resource[:name]}"] cmd = ['user', 'info', "--uid=#{@resource[:name]}"]
begin begin
hash_as_string = rgw_adm(cmd) rgw_output = rgw_adm(cmd)
rescue Exception => e rescue Puppet::ExecutionFailure => e
if e.message =~ /could not fetch user info: no user info saved/ return nil if e.message =~ /could not fetch user info: no user info saved/
hash_as_string = create_radosgw_user
else
raise e raise e
end end
end parse_radosgw_output(rgw_output)
hash = JSON.parse hash_as_string.to_s.gsub('=>', ':')
keys = {}
hash['keys'].each do |key|
if key['user'] == "#{@resource[:name]}"
keys['access_key'] = key['access_key']
keys['secret_key'] = key['secret_key']
end
end
keys
end end
def create_radosgw_user def create_radosgw_user
cmd = ['user', 'create', "--uid=#{@resource[:name]}", "--display-name=#{@resource[:name]}"] cmd = ['user', 'create', "--uid=#{@resource[:name]}", "--display-name=#{@resource[:name]}"]
rgw_adm(cmd) rgw_adm(cmd)
@resource[:caps].keys.each do |key| @resource[:caps].each_key do |key|
cmd = ['caps', 'add', "--uid=#{@resource[:name]}", "--caps=#{key}=#{@resource[:caps][key]}"] cmd = ['caps', 'add', "--uid=#{@resource[:name]}", "--caps=#{key}=#{@resource[:caps][key]}"]
rgw_adm(cmd) rgw_adm(cmd)
end end
cmd = ['user', 'info', "--uid=#{@resource[:name]}"]
return rgw_adm(cmd)
end end
def parse_radosgw_output(rgw_output)
keys = {}
rgw_keys = JSON.parse(rgw_output.to_s.gsub('=>', ':')).fetch('keys', {})
rgw_keys.each do |key|
if key['user'] == "#{@resource[:name]}"
keys['access_key'] = key['access_key']
keys['secret_key'] = key['secret_key']
end
end
keys
end
end end

View File

@ -17,7 +17,7 @@ $syslog_log_facility = hiera('syslog_log_facility_glance')
$rabbit_hash = hiera_hash('rabbit_hash', {}) $rabbit_hash = hiera_hash('rabbit_hash', {})
$max_pool_size = hiera('max_pool_size') $max_pool_size = hiera('max_pool_size')
$max_overflow = hiera('max_overflow') $max_overflow = hiera('max_overflow')
$ceilometer_hash = hiera_hash('ceilometer', {}) $ceilometer_hash = hiera_hash('ceilometer_hash', {})
$region = hiera('region','RegionOne') $region = hiera('region','RegionOne')
$service_workers = pick($glance_hash['glance_workers'], min(max($::processorcount, 2), 16)) $service_workers = pick($glance_hash['glance_workers'], min(max($::processorcount, 2), 16))
$ironic_hash = hiera_hash('ironic', {}) $ironic_hash = hiera_hash('ironic', {})
@ -127,7 +127,7 @@ class { 'openstack::glance':
rabbit_hosts => $rabbit_hosts, rabbit_hosts => $rabbit_hosts,
rabbit_virtual_host => $rabbit_virtual_host, rabbit_virtual_host => $rabbit_virtual_host,
known_stores => $glance_known_stores, known_stores => $glance_known_stores,
ceilometer => $ceilometer_hash[enabled], notification_driver => $ceilometer_hash['notification_driver'],
service_workers => $service_workers, service_workers => $service_workers,
rados_connect_timeout => $rados_connect_timeout, rados_connect_timeout => $rados_connect_timeout,
} }

View File

@ -69,7 +69,6 @@ $rabbit_hash = hiera_hash('rabbit', {})
$glance_hash = hiera_hash('glance', {}) $glance_hash = hiera_hash('glance', {})
$swift_hash = hiera('swift', {}) $swift_hash = hiera('swift', {})
$cinder_hash = hiera_hash('cinder', {}) $cinder_hash = hiera_hash('cinder', {})
$ceilometer_hash = hiera('ceilometer',{})
$access_hash = hiera_hash('access', {}) $access_hash = hiera_hash('access', {})
# mp_hash is actually an array, not a hash # mp_hash is actually an array, not a hash
$mp_hash = hiera('mp', []) $mp_hash = hiera('mp', [])
@ -77,7 +76,6 @@ $keystone_hash = merge({'service_token_off' => $service_token_o
hiera_hash('keystone', {})) hiera_hash('keystone', {}))
$dns_nameservers = hiera('dns_nameservers', []) $dns_nameservers = hiera('dns_nameservers', [])
$use_ceilometer = $ceilometer_hash['enabled']
$use_neutron = hiera('quantum', false) $use_neutron = hiera('quantum', false)
$use_ovs = hiera('use_ovs', $use_neutron) $use_ovs = hiera('use_ovs', $use_neutron)
$verbose = true $verbose = true
@ -384,13 +382,18 @@ $sahara_roles = hiera('sahara_roles', ['primary-controller', 'controller'])
$sahara_nodes = get_nodes_hash_by_roles($network_metadata, $sahara_roles) $sahara_nodes = get_nodes_hash_by_roles($network_metadata, $sahara_roles)
# Define ceilometer-releated parameters # Define ceilometer-releated parameters
$default_ceilometer_hash = { $ceilometer = hiera('ceilometer', {})
$use_ceilometer = $ceilometer['enabled']
$ceilometer_defaults = {
'alarm_history_time_to_live' => '604800', 'alarm_history_time_to_live' => '604800',
'event_time_to_live' => '604800', 'event_time_to_live' => '604800',
'metering_time_to_live' => '604800', 'metering_time_to_live' => '604800',
'http_timeout' => '600' 'http_timeout' => '600',
'notification_driver' => $use_ceilometer ? { true => 'messagingv2', default => $::os_service_default },
} }
$real_ceilometer_hash = merge($ceilometer_hash, $default_ceilometer_hash)
$real_ceilometer_hash = merge($ceilometer_defaults, $ceilometer)
# Define database-related variables: # Define database-related variables:
# todo: use special node-roles instead controllers in the future # todo: use special node-roles instead controllers in the future

View File

@ -20,7 +20,7 @@ $service_endpoint = hiera('service_endpoint')
$glance_hash = hiera_hash('glance', {}) $glance_hash = hiera_hash('glance', {})
$nova_hash = hiera_hash('nova', {}) $nova_hash = hiera_hash('nova', {})
$cinder_hash = hiera_hash('cinder', {}) $cinder_hash = hiera_hash('cinder', {})
$ceilometer_hash = hiera_hash('ceilometer', {}) $ceilometer_hash = hiera_hash('ceilometer_hash', {})
$syslog_log_facility = hiera('syslog_log_facility_keystone') $syslog_log_facility = hiera('syslog_log_facility_keystone')
$rabbit_hash = hiera_hash('rabbit_hash', {}) $rabbit_hash = hiera_hash('rabbit_hash', {})
$neutron_user_password = hiera('neutron_user_password', false) $neutron_user_password = hiera('neutron_user_password', false)
@ -139,7 +139,7 @@ class { 'openstack::keystone':
public_url => $public_url, public_url => $public_url,
admin_url => $admin_url, admin_url => $admin_url,
internal_url => $internal_url, internal_url => $internal_url,
ceilometer => $ceilometer_hash['enabled'], notification_driver => $ceilometer_hash['notification_driver'],
service_workers => $service_workers, service_workers => $service_workers,
token_provider => $token_provider, token_provider => $token_provider,
fernet_src_repository => '/var/lib/astute/keystone', fernet_src_repository => '/var/lib/astute/keystone',

View File

@ -100,7 +100,7 @@ class {'openstack::cinder':
max_pool_size => $max_pool_size, max_pool_size => $max_pool_size,
max_overflow => $max_overflow, max_overflow => $max_overflow,
idle_timeout => $idle_timeout, idle_timeout => $idle_timeout,
ceilometer => $ceilometer_hash[enabled], notification_driver => $ceilometer_hash['notification_driver'],
service_workers => $service_workers, service_workers => $service_workers,
} # end class } # end class

View File

@ -29,7 +29,7 @@ $nova_hash = hiera_hash('nova', {})
$nova_config_hash = hiera_hash('nova_config', {}) $nova_config_hash = hiera_hash('nova_config', {})
$api_bind_address = get_network_role_property('nova/api', 'ipaddr') $api_bind_address = get_network_role_property('nova/api', 'ipaddr')
$rabbit_hash = hiera_hash('rabbit_hash', {}) $rabbit_hash = hiera_hash('rabbit_hash', {})
$ceilometer_hash = hiera_hash('ceilometer',{}) $ceilometer_hash = hiera_hash('ceilometer_hash',{})
$syslog_log_facility_ceph = hiera('syslog_log_facility_ceph','LOG_LOCAL0') $syslog_log_facility_ceph = hiera('syslog_log_facility_ceph','LOG_LOCAL0')
$workloads_hash = hiera_hash('workloads_collector', {}) $workloads_hash = hiera_hash('workloads_collector', {})
$service_endpoint = hiera('service_endpoint') $service_endpoint = hiera('service_endpoint')
@ -149,7 +149,7 @@ class { '::openstack::controller':
service_endpoint => $service_endpoint, service_endpoint => $service_endpoint,
neutron_metadata_proxy_secret => $neutron_metadata_proxy_secret, neutron_metadata_proxy_secret => $neutron_metadata_proxy_secret,
cinder => true, cinder => true,
ceilometer => $ceilometer_hash[enabled], ceilometer_notification_driver => $ceilometer_hash['notification_driver'],
service_workers => $service_workers, service_workers => $service_workers,
use_syslog => $use_syslog, use_syslog => $use_syslog,
use_stderr => $use_stderr, use_stderr => $use_stderr,

View File

@ -14,7 +14,7 @@ if $use_neutron {
] ]
$rabbit_hash = hiera_hash('rabbit_hash', { }) $rabbit_hash = hiera_hash('rabbit_hash', { })
$ceilometer_hash = hiera_hash('ceilometer', { }) $ceilometer_hash = hiera_hash('ceilometer_hash', { })
$network_scheme = hiera_hash('network_scheme') $network_scheme = hiera_hash('network_scheme')
$verbose = pick($openstack_network_hash['verbose'], hiera('verbose', true)) $verbose = pick($openstack_network_hash['verbose'], hiera('verbose', true))
@ -27,7 +27,6 @@ if $use_neutron {
$bind_host = get_network_role_property('neutron/api', 'ipaddr') $bind_host = get_network_role_property('neutron/api', 'ipaddr')
$base_mac = $neutron_config['L2']['base_mac'] $base_mac = $neutron_config['L2']['base_mac']
$use_ceilometer = $ceilometer_hash['enabled']
$amqp_hosts = split(hiera('amqp_hosts', ''), ',') $amqp_hosts = split(hiera('amqp_hosts', ''), ',')
$amqp_user = $rabbit_hash['user'] $amqp_user = $rabbit_hash['user']
$amqp_password = $rabbit_hash['password'] $amqp_password = $rabbit_hash['password']
@ -99,8 +98,8 @@ if $use_neutron {
neutron_config { 'DEFAULT/use_syslog_rfc_format': value => true; } neutron_config { 'DEFAULT/use_syslog_rfc_format': value => true; }
} }
if $use_ceilometer { neutron_config {
neutron_config { 'DEFAULT/notification_driver': value => 'messaging' } 'DEFAULT/notification_driver': value => $ceilometer_hash['notification_driver'];
} }
} }

View File

@ -299,7 +299,7 @@ class { 'openstack::cinder':
max_pool_size => $max_pool_size, max_pool_size => $max_pool_size,
max_overflow => $max_overflow, max_overflow => $max_overflow,
idle_timeout => $idle_timeout, idle_timeout => $idle_timeout,
ceilometer => $ceilometer_hash[enabled], notification_driver => $ceilometer_hash['notification_driver'],
vmware_host_ip => $vcenter_hash['host_ip'], vmware_host_ip => $vcenter_hash['host_ip'],
vmware_host_username => $vcenter_hash['vc_user'], vmware_host_username => $vcenter_hash['vc_user'],
vmware_host_password => $vcenter_hash['vc_password'], vmware_host_password => $vcenter_hash['vc_password'],

View File

@ -278,7 +278,7 @@ class { 'openstack::compute':
cinder_iscsi_bind_addr => get_network_role_property('cinder/iscsi', 'ipaddr'), cinder_iscsi_bind_addr => get_network_role_property('cinder/iscsi', 'ipaddr'),
cinder_user_password => $cinder_hash[user_password], cinder_user_password => $cinder_hash[user_password],
cinder_db_password => $cinder_hash[db_password], cinder_db_password => $cinder_hash[db_password],
ceilometer => $ceilometer_hash[enabled], notification_driver => $ceilometer_hash['notification_driver'],
ceilometer_metering_secret => $ceilometer_hash[metering_secret], ceilometer_metering_secret => $ceilometer_hash[metering_secret],
ceilometer_user_password => $ceilometer_hash[user_password], ceilometer_user_password => $ceilometer_hash[user_password],
db_host => $db_host, db_host => $db_host,

View File

@ -12,6 +12,25 @@ describe provider_class do
} }
end end
let :keys do
{
'access_key' => 'accEss',
'secret_key' => 'sEcrEt'
}
end
let :rgw_output do
{
'keys' => [
{ 'user' => 'ceilometer' }.merge(keys)
]
}
end
let :cmd do
['user', 'info', "--uid=#{user_attrs[:name]}"]
end
let :resource do let :resource do
Puppet::Type::Ceilometer_radosgw_user.new(user_attrs) Puppet::Type::Ceilometer_radosgw_user.new(user_attrs)
end end
@ -21,6 +40,10 @@ describe provider_class do
end end
it 'checks that resource does not exist' do it 'checks that resource does not exist' do
provider.class.stubs(:rgw_adm)
.with(cmd)
.raises(Puppet::ExecutionFailure, 'could not fetch user info: no user info saved')
expect(provider.exists?).to eq false expect(provider.exists?).to eq false
end end
@ -29,21 +52,16 @@ describe provider_class do
end end
it 'gets access keys from config' do it 'gets access keys from config' do
keys = {'access_key' => 'accEss', 'secret_key' => 'sEcrEt'}
mock = {'rgw_admin_credentials' => keys} mock = {'rgw_admin_credentials' => keys}
File.expects(:exists?).with('/etc/ceilometer/ceilometer.conf').returns(true) File.expects(:exists?).with('/etc/ceilometer/ceilometer.conf').returns(true)
Puppet::Util::IniConfig::File.expects(:new).returns(mock) Puppet::Util::IniConfig::File.expects(:new).returns(mock)
mock.expects(:read).with('/etc/ceilometer/ceilometer.conf') mock.expects(:read).with('/etc/ceilometer/ceilometer.conf')
expect(provider.get_access_keys_from_config).to eq(keys) expect(provider.access_keys_from_config).to eq(keys)
end end
it 'gets user keys' do it 'gets radosgw user keys' do
keys = {'access_key' => 'accEss', 'secret_key' => 'sEcrEt'}
rgw_output = {'keys' => [{'user' => 'ceilometer'}.merge(keys)]}
cmd = ['user', 'info', "--uid=ceilometer"]
provider.class.stubs(:rgw_adm).with(cmd).returns(rgw_output) provider.class.stubs(:rgw_adm).with(cmd).returns(rgw_output)
expect(provider.get_user_keys).to eq(keys) expect(provider.radosgw_user_keys).to eq(keys)
end end
end end

View File

@ -69,7 +69,7 @@ describe manifest do
revoke_driver = 'keystone.contrib.revoke.backends.sql.Revoke' revoke_driver = 'keystone.contrib.revoke.backends.sql.Revoke'
database_idle_timeout = '3600' database_idle_timeout = '3600'
ceilometer_hash = Noop.hiera_structure 'ceilometer' ceilometer_hash = Noop.hiera 'ceilometer_hash', { 'enabled' => false }
token_provider = Noop.hiera('token_provider') token_provider = Noop.hiera('token_provider')
primary_controller = Noop.hiera 'primary_controller' primary_controller = Noop.hiera 'primary_controller'
@ -214,9 +214,9 @@ describe manifest do
end end
end end
if ceilometer_hash and ceilometer_hash['enabled'] if ceilometer_hash['enabled']
it 'should configure notification driver' do it 'should configure notification driver' do
should contain_keystone_config('DEFAULT/notification_driver').with(:value => 'messagingv2') should contain_keystone_config('DEFAULT/notification_driver').with(:value => ceilometer_hash['notification_driver'])
end end
end end

View File

@ -6,6 +6,7 @@ describe manifest do
shared_examples 'catalog' do shared_examples 'catalog' do
storage_hash = Noop.hiera 'storage_hash' storage_hash = Noop.hiera 'storage_hash'
ceilometer_hash = Noop.hiera 'ceilometer_hash', { 'enabled' => false }
if Noop.hiera 'use_ceph' and !(storage_hash['volumes_lvm']) and !(member($roles, 'cinder-vmware')) if Noop.hiera 'use_ceph' and !(storage_hash['volumes_lvm']) and !(member($roles, 'cinder-vmware'))
it { should contain_class('ceph') } it { should contain_class('ceph') }
@ -63,6 +64,16 @@ describe manifest do
end end
end end
let :ceilometer_hash do
Noop.hiera 'ceilometer_hash', { 'enabled' => false }
end
if ceilometer_hash['enabled']
it 'should contain notification_driver option' do
should contain_cinder_config('DEFAULT/notification_driver').with(:value => ceilometer_hash['notification_driver'])
end
end
end end
test_ubuntu_and_centos manifest test_ubuntu_and_centos manifest
end end