Use eval_generate instead of generate

Current override_resources implementation will not create
all needed dependencies/relationships (before, after, notify,
subscribe) for new resources (not defined in catalog).

This fix requires that override_resources MUST
be used ALWAYS as first resource in manifets.

We need to put that statement in documentation

DocImpact

Change-Id: Iac6541c6e7440cb9c4c87ee52cc178c548b19ad6
Closes-Bug: #1538526
This commit is contained in:
Bartosz Kupidura 2016-02-01 11:49:55 +01:00
parent ec7e212972
commit a4925fff34
11 changed files with 90 additions and 74 deletions

View File

@ -24,6 +24,9 @@ Puppet::Type.newtype(:override_resources) do
parameters.each do |parameter, value|
resource[parameter] = value
end
if parameters.has_key?('value') and resource.property('ensure')
resource['ensure'] = :present
end
end
def create_resource(type, title, parameters = {})
@ -31,7 +34,7 @@ Puppet::Type.newtype(:override_resources) do
Puppet::Type.type(type.to_sym).new(parameters)
end
def generate
def eval_generate
type = self[:type]
data = self[:data] || {}
defaults = self[:defaults] || {}

View File

@ -1,5 +1,11 @@
notice('MODULAR: keystone.pp')
# Override confguration options
$override_configuration = hiera_hash('configuration', {})
override_resources { 'keystone_config':
data => $override_configuration['keystone_config']
} ~> Service['httpd']
$network_scheme = hiera_hash('network_scheme', {})
$network_metadata = hiera_hash('network_metadata', {})
prepare_network_config($network_scheme)
@ -269,9 +275,3 @@ if ($::operatingsystem == 'Ubuntu') {
package_name => 'keystone',
}
}
# Override confguration options
$override_configuration = hiera_hash('configuration', {})
override_resources { 'keystone_config':
data => $override_configuration['keystone_config']
}

View File

@ -1,7 +1,16 @@
notice('MODULAR: openstack-controller.pp')
$network_scheme = hiera_hash('network_scheme', {})
$override_configuration = hiera_hash('configuration', {})
# override nova options
override_resources { 'nova_config':
data => $override_configuration['nova_config']
} ~> Exec['post-nova_config']
# override nova-api options
override_resources { 'nova_paste_api_ini':
data => $override_configuration['nova_paste_api_ini']
} ~> Exec['post-nova_config']
$network_scheme = hiera_hash('network_scheme', {})
$network_metadata = hiera_hash('network_metadata', {})
prepare_network_config($network_scheme)
@ -272,13 +281,3 @@ class { '::nova::scheduler::filter':
nova_config {
'DEFAULT/ram_weight_multiplier': value => '1.0'
}
# override nova options
override_resources { 'nova_config':
data => $override_configuration['nova_config']
}
# override nova-api options
override_resources { 'nova_paste_api_ini':
data => $override_configuration['nova_paste_api_ini']
}

View File

@ -2,6 +2,14 @@ notice('MODULAR: openstack-network/agents/dhcp.pp')
$use_neutron = hiera('use_neutron', false)
if $use_neutron {
# override neutron options
$override_configuration = hiera_hash('configuration', {})
override_resources { 'neutron_dhcp_agent_config':
data => $override_configuration['neutron_dhcp_agent_config']
} ~> Service['neutron-dhcp-service']
}
class neutron {}
class { 'neutron' :}
@ -36,10 +44,4 @@ if $use_neutron {
ensure => 'installed',
}
# override neutron options
$override_configuration = hiera_hash('configuration', {})
override_resources { 'neutron_dhcp_agent_config':
data => $override_configuration['neutron_dhcp_agent_config']
}
}

View File

@ -1,16 +1,22 @@
notice('MODULAR: openstack-network/agents/l3.pp')
$use_neutron = hiera('use_neutron', false)
$neutron_advanced_config = hiera_hash('neutron_advanced_configuration', { })
$dvr = pick($neutron_advanced_config['neutron_dvr'], false)
$controller = roles_include(['controller', 'primary-controller'])
$compute = roles_include('compute')
if $use_neutron and ($controller or ($dvr and $compute)) {
# override neutron options
$override_configuration = hiera_hash('configuration', {})
override_resources { 'neutron_l3_agent_config':
data => $override_configuration['neutron_l3_agent_config']
} ~> Service['neutron-l3']
}
class neutron {}
class { 'neutron' :}
$neutron_advanced_config = hiera_hash('neutron_advanced_configuration', { })
$dvr = pick($neutron_advanced_config['neutron_dvr'], false)
$controller = roles_include(['controller', 'primary-controller'])
$compute = roles_include('compute')
if $use_neutron and ($controller or ($dvr and $compute)) {
$debug = hiera('debug', true)
$metadata_port = '8775'
@ -54,10 +60,4 @@ if $use_neutron and ($controller or ($dvr and $compute)) {
ensure => 'installed',
}
# override neutron options
$override_configuration = hiera_hash('configuration', {})
override_resources { 'neutron_l3_agent_config':
data => $override_configuration['neutron_l3_agent_config']
}
}

View File

@ -8,6 +8,14 @@ $compute = roles_include($neutron_compute_roles)
$neutron_advanced_config = hiera_hash('neutron_advanced_configuration', { })
$dvr = pick($neutron_advanced_config['neutron_dvr'], false)
if $use_neutron and ($controller or ($dvr and $compute)) {
# override neutron options
$override_configuration = hiera_hash('configuration', {})
override_resources { 'neutron_metadata_agent_config':
data => $override_configuration['neutron_metadata_agent_config']
} ~> Service['neutron-metadata']
}
class neutron {}
class { 'neutron' :}
@ -58,10 +66,4 @@ if $use_neutron and ($controller or ($dvr and $compute)) {
ensure => 'installed',
}
# override neutron options
$override_configuration = hiera_hash('configuration', {})
override_resources { 'neutron_metadata_agent_config':
data => $override_configuration['neutron_metadata_agent_config']
}
}

View File

@ -3,6 +3,14 @@ notice('MODULAR: openstack-network/plugins/ml2.pp')
$use_neutron = hiera('use_neutron', false)
$compute = roles_include('compute')
if $use_neutron {
# override neutron options
$override_configuration = hiera_hash('configuration', {})
override_resources { 'neutron_agent_ovs':
data => $override_configuration['neutron_agent_ovs']
} ~> Service['neutron-ovs-agent-service']
}
class neutron {}
class { 'neutron' :}
@ -140,10 +148,4 @@ if $use_neutron {
ensure => 'installed',
}
# override neutron options
$override_configuration = hiera_hash('configuration', {})
override_resources { 'neutron_agent_ovs':
data => $override_configuration['neutron_agent_ovs']
}
}

View File

@ -3,6 +3,20 @@ notice('MODULAR: openstack-network/server-config.pp')
$use_neutron = hiera('use_neutron', false)
$compute = roles_include('compute')
if $use_neutron {
# override neutron options
$override_configuration = hiera_hash('configuration', {})
override_resources { 'neutron_api_config':
data => $override_configuration['neutron_api_config']
} ~> Service['neutron-server']
override_resources { 'neutron_config':
data => $override_configuration['neutron_config']
} ~> Service['neutron-server']
override_resources { 'neutron_plugin_ml2':
data => $override_configuration['neutron_plugin_ml2']
} ~> Service['neutron-server']
}
class neutron { }
class { 'neutron' : }
@ -189,16 +203,4 @@ if $use_neutron {
ensure => 'installed',
}
# override neutron options
$override_configuration = hiera_hash('configuration', {})
override_resources { 'neutron_api_config':
data => $override_configuration['neutron_api_config']
}
override_resources { 'neutron_config':
data => $override_configuration['neutron_config']
}
override_resources { 'neutron_plugin_ml2':
data => $override_configuration['neutron_plugin_ml2']
}
}

View File

@ -5,6 +5,16 @@ $override_configuration = hiera_hash('configuration', {})
$network_metadata = hiera_hash('network_metadata', {})
prepare_network_config($network_scheme)
# override nova options
override_resources { 'nova_config':
data => $override_configuration['nova_config']
} ~> Exec['post-nova_config']
# override nova-api options
override_resources { 'nova_paste_api_ini':
data => $override_configuration['nova_paste_api_ini']
} ~> Exec['post-nova_config']
# Pulling hiera
$compute_hash = hiera_hash('compute', {})
$node_name = hiera('node_name')
@ -351,15 +361,6 @@ if $use_monit_real {
}
}
# override nova options
override_resources { 'nova_config':
data => $override_configuration['nova_config']
}
# override nova-api options
override_resources { 'nova_paste_api_ini':
data => $override_configuration['nova_paste_api_ini']
}
########################################################################

View File

@ -25,21 +25,21 @@ describe Puppet::Type.type(:override_resources) do
it 'should be a resource type to override' do
expect {
@overres[:type] = ''
@overres.generate
@overres.eval_generate
}.to raise_error(Puppet::Error, /Title should be a resource type to override!$/)
end
it 'should contain resource hash' do
expect {
@overres[:data] = 'string => data'
@overres.generate
@overres.eval_generate
}.to raise_error(Puppet::Error, /Data should contain resource hash!$/)
end
it 'should contain resource defaults hash' do
expect {
@overres[:defaults] = 'string => data'
@overres.generate
@overres.eval_generate
}.to raise_error(Puppet::Error, /Defaults should contain resource defaults hash!$/)
end

View File

@ -45,8 +45,13 @@ class Noop
catalog = catalog.call if catalog.is_a? Proc
ral_catalog = catalog.to_ral
ral_catalog.resources.each do |resource|
next unless resource.respond_to? :generate
generated = resource.generate
if resource.respond_to? :generate
generated = resource.generate
elsif resource.respond_to? :eval_generate
generated = resource.eval_generate
else
next
end
next unless generated.is_a? Array
generated.each do |generated_resource|
next unless generated_resource.is_a? Puppet::Type