Spec-Zone.ru › Chef 16

Ресурс remote_file

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

Страница справочника по ресурсам


Используйте ресурс remote_file для передачи файла из удаленного местоположения с использованием специфики файла. Этот ресурс похож на ресурс file.

Примечание

Извлечение файлов из каталога files/ в книге рецептов следует выполнять с помощью ресурса cookbook_file.

Синтаксис


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

remote_file '/var/www/customers/public_html/index.html' do
  source 'http://somesite.com/index.html'
  owner 'web_admin'
  group 'web_admin'
  mode '0755'
  action :create
end

где:

  • '/var/www/customers/public_html/index.html' — путь к файлу, который нужно создать
  • 'http://somesite.com/index.html' указывает местоположение удаленного файла, файл загружается оттуда
  • owner, group и mode определяют права доступа

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

remote_file 'name' do
  atomic_update              true, false
  authentication             # default value: remote
  backup                     Integer, false # default value: 5
  checksum                   String
  content                    String, nil
  diff                       String, nil
  force_unlink               true, false # default value: false
  ftp_active_mode            true, false # default value: false
  group                      String, Integer
  headers                    Hash
  inherits                   true, false
  manage_symlink_source      true, false
  mode                       String, Integer
  notifies                   # see description
  owner                      String, Integer
  path                       String # defaults to 'name' if not specified
  rights                     Hash
  source                     String, Array
  subscribes                 # see description
  use_conditional_get        true, false
  verify                     String, Block
  remote_domain              String
  remote_password            String
  remote_user                String
  show_progress              true, false # default value: false
  use_etag                   true, false # default value: true
  use_last_modified          true, false # default value: true
  sensitive                  true, false # default value: false
  verifications              Array
  action                     Symbol # defaults to :create if not specified
end

где:

  • remote_file — ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет, какие шаги предпримет клиент Chef Infra для приведения узла в желаемое состояние.
  • atomic_update, authentication, backup, checksum, content, force_unlink, ftp_active_mode, group, headers, manage_symlink_source, mode, owner, path, remote_domain, remote_password, remote_user, show_progress, use_etag, use_last_modified и verifications — свойства, доступные для этого ресурса.

Действия


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

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

Свойства


Ресурс remote_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.

authentication
Тип Ruby: Symbol | Значение по умолчанию: :remoteДопустимые значения: :local, :remote
backup
Тип Ruby: Integer, false | Значение по умолчанию: 5

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

checksum
Тип Ruby: String

Необязательно, см. use_conditional_get. Контрольная сумма SHA-256 файла. Используется для предотвращения повторной загрузки файла. Когда локальный файл совпадает с контрольной суммой, клиент Chef Infra не загружает его.

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

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

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

Использует ли клиент Chef Infra активный или пассивный FTP. Установите значение true для использования активного FTP.

group
Тип Ruby: Integer, String

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

headers
Тип Ruby: Hash

Хэш пользовательских заголовков. Например:

headers({ "Cookie" => "user=grantmc; pass=p@ssw0rd!" })

или:

headers({ "Referer" => "#{header}" })

или:

headers( "Authorization"=>"Basic #{ Base64.encode64("#{username}:#{password}").gsub("\n", "") }" )
ignore_failure
Тип Ruby: true, false | Значение по умолчанию: false

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

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

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

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

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

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

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

mode
Тип Ruby: Integer, String

Строка из 3-5 символов, которая определяет октальный режим. Например: '755', '0755' или 00755. Если mode не указано и если файл уже существует, используется существующий режим файла. Если mode не указано, файл не существует и указано действие :create, клиент Chef Infra предполагает значение маски '0777', а затем применяет umask для системы, на которой должен быть создан файл, к значению mask. Например, если umask в системе равен '022', клиент Chef Infra использует значение по умолчанию '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 указаны одновременно, эффекты являются кумулятивными.

notifies
Тип Ruby: Symbol, Chef::Resource\[String\]

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

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

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

:before

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

:delayed

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

:immediate, :immediately

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

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

notifies :action, 'resource[name]', :timer
owner
Тип Ruby: Integer, String

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

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

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

remote_user
Тип Ruby: String

Только Windows Имя пользователя с доступом к удалённому файлу, указанному свойством source. Имя пользователя можно необязательно указать с доменом, например: domain\user или user@my.dns.domain.com в формате Universal Principal Name (UPN). Домен также можно задать с помощью свойства remote_domain. Обратите внимание, что это свойство игнорируется, если source не является UNC-путем. Если это свойство указано, обязательно указать свойство remote_password.

Новое в Chef Client 13.4

remote_password
Тип Ruby: String

Только Windows Пароль пользователя, указанного свойством remote_user. Это свойство необходимо, если указан remote_user, и может быть указано только в том случае, если указано remote_user. Свойство sensitive для данного ресурса автоматически будет установлено в true, если указано remote_password.

Новое в Chef Client 13.4

remote_domain
Тип Ruby: String

Только Windows Домен пользователя, указанного свойством remote_user. По умолчанию ресурс будет аутентифицироваться в домене удалённой системы или как локальный учётная запись, если удалённая система не присоединена к домену. Если удалённая система не входит в домен, необходимо аутентифицироваться как локальный пользователь на удалённой системе, установив домен в ., например: remote_domain ".". Домен также можно указать как часть свойства remote_user.

Новое в Chef Client 13.4

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

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

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

Задержка повторной попытки (в секундах).

rights
Тип Ruby: Integer, String

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

source
Тип Ruby: String, Array

Обязательно. Местоположение исходного файла. Местоположение исходного файла может быть HTTP (http://), FTP (ftp://), SFTP (sftp://), локальным (file:///) или UNC (\\host\share\file.tar.gz).

Существует множество способов определить местоположение исходного файла. С помощью пути:

source 'http://couchdb.apache.org/img/sketch.png'

С помощью FTP:

source 'ftp://remote_host/path/to/img/sketch.png'

С помощью SFTP:

source 'sftp://username:password@remote_host:22/path/to/img/sketch.png'

С помощью локального пути:

source 'file:///path/to/img/sketch.png'

С помощью Microsoft Windows UNC:

source '\\\\path\\to\\img\\sketch.png'

С помощью атрибута узла:

source node['nginx']['foo123']['url']

С помощью атрибутов для определения путей:

source "#{node['python']['url']}/#{version}/Python-#{version}.tar.bz2"

Определением нескольких путей для нескольких местоположений:

source 'http://seapower/spring.png', 'http://seapower/has_sprung.png'

Определением тех же самых нескольких путей в виде массива:

source ['http://seapower/spring.png', 'http://seapower/has_sprung.png']

Когда заданы несколько путей, Chef Infra Client попытается загрузить файлы в указанном порядке, остановившись после первой успешной загрузки.

subscribes
Тип Ruby: Symbol, 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
use_conditional_get
Тип Ruby: true, false | Значение по умолчанию: true

Включить условные HTTP-запросы с помощью условного GET (с заголовком If-Modified-Since) или неявного идентификатора (ETag). Чтобы использовать заголовки If-Modified-Since, также необходимо установить use_last_modified в true. Чтобы использовать заголовки ETag, также необходимо установить use_etag в true.

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

Включить заголовки ETag. Установите в false, чтобы отключить заголовки ETag. Для использования этой настройки необходимо также установить use_conditional_get в true.

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

Включить заголовки If-Modified-Since. Установите в false, чтобы отключить заголовки If-Modified-Since. Для использования этой настройки необходимо также установить use_conditional_get в true.

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

Отображает процесс загрузки файла. Установите в true, чтобы включить эту функцию.

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

Гарантирует, что конфиденциальные данные ресурсов не регистрируются Chef Infra Client.

verify
Тип Ruby: String, Block

Блок или строка, возвращающая true или false. Строка, когда true выполняется как системная команда.

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

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

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

Это должно вернуть true:

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

Это должно вернуть true:

remote_file '/tmp/bar' do
  verify { 1 == 1}
end

А это должно вернуть true:

remote_file '/tmp/foo' do
  verify do |path|
    true
  end
end

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

remote_file '/tmp/turtle' do
  verify '/usr/bin/false'
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.

Эти разрешения суммируются. Если указано :write, то оно включает :read. Если указано :full_control, то оно включает в себя как :write, так и :read.

(Для тех, кто знаком с API Microsoft Windows: :read соответствует GENERIC_READ; :write соответствует GENERIC_WRITE; :read_execute соответствует GENERIC_READ и GENERIC_EXECUTE; :modify соответствует GENERIC_WRITE, GENERIC_READ, GENERIC_EXECUTE и DELETE; :full_control соответствует GENERIC_ALL, что позволяет пользователю изменять владельца и другую метаданные файла.)

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 Infra Client файлов, которые уже присутствуют на узле, используйте один из следующих атрибутов в рецепте: use_conditional_get (по умолчанию) или checksum.

  • Атрибут use_conditional_get — это стандартное поведение Chef Infra Client. Если удаленный файл находится на сервере, который поддерживает заголовки ETag и/или If-Modified-Since, Chef Infra Client будет использовать условную GET, чтобы определить, был ли файл обновлен. Если файл был обновлен, Chef Infra Client повторно загрузит его.
  • Атрибут checksum попросит Chef Infra Client сравнить контрольную сумму локального файла с контрольной суммой удаленного файла. Если они совпадают, Chef Infra Client не будет повторно загружать файл. Для сравнения с помощью локальной контрольной суммы требуется, чтобы локальная контрольная сумма была правильной.

Желаемый подход зависит только от желаемого рабочего процесса. Например, если узлу ежедневно требуется новый файл, для подхода с контрольной суммой необходимо будет также обновлять и/или проверять локальную контрольную сумму ежедневно, чтобы убедиться, что локальная контрольная сумма является правильной. Использование условной GET в этом сценарии значительно упростит управление, необходимое для точного обновления файлов.

Доступ к удаленному пути UNC в Windows

Ресурс remote_file в Windows поддерживает доступ к файлам с удаленного ресурса SMB/CIFS. Имя файла должно быть указано в свойстве source как путь UNC, например, \myserver\myshare\mydirectory\myfile.txt. Это позволяет получить доступ к файлу по этому пути, даже если процесс Chef Infra Client не имеет разрешения на доступ к файлу. Учетные данные для аутентификации на удаленной системе могут быть указаны с помощью свойств remote_user, remote_domain и remote_password, когда пользователь, под которым работает Chef Infra Client, не имеет доступа к удаленному файлу. См. раздел «Свойства» для получения более подробной информации об этих параметрах.

Примечание: Это главным образом для доступа к удаленным файлам, когда пользователь, под которым работает Chef Infra Client, не имеет достаточного доступа, и необходимо указать альтернативные учетные данные. Если у пользователя уже есть доступ, учетные данные указывать не нужно. В случае, когда локальная и удаленная системы находятся в одной домене, свойства remote_user и remote_password часто не нужно указывать, так как пользователь, возможно, уже имеет доступ к удаленной общей папке.

Примеры:

Доступ к файлу от имени пользователя другой доменной учетной записи:

remote_file 'E:/domain_test.txt' do
  source '\\myserver\myshare\mydirectory\myfile.txt'
  remote_domain 'domain'
  remote_user 'username'
  remote_password 'password'
end

ИЛИ

remote_file 'E:/domain_test.txt' do
  source '\\myserver\myshare\mydirectory\myfile.txt'
  remote_user 'domain\username'
  remote_password 'password'
end

Доступ к файлу с помощью локальной учетной записи на удаленной машине:

remote_file 'E:/domain_test.txt' do
  source '\\myserver\myshare\mydirectory\myfile.txt'
  remote_domain '.'
  remote_user 'username'
  remote_password 'password'
end

ИЛИ

remote_file 'E:/domain_test.txt' do
  source '\\myserver\myshare\mydirectory\myfile.txt'
  remote_user '.\username'
  remote_password 'password'
end

Примеры


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

Передача файла из URL

remote_file '/tmp/testfile' do
  source 'http://www.example.com/tempfiles/testfile'
  mode '0755'
  checksum '3a7dac00b1' # A SHA256 (or portion thereof) of the file.
end

Передача файла только при изменении источника

remote_file '/tmp/couch.png' do
  source 'http://couchdb.apache.org/img/sketch.png'
  action :nothing
end

http_request 'HEAD http://couchdb.apache.org/img/sketch.png' do
  message ''
  url 'http://couchdb.apache.org/img/sketch.png'
  action :head
  if ::File.exist?('/tmp/couch.png')
    headers 'If-Modified-Since' => File.mtime('/tmp/couch.png').httpdate
  end
  notifies :create, 'remote_file[/tmp/couch.png]', :immediately
end

Установка файла из удаленного расположения с помощью bash

В следующем примере показано, как установить модуль foo123 для Nginx. Этот модуль добавляет функциональность в стиле оболочки в файл конфигурации Nginx и выполняет следующие действия:

  • Объявляет три переменных
  • Получает файл Nginx из удаленного расположения
  • Устанавливает файл с помощью Bash в путь, указанный переменной src_filepath
# the following code sample is similar to the ``upload_progress_module``
# recipe in the ``nginx`` cookbook:
# https://github.com/chef-cookbooks/nginx

src_filename = "foo123-nginx-module-v#{
  node['nginx']['foo123']['version']
}.tar.gz"
src_filepath = "#{Chef::Config['file_cache_path']}/#{src_filename}"
extract_path = "#{
  Chef::Config['file_cache_path']
  }/nginx_foo123_module/#{
  node['nginx']['foo123']['checksum']
}"

remote_file 'src_filepath' do
  source node['nginx']['foo123']['url']
  checksum node['nginx']['foo123']['checksum']
  owner 'root'
  group 'root'
  mode '0755'
end

bash 'extract_module' do
  cwd ::File.dirname(src_filepath)
  code <<-EOH
    mkdir -p #{extract_path}
    tar xzf #{src_filename} -C #{extract_path}
    mv #{extract_path}/*/* #{extract_path}/
    EOH
  not_if { ::File.exist?(extract_path) }
end

Сохранение определенных настроек

Следующий рецепт показывает, как можно использовать файл атрибутов для хранения определенных настроек. Файл атрибутов расположен в каталоге attributes/ в том же кулинарном наборе, что и рецепт, который вызывает файл атрибутов. В этом примере файл атрибутов определяет определенные настройки для Python, которые затем используются на всех узлах, на которых будет выполняться этот рецепт.

У пакетов Python есть версии, каталоги установки, URL-адреса и файлы контрольных сумм. Файл атрибутов, предназначенный для поддержки такого типа рецептов, должен содержать настройки, подобные следующим:

default['python']['version'] = '2.7.1'

if python['install_method'] == 'package'
  default['python']['prefix_dir'] = '/usr'
else
  default['python']['prefix_dir'] = '/usr/local'
end

default['python']['url'] = 'http://www.python.org/ftp/python'
default['python']['checksum'] = '80e387...85fd61'

а затем методы в рецепте могут ссылаться на эти значения. Рецепту, используемому для установки Python, потребуется выполнить следующие действия:

  • Определить каждый пакет для установки (подразумевается в этом примере, не показано)
  • Определить переменные для пакета version и install_path
  • Получить пакет из удаленного расположения, но только если пакет еще не существует на целевой системе
  • Использовать ресурс bash для установки пакета на узел, но только если пакет еще не установлен
#  the following code sample comes from the ``oc-nginx`` cookbook on |github|: https://github.com/cookbooks/oc-nginx

version = node['python']['version']
install_path = "#{node['python']['prefix_dir']}/lib/python#{version.split(/(^\d+\.\d+)/)[1]}"

remote_file "#{Chef::Config[:file_cache_path]}/Python-#{version}.tar.bz2" do
  source "#{node['python']['url']}/#{version}/Python-#{version}.tar.bz2"
  checksum node['python']['checksum']
  mode '0755'
  not_if { ::File.exist?(install_path) }
end

bash 'build-and-install-python' do
  cwd Chef::Config[:file_cache_path]
  code <<-EOF
    tar -jxvf Python-#{version}.tar.bz2
    (cd Python-#{version} && ./configure #{configure_options})
    (cd Python-#{version} && make && make install)
  EOF
  not_if { ::File.exist?(install_path) }
end

Использование метода platform_family?

Ниже приведен пример использования метода platform_family? в Recipe DSL для создания переменной, которую можно использовать с другими ресурсами в том же рецепте. В этом примере используется platform_family?, чтобы гарантировать использование определённого двоичного файла для определённой платформы перед использованием ресурса remote_file для скачивания файла из удалённого места и последующего использования ресурса execute для установки этого файла путём выполнения команды.

if platform_family?('rhel')
  pip_binary = '/usr/bin/pip'
else
  pip_binary = '/usr/local/bin/pip'
end

remote_file "#{Chef::Config[:file_cache_path]}/distribute_setup.py" do
  source 'http://python-distribute.org/distribute_setup.py'
  mode '0755'
  not_if { File.exist?(pip_binary) }
end

execute 'install-pip' do
  cwd Chef::Config[:file_cache_path]
  command <<-EOF
    # command for installing Python goes here
    EOF
  not_if { File.exist?(pip_binary) }
end

где команда для установки Python может выглядеть примерно так:

#{node['python']['binary']} distribute_setup.py
#{::File.dirname(pip_binary)}/easy_install pip

Указание локального пути к файлу Windows в качестве допустимого URI

При указании локального пути к файлу Microsoft Windows в качестве допустимого URI файла требуется дополнительный слэш (/). Например:

remote_file 'file:///c:/path/to/file' do
  ...       # other attributes
end
Ресурс remote_file
  • Синтаксис
  • Действия
  • Свойства
    • Атомарные обновления файлов
    • Безопасность файлов Windows
    • Предотвращение повторных загрузок
    • Доступ к удалённому пути UNC в Windows
  • Примеры

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

Spec-Zone.ru

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