Я предполагаю, что пользовательское выполнение, PFDavAdmin нужны полномочия Полного доступа на почтовых ящиках, которые они пытаются изменить. Можно легко управлять полномочиями Полного доступа от EMC под узлом Конфигурации Получателя.
сделайте имя вашего скрипта уникальным ...
bash "create_user _ # {user}" do
FWIW, я использовал https://github.com/ fnichol / chef-user несколько раз, что позволяет вам создавать / удалять пользователей на основе атрибутов и тегов данных.
Наблюдаемое вами поведение можно объяснить, понимая разницу между двумя ключевыми этапами запуска клиента Chef: компиляцией и конвергенцией.
На этапе «компиляции» клиент Chef запускает код в ваши рецепты для создания коллекции ресурсов . Это список ресурсов , которыми вы сказали Chef управлять в вашей системе, вместе с их целевым состоянием. Например, ресурс Справочника, указывающий, что / tmp / foo
должен существовать и принадлежать пользователю root:
directory "/tmp/foo" do
owner "root"
end
На этапе «конвергенции» клиент Chef использует провайдеров для загружает текущее состояние каждого ресурса, затем сравнивает его с целевым состоянием. Если они разные, Chef обновит систему. Для нашего ресурса Directory Chef создаст каталог, если он не t существует, и при необходимости измените его владельца на "root".
Ресурсы однозначно идентифицируются по их имени и типу - наш каталог будет каталог [/ tmp / foo]
. Когда у вас есть два ресурса с одним и тем же именем, но с разными атрибутами, произойдут странные вещи - это объясняет вашу проблему, и ее можно исправить с помощью ответа Даррина Холста:
node[:users].each do |user|
puts "in loop for #{user['username']}"
bash "create_user_#{user}" do
user "root"
code do
puts "running 'useradd' for #{user['username']}"
"useradd #{user['username']}"
end
not_if do
puts "checking /etc/passwd for #{user['username']}"
"cat /etc/passwd | grep #{user['username']}"
end
end
end
Однако в этом конкретном случае вам будет полезно использовать ресурс пользователя Chef. . Вот замена вашего рецепта (без отладочных сообщений):
node[:users].each do |u|
user u['username'] do
action :create
end
end
Почему это лучше, чем набор ресурсов bash?
Но лучшая причина использовать правильные ресурсы - это то, что они более четко передают ваше намерение. Ваша цель, вероятно, не в том, чтобы запустить кучу команд оболочки, а в том, чтобы убедиться, что в вашей системе присутствуют некоторые пользователи. Команды, используемые для этого, являются лишь деталью реализации.
Провайдеры инкапсулируют эти детали, позволяя нам сосредоточиться на описании того, что мы хотим.
Но лучшая причина использовать правильные ресурсы - это то, что они более четко передают ваши намерения. Вероятно, ваша цель заключается не в том, чтобы запустить кучу команд оболочки, а в том, чтобы убедиться, что в вашей системе присутствуют некоторые пользователи. Команды, используемые для этого, являются лишь деталью реализации.
Провайдеры инкапсулируют эти детали, позволяя нам сосредоточиться на описании того, что мы хотим.
Но лучшая причина использовать правильные ресурсы - это то, что они более четко передают ваши намерения. Ваша цель, вероятно, не в том, чтобы запустить кучу команд оболочки, а в том, чтобы убедиться, что в вашей системе присутствуют некоторые пользователи. Команды, используемые для этого, являются лишь деталью реализации.
Провайдеры инкапсулируют эти детали, позволяя нам сосредоточиться на описании того, что мы хотим.