Chef bootstrap ec2 -- 在另一个 Chef 客户端的配置中使用生成的 IP

Jef*_*f V 2 chef amazon-ec2

假设我有一个由 Web 服务器和数据库组成的应用程序。如果我 ec2 部署了一个带有 DB 角色的 Chef 客户端,我如何自动将这台新 ec2 机器的 IP 插入到我的 Web 服务器的配置中?

更笼统地说,如何在启动时获取 EC2 元数据以用于其他说明书的属性?

我知道这样做的一种迂回方法可能是使用 shell 脚本更新 dns 服务器,但我对这里只使用厨师的解决方案很感兴趣。

pri*_*jim 6

您可以searchWeb 服务器上运行的 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 客户端运行,或者您可以通过手动sshknife ssh