cookbook_file如何与bash结合使用?
How to use cookbook_file in conjunction with bash?
我正在使用以下逻辑编写厨师食谱:
if grep -q -i "release 6" /etc/redhat-release
then
upload **file1** using cookbook_file resource
else if grep -q -i "release 7" /etc/redhat-release
then
upload **file2** using cookbook_file resource
fi
请让我知道具有上述逻辑的厨师食谱会是什么样子??
我可以利用哪些厨师资源?
因为我们可以在厨师食谱中使用 ruby,所以我们可以利用它并上传文件,如下面的代码所示
确保你的食谱 files 目录中有 file1, file2
file_to_upload = nil
if system("grep -q -i \"release 6\" /etc/redhat-release")
file_to_upload = <file1_name>
elsif system("grep -q -i \"release 7\" /etc/redhat-release")
file_to_upload = <file2_name>
fi
cookbook_file "<directory_where_file_needs_to_be_uploaded>/#{file_to_upload}"
source file_to_upload
action :create
end
我推荐你使用Ohai automatic attributes获取底层操作系统的信息。
# On all Fedora and RedHat based platforms
if ['fedora', 'rhel'].include?(node['platform_family'])
if node['platform_version'].to_i == 6
cookbook_file '/path/to/file1' do
source 'file1'
end
# ...
elsif node['platform_version'].to_i == 7
cookbook_file '/path/to/file2' do
source 'file2'
end
end
end
如果您愿意,也可以使用 Ruby case
语句:
case node['platform_family']
# On all Fedora and RedHat based platforms
when 'fedora', 'rhel'
case node['platform_version'].to_i
when 6
cookbook_file '/path/to/file1' do
source 'file1'
end
# ...
when 7
cookbook_file '/path/to/file2' do
source 'file2'
end
end
end
您也可以使用变量来保存要上传的文件:
myfile =
if ['fedora', 'rhel'].include?(node['platform_family']) && node['platform_version'].to_i == 6
'file1'
else
'file2'
end
cookbook_file "/path/to/#{myfile}" do
source myfile
end
有关更多信息和示例,请参阅 recipe DSL documentation。
使用 cookbook_file
资源,您不是在上传文件,而是在本地复制它,因为它已随菜谱一起下载到节点上(或者可以下载 'on-demand',取决于您的 client.rb 配置。
cookbook_file
中的 files
目录允许将 file_specificity 用于此确切用例,因此在您的上下文中,您的食谱将仅为:
cookbook_file '/path/to/target' do
source 'my_source_file'
action :create
end
您的 cookbook 文件目录将如下所示(当没有其他匹配目录时将使用默认文件,请参阅上面 link 中的完整文档):
cookbook/
├── files
│ └── default
│ └── my_source_file
│ └── redhat_6.4
│ └── my_source_file
│ └── redhat_7.1
│ └── my_source_file
如果你真的只想使用主要版本,那么你可以在目录结构中删除次要版本,并像这样使用源代码中的 Ohai 属性 属性(使用双引号插入变量):
cookbook_file '/path/to/target' do
source "#{node[platform]}-#{node[platform_version][/(\d).\d/,1]}/my_source_file"
action :create
end
我正在使用以下逻辑编写厨师食谱:
if grep -q -i "release 6" /etc/redhat-release
then
upload **file1** using cookbook_file resource
else if grep -q -i "release 7" /etc/redhat-release
then
upload **file2** using cookbook_file resource
fi
请让我知道具有上述逻辑的厨师食谱会是什么样子??
我可以利用哪些厨师资源?
因为我们可以在厨师食谱中使用 ruby,所以我们可以利用它并上传文件,如下面的代码所示
确保你的食谱 files 目录中有 file1, file2
file_to_upload = nil
if system("grep -q -i \"release 6\" /etc/redhat-release")
file_to_upload = <file1_name>
elsif system("grep -q -i \"release 7\" /etc/redhat-release")
file_to_upload = <file2_name>
fi
cookbook_file "<directory_where_file_needs_to_be_uploaded>/#{file_to_upload}"
source file_to_upload
action :create
end
我推荐你使用Ohai automatic attributes获取底层操作系统的信息。
# On all Fedora and RedHat based platforms
if ['fedora', 'rhel'].include?(node['platform_family'])
if node['platform_version'].to_i == 6
cookbook_file '/path/to/file1' do
source 'file1'
end
# ...
elsif node['platform_version'].to_i == 7
cookbook_file '/path/to/file2' do
source 'file2'
end
end
end
如果您愿意,也可以使用 Ruby case
语句:
case node['platform_family']
# On all Fedora and RedHat based platforms
when 'fedora', 'rhel'
case node['platform_version'].to_i
when 6
cookbook_file '/path/to/file1' do
source 'file1'
end
# ...
when 7
cookbook_file '/path/to/file2' do
source 'file2'
end
end
end
您也可以使用变量来保存要上传的文件
myfile =
if ['fedora', 'rhel'].include?(node['platform_family']) && node['platform_version'].to_i == 6
'file1'
else
'file2'
end
cookbook_file "/path/to/#{myfile}" do
source myfile
end
有关更多信息和示例,请参阅 recipe DSL documentation。
使用 cookbook_file
资源,您不是在上传文件,而是在本地复制它,因为它已随菜谱一起下载到节点上(或者可以下载 'on-demand',取决于您的 client.rb 配置。
cookbook_file
中的 files
目录允许将 file_specificity 用于此确切用例,因此在您的上下文中,您的食谱将仅为:
cookbook_file '/path/to/target' do
source 'my_source_file'
action :create
end
您的 cookbook 文件目录将如下所示(当没有其他匹配目录时将使用默认文件,请参阅上面 link 中的完整文档):
cookbook/
├── files
│ └── default
│ └── my_source_file
│ └── redhat_6.4
│ └── my_source_file
│ └── redhat_7.1
│ └── my_source_file
如果你真的只想使用主要版本,那么你可以在目录结构中删除次要版本,并像这样使用源代码中的 Ohai 属性 属性(使用双引号插入变量):
cookbook_file '/path/to/target' do
source "#{node[platform]}-#{node[platform_version][/(\d).\d/,1]}/my_source_file"
action :create
end