Какой лучший способ сделать немного СУХОЙ в рецепте шеф-повара? То есть просто вырвайте маленькие кусочки кода Ruby, поэтому я не копирую их снова и снова.
Ниже, конечно, не удается:
NoMethodError: undefined method `connect_root' for Chef::Resource::RubyBlock
У меня может быть несколько ruby_blocks в одном рецепте, так как они делают разные вещи и нуждаются в том, чтобы разные блоки not_if были истинными идемпотентными.
def connect_root(root_password)
m = Mysql.new("localhost", "root", root_password)
begin
yield m
ensure
m.close
end
end
ruby_block "set readonly" do
block do
connect_root node[:mysql][:server_root_password] do |connection|
command = 'SET GLOBAL read_only = ON'
Chef::Log.info "#{command}"
connection.query(command)
end
end
not_if do
ro = nil
connect_root node[:mysql][:server_root_password] do |connection|
connection.query("SELECT @@read_only as ro") {|r| r.each_hash {|h|
ro = h['ro']
} }
end
ro
end
end