Spec-Zone.ru › Chef 17

Ресурс file

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

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


Используйте ресурс file для управления файлами напрямую на узле.

Примечание

Используйте ресурс cookbook_file для копирования файла из каталога /files кулинарной книги. Используйте ресурс template для создания файла на основе шаблона в каталоге /templates кулинарной книги. И используйте ресурс remote_file для передачи файла на узел из удалённого расположения.

Синтаксис


Блок ресурса file управляет файлами, которые существуют на узлах. Например, для записи домашней страницы веб-сайта Apache:

file '/var/www/customers/public_html/index.php' do
  content '<html>This is a placeholder for the home page.</html>'
  mode '0755'
  owner 'web_admin'
  group 'web_admin'
end

где:

  • '/var/www/customers/public_html/index.php' — путь к файлу, а также имя файла для управления
  • content определяет содержимое файла

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

file 'name' do
  atomic_update              true, false
  backup                     false, Integer
  checksum                   String
  content                    String
  force_unlink               true, false
  group                      String, Integer
  inherits                   true, false
  manage_symlink_source      true, false
  mode                       String, Integer
  owner                      String, Integer
  path                       String # defaults to 'name' if not specified
  rights                     Hash
  verify                     String, Block, Symbol
  action                     Symbol # defaults to :create if not specified
end

где:

  • file — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в нужное состояние.
  • atomic_update, backup, checksum, content, force_unlink, group, inherits, manage_symlink_source, mode, owner, path, rights, sensitive и verify — это свойства этого ресурса с указанным типом Ruby. Более подробную информацию обо всех свойствах, которые можно использовать с этим ресурсом, см. в разделе «Свойства» ниже.

Действия


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

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

Свойства


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

atomic_update
Тип Ruby: true, false | Значение по умолчанию: False if modifying /etc/hosts, /etc/hostname, or /etc/resolv.conf within Docker containers. Otherwise default to the client.rb 'file_atomic_update' config value.

Выполнение атомных обновлений файлов по каждому ресурсу. Установите в значение true для атомных обновлений файлов. Установите в значение false для неатомных обновлений файлов. Это значение переопределяет file_atomic_update, которое является глобальным значением, найденным в файле client.rb.

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

Количество резервных копий, которые будут сохранены в /var/chef/backup (для платформ на основе UNIX и Linux) или C:/chef/backup (для платформы Microsoft Windows). Установите в значение false, чтобы предотвратить сохранение резервных копий.

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

Контрольная сумма SHA-256 файла. Используется для обеспечения использования конкретного файла. Если контрольная сумма не совпадает, файл не используется.

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

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

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

Как Chef Infra Client обрабатывает определённые ситуации, когда целевой файл оказывается не файлом. Например, когда целевой файл фактически является символической ссылкой. Установите в значение true, чтобы Chef Infra Client удалил целевой объект, который не является файлом, и заменил его указанным файлом. Установите в значение false, чтобы Chef Infra Client выдал ошибку.

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

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

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

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

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

(с предупреждением)

Изменить поведение ресурса файла, если он указывает на символическую ссылку. Когда это значение установлено в false, Chef Infra Client будет управлять правами символической ссылки или заменит символическую ссылку обычным файлом, если ресурс имеет содержимое. Когда это значение установлено в true, Chef последует за символической ссылкой и будет управлять правами и содержимым целевого файла символической ссылки.

По умолчанию это true, но выводится предупреждение о том, что значение по умолчанию будет изменено на false в будущей версии; явное задание этого значения в true или false подавляет это предупреждение.

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'; для тех же прав плюс бит «sticky» используйте 01777 или '1777'.

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

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

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

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

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

Microsoft Windows: путь, начинающийся с прямой косой черты (/), указывает на корень текущего рабочего каталога процесса Chef Infra Client. Этот путь может различаться в разных системах. Поэтому использование пути, начинающегося с прямой косой черты (/), не рекомендуется.

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

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

verify
Тип Ruby: Строка, Блок, Символ

Позволяет проверить содержимое файла перед его созданием. Создаёт временный файл и затем позволяет выполнить команды или код Ruby. Если этот код вернёт значение true, файл будет создан. Если код вернёт значение false, будет поднято исключение.

Типы для этого свойства — блок, строка или символ. При указании блока он возвращает true или false. При указании строки она выполняется как системная команда. Возвращает true, если команда возвращает 0 в качестве кода возврата, и false, если команда возвращает код возврата, отличный от нуля. При использовании встроенного символа проверки он возвращает true, если проверка прошла успешно, иначе возвращает false. В настоящее время поддерживаются следующие встроенные средства проверки: :yaml, :json и :systemd_unit.

Примечание

Блок — произвольный код Ruby, определённый в блоке ресурса с помощью свойства verify. Когда блок возвращает true, Chef Infra Client продолжит обновление файла соответствующим образом.

Например, это должно возвращать true:

file '/tmp/baz'  do
  verify { 1 == 1 }
end

Это также должно возвращать true:

file '/etc/nginx.conf' do
  verify 'nginx -t -c %{path}'
end

В этом примере часть %{path} этой команды расширяется до временного расположения, где существует копия создаваемого файла. Это будет использовать функцию проверки синтаксиса Nginx для обеспечения того, что файл является допустимым конфигурационным файлом Nginx, перед записью файла. Если выполненная команда вернёт код возврата, отличный от нуля, будет поднято исключение.

Это должно возвращать true:

file '/tmp/foo' do
  content "hello"
  verify do |path|
    open(path).read.include?       "hello"
  end
end

В то время как это должно возвращать false:

file '/tmp/foo' do
  content "goodbye"
  verify do |path|
    open(path).read.include?       "hello"
  end
end

При использовании одного из встроенных символов (:json, :yaml, :systemd_unit) это должно возвращать true:

file 'foo.json' do
  content '{"foo": "bar"}'
  verify :json
end

В то время как это должно возвращать false:

file 'foo.yaml' do
    content "--- foo: 'foo-"
    verify :yaml
end

Если строка, блок или символ возвращают false, выполнение Chef Infra Client прекращается, и поднимается исключение.

Атомарные обновления файлов

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

Атомарные обновления включены по умолчанию. Их можно настроить глобально, используя параметр file_atomic_update в файле client.rb. Их можно настроить на уровне ресурса, используя свойство atomic_update, доступное для ресурсов cookbook_file, file, remote_file и template.

Примечание

На определённых платформах и после перемещения файла на место, Chef Infra Client может изменить разрешения на файлы для поддержки функций, специфичных для этих платформ. На платформах с включённым SELinux Chef Infra Client будет исправлять контексты безопасности после перемещения файла в нужное место, выполнив команду restorecon. На платформе Microsoft Windows Chef Infra Client создаст файлы таким образом, чтобы наследование ACL работало как ожидается.

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

Для поддержки безопасности Microsoft Windows ресурсы template, file, remote_file, cookbook_file, directory и remote_directory поддерживают использование наследования и списков управления доступом (ACL) в рецептах. Списки управления доступом (ACL)

Свойство rights может использоваться в рецептах для управления списками управления доступом (ACL), которые позволяют предоставлять разрешения нескольким пользователям и группам. Свойство rights можно использовать любое количество раз; Chef Infra Client применит их к файлу или каталогу по мере необходимости. Синтаксис свойства 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 Client не должен знать, пользователь это или группа.

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 Client не очищает права на файл или каталог, если права не указаны.
  • Изменение унаследованных прав может быть дорогостоящим. 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 Client применять (или не применять) унаследованные права из родительского каталога.

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

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 Client по умолчанию задаст ему значение true, что гарантирует, что настройки безопасности для существующих файлов останутся неизменными.


Общие функциональные возможности ресурсов


Ресурсы 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[Строка]'

Ресурс может уведомить другой ресурс о действии, которое нужно выполнить при изменении его состояния. Укажите '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[Строка]'

Ресурс может следить за другим ресурсом и затем выполнить действие, если состояние отслеживаемого ресурса изменится. Укажите '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.

Примеры


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

Создание файла

file '/tmp/something' do
  owner 'root'
  group 'root'
  mode '0755'
  action :create
end

Создание файла в Microsoft Windows

Для создания файла в Microsoft Windows убедитесь, что вы добавили управляющий символ — \ — перед обратными косыми чертами в путях:

file 'C:\\tmp\\something.txt' do
  rights :read, 'Everyone'
  rights :full_control, 'DOMAIN\\User'
  action :create
end

Удаление файла

file '/tmp/something' do
  action :delete
end

Установка режимов файла

file '/tmp/something' do
  mode '0755'
end

Удаление репозитория с помощью yum, очищая кэш

# the following code sample thanks to gaffneyc @ https://gist.github.com/918711

execute 'clean-yum-cache' do
  command 'yum clean all'
  action :nothing
end

file '/etc/yum.repos.d/bad.repo' do
  action :delete
  notifies :run, 'execute[clean-yum-cache]', :immediately
  notifies :create, 'ruby_block[reload-internal-yum-cache]', :immediately
end

Добавление значения элемента пакета данных в файл

Следующий пример показывает, как получить содержимое элемента пакета данных с именем impossible_things, создать файл .pem по адресу some/directory/path/, а затем использовать атрибут content для обновления содержимого этого файла значением элемента пакета данных impossible_things:

private_key = data_bag_item('impossible_things', private_key_name)['private_key']

file "some/directory/path/#{private_key_name}.pem" do
  content private_key
  owner 'root'
  group 'group'
  mode '0755'
end

Запись файла YAML

Следующий пример показывает, как использовать свойство content для записи файла YAML:

file "#{app['deploy_to']}/shared/config/settings.yml" do
  owner "app['owner']"
  group "app['group']"
  mode '0755'
  content app.to_yaml
end

Запись строки в файл

Следующий пример указывает каталог, а затем использует свойство content для добавления строки в созданный в этом каталоге файл:

status_file = '/path/to/file/status_file'

file status_file do
  owner 'root'
  group 'root'
  mode '0755'
  content 'My favourite foremost coastal Antarctic shelf, oh Larsen B!'
end

Создание файла из копии

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

file '/root/1.txt' do
  content IO.read('/tmp/1.txt')
  action :create
end

где атрибут content использует метод Ruby IO.read для получения содержимого файла /tmp/1.txt.

© 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/file/

Spec-Zone.ru

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