假设我有一个由 Web 服务器和数据库组成的应用程序。如果我 ec2 部署了一个带有 DB 角色的 Chef 客户端,我如何自动将这台新 ec2 机器的 IP 插入到我的 Web 服务器的配置中?
更笼统地说,如何在启动时获取 EC2 元数据以用于其他说明书的属性?
我知道这样做的一种迂回方法可能是使用 shell 脚本更新 dns 服务器,但我对这里只使用厨师的解决方案很感兴趣。
您可以search在Web 服务器上运行的 Chef 配方上使用格式正确的方法,该方法返回数据库服务器的节点对象。然后你可以通过 node["ipaddress"] ?r 获取前面提到的 IP,如果你在 EC2 上运行时需要公网 IP/主机名, node["cloud"]["public_hostname"]/node["cloud"][" public_ipv4"]。例如,在部署数据库服务器后使用如下内容:
db_servers = search(:node, 'roles:db-server').map{|n| n.attribute?('cloud') ? n['cloud']['public_ipv4'] : n['ipaddress'] }
template "web/config" do
[...]
variables({ :dbs_ervers => db_servers })
end
Run Code Online (Sandbox Code Playgroud)
Web 服务器更新将异步发生,无论何时 Chef 客户端运行,或者您可以通过手动ssh或knife ssh
| 归档时间: |
|
| 查看次数: |
1121 次 |
| 最近记录: |