From c11b0408ef0f2d98749106cabc47c7d0b9268b4c Mon Sep 17 00:00:00 2001 From: Emilien Macchi Date: Mon, 13 Jul 2015 15:09:12 -0400 Subject: [PATCH] Use an Anchor when service is managed Today, Keystone resources (domains, tenants, etc) are created only if 'keystone' service is started. When running Keystone in WSGI, the autorequire is broken for those resources. Adding 'httpd' in autorequire is not enough because it could fail to orchestration issues if running another httpd resource (Horizon) that depends on having Keystone started. This patch is about to create an Anchor (keystone_started) in keystone::service that require Service['keystone'] resource to be created. In resource types, change the autorequire to depend on the new Anchor. With that patch, we are sure Keystone resources won't be created before service is actually managed (running or stopped) and other resources (Horizon, using httpd server) can also depend on this Anchor if needed. Change-Id: Ie72b65b6be224cadc8730e050bec38d2face5dfd Closes-bug: #1474059 --- lib/puppet/type/keystone_domain.rb | 4 ++-- lib/puppet/type/keystone_endpoint.rb | 4 ++-- lib/puppet/type/keystone_role.rb | 4 ++-- lib/puppet/type/keystone_service.rb | 4 ++-- lib/puppet/type/keystone_tenant.rb | 4 ++-- lib/puppet/type/keystone_user.rb | 4 ++-- lib/puppet/type/keystone_user_role.rb | 4 ++-- manifests/init.pp | 3 +++ spec/classes/keystone_spec.rb | 3 +++ 9 files changed, 20 insertions(+), 14 deletions(-) diff --git a/lib/puppet/type/keystone_domain.rb b/lib/puppet/type/keystone_domain.rb index 4a2d77736..687da2826 100644 --- a/lib/puppet/type/keystone_domain.rb +++ b/lib/puppet/type/keystone_domain.rb @@ -46,8 +46,8 @@ Puppet::Type.newtype(:keystone_domain) do end # we should not do anything until the keystone service is started - autorequire(:service) do - 'keystone' + autorequire(:anchor) do + ['keystone_started'] end diff --git a/lib/puppet/type/keystone_endpoint.rb b/lib/puppet/type/keystone_endpoint.rb index 43c5eb2ea..55d69f427 100644 --- a/lib/puppet/type/keystone_endpoint.rb +++ b/lib/puppet/type/keystone_endpoint.rb @@ -31,8 +31,8 @@ Puppet::Type.newtype(:keystone_endpoint) do end # we should not do anything until the keystone service is started - autorequire(:service) do - ['keystone'] + autorequire(:anchor) do + ['keystone_started'] end autorequire(:keystone_service) do diff --git a/lib/puppet/type/keystone_role.rb b/lib/puppet/type/keystone_role.rb index 3636afb27..15ec26a5c 100644 --- a/lib/puppet/type/keystone_role.rb +++ b/lib/puppet/type/keystone_role.rb @@ -22,7 +22,7 @@ Puppet::Type.newtype(:keystone_role) do end # we should not do anything until the keystone service is started - autorequire(:service) do - ['keystone'] + autorequire(:anchor) do + ['keystone_started'] end end diff --git a/lib/puppet/type/keystone_service.rb b/lib/puppet/type/keystone_service.rb index a4be4edae..5fb2933c3 100644 --- a/lib/puppet/type/keystone_service.rb +++ b/lib/puppet/type/keystone_service.rb @@ -35,7 +35,7 @@ Puppet::Type.newtype(:keystone_service) do # config is configured IF we need them for authentication. # If there is no keystone config, authentication credentials # need to come from another source. - autorequire(:service) do - ['keystone'] + autorequire(:anchor) do + ['keystone_started'] end end diff --git a/lib/puppet/type/keystone_tenant.rb b/lib/puppet/type/keystone_tenant.rb index 449ccd04e..705c29173 100644 --- a/lib/puppet/type/keystone_tenant.rb +++ b/lib/puppet/type/keystone_tenant.rb @@ -53,7 +53,7 @@ Puppet::Type.newtype(:keystone_tenant) do # config is configured IF we need them for authentication. # If there is no keystone config, authentication credentials # need to come from another source. - autorequire(:service) do - ['keystone'] + autorequire(:anchor) do + ['keystone_started'] end end diff --git a/lib/puppet/type/keystone_user.rb b/lib/puppet/type/keystone_user.rb index f671f3edc..e80eb195c 100644 --- a/lib/puppet/type/keystone_user.rb +++ b/lib/puppet/type/keystone_user.rb @@ -101,7 +101,7 @@ Puppet::Type.newtype(:keystone_user) do end # we should not do anything until the keystone service is started - autorequire(:service) do - ['keystone'] + autorequire(:anchor) do + ['keystone_started'] end end diff --git a/lib/puppet/type/keystone_user_role.rb b/lib/puppet/type/keystone_user_role.rb index d3c78e912..28be7fdf2 100644 --- a/lib/puppet/type/keystone_user_role.rb +++ b/lib/puppet/type/keystone_user_role.rb @@ -59,7 +59,7 @@ Puppet::Type.newtype(:keystone_user_role) do end # we should not do anything until the keystone service is started - autorequire(:service) do - ['keystone'] + autorequire(:anchor) do + ['keystone_started'] end end diff --git a/manifests/init.pp b/manifests/init.pp index 1ab3217e5..5418c490d 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -978,4 +978,7 @@ class keystone( } } } + anchor { 'keystone_started': + require => Service[$service_name] + } } diff --git a/spec/classes/keystone_spec.rb b/spec/classes/keystone_spec.rb index 73ededc81..356fab066 100644 --- a/spec/classes/keystone_spec.rb +++ b/spec/classes/keystone_spec.rb @@ -243,6 +243,8 @@ describe 'keystone' do 'hasrestart' => true ) } + it { is_expected.to contain_anchor('keystone_started') } + end end @@ -290,6 +292,7 @@ describe 'keystone' do 'hasstatus' => true, 'hasrestart' => true ) } + it { is_expected.to contain_anchor('keystone_started') } end describe 'when configuring signing token provider' do