Ruby 在厨师配方中使用gsub方法时出错

Ruby 在厨师配方中使用gsub方法时出错,ruby,chef-infra,chef-recipe,Ruby,Chef Infra,Chef Recipe,我是厨师的新手,对Ruby不太了解 我在“存储连接”中的值越来越低 SAS令牌:#厨师::延迟评估者:0x0000000006e28c80@c:/chef/cache/cookbooks/*****/recipes/*****.rb:20 在我的食谱中,我用“&”重新分解“&”。我使用lazy延迟ruby块和资源中变量的执行 下面是我的食谱 “我不确定为什么webapp资源在计算'storage\u conn\u str'之前执行。” 这是因为存储连接在ruby块“修改令牌”中定义。它对weba

我是厨师的新手,对Ruby不太了解

我在“存储连接”中的值越来越低

SAS令牌:#厨师::延迟评估者:0x0000000006e28c80@c:/chef/cache/cookbooks/*****/recipes/*****.rb:20

在我的食谱中,我用“&”重新分解“&”。我使用lazy延迟ruby块和资源中变量的执行

下面是我的食谱 “我不确定为什么webapp资源在计算'storage\u conn\u str'之前执行。”

这是因为存储连接在ruby块“修改令牌”中定义。它对webapp资源不可见

您可以做的是,创建一个属性

例如:节点[“mycb”][“存储连接”]=“”

在ruby_块中 在webapp资源中 这应该可以解决您遇到的问题。

“我不确定为什么在计算“存储连接”之前执行webapp资源。”

这是因为存储连接在ruby块“修改令牌”中定义。它对webapp资源不可见

您可以做的是,创建一个属性

例如:节点[“mycb”][“存储连接”]=“”

在ruby_块中 在webapp资源中
这应该可以解决您遇到的问题

我尝试在ruby_块和webapp资源中添加属性,但收到的存储属性为空。我也尝试在ruby_块和webapp资源中设置属性为惰性,但后来我发现存储属性为值。#我尝试在ruby_块和webapp资源中添加属性但是已经收到了空的存储连接。我也尝试过在ruby块和webapp资源中设置属性lazy,但是我得到了存储连接的值#
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'.
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