Ошибка при использовании метода gsub в рецепте шеф-повара - PullRequest
1 голос
/ 27 апреля 2020

Я новичок в шеф-поваре и плохо понимаю Ruby.

Я получаю значение ниже 'storage_conn_str'

Токен SAS: # Chef::DelayedEvaluator:0x0000000006e28c80@c: / chef / cache /cookbooks/*****/recipes/*****.rb:20

В своем рецепте я поменяю '&' на "&". Я использовал lazy для задержки выполнения переменной в блоке и ресурсе ruby.

Ниже мой рецепт

key_vault_name node['key_vault_names']['Test']
end

ruby_block 'modify_token' do
  block do
    sastoken = lazy { node.run_state['SAS_Token'] }
    Chef::Log.info("SAS Token: #{sastoken}")
    modified_token = lazy { sastoken.gsub(/[&]/, '&') }
    Chef::Log.info("SAS Token after replacement: #{modified_token}")
    storage_conn_str = lazy { File.join(storage_conn_str , modified_token)}
    Chef::Log.info("storage connection string: #{storage_conn_str}")
  end
  action :run
end

webapp 'TableStorageAPI' do
source URI.join(node['binary_storage_uri'], app_node['source']).to_s
version app_version
appPoolName 'TableStorageAPI'
path '/V1/TableStorageAPI'
siteName 'SSL'
enable32Bit false
pipeline_mode :Integrated
use_servicebroker false
transform_variables(
storage_conn: lazy {storage_conn_str},
mail_to: app_node['mail_to'],
mail_from: app_node['mail_from'],
smtp_host: node['tps']['smtp']['server'],
log_location: app_node['log_location'],
env_name: app_node['env_name']
)
end```
----------------------------------------------
I am not sure why webapp resource is executing before the computation of 'storage_conn_str'.

1 Ответ

0 голосов
/ 27 апреля 2020

"Я не уверен, почему ресурс webapp выполняется до вычисления 'storage_conn_str'."

Это потому, что storage_conn_str определен в ruby_block 'modify_token', Он не виден ресурсу веб-приложения.

Вместо этого вы можете создать атрибут.

Например: узел ["mycb"] ["storage_conn_str"] = ""

В ruby_block

ruby_block 'modify_token' do
  block do
    ...
    storage_conn_str = lazy { File.join(storage_conn_str , modified_token)}
    Chef::Log.info("storage connection string: #{storage_conn_str}")
    node.default["mycb"]["storage_conn_str"] = storage_conn_str 
  end
  action :run
end

В ресурсе веб-приложения

webapp 'TableStorageAPI' do
...
   storage_conn: node["mycb"]["storage_conn_str"]
...
end

Это должно решить вашу проблему

...