我尝试获取实例的IP地址并创建我的cron作业:
<
connection authentication='yes'
authentication-type='1'
class='hadoophive'
connection-type='Impala'
dbname=''
kerberos-host='xyz.com'
kerberos-realm='abc.com'
kerberos-service='impala'
odbc-connect-string-extras=''
one-time-sql=''
port='25003'
schema='someSchema'
server='someServer'
sslcert=''
sslmode=''
transport-type='1'
username='someUser'
>
但是,当实例启动时,当我列出cron作业时,我发现{instance ['public_ip']} =错误的IP地址。 有人能帮我吗 ?这是正确的原因,为什么要获取IP @
答案 0 :(得分:0)
通常,当在ec2实例中执行Chef-client时,ohai将收集ec2 instance metadata,因此您可以通过访问auto属性来获取实例的公共IP地址:
node['ec2']['public_ipv4']
答案 1 :(得分:0)
如果机器具有多个IP,Chef有时可以返回我们不期望的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
希望这会有所帮助!