2015-02-03 3 views
2

У меня есть два ресурса в моем рецепте. Первый - это ресурс user, который устанавливает каталог пользователя uid/gid/home и т. Д. Он использует supports :manage_home => true.Рецепт шеф-повара - как запустить ресурс, только если пользовательский ресурс сделал manage_home

Мой второй ресурс - это ресурс bash. В настоящее время скрипт работает на каждом сеансе работы шеф-повара, что немного лишним. Я хочу, чтобы сценарий запускался только в том случае, если при запуске ресурса пользователя был вызван manage_home (например, запустите сценарий, если домашний каталог пользователя был изменен, и файлы были перемещены, в противном случае ничего не делать).

Я только смог найти примеры использования only_if с некоторым чистым условием Ruby (например, если существует определенный файл, если узел имеет определенный элемент в своем списке запуска и т. Д.), Но то, что я хочу сделать требует, чтобы условие было связано с результатом другого ресурса шеф-повара. Я знаю, что пользовательский ресурс просто запускает usermod (или useradd), который, похоже, не указывает на то, перемещен ли домашний каталог или нет. Так возможно ли это?

+1

Вы можете проверить домашний каталог до и после запуска для различий? Вы можете назначить значение команды узлу, например 'node [: blah] = \' ls -la/home/blah \ '' См. Http://stackoverflow.com/questions/16309808/how-can-i- put-the-the-a-chef-execute-resource-in-a-variable –

+0

Спасибо за помощь! – tytk

ответ

3

Ресурсы имеют возможность notify Другие ресурсы, при любых изменениях состояния.

user "whatever" do 
    action :modify 
    notifies :run, "bash[modify user]", :immediately 
end 

Вы можете изменить действие по умолчанию вашего ресурса :nothing, то ресурс будет работать только на оповещать.

bash "modify user" do 
    command "ls" 
    action :nothing 
end 

Что представляет собой «изменение состояния» контролируется внутри ресурсов, но он обычно должен быть запущен, если какие-либо действия на всех были взяты ресурса (Это устанавливается с флагом на ресурсе под названием updated_by_last_action). Это может не соответствовать вашему требованию manage_home, но оно лучше, чем ваш bash работает все время.

+0

Спасибо, я этого не знал. – tytk

0

@Matt Кстати, здесь ресурс bash выполняется только при выполнении пользовательского ресурса. Если ресурс использования до даты, тогда ресурс bash не будет выполняться правильно. Тогда как сделать это наоборот. то есть ресурс bash выполняется только тогда, когда пользовательский ресурс не выполняется? Где мы должны дать условие для этого?