From a0792cfc77edda553a96c6a39e474ebce0322245 Mon Sep 17 00:00:00 2001 From: Stanislaw Bogatkin Date: Wed, 9 Dec 2015 16:12:01 +0300 Subject: [PATCH] Add memcached_addresses variable to hiera Introduce new variable to have an ability for easy override memcache servers addresses. Closes-Bug: #1524275 Change-Id: I96c8e38e6be2fa865c870908cbbaf0d95034a952 --- .../osnailyfacter/modular/globals/globals.pp | 9 ++ .../osnailyfacter/modular/horizon/horizon.pp | 5 +- .../modular/keystone/keystone.pp | 7 +- .../openstack-controller.pp | 95 ++++++++++--------- .../osnailyfacter/modular/roles/compute.pp | 7 +- .../modular/roles/ironic-compute.pp | 6 +- .../osnailyfacter/templates/globals_yaml.erb | 1 + .../astute.yaml/neut_vlan.compute.nossl.yaml | 2 + ..._dvr.murano.sahara-primary-controller.yaml | 2 + tests/noop/spec/hosts/horizon/horizon_spec.rb | 23 ++++- .../noop/spec/hosts/keystone/keystone_spec.rb | 7 +- .../openstack-controller_spec.rb | 28 ++++++ tests/noop/spec/hosts/roles/compute_spec.rb | 26 +++++ .../spec/hosts/roles/ironic-compute_spec.rb | 27 ++++++ 14 files changed, 183 insertions(+), 62 deletions(-) diff --git a/deployment/puppet/osnailyfacter/modular/globals/globals.pp b/deployment/puppet/osnailyfacter/modular/globals/globals.pp index 01380a6fac..4308165f89 100644 --- a/deployment/puppet/osnailyfacter/modular/globals/globals.pp +++ b/deployment/puppet/osnailyfacter/modular/globals/globals.pp @@ -338,6 +338,15 @@ if $public_ssl_hash['services'] { $nova_hash['vncproxy_protocol'] = 'http' } +# Define how we should get memcache addresses +if hiera('memcached_addresses', false) { + # need this to successful lookup from template + $memcached_addresses = hiera('memcached_addresses') +} else { + $memcache_nodes = get_nodes_hash_by_roles(hiera_hash('network_metadata'), $memcache_roles) + $memcached_addresses = ipsort(values(get_node_to_ipaddr_map_by_network_role($memcache_nodes, 'mgmt/memcache'))) +} + # save all these global variables into hiera yaml file for later use # by other manifests with hiera function file { $globals_yaml_file : diff --git a/deployment/puppet/osnailyfacter/modular/horizon/horizon.pp b/deployment/puppet/osnailyfacter/modular/horizon/horizon.pp index 26a7cb0cd7..3b712c3209 100644 --- a/deployment/puppet/osnailyfacter/modular/horizon/horizon.pp +++ b/deployment/puppet/osnailyfacter/modular/horizon/horizon.pp @@ -3,8 +3,7 @@ notice('MODULAR: horizon.pp') prepare_network_config(hiera('network_scheme', {})) $horizon_hash = hiera_hash('horizon', {}) $service_endpoint = hiera('service_endpoint') -$memcache_nodes = get_nodes_hash_by_roles(hiera_hash('network_metadata'), hiera('memcache_roles')) -$memcache_address_map = get_node_to_ipaddr_map_by_network_role($memcache_nodes, 'mgmt/memcache') +$memcached_server = hiera('memcached_addresses') $bind_address = get_network_role_property('horizon', 'ipaddr') $neutron_advanced_config = hiera_hash('neutron_advanced_configuration', {}) $public_ssl = hiera('public_ssl') @@ -30,7 +29,7 @@ $hypervisor_options = {'enable_quotas' => hiera('nova_quota')} class { 'openstack::horizon': secret_key => $secret_key, - cache_server_ip => ipsort(values($memcache_address_map)), + cache_server_ip => $memcached_server, package_ensure => hiera('horizon_package_ensure', 'installed'), bind_address => $bind_address, cache_server_port => hiera('memcache_server_port', '11211'), diff --git a/deployment/puppet/osnailyfacter/modular/keystone/keystone.pp b/deployment/puppet/osnailyfacter/modular/keystone/keystone.pp index b33f0c6614..067de318a6 100644 --- a/deployment/puppet/osnailyfacter/modular/keystone/keystone.pp +++ b/deployment/puppet/osnailyfacter/modular/keystone/keystone.pp @@ -55,10 +55,9 @@ $public_cert = $public_ssl_hash['services']? { $admin_address = $service_endpoint $local_address_for_bind = get_network_role_property('keystone/api', 'ipaddr') -$memcache_server_port = hiera('memcache_server_port', '11211') +$memcache_server_port = hiera('memcache_server_port', '11211') $memcache_pool_maxsize = '100' -$memcache_nodes = get_nodes_hash_by_roles(hiera_hash('network_metadata'), hiera('memcache_roles')) -$memcache_address_map = get_node_to_ipaddr_map_by_network_role($memcache_nodes, 'mgmt/memcache') +$memcached_server = hiera('memcached_addresses') $public_port = '5000' $admin_port = '35357' @@ -123,7 +122,7 @@ class { 'openstack::keystone': use_stderr => $use_stderr, syslog_log_facility => $syslog_log_facility, region => $region, - memcache_servers => values($memcache_address_map), + memcache_servers => $memcached_server, memcache_server_port => $memcache_server_port, memcache_pool_maxsize => $memcache_pool_maxsize, max_retries => $max_retries, diff --git a/deployment/puppet/osnailyfacter/modular/openstack-controller/openstack-controller.pp b/deployment/puppet/osnailyfacter/modular/openstack-controller/openstack-controller.pp index efa59194b9..194c33be6f 100644 --- a/deployment/puppet/osnailyfacter/modular/openstack-controller/openstack-controller.pp +++ b/deployment/puppet/osnailyfacter/modular/openstack-controller/openstack-controller.pp @@ -5,61 +5,61 @@ $override_configuration = hiera_hash('configuration', {}) $network_metadata = hiera_hash('network_metadata', {}) prepare_network_config($network_scheme) -$nova_rate_limits = hiera('nova_rate_limits') -$primary_controller = hiera('primary_controller') -$use_neutron = hiera('use_neutron', false) -$nova_report_interval = hiera('nova_report_interval') -$nova_service_down_time = hiera('nova_service_down_time') -$use_syslog = hiera('use_syslog', true) -$use_stderr = hiera('use_stderr', false) -$syslog_log_facility_glance = hiera('syslog_log_facility_glance', 'LOG_LOCAL2') -$syslog_log_facility_neutron = hiera('syslog_log_facility_neutron', 'LOG_LOCAL4') -$syslog_log_facility_nova = hiera('syslog_log_facility_nova','LOG_LOCAL6') -$syslog_log_facility_keystone = hiera('syslog_log_facility_keystone', 'LOG_LOCAL7') -$management_vip = hiera('management_vip') -$public_vip = hiera('public_vip') -$sahara_hash = hiera_hash('sahara', {}) -$nodes_hash = hiera('nodes', {}) -$mysql_hash = hiera_hash('mysql', {}) -$access_hash = hiera_hash('access', {}) -$keystone_hash = hiera_hash('keystone', {}) -$glance_hash = hiera_hash('glance', {}) -$storage_hash = hiera_hash('storage', {}) -$nova_hash = hiera_hash('nova', {}) -$nova_config_hash = hiera_hash('nova_config', {}) -$api_bind_address = get_network_role_property('nova/api', 'ipaddr') -$rabbit_hash = hiera_hash('rabbit_hash', {}) -$ceilometer_hash = hiera_hash('ceilometer',{}) -$syslog_log_facility_ceph = hiera('syslog_log_facility_ceph','LOG_LOCAL0') -$workloads_hash = hiera_hash('workloads_collector', {}) -$service_endpoint = hiera('service_endpoint') -$db_host = pick($nova_hash['db_host'], hiera('database_vip')) -$ssl_hash = hiera_hash('use_ssl', {}) +$nova_rate_limits = hiera('nova_rate_limits') +$primary_controller = hiera('primary_controller') +$use_neutron = hiera('use_neutron', false) +$nova_report_interval = hiera('nova_report_interval') +$nova_service_down_time = hiera('nova_service_down_time') +$use_syslog = hiera('use_syslog', true) +$use_stderr = hiera('use_stderr', false) +$syslog_log_facility_glance = hiera('syslog_log_facility_glance', 'LOG_LOCAL2') +$syslog_log_facility_neutron = hiera('syslog_log_facility_neutron', 'LOG_LOCAL4') +$syslog_log_facility_nova = hiera('syslog_log_facility_nova','LOG_LOCAL6') +$syslog_log_facility_keystone = hiera('syslog_log_facility_keystone', 'LOG_LOCAL7') +$management_vip = hiera('management_vip') +$public_vip = hiera('public_vip') +$sahara_hash = hiera_hash('sahara', {}) +$nodes_hash = hiera('nodes', {}) +$mysql_hash = hiera_hash('mysql', {}) +$access_hash = hiera_hash('access', {}) +$keystone_hash = hiera_hash('keystone', {}) +$glance_hash = hiera_hash('glance', {}) +$storage_hash = hiera_hash('storage', {}) +$nova_hash = hiera_hash('nova', {}) +$nova_config_hash = hiera_hash('nova_config', {}) +$api_bind_address = get_network_role_property('nova/api', 'ipaddr') +$rabbit_hash = hiera_hash('rabbit_hash', {}) +$ceilometer_hash = hiera_hash('ceilometer',{}) +$syslog_log_facility_ceph = hiera('syslog_log_facility_ceph','LOG_LOCAL0') +$workloads_hash = hiera_hash('workloads_collector', {}) +$service_endpoint = hiera('service_endpoint') +$db_host = pick($nova_hash['db_host'], hiera('database_vip')) +$ssl_hash = hiera_hash('use_ssl', {}) -$internal_auth_protocol = get_ssl_property($ssl_hash, {}, 'keystone', 'internal', 'protocol', 'http') -$internal_auth_address = get_ssl_property($ssl_hash, {}, 'keystone', 'internal', 'hostname', [$service_endpoint, $management_vip]) +$internal_auth_protocol = get_ssl_property($ssl_hash, {}, 'keystone', 'internal', 'protocol', 'http') +$internal_auth_address = get_ssl_property($ssl_hash, {}, 'keystone', 'internal', 'hostname', [$service_endpoint, $management_vip]) -$glance_protocol = get_ssl_property($ssl_hash, {}, 'glance', 'internal', 'protocol', 'http') -$glance_endpoint = get_ssl_property($ssl_hash, {}, 'glance', 'internal', 'hostname', [hiera('glance_endpoint', ''), $management_vip]) -$glance_ssl = get_ssl_property($ssl_hash, {}, 'glance', 'internal', 'usage', false) +$glance_protocol = get_ssl_property($ssl_hash, {}, 'glance', 'internal', 'protocol', 'http') +$glance_endpoint = get_ssl_property($ssl_hash, {}, 'glance', 'internal', 'hostname', [hiera('glance_endpoint', ''), $management_vip]) +$glance_ssl = get_ssl_property($ssl_hash, {}, 'glance', 'internal', 'usage', false) if $glance_ssl { $glance_api_servers = "${glance_protocol}://${glance_endpoint}:9292" } else { $glance_api_servers = hiera('glance_api_servers', "${management_vip}:9292") } -$nova_db_user = pick($nova_hash['db_user'], 'nova') -$keystone_user = pick($nova_hash['user'], 'nova') -$keystone_tenant = pick($nova_hash['tenant'], 'services') -$region = hiera('region', 'RegionOne') -$service_workers = pick($nova_hash['workers'], - min(max($::processorcount, 2), 16)) -$ironic_hash = hiera_hash('ironic', {}) +$nova_db_user = pick($nova_hash['db_user'], 'nova') +$keystone_user = pick($nova_hash['user'], 'nova') +$keystone_tenant = pick($nova_hash['tenant'], 'services') +$region = hiera('region', 'RegionOne') +$service_workers = pick($nova_hash['workers'], + min(max($::processorcount, 2), 16)) +$ironic_hash = hiera_hash('ironic', {}) -$memcache_nodes = get_nodes_hash_by_roles(hiera_hash('network_metadata'), hiera('memcache_roles')) -$memcache_ipaddrs = ipsort(values(get_node_to_ipaddr_map_by_network_role($memcache_nodes,'mgmt/memcache'))) -$roles = node_roles($nodes_hash, hiera('uid')) -$openstack_controller_hash = hiera_hash('openstack_controller', {}) +$memcached_server = hiera('memcached_addresses') +$memcached_port = hiera('memcache_server_port', '11211') +$roles = node_roles($nodes_hash, hiera('uid')) +$openstack_controller_hash = hiera_hash('openstack_controller', {}) $floating_hash = {} @@ -134,7 +134,8 @@ class { '::openstack::controller': amqp_user => $rabbit_hash['user'], amqp_password => $rabbit_hash['password'], rabbit_ha_queues => true, - cache_server_ip => $memcache_ipaddrs, + cache_server_ip => $memcached_server, + cache_server_port => $memcached_port, api_bind_address => $api_bind_address, db_host => $db_host, service_endpoint => $service_endpoint, diff --git a/deployment/puppet/osnailyfacter/modular/roles/compute.pp b/deployment/puppet/osnailyfacter/modular/roles/compute.pp index 20584a180e..3a71192c56 100644 --- a/deployment/puppet/osnailyfacter/modular/roles/compute.pp +++ b/deployment/puppet/osnailyfacter/modular/roles/compute.pp @@ -127,9 +127,9 @@ $floating_hash = {} ##CALCULATED PARAMETERS +$memcached_server = hiera('memcached_addresses') +$memcached_port = hiera('memcache_server_port', '11211') ##TODO: simply parse nodes array -$memcache_nodes = get_nodes_hash_by_roles(hiera_hash('network_metadata'), hiera('memcache_roles')) -$memcache_ipaddrs = ipsort(values(get_node_to_ipaddr_map_by_network_role($memcache_nodes,'mgmt/memcache'))) $roles = $network_metadata['nodes'][$node_name]['node_roles'] $mountpoints = filter_hash($mp_hash,'point') @@ -271,7 +271,8 @@ class { 'openstack::compute': manage_volumes => $manage_volumes, nova_user_password => $nova_hash[user_password], nova_hash => merge({'reserved_host_memory' => $r_hostmem}, $nova_hash), - cache_server_ip => $memcache_ipaddrs, + cache_server_ip => $memcached_server, + cache_server_port => $memcached_port, service_endpoint => $service_endpoint, cinder => true, cinder_iscsi_bind_addr => get_network_role_property('cinder/iscsi', 'ipaddr'), diff --git a/deployment/puppet/osnailyfacter/modular/roles/ironic-compute.pp b/deployment/puppet/osnailyfacter/modular/roles/ironic-compute.pp index 866a9a1059..847a74221a 100644 --- a/deployment/puppet/osnailyfacter/modular/roles/ironic-compute.pp +++ b/deployment/puppet/osnailyfacter/modular/roles/ironic-compute.pp @@ -35,9 +35,9 @@ $db_name = pick($nova_hash['db_name'], 'nova') $db_password = pick($nova_hash['db_password'], 'nova') $database_connection = "mysql://${db_name}:${db_password}@${db_host}/${db_name}?read_timeout=60" -$memcache_nodes = get_nodes_hash_by_roles(hiera_hash('network_metadata'), hiera('memcache_roles')) -$cache_server_ip = ipsort(values(get_node_to_ipaddr_map_by_network_role($memcache_nodes,'mgmt/memcache'))) -$memcached_addresses = suffix($cache_server_ip, inline_template(":<%= @cache_server_port %>")) +$memcached_servers = hiera('memcached_addresses') +$memcached_port = hiera('memcache_server_port', '11211') +$memcached_addresses = suffix($memcached_servers, ":${memcached_port}") $notify_on_state_change = 'vm_and_task_state' diff --git a/deployment/puppet/osnailyfacter/templates/globals_yaml.erb b/deployment/puppet/osnailyfacter/templates/globals_yaml.erb index cc3d177174..cc0f74d65b 100644 --- a/deployment/puppet/osnailyfacter/templates/globals_yaml.erb +++ b/deployment/puppet/osnailyfacter/templates/globals_yaml.erb @@ -103,6 +103,7 @@ <% globals.store "management_vrouter_vip", @management_vrouter_vip -%> <% globals.store "public_vrouter_vip", @public_vrouter_vip -%> <% globals.store "memcache_roles", @memcache_roles -%> +<% globals.store "memcached_addresses", @memcached_addresses -%> <% globals.store "swift_master_role", @swift_master_role -%> <% globals.store "swift_nodes", @swift_nodes -%> <% globals.store "swift_proxies", @swift_proxies -%> diff --git a/tests/noop/astute.yaml/neut_vlan.compute.nossl.yaml b/tests/noop/astute.yaml/neut_vlan.compute.nossl.yaml index 0a160c3e9b..191d3a8418 100644 --- a/tests/noop/astute.yaml/neut_vlan.compute.nossl.yaml +++ b/tests/noop/astute.yaml/neut_vlan.compute.nossl.yaml @@ -405,6 +405,8 @@ metadata: status: discover swift: user_password: zr0zBVgi +memcached_addresses: [10.20.30.40, 10.20.30.41] +memcache_server_port: 11212 repo_setup: installer_kernel: local: "/var/www/nailgun/ubuntu/x86_64/images/linux" diff --git a/tests/noop/astute.yaml/neut_vxlan_dvr.murano.sahara-primary-controller.yaml b/tests/noop/astute.yaml/neut_vxlan_dvr.murano.sahara-primary-controller.yaml index 5c463d7f1d..2ba0f6e1f9 100644 --- a/tests/noop/astute.yaml/neut_vxlan_dvr.murano.sahara-primary-controller.yaml +++ b/tests/noop/astute.yaml/neut_vxlan_dvr.murano.sahara-primary-controller.yaml @@ -694,6 +694,8 @@ storage: storage_network_range: 192.168.1.0/24 swift: user_password: BP92J6tg +memcached_addresses: [10.20.30.40, 10.20.30.41] +memcache_server_port: '11212' syslog: metadata: label: Syslog diff --git a/tests/noop/spec/hosts/horizon/horizon_spec.rb b/tests/noop/spec/hosts/horizon/horizon_spec.rb index cf2cc86796..272c2883d1 100644 --- a/tests/noop/spec/hosts/horizon/horizon_spec.rb +++ b/tests/noop/spec/hosts/horizon/horizon_spec.rb @@ -38,6 +38,25 @@ describe manifest do } end + memcache_addresses = Noop.hiera 'memcached_addresses', false + memcache_server_port = Noop.hiera 'memcache_server_port', '11211' + + let(:memcache_nodes) do + Noop.puppet_function 'get_nodes_hash_by_roles', network_metadata, memcache_roles + end + + let(:memcache_address_map) do + Noop.puppet_function 'get_node_to_ipaddr_map_by_network_role', memcache_nodes, 'mgmt/memcache' + end + + let (:memcache_servers) do + if not memcache_addresses + memcache_address_map.values + else + memcache_addresses + end + end + ########################################################################### it 'should declare openstack::horizon class' do @@ -49,7 +68,9 @@ describe manifest do it 'should declare openstack::horizon class with keystone_url' do should contain_class('openstack::horizon').with( - 'keystone_url' => keystone_url + 'keystone_url' => keystone_url, + 'cache_server_ip' => memcache_servers, + 'cache_server_port' => memcache_server_port ) end diff --git a/tests/noop/spec/hosts/keystone/keystone_spec.rb b/tests/noop/spec/hosts/keystone/keystone_spec.rb index 6116095369..42f386242e 100644 --- a/tests/noop/spec/hosts/keystone/keystone_spec.rb +++ b/tests/noop/spec/hosts/keystone/keystone_spec.rb @@ -9,6 +9,7 @@ describe manifest do network_metadata = Noop.hiera 'network_metadata' memcache_roles = Noop.hiera 'memcache_roles' + memcache_addresses = Noop.hiera 'memcached_addresses', false memcache_server_port = Noop.hiera 'memcache_server_port', '11211' let(:memcache_nodes) do @@ -20,7 +21,11 @@ describe manifest do end let (:memcache_servers) do - memcache_address_map.values.map { |server| "#{server}:#{memcache_server_port}" }.join(",") + if not memcache_addresses + memcache_address_map.values.map { |server| "#{server}:#{memcache_server_port}" }.join(",") + else + memcache_addresses.map { |server| "#{server}:#{memcache_server_port}" }.join(",") + end end let(:configuration_override) do diff --git a/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb b/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb index 5753766318..d4610c37ca 100644 --- a/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb +++ b/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb @@ -17,6 +17,27 @@ describe manifest do configuration_override.fetch('nova_paste_api_ini', {}) end + network_metadata = Noop.hiera 'network_metadata' + memcache_roles = Noop.hiera 'memcache_roles' + memcache_addresses = Noop.hiera 'memcached_addresses', false + memcache_server_port = Noop.hiera 'memcache_server_port', '11211' + + let(:memcache_nodes) do + Noop.puppet_function 'get_nodes_hash_by_roles', network_metadata, memcache_roles + end + + let(:memcache_address_map) do + Noop.puppet_function 'get_node_to_ipaddr_map_by_network_role', memcache_nodes, 'mgmt/memcache' + end + + let (:memcache_servers) do + if not memcache_addresses + memcache_address_map.values.map { |server| "#{server}:#{memcache_server_port}" }.join(",") + else + memcache_addresses.map { |server| "#{server}:#{memcache_server_port}" }.join(",") + end + end + use_neutron = Noop.hiera 'use_neutron' primary_controller = Noop.hiera 'primary_controller' if !use_neutron && primary_controller @@ -51,12 +72,19 @@ describe manifest do 'value' => '60', ) end + it 'nova config should have service_down_time set to 180' do should contain_nova_config('DEFAULT/service_down_time').with( 'value' => '180', ) end + it 'nova config should contain right memcached servers list' do + should contain_nova_config('DEFAULT/memcached_servers').with( + 'value' => memcache_servers, + ) + end + keystone_ec2_url = "http://#{keystone_host}:5000/v2.0/ec2tokens" it 'should declare class nova::api with keystone_ec2_url' do should contain_class('nova::api').with( diff --git a/tests/noop/spec/hosts/roles/compute_spec.rb b/tests/noop/spec/hosts/roles/compute_spec.rb index d77567909e..6b516f7e03 100644 --- a/tests/noop/spec/hosts/roles/compute_spec.rb +++ b/tests/noop/spec/hosts/roles/compute_spec.rb @@ -7,6 +7,27 @@ describe manifest do host_uuid = Noop.hiera 'host_uuid' + network_metadata = Noop.hiera 'network_metadata' + memcache_roles = Noop.hiera 'memcache_roles' + memcache_addresses = Noop.hiera 'memcached_addresses', false + memcache_server_port = Noop.hiera 'memcache_server_port', '11211' + + let(:memcache_nodes) do + Noop.puppet_function 'get_nodes_hash_by_roles', network_metadata, memcache_roles + end + + let(:memcache_address_map) do + Noop.puppet_function 'get_node_to_ipaddr_map_by_network_role', memcache_nodes, 'mgmt/memcache' + end + + let (:memcache_servers) do + if not memcache_addresses + memcache_address_map.values.map { |server| "#{server}:#{memcache_server_port}" }.join(",") + else + memcache_addresses.map { |server| "#{server}:#{memcache_server_port}" }.join(",") + end + end + let(:nova_hash) do Noop.hiera_structure 'nova' end @@ -112,6 +133,11 @@ describe manifest do 'value' => 'false', ) end + it 'nova config should contain right memcached servers list' do + should contain_nova_config('DEFAULT/memcached_servers').with( + 'value' => memcache_servers, + ) + end it 'should install fping for nova API extension' do should contain_package('fping').with('ensure' => 'present') diff --git a/tests/noop/spec/hosts/roles/ironic-compute_spec.rb b/tests/noop/spec/hosts/roles/ironic-compute_spec.rb index 63e536bc7b..1c8c9b9e26 100644 --- a/tests/noop/spec/hosts/roles/ironic-compute_spec.rb +++ b/tests/noop/spec/hosts/roles/ironic-compute_spec.rb @@ -7,6 +7,27 @@ describe manifest do ironic_user_password = Noop.hiera_structure 'ironic/user_password' ironic_enabled = Noop.hiera_structure 'ironic/enabled' + network_metadata = Noop.hiera 'network_metadata' + memcache_roles = Noop.hiera 'memcache_roles' + memcache_addresses = Noop.hiera 'memcached_addresses', false + memcache_server_port = Noop.hiera 'memcache_server_port', '11211' + + let(:memcache_nodes) do + Noop.puppet_function 'get_nodes_hash_by_roles', network_metadata, memcache_roles + end + + let(:memcache_address_map) do + Noop.puppet_function 'get_node_to_ipaddr_map_by_network_role', memcache_nodes, 'mgmt/memcache' + end + + let (:memcache_servers) do + if not memcache_addresses + memcache_address_map.values.map { |server| "#{server}:#{memcache_server_port}" }.join(",") + else + memcache_addresses.map { |server| "#{server}:#{memcache_server_port}" }.join(",") + end + end + if ironic_enabled it 'nova config should have correct nova_user_password' do should contain_nova_config('ironic/admin_password').with(:value => ironic_user_password) @@ -16,6 +37,12 @@ describe manifest do it 'nova config should have reserved_host_memory_mb set to 0' do should contain_nova_config('DEFAULT/reserved_host_memory_mb').with(:value => '0') end + + it 'nova config should contain right memcached servers list' do + should contain_nova_config('DEFAULT/memcached_servers').with( + 'value' => memcache_servers, + ) + end end end