Fix swift-ring-builder ordering

Tie ring_*_device resource to ring_devices resource
by setting autorequire, thus making ring_devices resource
run after ring_*_device and ensure it is before rebalance
anchor

How to test:

1) install swift binaries

2) run:
rm /var/lib/puppet/state/graphs/* && puppet apply --graph -vd
--modulepath /home/vvk/git/fuel/deployment/puppet/ -e
'anchor{"rebalance_begin":} Ring_devices<||> ->
Anchor['rebalance_begin'] ring_devices{'all':  storages=>
[{"storage_address"=>"10.10.10.10"}] }'

3) read /var/lib/puppet/state/graphs/relationships.dot

The purpose is to set all ring_*_device before
Anchor['rebalance_begin']

Change-Id: If9e724342eeeb8399093103a875719b82a429bc5
Closes-Bug: #1305826
This commit is contained in:
Vladimir Kuklin 2014-04-16 21:34:47 +04:00
parent c83a8d6291
commit d3b4818b7b
3 changed files with 31 additions and 11 deletions

View File

@ -21,6 +21,32 @@ Puppet::Type.newtype(:ring_devices) do
end
end
autorequire(:ring_account_device) do
autos = []
catalog.resources.find_all { |r| r.is_a?(Puppet::Type.type("ring_account_device".to_sym)) }.each do |r|
autos << r
end
autos
end
autorequire(:ring_object_device) do
autos = []
catalog.resources.find_all { |r| r.is_a?(Puppet::Type.type("ring_object_device".to_sym)) }.each do |r|
autos << r
end
autos
end
autorequire(:ring_container_device) do
autos = []
catalog.resources.find_all { |r| r.is_a?(Puppet::Type.type("ring_container_device".to_sym)) }.each do |r|
autos << r
end
autos
end
# Default resources for swift ring builder
def resources
resources = []

View File

@ -48,12 +48,6 @@ class swift::ringbuilder(
Swift::Ringbuilder::Create<||> -> Ring_devices<||>
Ring_devices<||> -> Ring_object_device <| |> -> Anchor['rebalance_begin']
Ring_devices<||> -> Ring_account_device <| |> -> Anchor['rebalance_begin']
Ring_devices<||> -> Ring_container_device <| |> -> Anchor['rebalance_begin']
Ring_devices<||> -> Anchor['rebalance_begin']
}

View File

@ -18,13 +18,14 @@ define swift::ringbuilder::rebalance() {
anchor {'rebalance_end':}
}
Anchor['rebalance_begin'] ->
Anchor['rebalance_begin'] -> Exec["hours_passed_${name}"] -> Exec["rebalance_${name}"] -> Anchor["rebalance_end"]
exec { "hours_passed_${name}":
command => "swift-ring-builder /etc/swift/${name}.builder pretend_min_part_hours_passed",
path => ['/usr/bin','/bin'],
user => 'swift',
returns => [0,1],
}->
}
exec { "rebalance_${name}":
command => "swift-ring-builder /etc/swift/${name}.builder rebalance",
@ -32,8 +33,7 @@ define swift::ringbuilder::rebalance() {
timeout => 900,
user => 'swift',
returns => [0,1],
} ->
Anchor['rebalance_end']
}
}