PunCha

导航

Chef学习之八:Resource cookbook_file学习

References:http://docs.opscode.com/resource_cookbook_file.html


现在开始照着官方文档的顺序,耐心学习每一个resource。第一个就是cookbook_file。我一直觉得用Resource来命名很是奇怪,其实这些应该是命令或者是功能(function),但是我想把他们命名成Resource是为了避免和命令行中的命令冲突吧。


cookbook_file,这个资源是用来把文件拷贝到客户机器上的,本地文件(或者说Chef Server, Workstation的文件)是放在cookbooks\<some cookbook>\files\下面的。平台无关的文件可以放在default子目录中(注意,不能放在根目录里面),平台相关的放在相关平台的子目录,比如ubuntu,比如centos,这些就要看具体的文档了。


好,一个简单例子:

1. 创建文件:files\txt\file4test.txt

2. recipe:

cookbook_file "/home/ubuntu/myfile" do
  source "/txt/file4test.txt"
  action :create
end

验证:/home/ubuntu/myfile创建成功。

注意:

  • 你不能把文件拷贝到不存在的目录下,这个资源是不会帮你创建文件夹的。
  • 如果你不修改客户端的文件,再次执行chef-client命令,该文件不会被重新拷贝。
  • 如果你修改了客户端文件,再次执行chef-client命令,该文件会被重置。

该例子里面我用到了source属性,他的作用是告诉Chef,你的源文件在哪里,注意,不能写平台目录(或者default)。
其实还有一个属性是path, 他的作用是告诉Chef,目标文件要被拷贝到哪里。官方文档的第一个例子是有问题的。下面是一个用path的例子,作用类似:

cookbook_file "/home/ubuntu/apps/myfile2" do
  source "/txt/file4test.txt"
  path "/home/ubuntu/myfile2"
  action :create
  owner "ubuntu"
  group "ubuntu"
end

注意到,我既写了路径在资源名上,也写了路径在path里面,哪个获胜呢?path里面的那个!同时,我也使用了owner和group属性。其实,还有另外一些实用属性:backup(是否有多个备份),cookbook(引用另外一个cb里面的文件),mode。还有针对Windows平台的inherits,rights。

好了,cookbook_file就这么多了。




posted on 2013-04-03 15:28  PunCha  阅读(266)  评论(0编辑  收藏  举报