我有一个capfile,其顶部定义了一个角色,下面有一堆任务。它工作得很好,但我希望能够轻松(并以编程方式)更新角色列表中的计算机。我知道我可以做到这一点,但为了安全起见,我希望能够将我的capfile拆分成(基本上)两个文件:主机和任务
目前(一般而言):
role :machines,
"machine1",
"machine2"
desc "This is task 1"
task :task1 do
# stuff
end
我希望能够拥有以下内容(忽略“语法”):
role :machines ==> {Get this information from 'hosts.cap' or something}
desc "This is task 1"
task :task1 do
# stuff
end
有没有办法打破capfile?或者我需要潜入消息来源吗?
答案 0 :(得分:1)
由于Capfile只是Ruby,因此您可以使用Ruby代码来执行您想要的操作。例如,如果您的hosts.cap文件如下所示:
db-master.example.com
db-slave1.example.com
你会在这个Ruby代码的数组中得到它:
File.read('hosts.cap').strip.split
并正确地将其发送到role
,请使用splat(*)运算符:
role :db_hosts, *File.read('hosts.cap').strip.split
虽然我建议将它分为两部分,因为它更清楚:
machines = File.read('hosts.cap').strip.split
role :db_hosts, *machines
答案 1 :(得分:0)
香草Capfile
过去常带有load 'config/deploy'
行 - 也许您可以利用它来加载多个文件。