如何在厨师做到这一点

时间:2017-03-28 05:11:05

标签: chef chef-recipe chef-solo

厨师是否有指令允许我在覆盖现有文件之前对其进行备份?

假设我有这段代码。

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语法的新手。刚拿起厨师自己学习。

2 个答案:

答案 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个文件)。