厨师是否有指令允许我在覆盖现有文件之前对其进行备份?
假设我有这段代码。
template "myfile"
source "myfile.erb"
<more properties>
end
myfile是一个现有的配置文件,我只需要覆盖它,所以我使用了一个模板。
但是,我希望现有文件在被我的模板覆盖之前进行备份。
我可以像这样执行备份命令
execute do
mv "myfile" "myfile.old"
end
template "myfile"
source "myfile.erb"
<more properties>
end
但我在想是否有另类选择。
---------------- EDIT ----------------------- 这看起来不错但是......我没有得到什么......抱歉厨师新手在这里。 据文件说,它说......我必须提供这个..
备份FalseClass,整数
template "myfile"
source "myfile.erb"
backup true, 1
end
但是我收到了这个错误..
错误:参数数量错误(0..1为2)
抱歉,我是chef和ruby语法的新手。刚拿起厨师自己学习。
答案 0 :(得分:2)
Chef自动和内部处理此问题。默认情况下,我们保留每个模板文件的5个版本,您可以通过backup
property自定义。这些通常会在/var/chef/backups
下结束。
backup
属性使用false
来禁用备份,或者使用整数值来设置要保留的备份数。你不能传递它true
。
答案 1 :(得分:1)
也许这可以帮到你。我使用的是一本食谱,因为它是一种清晰的方式来向您展示它是如何工作的+它避免了目录问题:
首先是我存储食谱的目录:
$ 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
创建一个名为backup myfile-tobackup.txt
的文件,我将创建最多3个备份。
现在我可以通过运行食谱的配方来执行我的食谱:
$ chef-client --local-mode --runlist 'recipe[create-backup]'
我会检查:
$ cat /tmp/backup
this is version 1
现在,我可以修改模板myfile-tobackup.txt.erb
的内容,并将版本设置为2.当我重新运行食谱时,/tmp/backup
将包含“这是版本2”但您的旧{{1}在/tmp/backup
中备份(它将保留3个文件)。