From fb47ad9cf330f0a2980158c7e3195585ca45330f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Sim=C3=B3n?= Date: Mon, 3 Jun 2019 12:26:22 +0200 Subject: [PATCH] ncm-openstack: add ceilometer service Include ceilometer server Resolves: #1381 --- .../main/pan/components/openstack/common.pan | 5 ++ .../openstack/dashboard/horizon.pan | 2 +- .../identity/gather/metric/ceilometer.pan | 14 ++++ .../main/pan/components/openstack/metric.pan | 14 ++++ .../openstack/metric/ceilometer.pan | 70 ++++++++++++++++ .../openstack/orchestration/heat.pan | 2 +- .../pan/components/openstack/rootwrap.pan | 2 +- .../main/pan/components/openstack/schema.pan | 2 + .../src/main/perl/OpenStack/Ceilometer.pm | 79 +++++++++++++++++++ ncm-openstack/src/main/perl/openstack.pm | 33 ++++++++ .../resources/tests/profiles/ceilometer.pan | 22 ++++++ .../tests/profiles/ceilometer_gnocchi.pan | 25 ++++++ .../tests/regexps/ceilometer/noquattor | 4 + .../resources/tests/regexps/ceilometer/simple | 15 ++++ .../regexps/ceilometer_gnocchi/noquattor | 4 + .../tests/regexps/ceilometer_gnocchi/simple | 23 ++++++ ncm-openstack/src/test/perl/cmddata.pm | 7 +- ncm-openstack/src/test/perl/hypervisor.t | 7 ++ ncm-openstack/src/test/perl/hypervisor_ovs.t | 7 ++ ncm-openstack/src/test/perl/openstack.t | 17 ++++ .../src/test/perl/rest_data/openstack | 3 + ncm-openstack/src/test/perl/service.t | 2 +- .../src/test/resources/ceilometer.pan | 3 + .../src/test/resources/ceilometer_gnocchi.pan | 3 + .../src/test/resources/common_resources.pan | 13 +++ .../src/test/resources/os_resources.pan | 32 ++++++++ 26 files changed, 405 insertions(+), 5 deletions(-) create mode 100644 ncm-openstack/src/main/pan/components/openstack/identity/gather/metric/ceilometer.pan create mode 100644 ncm-openstack/src/main/pan/components/openstack/metric.pan create mode 100644 ncm-openstack/src/main/pan/components/openstack/metric/ceilometer.pan create mode 100644 ncm-openstack/src/main/perl/OpenStack/Ceilometer.pm create mode 100644 ncm-openstack/src/main/resources/tests/profiles/ceilometer.pan create mode 100644 ncm-openstack/src/main/resources/tests/profiles/ceilometer_gnocchi.pan create mode 100644 ncm-openstack/src/main/resources/tests/regexps/ceilometer/noquattor create mode 100644 ncm-openstack/src/main/resources/tests/regexps/ceilometer/simple create mode 100644 ncm-openstack/src/main/resources/tests/regexps/ceilometer_gnocchi/noquattor create mode 100644 ncm-openstack/src/main/resources/tests/regexps/ceilometer_gnocchi/simple create mode 100644 ncm-openstack/src/test/resources/ceilometer.pan create mode 100644 ncm-openstack/src/test/resources/ceilometer_gnocchi.pan diff --git a/ncm-openstack/src/main/pan/components/openstack/common.pan b/ncm-openstack/src/main/pan/components/openstack/common.pan index 6d8f2114a4..c91e57adbd 100644 --- a/ncm-openstack/src/main/pan/components/openstack/common.pan +++ b/ncm-openstack/src/main/pan/components/openstack/common.pan @@ -30,6 +30,8 @@ type openstack_neutron_service_plugins = choice('router', 'port_forwarding')[]; type openstack_neutron_agent_extensions = choice('port_forwarding')[]; +type openstack_keystone_endpoint_type = choice('internalURL', 'publicURL'); + @documentation{ OpenStack common domains section } @@ -49,6 +51,9 @@ type openstack_domains_common = { 'username' : string @{OpenStack service user password} 'password' : string + @{Type of endpoint in Identity service catalog to use for communication with + OpenStack services} + 'interface' ? openstack_keystone_endpoint_type = 'internalURL' }; @documentation{ diff --git a/ncm-openstack/src/main/pan/components/openstack/dashboard/horizon.pan b/ncm-openstack/src/main/pan/components/openstack/dashboard/horizon.pan index 305a74bbf7..beaffe9ba6 100644 --- a/ncm-openstack/src/main/pan/components/openstack/dashboard/horizon.pan +++ b/ncm-openstack/src/main/pan/components/openstack/dashboard/horizon.pan @@ -250,7 +250,7 @@ type openstack_horizon_config_identity_keystone = { @{the endpoint type to use for the endpoints in the Keystone service catalog. The default value for all services except for identity is "publicURL". The default value for the identity service is "internalURL".} - 'openstack_endpoint_type' ? choice('internalURL', 'publicURL') + 'openstack_endpoint_type' ? openstack_keystone_endpoint_type @{Configure the default role for users that you create via the dashboard} 'openstack_keystone_default_role' : string = 'user' 'openstack_keystone_backend' : openstack_horizon_keystone_backend diff --git a/ncm-openstack/src/main/pan/components/openstack/identity/gather/metric/ceilometer.pan b/ncm-openstack/src/main/pan/components/openstack/identity/gather/metric/ceilometer.pan new file mode 100644 index 0000000000..667bacba4c --- /dev/null +++ b/ncm-openstack/src/main/pan/components/openstack/identity/gather/metric/ceilometer.pan @@ -0,0 +1,14 @@ +unique template components/openstack/identity/gather/metric/ceilometer; + +@{openstack_quattor_ceilometer default value until we can use the schema defaults from value} +prefix "/software/components/openstack/metric/ceilometer/quattor"; +prefix "service/internal"; +'proto' ?= 'https'; +'host' ?= OBJECT; +'port' ?= 8041; +'suffix' ?= ''; + +prefix "services/gnocchi"; +"type" = "metric"; +"internal/port" ?= 8041; +"internal/suffix" ?= ''; diff --git a/ncm-openstack/src/main/pan/components/openstack/metric.pan b/ncm-openstack/src/main/pan/components/openstack/metric.pan new file mode 100644 index 0000000000..966c9ec75b --- /dev/null +++ b/ncm-openstack/src/main/pan/components/openstack/metric.pan @@ -0,0 +1,14 @@ +# ${license-info} +# ${developer-info} +# ${author-info} + +declaration template components/openstack/metric; + +include 'components/openstack/metric/ceilometer'; + +@documentation{ +Type to define OpenStack metric services +} +type openstack_metric_config = { + 'ceilometer' ? openstack_ceilometer_config +} with openstack_oneof(SELF, 'ceilometer'); diff --git a/ncm-openstack/src/main/pan/components/openstack/metric/ceilometer.pan b/ncm-openstack/src/main/pan/components/openstack/metric/ceilometer.pan new file mode 100644 index 0000000000..19232d8e36 --- /dev/null +++ b/ncm-openstack/src/main/pan/components/openstack/metric/ceilometer.pan @@ -0,0 +1,70 @@ +# ${license-info} +# ${developer-info} +# ${author-info} + + +declaration template components/openstack/metric/ceilometer; + +include 'components/openstack/identity'; + + + +@documentation{ + list of Gnocchi api section +} +type openstack_ceilometer_gnocchi_api = { + 'auth_mode' : string = 'keystone' +}; + + +@documentation{ + list of Gnocchi indexer section +} +type openstack_ceilometer_gnocchi_indexer = { + @{The SQLAlchemy connection string to use to connect to the database} + 'url' : string +}; + +@documentation{ + list of Gnocchi storage section +} +type openstack_ceilometer_gnocchi_storage = { + @{coordination_url is not required but specifying one will improve + performance with better workload division across workers} + 'coordination_url' ? string + 'file_basepath' : absolute_file_path = '/var/lib/gnocchi' + 'driver' : string = 'file' +}; + + +@documentation{ + list of Ceilometer Gnocchi service sections +} +type openstack_ceilometer_gnocchi_config = { + 'api' : openstack_ceilometer_gnocchi_api + 'indexer' : openstack_ceilometer_gnocchi_indexer + 'storage' : openstack_ceilometer_gnocchi_storage + 'keystone_authtoken' : openstack_domains_common +}; + +@documentation{ + list of Ceilometer service configuration sections +} +type openstack_ceilometer_service_config = { + 'DEFAULT' : openstack_DEFAULTS + 'service_credentials' : openstack_domains_common +}; + +type openstack_quattor_ceilometer = openstack_quattor; + +@documentation{ + list of Ceilometer service configuration sections +} +type openstack_ceilometer_config = { + 'service' ? openstack_ceilometer_service_config + 'gnocchi' ? openstack_ceilometer_gnocchi_config + # pipeline in yaml format + #'pipeline' ? openstack_ceilometer_pipeline_config + # default empty dict for pure hypervisor + 'quattor' : openstack_quattor_ceilometer = dict() +}; diff --git a/ncm-openstack/src/main/pan/components/openstack/orchestration/heat.pan b/ncm-openstack/src/main/pan/components/openstack/orchestration/heat.pan index 4241375cc5..f522220662 100644 --- a/ncm-openstack/src/main/pan/components/openstack/orchestration/heat.pan +++ b/ncm-openstack/src/main/pan/components/openstack/orchestration/heat.pan @@ -42,7 +42,7 @@ type openstack_heat_clients_keystone = { type openstack_heat_clients = { @{Type of endpoint in Identity service catalog to use for communication with the OpenStack service} - 'endpoint_type' : choice('internalURL', 'publicURL') = 'internalURL' + 'endpoint_type' : openstack_keystone_endpoint_type = 'internalURL' } = dict(); type openstack_quattor_heat = openstack_quattor; diff --git a/ncm-openstack/src/main/pan/components/openstack/rootwrap.pan b/ncm-openstack/src/main/pan/components/openstack/rootwrap.pan index 954b41a306..5675077c33 100644 --- a/ncm-openstack/src/main/pan/components/openstack/rootwrap.pan +++ b/ncm-openstack/src/main/pan/components/openstack/rootwrap.pan @@ -15,7 +15,7 @@ unique template components/${project.artifactId}/rootwrap; include 'components/sudo/config'; -variable ROOTWRAP_SERVICES = list('nova', 'neutron', 'cinder', 'manila'); +variable ROOTWRAP_SERVICES = list('nova', 'neutron', 'cinder', 'manila', 'ceilometer'); "/software/components/sudo/privilege_lines" = { diff --git a/ncm-openstack/src/main/pan/components/openstack/schema.pan b/ncm-openstack/src/main/pan/components/openstack/schema.pan index cfc3b3f0ff..bdcf00c3f9 100644 --- a/ncm-openstack/src/main/pan/components/openstack/schema.pan +++ b/ncm-openstack/src/main/pan/components/openstack/schema.pan @@ -14,6 +14,7 @@ include 'components/openstack/dashboard'; include 'components/openstack/orchestration'; include 'components/openstack/catalog'; include 'components/openstack/messaging'; +include 'components/openstack/metric'; @documentation{ Hypervisor configuration. @@ -57,6 +58,7 @@ type openstack_component = { 'messaging' ? openstack_messaging_config 'orchestration' ? openstack_orchestration_config 'catalog' ? openstack_catalog_config + 'metric' ? openstack_metric_config 'openrc' ? openstack_openrc_config @{Hypervisor configuration. Host is a hypervisor when this attribute exists} 'hypervisor' ? openstack_hypervisor_config diff --git a/ncm-openstack/src/main/perl/OpenStack/Ceilometer.pm b/ncm-openstack/src/main/perl/OpenStack/Ceilometer.pm new file mode 100644 index 0000000000..76f5f71561 --- /dev/null +++ b/ncm-openstack/src/main/perl/OpenStack/Ceilometer.pm @@ -0,0 +1,79 @@ +#${PMpre} NCM::Component::OpenStack::Ceilometer${PMpost} + +use parent qw(NCM::Component::OpenStack::Service); + +use Readonly; +use Data::Dumper; + +Readonly our $GNOCCHI_DB_MANAGE_COMMAND => "/usr/bin/gnocchi-upgrade"; +Readonly our $CEILOMETER_DB_MANAGE_COMMAND => "/usr/bin/ceilometer-upgrade"; + +Readonly::Array my @CEILOMETER_DB_BOOTSTRAP => qw(--debug); +Readonly::Array my @CEILOMETER_DB_VERSION => qw(--version); + +Readonly::Hash my %CONF_FILE => { + service => "/etc/ceilometer/ceilometer.conf", + gnocchi => "/etc/gnocchi/gnocchi.conf", + #pipeline => "/etc/ceilometer/pipeline.yaml", + #polling => "/etc/ceilometer/polling.yaml", +}; + +Readonly::Hash my %DAEMON => { + service => ['openstack-ceilometer-notification', 'openstack-ceilometer-central'], + gnocchi => ['openstack-gnocchi-api', 'openstack-gnocchi-metricd'], +}; + +Readonly::Hash my %DAEMON_HYPERVISOR => { + service => ['openstack-ceilometer-compute', 'openstack-ceilometer-ipmi'], +}; + + +=head2 Methods + +=over + +=item _attrs + +Override C, C and C attribute (and set C) + +=cut + +sub _attrs +{ + my $self = shift; + + $self->{manage} = $self->{hypervisor} ? undef : $GNOCCHI_DB_MANAGE_COMMAND; + # Ceilometer has no database parameters + $self->{db_version} = [@CEILOMETER_DB_VERSION]; + $self->{db_sync} = [@CEILOMETER_DB_BOOTSTRAP]; + $self->{filename} = \%CONF_FILE; + $self->{daemon_map} = $self->{hypervisor} ? \%DAEMON_HYPERVISOR : \%DAEMON; +} + + +=item post_populate_service_database + +Initializes Ceilometer database after Gnocchi setup +for C metric service. + +=cut + +sub post_populate_service_database +{ + my ($self) = @_; + + my $cmd = [$CEILOMETER_DB_MANAGE_COMMAND]; + $self->_do($cmd, "post-populate Ceilometer database", sensitive => 0) + or return; + + return 1; +} + + +=pod + +=back + +=cut + +1; diff --git a/ncm-openstack/src/main/perl/openstack.pm b/ncm-openstack/src/main/perl/openstack.pm index 229b5299d4..5c63073b71 100644 --- a/ncm-openstack/src/main/perl/openstack.pm +++ b/ncm-openstack/src/main/perl/openstack.pm @@ -38,6 +38,14 @@ ncm-openstack provides support for OpenStack configuration for: =back +=head2 Volume + +=over + +=item * Cinder + +=back + =head2 Network =over @@ -62,6 +70,30 @@ ncm-openstack provides support for OpenStack configuration for: =back +=head2 Metric + +=over + +=item * Ceilometer + +=back + +=head2 Orchestration + +=over + +=item * Heat + +=back + +=head2 Share + +=over + +=item * Manila + +=back + =head2 Messaging =over @@ -127,6 +159,7 @@ sub Configure 'network', 'orchestration', 'catalog', + 'metric', 'dashboard', ]; diff --git a/ncm-openstack/src/main/resources/tests/profiles/ceilometer.pan b/ncm-openstack/src/main/resources/tests/profiles/ceilometer.pan new file mode 100644 index 0000000000..7706411dfa --- /dev/null +++ b/ncm-openstack/src/main/resources/tests/profiles/ceilometer.pan @@ -0,0 +1,22 @@ +object template ceilometer; + +include 'components/openstack/schema'; + +bind "/metaconfig/contents" = openstack_ceilometer_service_config; + +"/metaconfig/module" = "common"; + +variable OPENSTACK_HOST_SERVER ?= 'controller.mysite.com'; + +prefix "/metaconfig/contents"; + +"DEFAULT" = dict( + "transport_url", format("rabbit://openstack:rabbit_pass@%s", OPENSTACK_HOST_SERVER), +); +"service_credentials" = dict( + #"auth_uri", format('http://%s:5000', OPENSTACK_HOST_SERVER), + "auth_url", format('http://%s:5000/v3', OPENSTACK_HOST_SERVER), + "username", "ceilometer", + "password", "ceilometer_good_password", + "interface", "internalURL", +); diff --git a/ncm-openstack/src/main/resources/tests/profiles/ceilometer_gnocchi.pan b/ncm-openstack/src/main/resources/tests/profiles/ceilometer_gnocchi.pan new file mode 100644 index 0000000000..2973f82695 --- /dev/null +++ b/ncm-openstack/src/main/resources/tests/profiles/ceilometer_gnocchi.pan @@ -0,0 +1,25 @@ +object template ceilometer_gnocchi; + +include 'components/openstack/schema'; + +bind "/metaconfig/contents" = openstack_ceilometer_gnocchi_config; + +"/metaconfig/module" = "common"; + +variable OPENSTACK_HOST_SERVER ?= 'controller.mysite.com'; + +prefix "/metaconfig/contents"; + +"api" = dict(); +"storage" = dict( + 'coordination_url', format('redis://%s:6379', OPENSTACK_HOST_SERVER), +); +"keystone_authtoken" = dict( + "auth_url", format('http://%s:5000/v3', OPENSTACK_HOST_SERVER), + "username", "gnocchi", + "password", "gnocchi_good_password", + "interface", "internalURL", +); +"indexer" = dict( + "url", format("mysql+pymysql://gnocchi:gnocchi_db_pass@%s/gnocchi", OPENSTACK_HOST_SERVER), +); diff --git a/ncm-openstack/src/main/resources/tests/regexps/ceilometer/noquattor b/ncm-openstack/src/main/resources/tests/regexps/ceilometer/noquattor new file mode 100644 index 0000000000..607fa03ca0 --- /dev/null +++ b/ncm-openstack/src/main/resources/tests/regexps/ceilometer/noquattor @@ -0,0 +1,4 @@ +OpenStack test: do not render quattor section +--- +--- +\[quattor\] ### COUNT 0 diff --git a/ncm-openstack/src/main/resources/tests/regexps/ceilometer/simple b/ncm-openstack/src/main/resources/tests/regexps/ceilometer/simple new file mode 100644 index 0000000000..a8a2b19629 --- /dev/null +++ b/ncm-openstack/src/main/resources/tests/regexps/ceilometer/simple @@ -0,0 +1,15 @@ +OpenStack Ceilometer test +--- +multiline +--- +^\[DEFAULT\]$ +^transport_url\s?=\s*.+\s*$ + +^\[service_credentials\]\s*$ +^auth_type\s?=\s*.+\s*$ +^auth_url\s?=\s*.+\s*$ +^password\s?=\s*.+\s*$ +^project_domain_name\s?=\s*.+\s*$ +^project_name\s?=\s*.+\s*$ +^user_domain_name\s?=\s*.+\s*$ +^username\s?=\s*.+\s*$ diff --git a/ncm-openstack/src/main/resources/tests/regexps/ceilometer_gnocchi/noquattor b/ncm-openstack/src/main/resources/tests/regexps/ceilometer_gnocchi/noquattor new file mode 100644 index 0000000000..607fa03ca0 --- /dev/null +++ b/ncm-openstack/src/main/resources/tests/regexps/ceilometer_gnocchi/noquattor @@ -0,0 +1,4 @@ +OpenStack test: do not render quattor section +--- +--- +\[quattor\] ### COUNT 0 diff --git a/ncm-openstack/src/main/resources/tests/regexps/ceilometer_gnocchi/simple b/ncm-openstack/src/main/resources/tests/regexps/ceilometer_gnocchi/simple new file mode 100644 index 0000000000..31129baf84 --- /dev/null +++ b/ncm-openstack/src/main/resources/tests/regexps/ceilometer_gnocchi/simple @@ -0,0 +1,23 @@ +OpenStack Ceilometer Gnocchi test +--- +multiline +--- +^\[api\]\s*$ +^auth_mode\s?=\s*.+\s*$ + +^\[indexer\]\s*$ +^url\s?=\s*.+\s*$ + +^\[keystone_authtoken\]\s*$ +^auth_type\s?=\s*.+\s*$ +^auth_url\s?=\s*.+\s*$ +^password\s?=\s*.+\s*$ +^project_domain_name\s?=\s*.+\s*$ +^project_name\s?=\s*.+\s*$ +^user_domain_name\s?=\s*.+\s*$ +^username\s?=\s*.+\s*$ + +^\[storage\]\s*$ +^coordination_url\s?=\s*.+\s*$ +^driver\s?=\s*.+\s*$ +^file_basepath\s?=\s*.+\s*$ diff --git a/ncm-openstack/src/test/perl/cmddata.pm b/ncm-openstack/src/test/perl/cmddata.pm index a3cf83d4b5..7c628c65d2 100644 --- a/ncm-openstack/src/test/perl/cmddata.pm +++ b/ncm-openstack/src/test/perl/cmddata.pm @@ -88,11 +88,16 @@ $cmds{heat_db_version}{out} = 1; $cmds{heat_db_version_missing}{cmd} = "/usr/bin/heat-manage db_version"; $cmds{heat_db_version_missing}{ec} = 1; +$cmds{ceilometer_db_version}{cmd} = "/usr/bin/gnocchi-upgrade --version"; +$cmds{ceilometer_db_version}{out} = 1; + +$cmds{ceilometer_db_version_missing}{cmd} = "/usr/bin/gnocchi-upgrade --version"; +$cmds{ceilometer_db_version_missing}{ec} = 1; + $cmds{murano_db_version}{cmd} = "/usr/bin/murano-db-manage version"; $cmds{murano_db_version}{out} = 1; $cmds{murano_db_version_missing}{cmd} = "/usr/bin/murano-db-manage version"; $cmds{murano_db_version_missing}{ec} = 1; - 1; diff --git a/ncm-openstack/src/test/perl/hypervisor.t b/ncm-openstack/src/test/perl/hypervisor.t index b6ee820909..64e6ed51b4 100644 --- a/ncm-openstack/src/test/perl/hypervisor.t +++ b/ncm-openstack/src/test/perl/hypervisor.t @@ -40,6 +40,11 @@ $fh = get_file("/etc/neutron/plugins/ml2/linuxbridge_agent.ini"); isa_ok($fh, "CAF::FileWriter", "linuxbridge_agent.ini hypervisor CAF::FileWriter instance"); like("$fh", qr{^\[linux_bridge\]$}m, "linuxbridge_agent.ini hypervisor has expected content"); +# Verify Ceilometer configuration file +$fh = get_file("/etc/ceilometer/ceilometer.conf"); +isa_ok($fh, "CAF::FileWriter", "ceilometer.conf CAF::FileWriter instance"); +like("$fh", qr{^\[DEFAULT\]$}m, "ceilometer.conf has expected content"); + diag "all hypervisor history commands ", explain \@Test::Quattor::command_history; ok(command_history_ok([ @@ -49,6 +54,8 @@ ok(command_history_ok([ '/usr/bin/virsh secret-set-value --secret 5b67401f-dc5e-496a-8456-9a5dc40e7d3c --base64 abc', 'service openstack-nova-compute restart', 'service neutron-linuxbridge-agent restart', + 'service openstack-ceilometer-compute restart', + 'service openstack-ceilometer-ipmi restart' ]), "expected hypervisor commands run"); command_history_reset(); diff --git a/ncm-openstack/src/test/perl/hypervisor_ovs.t b/ncm-openstack/src/test/perl/hypervisor_ovs.t index ed130e9005..0d6135ca52 100644 --- a/ncm-openstack/src/test/perl/hypervisor_ovs.t +++ b/ncm-openstack/src/test/perl/hypervisor_ovs.t @@ -40,6 +40,11 @@ $fh = get_file("/etc/neutron/plugins/ml2/openvswitch_agent.ini"); isa_ok($fh, "CAF::FileWriter", "openvswitch_agent.ini hypervisor CAF::FileWriter instance"); like("$fh", qr{^\[agent\]$}m, "openvswitch_agent.ini hypervisor has expected content"); +# Verify Ceilometer configuration file +$fh = get_file("/etc/ceilometer/ceilometer.conf"); +isa_ok($fh, "CAF::FileWriter", "ceilometer.conf CAF::FileWriter instance"); +like("$fh", qr{^\[DEFAULT\]$}m, "ceilometer.conf has expected content"); + diag "all hypervisor history commands ", explain \@Test::Quattor::command_history; ok(command_history_ok([ @@ -49,6 +54,8 @@ ok(command_history_ok([ '/usr/bin/virsh secret-set-value --secret 5b67401f-dc5e-496a-8456-9a5dc40e7d3c --base64 abc', 'service openstack-nova-compute restart', 'service neutron-openvswitch-agent restart', + 'service openstack-ceilometer-compute restart', + 'service openstack-ceilometer-ipmi restart', ]), "expected hypervisor ovs commands run"); command_history_reset(); diff --git a/ncm-openstack/src/test/perl/openstack.t b/ncm-openstack/src/test/perl/openstack.t index 1a73b73641..03c972d81e 100644 --- a/ncm-openstack/src/test/perl/openstack.t +++ b/ncm-openstack/src/test/perl/openstack.t @@ -31,6 +31,7 @@ set_output('cinder_db_version_missing'); set_output('manila_db_version_missing'); set_output('heat_db_version_missing'); set_output('murano_db_version_missing'); +set_output('ceilometer_db_version_missing'); ok($cmp->Configure($cfg), 'Configure returns success'); ok(!exists($cmp->{ERROR}), "No errors found in normal execution"); @@ -108,6 +109,15 @@ $fh = get_file("/etc/murano/murano.conf"); isa_ok($fh, "CAF::FileWriter", "murano.conf CAF::FileWriter instance"); like("$fh", qr{^\[DEFAULT\]$}m, "murano.conf has expected content"); +# Verify Ceilometer configuration files +$fh = get_file("/etc/ceilometer/ceilometer.conf"); +isa_ok($fh, "CAF::FileWriter", "ceilometer.conf CAF::FileWriter instance"); +like("$fh", qr{^\[DEFAULT\]$}m, "ceilometer.conf has expected content"); + +$fh = get_file("/etc/gnocchi/gnocchi.conf"); +isa_ok($fh, "CAF::FileWriter", "gnocchi.conf CAF::FileWriter instance"); +like("$fh", qr{^\[api\]$}m, "gnocchi.conf has expected content"); + diag "all servers history commands ", explain \@Test::Quattor::command_history; ok(command_history_ok([ @@ -162,6 +172,13 @@ ok(command_history_ok([ '/usr/bin/murano-db-manage upgrade', 'service murano-api restart', 'service murano-engine restart', + '/usr/bin/gnocchi-upgrade --version', + '/usr/bin/gnocchi-upgrade --debug', + '/usr/bin/ceilometer-upgrade', + 'service openstack-gnocchi-api restart', + 'service openstack-gnocchi-metricd restart', + 'service openstack-ceilometer-notification restart', + 'service openstack-ceilometer-central restart', 'service httpd restart', ]), "server expected commands run"); diff --git a/ncm-openstack/src/test/perl/rest_data/openstack b/ncm-openstack/src/test/perl/rest_data/openstack index e57fffe685..61e5e2c161 100644 --- a/ncm-openstack/src/test/perl/rest_data/openstack +++ b/ncm-openstack/src/test/perl/rest_data/openstack @@ -45,6 +45,7 @@ dopost('userneutron', 'user', '"description":"quattor service network flavour ne dopost('usernova', 'user', '"description":"quattor service compute flavour nova user","domain_id":"dom112233","enabled":true,"name":"nova","password":"nova_good_password"', 'use12no'); dopost('userheat', 'user', '"description":"quattor service orchestration flavour heat user","domain_id":"dom112233","enabled":true,"name":"heat","password":"heat_good_password"', 'use12he'); dopost('usermurano', 'user', '"description":"quattor service catalog flavour murano user","domain_id":"dom112233","enabled":true,"name":"murano","password":"murano_good_password"', 'use12mu'); +dopost('userceilometer', 'user', '"description":"quattor service metric flavour ceilometer user","domain_id":"dom112233","enabled":true,"name":"ceilometer","password":"ceilometer_good_password"', 'use12ce'); dopost('userone', 'user', '"description":"first user","enabled":true,"name":"user1","password":"abc"', 'use12'); @@ -66,6 +67,7 @@ dopost('serviceneutron', 'service', '"description":"OS network service neutron", dopost('servicemanila', 'service', '"description":"OS share service manila","enabled":true,"name":"manila","type":"share"', 'serv120'); dopost('servicemanilav2', 'service', '"description":"OS sharev2 service manilav2","enabled":true,"name":"manilav2","type":"sharev2"', 'serv121'); dopost('serviceheatcfn', 'service', '"description":"OS cloudformation service heat-cfn","enabled":true,"name":"heat-cfn","type":"cloudformation"', 'serv122'); +dopost('serviceceilometer', 'service', '"description":"OS metric service ceilometer","enabled":true,"name":"ceilometer","type":"metric"', 'serv123'); dopost('endpoint1', 'endpoint', '"interface":"admin","service_id":"serv111","url":"http://admin"', 'ept1'); dopost('endpoint2', 'endpoint', '"interface":"internal","service_id":"serv111","url":"http://internal0"', 'ept2'); @@ -89,6 +91,7 @@ dopost('epkeystoneadmin', 'endpoint', '"interface":"admin","service_id":"serv114 mkept('glance', 'serv115', 'https://openstack:9292/'); mkept('heat', 'serv116', 'https://openstack:8004/v1/%\\(tenant_id\\)s'); mkept('heat-cfn', 'serv122', 'https://openstack:8000/v1'); +mkept('ceilometer', 'serv123', 'https://openstack:8041/'); mkept('murano', 'serv117', 'https://openstack:8082/'); mkept('cinderv2', 'serv118', 'https://openstack:8776/v2/%\\(project_id\\)s'); mkept('cinderv3', 'serv118b', 'https://openstack:8776/v3/%\\(project_id\\)s'); diff --git a/ncm-openstack/src/test/perl/service.t b/ncm-openstack/src/test/perl/service.t index 5adf7e8ea6..9e1387e981 100644 --- a/ncm-openstack/src/test/perl/service.t +++ b/ncm-openstack/src/test/perl/service.t @@ -29,7 +29,7 @@ is($srv->{log}, $obj, 'log attribute found'); is($srv->{fqdn}, 'controller.mysite.com', 'fqdn attribute found'); is_deeply([sort keys %{$srv->{comptree}}], [qw( active catalog compute dashboard dispatch identity image - messaging network openrc orchestration share version volume)], "comptree attribute found"); + messaging metric network openrc orchestration share version volume)], "comptree attribute found"); is($srv->{flavour}, 'keystone', 'flavour attribute found'); my $flakeys = [qw(database quattor token)]; # this also tests the reset on the element diff --git a/ncm-openstack/src/test/resources/ceilometer.pan b/ncm-openstack/src/test/resources/ceilometer.pan new file mode 100644 index 0000000000..1df138b635 --- /dev/null +++ b/ncm-openstack/src/test/resources/ceilometer.pan @@ -0,0 +1,3 @@ +object template ceilometer; + +include 'os_resources'; diff --git a/ncm-openstack/src/test/resources/ceilometer_gnocchi.pan b/ncm-openstack/src/test/resources/ceilometer_gnocchi.pan new file mode 100644 index 0000000000..a8fd498e5f --- /dev/null +++ b/ncm-openstack/src/test/resources/ceilometer_gnocchi.pan @@ -0,0 +1,3 @@ +object template ceilometer_gnocchi; + +include 'os_resources'; diff --git a/ncm-openstack/src/test/resources/common_resources.pan b/ncm-openstack/src/test/resources/common_resources.pan index 56eb6bca45..df43d75e5e 100644 --- a/ncm-openstack/src/test/resources/common_resources.pan +++ b/ncm-openstack/src/test/resources/common_resources.pan @@ -125,3 +125,16 @@ prefix "/software/components/openstack/volume/cinder"; "rbd_user", "volumes", "rbd_secret_uuid", "a5d0dd94-57c4-ae55-ffe0-7e3732a24455", ); + +# Ceilometer service section + +prefix "/software/components/openstack/metric/ceilometer/service"; +"DEFAULT" = dict( + "transport_url", format("rabbit://openstack:rabbit_pass@%s", OPENSTACK_HOST_SERVER), +); +"service_credentials" = dict( + "auth_url", format('http://%s:5000/v3', OPENSTACK_HOST_SERVER), + "username", "ceilometer", + "password", "ceilometer_good_password", + "interface", "internalURL", +); diff --git a/ncm-openstack/src/test/resources/os_resources.pan b/ncm-openstack/src/test/resources/os_resources.pan index 1d76dcf766..cf6dcb0306 100644 --- a/ncm-openstack/src/test/resources/os_resources.pan +++ b/ncm-openstack/src/test/resources/os_resources.pan @@ -348,3 +348,35 @@ prefix "/software/components/openstack/openrc"; # RabbitMQ section prefix "/software/components/openstack/messaging/rabbitmq"; "password" = "rabbit_pass"; + +# Ceilometer service section + +include 'components/openstack/identity/gather/metric/ceilometer'; +prefix "/software/components/openstack/metric/ceilometer/service"; +"DEFAULT" = dict( + "transport_url", format("rabbit://openstack:rabbit_pass@%s", OPENSTACK_HOST_SERVER), +); +"service_credentials" = dict( + "auth_url", format('http://%s:5000/v3', OPENSTACK_HOST_SERVER), + "username", "ceilometer", + "password", "ceilometer_good_password", + "interface", "internalURL", +); + +# Ceilometer Gnocchi section + +prefix "/software/components/openstack/metric/ceilometer/gnocchi"; +"api" = dict(); +"storage" = dict( + 'coordination_url', format('redis://%s:6379', OPENSTACK_HOST_SERVER), +); +"keystone_authtoken" = dict( + "auth_url", format('http://%s:5000/v3', OPENSTACK_HOST_SERVER), + "username", "gnocchi", + "password", "gnocchi_good_password", + "interface", "internalURL", +); +"indexer" = dict( + "url", format("mysql+pymysql://gnocchi:gnocchi_db_pass@%s/gnocchi", OPENSTACK_HOST_SERVER), +); +