如何在厨师中做到这一点
How to do this in chef
Chef 中是否有允许我在现有文件被覆盖之前对其进行备份的指令?
假设我有这个代码。
template "myfile"
source "myfile.erb"
<more properties>
end
myfile 是一个现有的配置文件,我只需要覆盖它,所以我使用了一个模板。
但是,我希望在现有文件被我的模板覆盖之前对其进行备份。
我可以做这样的备份命令
execute do
mv "myfile" "myfile.old"
end
template "myfile"
source "myfile.erb"
<more properties>
end
但我在想是否有其他选择。
----------------编辑------------------------
这看起来不错,但是……我没有得到什么……对不起这里的厨师新手。
根据文档,它说..我必须提供这个..
备份 FalseClass, Integer
template "myfile"
source "myfile.erb"
backup true, 1
end
但是我收到这个错误..
错误:参数数量错误(2 代表 0..1)
抱歉,我是 chef 和 ruby 语法的新手。刚捡到大厨自学。
Chef 会在内部自动处理此问题。默认情况下,我们保留每个模板文件的 5 个版本,您可以通过 backup
property 进行自定义。这些通常在 /var/chef/backups
下。
backup
属性 使用 false
来禁用备份,或者使用整数值来设置要保留的备份数。你不能通过它 true
.
也许这可以帮到你。我使用食谱是因为它可以清楚地向您展示它是如何工作的+它避免了目录问题:
首先是我存储食谱的目录:
$ mkdir cookbooks
现在我要创建名为 create-backup 的食谱
$ chef generate cookbook cookbooks/create-backup
我还将在我的食谱中创建一个模板,这将是我要备份的文件
$ chef generate template cookbooks/create-backup myfile-tobackup.txt
这是我的食谱里面的内容:
tree cookbooks/create-backup/
$ cookbooks/create-backup/
|-- Berksfile
|-- chefignore
|-- metadata.rb
|-- README.md
|-- recipes
| `-- default.rb
|-- spec
| |-- spec_helper.rb
| `-- unit
| `-- recipes
| `-- default_spec.rb
|-- templates
| |-- default
| `-- myfile-tobackup.txt.erb
`-- test
`-- smoke
`-- default
`-- default_test.rb
只有食谱和模板对您的案例很重要。
我会在 myfile-tobackup.txt.erb
中输入一些信息
$ vi cookbooks/create-backup/templates/myfile-tobackup.txt.erb
Content:
this is version 1
现在我正在编辑食谱中的 default.rb
(如果您 运行 食谱,将执行此文件)。
$ vi cookbooks/create-backup/recipes/default.rb
以及内容:
template '/tmp/backup' do
source 'myfile-tobackup.txt.erb'
backup 3
end
这意味着我将在 /tmp
中从源 myfile-tobackup.txt
创建一个名为 backup 的文件,我将创建最多 3 个备份。
现在我可以通过运行宁我食谱的食谱来执行我的食谱:
$ chef-client --local-mode --runlist 'recipe[create-backup]'
我会检查:
$ cat /tmp/backup
this is version 1
现在我可以编辑模板的内容 myfile-tobackup.txt.erb
并将版本设置为 2。当我重新运行 食谱时,/tmp/backup
将包含 "this is version 2" 但是您的旧 /tmp/backup
备份在 /var/chef/backup
中(它将保留 3 个文件)。
Chef 中是否有允许我在现有文件被覆盖之前对其进行备份的指令?
假设我有这个代码。
template "myfile"
source "myfile.erb"
<more properties>
end
myfile 是一个现有的配置文件,我只需要覆盖它,所以我使用了一个模板。
但是,我希望在现有文件被我的模板覆盖之前对其进行备份。
我可以做这样的备份命令
execute do
mv "myfile" "myfile.old"
end
template "myfile"
source "myfile.erb"
<more properties>
end
但我在想是否有其他选择。
----------------编辑------------------------ 这看起来不错,但是……我没有得到什么……对不起这里的厨师新手。 根据文档,它说..我必须提供这个..
备份 FalseClass, Integer
template "myfile"
source "myfile.erb"
backup true, 1
end
但是我收到这个错误..
错误:参数数量错误(2 代表 0..1)
抱歉,我是 chef 和 ruby 语法的新手。刚捡到大厨自学。
Chef 会在内部自动处理此问题。默认情况下,我们保留每个模板文件的 5 个版本,您可以通过 backup
property 进行自定义。这些通常在 /var/chef/backups
下。
backup
属性 使用 false
来禁用备份,或者使用整数值来设置要保留的备份数。你不能通过它 true
.
也许这可以帮到你。我使用食谱是因为它可以清楚地向您展示它是如何工作的+它避免了目录问题:
首先是我存储食谱的目录:
$ mkdir cookbooks
现在我要创建名为 create-backup 的食谱
$ chef generate cookbook cookbooks/create-backup
我还将在我的食谱中创建一个模板,这将是我要备份的文件
$ chef generate template cookbooks/create-backup myfile-tobackup.txt
这是我的食谱里面的内容:
tree cookbooks/create-backup/
$ cookbooks/create-backup/
|-- Berksfile
|-- chefignore
|-- metadata.rb
|-- README.md
|-- recipes
| `-- default.rb
|-- spec
| |-- spec_helper.rb
| `-- unit
| `-- recipes
| `-- default_spec.rb
|-- templates
| |-- default
| `-- myfile-tobackup.txt.erb
`-- test
`-- smoke
`-- default
`-- default_test.rb
只有食谱和模板对您的案例很重要。
我会在 myfile-tobackup.txt.erb
$ vi cookbooks/create-backup/templates/myfile-tobackup.txt.erb
Content:
this is version 1
现在我正在编辑食谱中的 default.rb
(如果您 运行 食谱,将执行此文件)。
$ vi cookbooks/create-backup/recipes/default.rb
以及内容:
template '/tmp/backup' do
source 'myfile-tobackup.txt.erb'
backup 3
end
这意味着我将在 /tmp
中从源 myfile-tobackup.txt
创建一个名为 backup 的文件,我将创建最多 3 个备份。
现在我可以通过运行宁我食谱的食谱来执行我的食谱:
$ chef-client --local-mode --runlist 'recipe[create-backup]'
我会检查:
$ cat /tmp/backup
this is version 1
现在我可以编辑模板的内容 myfile-tobackup.txt.erb
并将版本设置为 2。当我重新运行 食谱时,/tmp/backup
将包含 "this is version 2" 但是您的旧 /tmp/backup
备份在 /var/chef/backup
中(它将保留 3 个文件)。