【问题标题】:Get instance public ip with chef recepie使用厨师食谱获取实例公共 IP
【发布时间】:2019-05-14 09:30:53
【问题描述】:

我尝试获取实例的 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的正确原因吗@

【问题讨论】:

    标签: amazon-web-services chef-infra cookbook


    【解决方案1】:

    如果机器有多个 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
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      通常,当 chef-client 在 ec2 实例中执行时,ohai 将收集ec2 instance metadata,以便您可以通过访问自动属性获取实例的公共 IP 地址:

      node['ec2']['public_ipv4']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-29
        • 2021-11-01
        • 2014-12-05
        相关资源
        最近更新 更多