使用厨师食谱获取实例 public ip
Get instance public ip with chef recepie
我尝试获取实例的 IP 地址并创建我的 cron 作业:
command "curl --silent \"http://#{instance['public_ip']}/module.php/cron/cron.php?key=TPUmg16HBBZ8G2LgyySulHHuC2fGdIjf&tag=hourly\" > /dev/null 2>&1"
但是当实例启动时,当我列出 cron 作业时,我发现 {instance['public_ip']}= 错误的 IP 地址。
有人能帮我吗 ?这是获取 ip @
的正确原因吗
通常,当在 ec2 实例中执行 chef-client 时,ohai will collect the ec2 instance metadata 因此您可以通过访问自动属性来获取实例的 public ip 地址:
node['ec2']['public_ipv4']
如果机器有多个 IP,Chef 有时可以 return 我们不期望的 IP。为了找到所需的 IP,Chef 支持人员建议覆盖 Ohai,这最终为我们工作。
创建一个正则表达式匹配预期 IP 的属性:
default['ohai']['override']['ip_matcher'] = '/^10\.\d+\.\d+\.4\d+/'
然后我们必须通过编写一个名为 Z 的文件来直接覆盖 Ohai,这样它就保存了我们最后想要的 IP 地址。
# dynamically grab the path name
ohai_path = ::File.join(Ohai.config[:plugin_path][0], '/windows')
template "#{ohai_path}/zeta.rb" do
# keep this template named zeta so it runs last.
source 'zeta.rb.erb'
variables(
ip_matcher: node['ohai']['override']['ip_matcher']
)
end
模板文件如下所示(由 Chef 支持人员提供):
Ohai.plugin(:Zeta) do
provides 'ipaddress'
depends 'ipaddress', 'network/interfaces'
collect_data do
network['interfaces'].each do | interf |
network['interfaces']["#{interf[0]}"]['addresses'].each do | ip |
if ip[0] =~ <%= @ip_matcher %>
ipaddress ip[0]
end
end
end
end
end
希望对您有所帮助!
我尝试获取实例的 IP 地址并创建我的 cron 作业:
command "curl --silent \"http://#{instance['public_ip']}/module.php/cron/cron.php?key=TPUmg16HBBZ8G2LgyySulHHuC2fGdIjf&tag=hourly\" > /dev/null 2>&1"
但是当实例启动时,当我列出 cron 作业时,我发现 {instance['public_ip']}= 错误的 IP 地址。 有人能帮我吗 ?这是获取 ip @
的正确原因吗通常,当在 ec2 实例中执行 chef-client 时,ohai will collect the ec2 instance metadata 因此您可以通过访问自动属性来获取实例的 public ip 地址:
node['ec2']['public_ipv4']
如果机器有多个 IP,Chef 有时可以 return 我们不期望的 IP。为了找到所需的 IP,Chef 支持人员建议覆盖 Ohai,这最终为我们工作。
创建一个正则表达式匹配预期 IP 的属性:
default['ohai']['override']['ip_matcher'] = '/^10\.\d+\.\d+\.4\d+/'
然后我们必须通过编写一个名为 Z 的文件来直接覆盖 Ohai,这样它就保存了我们最后想要的 IP 地址。
# dynamically grab the path name
ohai_path = ::File.join(Ohai.config[:plugin_path][0], '/windows')
template "#{ohai_path}/zeta.rb" do
# keep this template named zeta so it runs last.
source 'zeta.rb.erb'
variables(
ip_matcher: node['ohai']['override']['ip_matcher']
)
end
模板文件如下所示(由 Chef 支持人员提供):
Ohai.plugin(:Zeta) do
provides 'ipaddress'
depends 'ipaddress', 'network/interfaces'
collect_data do
network['interfaces'].each do | interf |
network['interfaces']["#{interf[0]}"]['addresses'].each do | ip |
if ip[0] =~ <%= @ip_matcher %>
ipaddress ip[0]
end
end
end
end
end
希望对您有所帮助!