Почему не работают в идемпотентном режиме мои LWRP?
Это мое action :create
моего кастомного LWRP, но он всегда запускается. Я хочу совершить идемпотентное действие.
Вот моя реализация:
action :create do
converge_by "Create [#{@new_resource}]" do
USER_NAME = @new_resource.username
USER_PASSWORD = @new_resource.password unless (@new_resource.password.nil? ||
@new_resource.password.empty?)
USER_PASSWORD = USER_NAME
DATABASE_NAME = @new_resource.database_name unless (@new_resource.database_name.nil? ||
@new_resource.database_name.empty?)
DATABASE_NAME = USER_NAME
execute "create user [#{USER_NAME}]" do
user "postgres"
exists = <<-EOH
PGPASSWORD='postgres' psql -U postgres -c "select * from pg_user where usename='#{USER_NAME}'" | grep -c #{USER_NAME}
EOH
command "PGPASSWORD='postgres' createuser -U postgres -sw #{USER_NAME}"
not_if exists, :user => "postgres"
end
execute "set-password" do
user "postgres"
command "PGPASSWORD='postgres' psql -U postgres -c \"alter role #{USER_NAME} with password '#{USER_PASSWORD}'\""
end
execute "create-database" do
user "postgres"
exists = <<-EOH
PGPASSWORD='postgres' psql -U postgres -c "select * from pg_database WHERE datname='#{DATABASE_NAME}'" | grep -c #{DATABASE_NAME}
EOH
command "PGPASSWORD='postgres' createdb -U postgres -O #{USER_NAME} -T template0 #{DATABASE_NAME}"
not_if exists, :user => "postgres"
end
end
@new_resource.updated_by_last_action(true)
end
Почему не работает последняя строка @new_resource.updated_by_last_action(true)
?
1 ответ
Хотя у меня нет прямого ответа на ваш вопрос, вас может заинтересовать ToASTER, платформа для тестирования идемпотентности сценариев Chef.
http://cloud-toaster.github.io/
Рецепты Chef выполняются с различными конфигурациями в изолированных контейнерных средах (виртуальных машинах Docker), и ToASTER сообщает о различных показателях, таких как изменения состояния системы, свойства сходимости и проблемы идемпотентности.