Что корректный путь состоит в том, чтобы циклично выполнить в Шеф-поваре (соло) рецепт?

Я предполагаю, что пользовательское выполнение, PFDavAdmin нужны полномочия Полного доступа на почтовых ящиках, которые они пытаются изменить. Можно легко управлять полномочиями Полного доступа от EMC под узлом Конфигурации Получателя.

8
задан 8 March 2013 в 05:30
2 ответа

сделайте имя вашего скрипта уникальным ...

bash "create_user _ # {user}" do

FWIW, я использовал https://github.com/ fnichol / chef-user несколько раз, что позволяет вам создавать / удалять пользователей на основе атрибутов и тегов данных.

5
ответ дан 2 December 2019 в 22:50

Наблюдаемое вами поведение можно объяснить, понимая разницу между двумя ключевыми этапами запуска клиента 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?

  1. Ресурс User работает одинаково на разных платформах - один и тот же рецепт будет работать в операционных системах, которые для создания пользователей используйте что-то другое, кроме useradd.
  2. Провайдеры, ответственные за это, знают, как проверить, существует ли уже пользователь, поэтому вам не нужно not_if.
  3. Те же провайдеры также могут использоваться для удаления пользователей, блокировки или разблокировки их паролей и обновления других атрибутов на существующие учетные записи пользователей.

Но лучшая причина использовать правильные ресурсы - это то, что они более четко передают ваше намерение. Ваша цель, вероятно, не в том, чтобы запустить кучу команд оболочки, а в том, чтобы убедиться, что в вашей системе присутствуют некоторые пользователи. Команды, используемые для этого, являются лишь деталью реализации.

Провайдеры инкапсулируют эти детали, позволяя нам сосредоточиться на описании того, что мы хотим.

Но лучшая причина использовать правильные ресурсы - это то, что они более четко передают ваши намерения. Вероятно, ваша цель заключается не в том, чтобы запустить кучу команд оболочки, а в том, чтобы убедиться, что в вашей системе присутствуют некоторые пользователи. Команды, используемые для этого, являются лишь деталью реализации.

Провайдеры инкапсулируют эти детали, позволяя нам сосредоточиться на описании того, что мы хотим.

Но лучшая причина использовать правильные ресурсы - это то, что они более четко передают ваши намерения. Ваша цель, вероятно, не в том, чтобы запустить кучу команд оболочки, а в том, чтобы убедиться, что в вашей системе присутствуют некоторые пользователи. Команды, используемые для этого, являются лишь деталью реализации.

Провайдеры инкапсулируют эти детали, позволяя нам сосредоточиться на описании того, что мы хотим.

10
ответ дан 2 December 2019 в 22:50

Теги

Похожие вопросы