Назад | Перейти на главную страницу

Почему в документе ресурса Chef в круглых скобках имя ресурса шаблона в примерах выполнения?

Я смотрю на http://docs.opscode.com/chef/resources.html#execute а в разделе «Выполнить» в «Выполнить команду с использованием шаблона» они вызывают шаблон с круглыми скобками вокруг аргумента. Всего лишь несколько утверждений, сделанных ранее, они вызывают execute без скобок. Для остальной части документа шаблон вызывается без скобок. Есть ли причина такого несоответствия?

execute "forward_ipv4" do
  command "echo > /proc/.../ipv4/ip_forward"
  action :nothing
end

template( "/etc/file_name.conf" ) do
  source "routing/file_name.conf.erb"
  notifies :run, 'execute[forward_ipv4]', :delayed
end

Я никогда раньше не видел такого синтаксиса / стиля, пока вы не указали на это. Использование скобок в такой ситуации совершенно необязательно и сбивает с толку. Достаточно просто указать шаблон и имя файла.

Рецепты от шеф-повара написаны на Ruby, а DSL использует #method_missing для определения ресурсов в рецептах.

Таким образом, каждый ресурс - это метод, который принимает единственный аргумент (строку, имя) и блок (параметры).

Круглые скобки вокруг аргументов в Ruby необязательны, и много написано о том, следует ли их использовать. в интернете. Хотя не имеет значения, используете ли вы их в ресурсах Chef, чаще всего они опускаются.

Однако, если вы хотите записать ресурс в одну строку, вам понадобятся круглые скобки:

execute "echo Hello" { action :nothing }

SyntaxError: (irb#1):1: syntax error, unexpected '{', expecting $end
execute "echo Hello" { action :nothing }
                      ^

execute("echo Hello") { action :nothing }

 => <execute[echo Hello] @name: "echo Hello" @noop: nil @before: nil
 @params: {} @provider: nil @allowed_actions: [:nothing, :run]
 @action: [:nothing] @updated: false @updated_by_last_action: false
 @supports: {} @ignore_failure: false @retries: 0 @retry_delay: 2
 @source_line: "(irb#1):2:in `irb_binding'" @elapsed_time: 0
 @resource_name: :execute @command: "echo Hello" @backup: 5 @creates:
 nil @cwd: nil @environment: nil @group: nil @path: nil @returns: 0
 @timeout: nil @user: nil @umask: nil @cookbook_name: nil
 @recipe_name: nil>

(здесь ничего нет, просто чтобы показать пример)