Fix gnocchi endpoint issues

This fixes two primary issues:

- Removal of using node['openstack']['api']['auth']['version'] and converting to
  using ::URI.decode
- Renaming endpoint attributes from telemetry-metric to telemetry_metric to
  match what's used in openstack-common. Also rename all attributes to using the
  underscore to minimize confusion.

Change-Id: I59c960a18f9e88eea494ec3c7bdbf189309f23e7
Signed-off-by: Lance Albertson <lance@osuosl.org>
This commit is contained in:
Lance Albertson 2019-06-15 17:30:04 -07:00
parent 8fe7677556
commit e0a39ccaf1
9 changed files with 63 additions and 74 deletions

View File

@ -27,13 +27,13 @@ default['openstack']['telemetry']['custom_template_banner'] = '
# Set the endpoints for the telemetry services to allow all other cookbooks to # Set the endpoints for the telemetry services to allow all other cookbooks to
# access and use them # access and use them
%w(telemetry telemetry-metric aodh).each do |ts| %w(telemetry telemetry_metric aodh).each do |ts|
%w(public internal admin).each do |ep_type| %w(public internal admin).each do |ep_type|
default['openstack']['endpoints'][ep_type][ts]['host'] = '127.0.0.1' default['openstack']['endpoints'][ep_type][ts]['host'] = '127.0.0.1'
default['openstack']['endpoints'][ep_type][ts]['scheme'] = 'http' default['openstack']['endpoints'][ep_type][ts]['scheme'] = 'http'
default['openstack']['endpoints'][ep_type][ts]['path'] = '' default['openstack']['endpoints'][ep_type][ts]['path'] = ''
default['openstack']['endpoints'][ep_type]['telemetry']['port'] = 8777 default['openstack']['endpoints'][ep_type]['telemetry']['port'] = 8777
default['openstack']['endpoints'][ep_type]['telemetry-metric']['port'] = 8041 default['openstack']['endpoints'][ep_type]['telemetry_metric']['port'] = 8041
default['openstack']['endpoints'][ep_type]['aodh']['port'] = 8042 default['openstack']['endpoints'][ep_type]['aodh']['port'] = 8042
# web-service (e.g. apache) listen address (can be different from openstack # web-service (e.g. apache) listen address (can be different from openstack
# telemetry endpoints) # telemetry endpoints)
@ -41,15 +41,15 @@ default['openstack']['telemetry']['custom_template_banner'] = '
default['openstack']['bind_service']['all'][ts]['host'] = '127.0.0.1' default['openstack']['bind_service']['all'][ts]['host'] = '127.0.0.1'
end end
default['openstack']['bind_service']['all']['telemetry']['port'] = 8777 default['openstack']['bind_service']['all']['telemetry']['port'] = 8777
default['openstack']['bind_service']['all']['telemetry-metric']['port'] = 8041 default['openstack']['bind_service']['all']['telemetry_metric']['port'] = 8041
default['openstack']['bind_service']['all']['aodh']['port'] = 8042 default['openstack']['bind_service']['all']['aodh']['port'] = 8042
default['openstack']['telemetry']['conf_dir'] = '/etc/ceilometer' default['openstack']['telemetry']['conf_dir'] = '/etc/ceilometer'
default['openstack']['telemetry']['conf_file'] = default['openstack']['telemetry']['conf_file'] =
::File.join(node['openstack']['telemetry']['conf_dir'], 'ceilometer.conf') ::File.join(node['openstack']['telemetry']['conf_dir'], 'ceilometer.conf')
default['openstack']['telemetry-metric']['conf_dir'] = '/etc/gnocchi' default['openstack']['telemetry_metric']['conf_dir'] = '/etc/gnocchi'
default['openstack']['telemetry-metric']['conf_file'] = default['openstack']['telemetry_metric']['conf_file'] =
::File.join(node['openstack']['telemetry-metric']['conf_dir'], 'gnocchi.conf') ::File.join(node['openstack']['telemetry_metric']['conf_dir'], 'gnocchi.conf')
default['openstack']['telemetry']['syslog']['use'] = false default['openstack']['telemetry']['syslog']['use'] = false
default['openstack']['aodh']['conf_dir'] = '/etc/aodh' default['openstack']['aodh']['conf_dir'] = '/etc/aodh'
@ -59,25 +59,19 @@ default['openstack']['aodh']['conf_file'] =
default['openstack']['telemetry']['user'] = 'ceilometer' default['openstack']['telemetry']['user'] = 'ceilometer'
default['openstack']['telemetry']['group'] = 'ceilometer' default['openstack']['telemetry']['group'] = 'ceilometer'
default['openstack']['telemetry-metric']['user'] = 'gnocchi' default['openstack']['telemetry_metric']['user'] = 'gnocchi'
default['openstack']['telemetry-metric']['group'] = 'gnocchi' default['openstack']['telemetry_metric']['group'] = 'gnocchi'
default['openstack']['aodh']['user'] = 'aodh' default['openstack']['aodh']['user'] = 'aodh'
default['openstack']['aodh']['group'] = 'aodh' default['openstack']['aodh']['group'] = 'aodh'
default['openstack']['telemetry']['service_role'] = 'admin' default['openstack']['telemetry']['service_role'] = 'admin'
default['openstack']['telemetry-metric']['service_role'] = 'admin' default['openstack']['telemetry_metric']['service_role'] = 'admin'
default['openstack']['aodh']['service_role'] = 'admin' default['openstack']['aodh']['service_role'] = 'admin'
default['openstack']['telemetry']['identity-api']['auth']['version'] = default['openstack']['telemetry_metric']['gnocchi-upgrade-options'] = ''
node['openstack']['api']['auth']['version']
default['openstack']['telemetry-metric']['identity-api']['auth']['version'] =
node['openstack']['api']['auth']['version']
default['openstack']['aodh']['identity-api']['auth']['version'] =
node['openstack']['api']['auth']['version']
default['openstack']['telemetry-metric']['gnocchi-upgrade-options'] = ''
%w(telemetry telemetry-metric aodh).each do |ts| %w(telemetry telemetry_metric aodh).each do |ts|
# specify whether to enable SSL for ceilometer API endpoint # specify whether to enable SSL for ceilometer API endpoint
default['openstack'][ts]['ssl']['enabled'] = false default['openstack'][ts]['ssl']['enabled'] = false
# specify server whether to enforce client certificate requirement # specify server whether to enforce client certificate requirement

View File

@ -1,6 +1,6 @@
default['openstack']['telemetry-metric']['conf_secrets'] = {} default['openstack']['telemetry_metric']['conf_secrets'] = {}
default['openstack']['telemetry-metric']['conf'].tap do |conf| default['openstack']['telemetry_metric']['conf'].tap do |conf|
# [keystone_authtoken] section # [keystone_authtoken] section
conf['keystone_authtoken']['username'] = 'gnocchi' conf['keystone_authtoken']['username'] = 'gnocchi'
conf['keystone_authtoken']['project_name'] = 'service' conf['keystone_authtoken']['project_name'] = 'service'
@ -9,7 +9,7 @@ default['openstack']['telemetry-metric']['conf'].tap do |conf|
conf['keystone_authtoken']['project_domain_name'] = 'Default' conf['keystone_authtoken']['project_domain_name'] = 'Default'
conf['keystone_authtoken']['region_name'] = node['openstack']['region'] conf['keystone_authtoken']['region_name'] = node['openstack']['region']
conf['storage']['driver'] = 'file' conf['storage']['driver'] = 'file'
if node['openstack']['telemetry-metric']['conf']['storage']['driver'] == 'file' if node['openstack']['telemetry_metric']['conf']['storage']['driver'] == 'file'
conf['storage']['file_basepath'] = '/var/lib/gnocchi' conf['storage']['file_basepath'] = '/var/lib/gnocchi'
end end
end end

View File

@ -48,11 +48,7 @@ node.default['openstack']['aodh']['conf_secrets'].tap do |conf_secrets|
end end
identity_public_endpoint = public_endpoint 'identity' identity_public_endpoint = public_endpoint 'identity'
auth_url = auth_url = ::URI.decode identity_public_endpoint.to_s
auth_uri_transform(
identity_public_endpoint.to_s,
node['openstack']['aodh']['identity-api']['auth']['version']
)
node.default['openstack']['aodh']['conf'].tap do |conf| node.default['openstack']['aodh']['conf'].tap do |conf|
conf['api']['host'] = bind_service_address conf['api']['host'] = bind_service_address

View File

@ -64,14 +64,14 @@ node.default['openstack']['telemetry']['conf_secrets'].tap do |conf_secrets|
end end
identity_endpoint = public_endpoint 'identity' identity_endpoint = public_endpoint 'identity'
auth_url = auth_uri_transform identity_endpoint.to_s, node['openstack']['api']['auth']['version'] auth_url = ::URI.decode identity_endpoint.to_s
node.default['openstack']['telemetry']['conf'].tap do |conf| node.default['openstack']['telemetry']['conf'].tap do |conf|
conf['api']['host'] = bind_service_address conf['api']['host'] = bind_service_address
conf['api']['port'] = bind_service['port'] conf['api']['port'] = bind_service['port']
conf['keystone_authtoken']['auth_url'] = auth_url conf['keystone_authtoken']['auth_url'] = auth_url
conf['service_credentials']['auth_url'] = auth_url conf['service_credentials']['auth_url'] = auth_url
conf['dispatcher_gnocchi']['url'] = public_endpoint 'telemetry-metric' conf['dispatcher_gnocchi']['url'] = public_endpoint 'telemetry_metric'
conf['dispatcher_gnocchi']['filter_project'] = 'service' conf['dispatcher_gnocchi']['filter_project'] = 'service'
end end

View File

@ -19,37 +19,37 @@ class ::Chef::Recipe
include ::Openstack include ::Openstack
end end
platform = node['openstack']['telemetry']['platform'] platform = node['openstack']['telemetry']['platform']
db_user = node['openstack']['db']['telemetry-metric']['username'] db_user = node['openstack']['db']['telemetry_metric']['username']
db_pass = get_password 'db', 'gnocchi' db_pass = get_password 'db', 'gnocchi'
bind_service = node['openstack']['bind_service']['all']['telemetry-metric'] bind_service = node['openstack']['bind_service']['all']['telemetry_metric']
bind_service_address = bind_address bind_service bind_service_address = bind_address bind_service
# define secrets that are needed in the gnocchi.conf # define secrets that are needed in the gnocchi.conf
node.default['openstack']['telemetry-metric']['conf_secrets'].tap do |conf_secrets| node.default['openstack']['telemetry_metric']['conf_secrets'].tap do |conf_secrets|
conf_secrets['database']['connection'] = conf_secrets['database']['connection'] =
db_uri('telemetry-metric', db_user, db_pass) db_uri('telemetry_metric', db_user, db_pass)
conf_secrets['indexer']['url'] = conf_secrets['indexer']['url'] =
db_uri('telemetry-metric', db_user, db_pass) db_uri('telemetry_metric', db_user, db_pass)
conf_secrets['keystone_authtoken']['password'] = conf_secrets['keystone_authtoken']['password'] =
get_password 'service', 'openstack-telemetry-metric' get_password 'service', 'openstack-telemetry_metric'
end end
identity_endpoint = public_endpoint 'identity' identity_endpoint = public_endpoint 'identity'
auth_url = auth_uri_transform identity_endpoint.to_s, node['openstack']['api']['auth']['version'] auth_url = ::URI.decode identity_endpoint.to_s
node.default['openstack']['telemetry-metric']['conf'].tap do |conf| node.default['openstack']['telemetry_metric']['conf'].tap do |conf|
conf['api']['host'] = bind_service_address conf['api']['host'] = bind_service_address
conf['api']['port'] = bind_service['port'] conf['api']['port'] = bind_service['port']
conf['keystone_authtoken']['auth_url'] = auth_url conf['keystone_authtoken']['auth_url'] = auth_url
end end
# merge all config options and secrets to be used in the gnocchi.conf # merge all config options and secrets to be used in the gnocchi.conf
gnocchi_conf_options = merge_config_options 'telemetry-metric' gnocchi_conf_options = merge_config_options 'telemetry_metric'
template node['openstack']['telemetry-metric']['conf_file'] do template node['openstack']['telemetry_metric']['conf_file'] do
source 'openstack-service.conf.erb' source 'openstack-service.conf.erb'
cookbook 'openstack-common' cookbook 'openstack-common'
owner node['openstack']['telemetry-metric']['user'] owner node['openstack']['telemetry_metric']['user']
group node['openstack']['telemetry-metric']['group'] group node['openstack']['telemetry_metric']['group']
mode 0o0640 mode 0o0640
variables( variables(
service_config: gnocchi_conf_options service_config: gnocchi_conf_options
@ -66,10 +66,10 @@ cookbook_file File.join(node['openstack']['telemetry']['conf_dir'], 'gnocchi_res
end end
# drop api-paste.ini to gnocchi folder (default ini will not use keystone auth) # drop api-paste.ini to gnocchi folder (default ini will not use keystone auth)
cookbook_file File.join(node['openstack']['telemetry-metric']['conf_dir'], 'api-paste.ini') do cookbook_file File.join(node['openstack']['telemetry_metric']['conf_dir'], 'api-paste.ini') do
source 'api-paste.ini' source 'api-paste.ini'
owner node['openstack']['telemetry-metric']['user'] owner node['openstack']['telemetry_metric']['user']
group node['openstack']['telemetry-metric']['group'] group node['openstack']['telemetry_metric']['group']
mode 0o0640 mode 0o0640
end end
@ -83,15 +83,15 @@ cookbook_file File.join(node['openstack']['telemetry']['conf_dir'], 'event_pipel
mode 0o0640 mode 0o0640
end end
if node['openstack']['telemetry-metric']['conf']['storage']['driver'] == 'file' if node['openstack']['telemetry_metric']['conf']['storage']['driver'] == 'file'
# default store is file, so create needed directories with correct permissions # default store is file, so create needed directories with correct permissions
# (on ubuntu they are created by the package, but owned by root and not writable # (on ubuntu they are created by the package, but owned by root and not writable
# for gnocchi) # for gnocchi)
store_path = node['openstack']['telemetry-metric']['conf']['storage']['file_basepath'] store_path = node['openstack']['telemetry_metric']['conf']['storage']['file_basepath']
%w(tmp measure cache).each do |dir| %w(tmp measure cache).each do |dir|
directory File.join(store_path, dir) do directory File.join(store_path, dir) do
owner node['openstack']['telemetry-metric']['user'] owner node['openstack']['telemetry_metric']['user']
group node['openstack']['telemetry-metric']['group'] group node['openstack']['telemetry_metric']['group']
recursive true recursive true
mode 0o0750 mode 0o0750
end end
@ -100,8 +100,8 @@ end
# dbsync for gnocchi # dbsync for gnocchi
execute 'run gnocchi-upgrade' do execute 'run gnocchi-upgrade' do
command "gnocchi-upgrade #{node['openstack']['telemetry-metric']['gnocchi-upgrade-options']}" command "gnocchi-upgrade #{node['openstack']['telemetry_metric']['gnocchi-upgrade-options']}"
user node['openstack']['telemetry-metric']['user'] user node['openstack']['telemetry_metric']['user']
end end
#### Start of Apache specific work #### Start of Apache specific work
@ -146,21 +146,21 @@ web_app 'gnocchi-api' do
server_entry gnocchi_server_entry server_entry gnocchi_server_entry
run_dir node['apache']['run_dir'] run_dir node['apache']['run_dir']
log_dir node['apache']['log_dir'] log_dir node['apache']['log_dir']
log_debug node['openstack']['telemetry-metric']['debug'] log_debug node['openstack']['telemetry_metric']['debug']
user node['openstack']['telemetry-metric']['user'] user node['openstack']['telemetry_metric']['user']
group node['openstack']['telemetry-metric']['group'] group node['openstack']['telemetry_metric']['group']
use_ssl node['openstack']['telemetry-metric']['ssl']['enabled'] use_ssl node['openstack']['telemetry_metric']['ssl']['enabled']
cert_file node['openstack']['telemetry-metric']['ssl']['certfile'] cert_file node['openstack']['telemetry_metric']['ssl']['certfile']
chain_file node['openstack']['telemetry-metric']['ssl']['chainfile'] chain_file node['openstack']['telemetry_metric']['ssl']['chainfile']
key_file node['openstack']['telemetry-metric']['ssl']['keyfile'] key_file node['openstack']['telemetry_metric']['ssl']['keyfile']
ca_certs_path node['openstack']['telemetry-metric']['ssl']['ca_certs_path'] ca_certs_path node['openstack']['telemetry_metric']['ssl']['ca_certs_path']
cert_required node['openstack']['telemetry-metric']['ssl']['cert_required'] cert_required node['openstack']['telemetry_metric']['ssl']['cert_required']
protocol node['openstack']['telemetry-metric']['ssl']['protocol'] protocol node['openstack']['telemetry_metric']['ssl']['protocol']
ciphers node['openstack']['telemetry-metric']['ssl']['ciphers'] ciphers node['openstack']['telemetry_metric']['ssl']['ciphers']
end end
service 'gnocchi-metricd' do service 'gnocchi-metricd' do
service_name platform['gnocchi-metricd_service'] service_name platform['gnocchi-metricd_service']
subscribes :restart, "template[#{node['openstack']['telemetry-metric']['conf_file']}]" subscribes :restart, "template[#{node['openstack']['telemetry_metric']['conf_file']}]"
action [:enable, :start] action [:enable, :start]
end end

View File

@ -27,7 +27,7 @@ end
identity_endpoint = public_endpoint 'identity' identity_endpoint = public_endpoint 'identity'
auth_url = auth_uri_transform identity_endpoint.to_s, node['openstack']['api']['auth']['version'] auth_url = ::URI.decode identity_endpoint.to_s
admin_user = node['openstack']['identity']['admin_user'] admin_user = node['openstack']['identity']['admin_user']
admin_pass = get_password 'user', node['openstack']['identity']['admin_user'] admin_pass = get_password 'user', node['openstack']['identity']['admin_user']
admin_project = node['openstack']['identity']['admin_project'] admin_project = node['openstack']['identity']['admin_project']
@ -41,12 +41,12 @@ connection_params = {
openstack_domain_name: admin_domain, openstack_domain_name: admin_domain,
} }
%w(telemetry telemetry-metric aodh).each do |telemetry_service| %w(telemetry telemetry_metric aodh).each do |telemetry_service|
case telemetry_service case telemetry_service
when 'telemetry' when 'telemetry'
service_name = 'ceilometer' service_name = 'ceilometer'
service_type = 'metering' service_type = 'metering'
when 'telemetry-metric' when 'telemetry_metric'
service_name = 'gnocchi' service_name = 'gnocchi'
service_type = 'metric' service_type = 'metric'
when 'aodh' when 'aodh'
@ -57,7 +57,6 @@ connection_params = {
interfaces = { interfaces = {
public: { url: public_endpoint(telemetry_service) }, public: { url: public_endpoint(telemetry_service) },
internal: { url: internal_endpoint(telemetry_service) }, internal: { url: internal_endpoint(telemetry_service) },
admin: { url: admin_endpoint(telemetry_service) },
} }
service_pass = get_password 'service', "openstack-#{telemetry_service}" service_pass = get_password 'service', "openstack-#{telemetry_service}"

View File

@ -106,7 +106,7 @@ describe 'openstack-telemetry::gnocchi_configure' do
end end
context 'other storage backend' do context 'other storage backend' do
before do before do
node.override['openstack']['telemetry-metric']['conf']['storage']['driver'] = 'ceph' node.override['openstack']['telemetry_metric']['conf']['storage']['driver'] = 'ceph'
end end
it do it do
expect(chef_run).to_not create_directory("/var/lib/gnocchi/#{dir}") expect(chef_run).to_not create_directory("/var/lib/gnocchi/#{dir}")
@ -176,7 +176,7 @@ describe 'openstack-telemetry::gnocchi_configure' do
end end
it "configures #{file} common lines" do it "configures #{file} common lines" do
node.override['openstack']['telemetry-metric']['custom_template_banner'] = 'custom_template_banner_value' node.override['openstack']['telemetry_metric']['custom_template_banner'] = 'custom_template_banner_value'
[/user=gnocchi/, [/user=gnocchi/,
/group=gnocchi/, /group=gnocchi/,
%r{^ ErrorLog /var/log/apache2/gnocchi-api_error.log$}, %r{^ ErrorLog /var/log/apache2/gnocchi-api_error.log$},
@ -193,7 +193,7 @@ describe 'openstack-telemetry::gnocchi_configure' do
end end
context 'Enable SSL' do context 'Enable SSL' do
before do before do
node.override['openstack']['telemetry-metric']['ssl']['enabled'] = true node.override['openstack']['telemetry_metric']['ssl']['enabled'] = true
end end
it "configures #{file} common ssl lines" do it "configures #{file} common ssl lines" do
[/^ SSLEngine On$/, [/^ SSLEngine On$/,
@ -212,17 +212,17 @@ describe 'openstack-telemetry::gnocchi_configure' do
end end
end end
it "configures #{file} chainfile when set" do it "configures #{file} chainfile when set" do
node.override['openstack']['telemetry-metric']['ssl']['chainfile'] = '/etc/ceilometer/ssl/certs/chainfile.pem' node.override['openstack']['telemetry_metric']['ssl']['chainfile'] = '/etc/ceilometer/ssl/certs/chainfile.pem'
expect(chef_run).to render_file(file) expect(chef_run).to render_file(file)
.with_content(%r{^ SSLCertificateChainFile /etc/ceilometer/ssl/certs/chainfile.pem$}) .with_content(%r{^ SSLCertificateChainFile /etc/ceilometer/ssl/certs/chainfile.pem$})
end end
it "configures #{file} ciphers when set" do it "configures #{file} ciphers when set" do
node.override['openstack']['telemetry-metric']['ssl']['ciphers'] = 'ciphers_value' node.override['openstack']['telemetry_metric']['ssl']['ciphers'] = 'ciphers_value'
expect(chef_run).to render_file(file) expect(chef_run).to render_file(file)
.with_content(/^ SSLCipherSuite ciphers_value$/) .with_content(/^ SSLCipherSuite ciphers_value$/)
end end
it "configures #{file} cert_required set" do it "configures #{file} cert_required set" do
node.override['openstack']['telemetry-metric']['ssl']['cert_required'] = true node.override['openstack']['telemetry_metric']['ssl']['cert_required'] = true
expect(chef_run).to render_file(file) expect(chef_run).to render_file(file)
.with_content(/^ SSLVerifyClient require$/) .with_content(/^ SSLVerifyClient require$/)
end end

View File

@ -10,14 +10,14 @@ describe 'openstack-telemetry::identity_registration' do
include_context 'telemetry-stubs' include_context 'telemetry-stubs'
%w(telemetry telemetry-metric).each do |telemetry_service| %w(telemetry telemetry_metric).each do |telemetry_service|
case telemetry_service case telemetry_service
when 'telemetry' when 'telemetry'
service_name = 'ceilometer' service_name = 'ceilometer'
service_type = 'metering' service_type = 'metering'
password = 'ceilometer-pass' password = 'ceilometer-pass'
port = 8777 port = 8777
when 'telemetry-metric' when 'telemetry_metric'
service_name = 'gnocchi' service_name = 'gnocchi'
service_type = 'metric' service_type = 'metric'
password = 'gnocchi-pass' password = 'gnocchi-pass'
@ -56,7 +56,7 @@ describe 'openstack-telemetry::identity_registration' do
end end
context "registers #{service_name} endpoint" do context "registers #{service_name} endpoint" do
%w(admin internal public).each do |interface| %w(internal public).each do |interface|
it "#{interface} endpoint with default values" do it "#{interface} endpoint with default values" do
expect(chef_run).to create_openstack_endpoint( expect(chef_run).to create_openstack_endpoint(
service_type service_type

View File

@ -36,7 +36,7 @@ shared_context 'telemetry-stubs' do
.with('service', 'openstack-telemetry') .with('service', 'openstack-telemetry')
.and_return('ceilometer-pass') .and_return('ceilometer-pass')
allow_any_instance_of(Chef::Recipe).to receive(:get_password) allow_any_instance_of(Chef::Recipe).to receive(:get_password)
.with('service', 'openstack-telemetry-metric') .with('service', 'openstack-telemetry_metric')
.and_return('gnocchi-pass') .and_return('gnocchi-pass')
allow_any_instance_of(Chef::Recipe).to receive(:get_password) allow_any_instance_of(Chef::Recipe).to receive(:get_password)
.with('service', 'openstack-aodh') .with('service', 'openstack-aodh')