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就这么多了。