Spec-Zone.ru › Chef 17

Ресурс remote_directory

Эта страница сгенерирована из исходного кода Chef Infra Client. Чтобы предложить изменения, отредактируйте файл remote_directory.rb и отправьте запрос на вытягивание в репозиторий Chef Infra Client.

Все страницы ресурсов Infra


Используйте ресурс remote_directory для поэтапной передачи каталога из кулинарной книги на узел. Каталог, копируемый из кулинарной книги, должен быть расположен в COOKBOOK_NAME/files/default/REMOTE_DIRECTORY. Ресурс remote_directory будет соблюдать специфику файлов.

Синтаксис


Блок ресурса remote_directory передает каталог из кулинарной книги на узел и затем назначает необходимые права доступа к этому каталогу. Например:

remote_directory '/etc/apache2' do
  source 'apache2'
  owner 'root'
  group 'root'
  mode '0755'
  action :create
end

где:

  • '/etc/apache2' указывает каталог
  • source указывает каталог в текущей кулинарной книге (используйте свойство cookbook для указания файла, находящегося в другой кулинарной книге)
  • owner, group и mode определяют права доступа

Полный синтаксис всех свойств, доступных для ресурса remote_directory:

remote_directory 'name' do
  cookbook                   String
  files_backup               Integer, false # default value: 5
  files_group                String, Integer
  files_mode                 String, Integer # default value: 0644 on *nix systems
  files_owner                String, Integer
  group                      String, Integer
  inherits                   true, false
  mode                       String, Integer
  overwrite                  true, false # default value: true
  owner                      String, Integer
  path                       String # default value: 'name' unless specified
  purge                      true, false
  recursive                  true, false
  rights                     Hash
  source                     String
  action                     Symbol # defaults to :create if not specified
end

где:

  • remote_directory — ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет, чтобы привести узел в желаемое состояние.
  • cookbook, files_backup, files_group, files_mode, files_owner, group, mode, overwrite, owner, path, purge, recursive и source — доступные свойства для этого ресурса.

Действия


Ресурс remote_directory имеет следующие действия:

:create
По умолчанию. Создает каталог и/или содержимое каталога. Если каталог или его содержимое уже существуют (но не совпадают), обновляет каталог или его содержимое, чтобы оно соответствовало.
:create_if_missing
Создает каталог и/или содержимое каталога только в том случае, если он не существует.
:delete
Удаляет каталог, включая содержимое этого каталога.
:nothing
Этот блок ресурса не выполняет действий, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс remote_directory имеет следующие свойства:

cookbook
Тип Ruby: Строка

Кулинарная книга, в которой расположен файл (если он не расположен в текущей кулинарной книге). Значение по умолчанию — текущая кулинарная книга.

files_backup
Тип Ruby: Целое число, false | Значение по умолчанию: 5

Количество резервных копий файлов в каталоге.

files_group
Тип Ruby: Строка, Целое число

Настройка групповых прав для файлов. Строка или идентификатор, определяющий владельца группы по имени группы, включая полные имена групп, такие как domain\group или group@domain. Если это значение не указано, существующие группы останутся неизменными, а новые назначения групп будут использовать стандартную группу POSIX (если доступна).

files_mode
Тип Ruby: Строка, Целое число | Значение по умолчанию: 0644 on *nix systems

Восьмеричный режим для файла.

Системы на базе UNIX и Linux: Процитированная строка из 3-5 символов, определяющая восьмеричный режим, который передается команде chmod. Например: '755', '0755' или 00755. Если значение указано как строка в кавычках, оно работает точно так же, как будто была передана команда chmod. Если значение указано как целое число, добавьте ноль (0) к значению, чтобы убедиться, что оно интерпретируется как восьмеричное число. Например, для назначения прав чтения, записи и выполнения для всех пользователей используйте '0777' или '777'; для тех же прав плюс бит «взять», используйте 01777 или '1777'.

Microsoft Windows: Процитированная строка из 3-5 символов, определяющая восьмеричный режим, который преобразуется в права для безопасности Microsoft Windows. Например: '755', '0755' или 00755. Разрешены значения до '0777' (без бита «взять»), и они имеют тот же смысл в Microsoft Windows, что и в UNIX, где 4 равно GENERIC_READ, 2 равно GENERIC_WRITE, а 1 равно GENERIC_EXECUTE. Это свойство нельзя использовать для установки :full_control. Это свойство не имеет эффекта, если не указано, но когда оно и rights указаны оба, эффекты являются кумулятивными.

files_owner
Тип Ruby: Строка, Целое число

Настройка прав владельца для файлов. Строка или идентификатор, определяющий владельца группы по имени пользователя, включая полные имена пользователей, такие как domain\user или user@domain. Если это значение не указано, существующие владельцы останутся неизменными, а новые назначения владельцев будут использовать текущего пользователя (при необходимости).

group
Тип Ruby: Целое число, Строка

Используется для настройки прав для каталогов. Строка или идентификатор, определяющий владельца группы по имени группы или SID, включая полные имена групп, такие как domain\group или group@domain. Если это значение не указано, существующие группы останутся неизменными, а новые назначения групп будут использовать стандартную POSIX группу (если доступна).

inherits
Тип Ruby: true, false | Значение по умолчанию: true

Только для Microsoft Windows. Наследует ли файл права от родительского каталога.

mode
Тип Ruby: Целое число, Строка

Процитированная строка из 3-5 символов, определяющая восьмеричный режим. Например: '755', '0755' или 00755. Если mode не указано и если каталог уже существует, используется существующий режим каталога. Если mode не указано, каталог не существует, и указано действие :create, Chef Infra Client предполагает значение маски '0777', а затем применяет umask для системы, на которой должен быть создан каталог, к значению mask. Например, если umask в системе — '022', Chef Infra Client использует значение по умолчанию '0755'.

Поведение отличается в зависимости от платформы.

Системы на базе UNIX и Linux: Процитированная строка из 3-5 символов, определяющая восьмеричный режим, который передается команде chmod. Например: '755', '0755' или 00755. Если значение указано как строка в кавычках, оно работает точно так же, как будто была передана команда chmod. Если значение указано как целое число, добавьте ноль (0) к значению, чтобы убедиться, что оно интерпретируется как восьмеричное число. Например, для назначения прав чтения, записи и выполнения для всех пользователей используйте '0777' или '777'; для тех же прав плюс бит «взять», используйте 01777 или '1777'.

Microsoft Windows: Процитированная строка из 3-5 символов, определяющая восьмеричный режим, который преобразуется в права для безопасности Microsoft Windows. Например: '755', '0755' или 00755. Разрешены значения до '0777' (без бита «взять»), и они имеют тот же смысл в Microsoft Windows, что и в UNIX, где 4 равно GENERIC_READ, 2 равно GENERIC_WRITE, а 1 равно GENERIC_EXECUTE. Это свойство нельзя использовать для установки :full_control. Это свойство не имеет эффекта, если не указано, но когда оно и rights указаны оба, эффекты являются кумулятивными.

overwrite
Тип Ruby: true, false | Значение по умолчанию: true

Перезаписывать файл, когда он отличается.

owner
Тип Ruby: Целое число, Строка

Используется для настройки прав для каталогов. Строка или идентификатор, определяющий владельца группы по имени пользователя или SID, включая полные имена пользователей, такие как domain\user или user@domain. Если это значение не указано, существующие владельцы останутся неизменными, а новые назначения владельцев будут использовать текущего пользователя (при необходимости).

path
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Путь к каталогу. Рекомендуется использовать полный путь, но это не всегда обязательно. Значение по умолчанию: name блока ресурса. Дополнительная информация в разделе «Синтаксис» выше.

purge
Тип Ruby: true, false | Значение по умолчанию: false

Удаление дополнительных файлов, найденных в целевом каталоге.

recursive
Тип Ruby: true, false | Значение по умолчанию: true

Рекурсивное создание или удаление каталогов. Chef Infra Client должен иметь возможность создать структуру каталога, включая родительские каталоги (если они отсутствуют), как определено в COOKBOOK_NAME/files/default/REMOTE_DIRECTORY.

rights
Тип Ruby: Целое число, Строка

Только для Microsoft Windows. Права для пользователей и групп в среде Microsoft Windows. Например: rights <permissions>, <principal>, <options>, где <permissions> задает права, предоставляемые субъекту, <principal> — имя группы или пользователя, а <options> — словарь с одним (или несколькими) расширенными вариантами прав.

source
Тип Ruby: Строка | Значение по умолчанию: The base portion of the 'path' property.

Основное имя исходного файла (и выведено из свойства path). Например, в значении по умолчанию, ‘/some/path/’ будет ‘path’.

Рекурсивные каталоги

Ресурс remote_directory может использоваться для рекурсивного создания пути вне структуры каталогов удаленного сервера, но права доступа к этим внешним путям не управляются. Это связано с тем, что атрибут recursive применяется только group, mode и owner значения атрибутов к самому каталогу удаленного сервера и любым внутренним каталогам, которые копирует ресурс.

Структура каталога:

/foo
  /bar
    /baz

Следующий пример демонстрирует способ создания файла в каталоге /baz:

remote_directory '/foo/bar/baz' do
  owner 'root'
  group 'root'
  mode '0755'
  action :create
end

Однако в этом примере значения атрибутов group, mode и owner будут применены только к /baz. Это нормально, если это то, что вам нужно. Но чаще всего, когда вся структура каталога /foo/bar/baz не существует, необходимо явно указать каждый каталог. Например:

%w( /foo /foo/bar /foo/bar/baz ).each do |path|
  remote_directory path do
    owner 'root'
    group 'root'
    mode '0755'
  end
end

Этот подход создаст правильную иерархию — /foo, затем /bar в /foo, а затем /baz в /bar — и также с правильными значениями атрибутов для group, mode и owner.


Общая функциональность ресурсов


Ресурсы Chef включают общие свойства, уведомления и защитные механизмы ресурсов.

Общие свойства

Следующие свойства являются общими для всех ресурсов:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управление фазой, в которой ресурс выполняется на узле. Установите в значение true, чтобы запустить его при создании коллекции ресурсов (compile phase). Установите в значение false, чтобы запустить его при настройке узла клиентом Chef Infra Client (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжить выполнение рецепта, если ресурс завершился ошибкой по любой причине. :quiet не отобразит полный стек отладки, и рецепт продолжит выполнение, если ресурс завершится ошибкой.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повторения.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурсов не регистрировались клиентом Chef Infra Client.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[String]'

Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите 'resource[name]', действие :action, которое должен выполнить другой ресурс, и :timer для этого действия. Ресурс может уведомить несколько ресурсов; используйте оператор notifies для каждого уведомляемого ресурса.

Если указанный ресурс не существует, будет выброшено исключение. В отличие от этого, subscribes не завершится ошибкой, если исходный ресурс не найден.

Таймер определяет момент во время выполнения Chef Infra Client, когда выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие над уведомленным ресурсом должно быть выполнено до обработки блока ресурса, в котором расположено уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и выполнено в конце выполнения Chef Infra Client.

:immediate, :immediately

Указывает, что уведомление должно быть выполнено немедленно для каждого уведомленного ресурса.

Синтаксис для notifies:

notifies :action, 'resource[name]', :timer
subscribes

Тип Ruby: Символ, 'Chef::Resource[String]'

Ресурс может прослушивать другой ресурс и выполнять действие, если состояние прослушиваемого ресурса изменится. Укажите 'resource[name]', :action, которое должно быть выполнено, и :timer для этого действия.

Обратите внимание, что subscribes не применяет указанное действие к ресурсу, который он прослушивает — например:

file '/etc/nginx/ssl/example.crt' do
  mode '0600'
  owner 'root'
end

service 'nginx' do
  subscribes :reload, 'file[/etc/nginx/ssl/example.crt]', :immediately
end

В этом случае свойство subscribes перезагружает службу nginx каждый раз, когда файл сертификата, расположенный в /etc/nginx/ssl/example.crt, обновляется. subscribes не вносит никаких изменений в сам файл сертификата, а только следит за изменениями файла и выполняет действие :reload для своего ресурса (в данном примере nginx) при обнаружении изменений.

Если другой ресурс не существует, подписка не вызовет ошибку. Это отличается от более строгих семантик notifies, которые вызовут ошибку, если другой ресурс не существует.

Таймер определяет момент во время выполнения Chef Infra Client, когда выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие над уведомленным ресурсом должно быть выполнено до обработки блока ресурса, в котором расположено уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и выполнено в конце выполнения Chef Infra Client.

:immediate, :immediately

Указывает, что уведомление должно быть выполнено немедленно для каждого уведомленного ресурса.

Синтаксис для subscribes:

subscribes :action, 'resource[name]', :timer

Защитные механизмы

Свойство защитного механизма может использоваться для оценки состояния узла во время фазы выполнения Chef Infra Client. Основываясь на результатах этой оценки, свойство защитного механизма сообщает Chef Infra Client, следует ли продолжить выполнение ресурса. Свойство защитного механизма принимает либо строковое значение, либо значение блока Ruby:

  • Строка выполняется как командная оболочка. Если команда возвращает 0, защитный механизм применяется. Если команда возвращает любое другое значение, свойство защитного механизма не применяется. Строковые защитные механизмы в powershell_script выполняют команды Windows PowerShell и могут возвращать true в дополнение к 0.
  • Блок выполняется как код Ruby, который должен возвращать либо true, либо false. Если блок возвращает true, защитный механизм применяется. Если блок возвращает false, защитный механизм не применяется.

Свойство защитного механизма полезно для обеспечения идемпотентности ресурса, позволяя этому ресурсу проверить желаемое состояние во время выполнения, а затем, если желаемое состояние присутствует, чтобы Chef Infra Client ничего не делал.

Свойства

Следующие свойства могут использоваться для определения защитного механизма, который оценивается во время фазы выполнения Chef Infra Client:

not_if

Запретить выполнение ресурса, когда условие возвращает true.

only_if

Разрешить выполнение ресурса только в том случае, если условие возвращает true.

Рекурсивные каталоги

Ресурс remote_directory может использоваться для рекурсивного создания пути вне структуры каталогов удаленного сервера, но права доступа к этим внешним путям не управляются. Это связано с тем, что атрибут recursive применяется только group, mode и owner значениям атрибутов к самому каталогу удаленного сервера и любым внутренним каталогам, которые копирует ресурс.

Структура каталога:

/foo
  /bar
    /baz

Следующий пример демонстрирует способ создания файла в каталоге /baz:

remote_directory '/foo/bar/baz' do
  owner 'root'
  group 'root'
  mode '0755'
  action :create
end

Однако в этом примере значения атрибутов group, mode и owner будут применены только к /baz. Это нормально, если это то, что вам нужно. Но чаще всего, когда вся структура каталога /foo/bar/baz не существует, необходимо явно указать каждый каталог. Например:

%w( /foo /foo/bar /foo/bar/baz ).each do |path|
  remote_directory path do
    owner 'root'
    group 'root'
    mode '0755'
  end
end

Этот подход создаст правильную иерархию — /foo, затем /bar в /foo, а затем /baz в /bar — и также с правильными значениями атрибутов для group, mode и owner.

Пример

Этот раздел содержит более подробный пример того, как Chef Infra Client управляет рекурсивными структурами каталогов:

  • Кулинария с именем cumbria, которая используется для создания веб-сайта
  • Подпапка в каталоге /files/default с именем /website
  • Файл с именем index.html, который является главной страницей веб-сайта
  • Каталоги в /website с именами /cities, /places и /football, которые содержат страницы о городах, местах и футбольных командах
  • Каталог с именем /images, который содержит изображения

Эти файлы размещаются в каталоге /files/default в кулинарии cumbria, как показано ниже:

cumbria
  /files
    /default
      /website
        index.html
        /cities
          carisle.html
          kendal.html
          penrith.html
          windermere.html
        /football
          carisle_united.html
        /images
          carisle_united.png
          furness_abbey.png
          hadrians_wall.png
          kendal.png
        /places
          furness_abbey.html
          hadrians_wall.html

Ресурс remote_directory можно использовать для создания веб-сайта, используя эти файлы. Этот веб-сайт работает на веб-сервере Apache. Ресурс будет похож на следующий:

remote_directory '/var/www/html' do
  files_mode '0440'
  files_owner 'yan'
  mode '0770'
  owner 'hamilton'
  source 'website'
end

При запуске Chef Infra Client ресурс remote_directory укажет Chef Infra Client скопировать дерево каталогов из кулинарии в файловую систему с использованием структуры, определенной в кулинарии:

/var
  /www
    /html
      index.html
      /cities
        carisle.html
        kendal.html
        penrith.html
        windermere.html
      /football
        carisle_united.html
      /images
        carisle_united.png
        furness_abbey.png
        hadrians_wall.png
        kendal.png
      /places
        furness_abbey.html
        hadrians_wall.html

Клиент Chef Infra будет управлять разрешениями всей структуры каталогов ниже /html, в общей сложности 12 файлов и 4 каталога. Например:

dr-xr-xr-x 2 root     root 4096 /var/www/html
dr--r----- 1 yan      root 4096 /var/www/html/index.html
drwxrwx--- 2 hamilton root 4096 /var/www/html/cities
dr--r----- 1 yan      root 4096 /var/www/html/cities/carlisle.html
dr--r----- 1 yan      root 4096 /var/www/html/cities/kendal.html
dr--r----- 1 yan      root 4096 /var/www/html/cities/penrith.html
dr--r----- 1 yan      root 4096 /var/www/html/cities/windermere.html
drwxrwx--- 2 hamilton root 4096 /var/www/html/football
dr--r----- 1 yan      root 4096 /var/www/html/football/carlisle_united.html
drwxrwx--- 2 hamilton root 4096 /var/www/html/images
dr--r----- 1 yan      root 4096 /var/www/html/images/carlisle_united/png
dr--r----- 1 yan      root 4096 /var/www/html/images/furness_abbey/png
dr--r----- 1 yan      root 4096 /var/www/html/images/hadrians_wall.png
dr--r----- 1 yan      root 4096 /var/www/html/images/kendal.png
drwxrwx--- 2 hamilton root 4096 /var/www/html/places
dr--r----- 1 yan      root 4096 /var/www/html/places/furness_abbey.html
dr--r----- 1 yan      root 4096 /var/www/html/places/hadrians_wall.html

Безопасность файлов Windows

Для поддержки безопасности Microsoft Windows ресурсы шаблон, файл, удаленный_файл, файл_кухонной_книги, каталог и удаленный_каталог поддерживают наследование и списки управления доступом (ACL) в рецептах. Списки управления доступом (ACL)

Свойство rights может использоваться в рецепте для управления списками управления доступом (ACL), которые позволяют предоставлять разрешения нескольким пользователям и группам. Использование свойства rights может быть произвольным; Клиент Chef Infra применит их к файлу или каталогу по мере необходимости. Синтаксис свойства rights следующий:

rights permission, principal, option_type => value

где

permission

Используется для указания прав, предоставляемых principal. Возможные значения: :read, :write, read_execute, :modify, :full_control или целое число.

Целые числа, используемые для разрешений, должны соответствовать следующему списку списку перечислений FileSystemRights.

These permissions are cumulative. If `:write` is specified, then it
includes `:read`. If `:full_control` is specified, then it includes
both `:write` and `:read`.

(For those who know the Microsoft Windows API: `:read` corresponds
to `GENERIC_READ`; `:write` corresponds to `GENERIC_WRITE`;
`:read_execute` corresponds to `GENERIC_READ` and `GENERIC_EXECUTE`;
`:modify` corresponds to `GENERIC_WRITE`, `GENERIC_READ`,
`GENERIC_EXECUTE`, and `DELETE`; `:full_control` corresponds to
`GENERIC_ALL`, which allows a user to change the owner and other
metadata about a file.)
principal

Используется для указания группы или пользователя. Субъект может быть указан по имени или SID. При использовании имени это идентично тому, что вводится в поле входа для Microsoft Windows, например user_name, domain\user_name или user_name@fully_qualified_domain_name. При использовании SID можно использовать стандартное строковое представление SID (S-R-I-S-S) или один из констант строк SDDL. Клиенту Chef Infra не нужно знать, является ли субъект пользователем или группой.

option_type

Хэш, содержащий расширенные параметры прав. Например, права на каталог, которые применяются только к первому уровню дочерних элементов, могут выглядеть следующим образом: rights :write, 'domain\group_name', :one_level_deep => true. Возможные типы параметров:

Тип параметра Описание
:applies_to_children Указывает, как права применяются к дочерним элементам. Возможные значения: true для наследования как дочерних каталогов, так и файлов; false для отказа от наследования любых дочерних каталогов или файлов; :containers_only для наследования только дочерних каталогов (и не файлов); :objects_only для рекурсивного наследования файлов (и не дочерних каталогов).
:applies_to_self Указывает, применяется ли разрешение к родительскому каталогу. Возможные значения: true для применения к родительскому каталогу или файлу и его дочерним элементам; false для применения только к дочерним каталогам и файлам.
:one_level_deep Указывает глубину применения разрешений. Возможные значения: true для применения только к первому уровню дочерних элементов; false для применения ко всем дочерним элементам.

Например:

resource 'x.txt' do
  rights :read, 'S-1-1-0'
  rights :write, 'domain\group'
  rights :full_control, 'group_name_or_user_name'
  rights :full_control, 'user_name', applies_to_children: true
end

или:

rights :read, %w(Administrators Everyone)
rights :full_control, 'Users', applies_to_children: true
rights :write, 'Sally', applies_to_children: :containers_only, applies_to_self: false, one_level_deep: true

Некоторые другие важные моменты при использовании атрибута rights:

  • Остаются только унаследованные права. Все существующие явные права на объект удаляются и заменяются.
  • Если права не указаны, ничего не изменится. Клиент Chef Infra не очищает права на файл или каталог, если права не указаны.
  • Изменение унаследованных прав может быть дорогостоящим. Microsoft Windows будет рекурсивно распространять права на все дочерние элементы из-за наследования. Это обычный аспект Microsoft Windows, поэтому подумайте о частоте необходимости подобных действий и примите меры по контролю таких действий, если производительность является основным фактором.

Используйте свойство deny_rights, чтобы запретить определенные права определенным пользователям. Порядок не зависит от использования свойства rights. Например, неважно, размещены ли права на доступ всем перед или после deny_rights :read, ['Julian', 'Lewis'], и Джулиан, и Луис не смогут читать документ. Например:

resource 'x.txt' do
  rights :read, 'Everyone'
  rights :write, 'domain\group'
  rights :full_control, 'group_name_or_user_name'
  rights :full_control, 'user_name', applies_to_children: true
  deny_rights :read, %w(Julian Lewis)
end

или:

deny_rights :full_control, ['Sally']
Наследование

По умолчанию файл или каталог наследуют права из родительского каталога. В большинстве случаев это предпочтительное поведение, но иногда может потребоваться предпринять шаги для более точного управления правами. Свойство inherits можно использовать, чтобы конкретно указать клиенту Chef Infra применять (или не применять) унаследованные права из родительского каталога.

Например, в следующем примере задаются права для каталога:

directory 'C:\mordor' do
  rights :read, 'MORDOR\Minions'
  rights :full_control, 'MORDOR\Sauron'
end

а затем в следующем примере показано, как использовать наследование для отказа от доступа к дочернему каталогу:

directory 'C:\mordor\mount_doom' do
  rights :full_control, 'MORDOR\Sauron'
  inherits false # Sauron is the only person who should have any sort of access
end

Если вместо разрешения deny_rights использовать другой подход, что-то может пройти незамеченным, если не будут запрещены права для всех пользователей и групп.

Еще один пример также демонстрирует, как задать права для каталога:

directory 'C:\mordor' do
  rights :read, 'MORDOR\Minions'
  rights :full_control, 'MORDOR\Sauron'
  rights :write, 'SHIRE\Frodo' # Who put that there I didn't put that there
end

но затем не использовать свойство inherits, чтобы запретить эти права в дочернем каталоге:

directory 'C:\mordor\mount_doom' do
  deny_rights :read, 'MORDOR\Minions' # Oops, not specific enough
end

Поскольку свойство inherits не указано, клиент Chef Infra по умолчанию установит его в значение true, что гарантирует, что настройки безопасности существующих файлов останутся без изменений.

Примеры


В следующих примерах показаны различные подходы к использованию ресурса remote_directory в рецептах:

Рекурсивное копирование каталога из удаленного расположения

# create up to 10 backups of the files
# set the files owner different from the directory
remote_directory '/tmp/remote_something' do
  source 'something'
  files_backup 10
  files_owner 'root'
  files_group 'root'
  files_mode '0644'
  owner 'nobody'
  group 'nobody'
  mode '0755'
end

Использование с ресурсом chef_handler

В следующем примере показано, как использовать ресурс remote_directory и ресурс chef_handler для перезагрузки обработчика с именем WindowsRebootHandler:

# the following code sample comes from the
# ``reboot_handler`` recipe in the ``windows`` cookbook:
# https://github.com/chef-cookbooks/windows

remote_directory node['chef_handler']['handler_path'] do
  source 'handlers'
  recursive true
  action :create
end

chef_handler 'WindowsRebootHandler' do
  source "#{node['chef_handler']['handler_path']}/windows_reboot_handler.rb"
  arguments node['windows']['allow_pending_reboots']
  supports :report => true, :exception => false
  action :enable
end

© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/resources/remote_directory/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API