代码之家  ›  专栏  ›  技术社区  ›  Bernie Perez

更改AWS OpsWorks中的主机名(厨师)

  •  1
  • Bernie Perez  · 技术社区  · 10 年前

    在AWS OpsWorks中,我使用这个社区 hostname 食谱。设置我的主机名以将域附加到它。

    原始FQDN: 应用程序pie.localmain

    node.default["set_fqdn"] = "*.example.com"
    include_recipe 'hostname'
    

    对FQDN的更改: 应用程序pie.localmain.example.com

    然而,大约10分钟后,主机名返回到原始主机名,而不附加我的域。

    我已经检查了OpsWorks生命周期:

    在新实例完成引导后,AWS OpsWorks将执行 以下内容:

    1. 运行内置的设置配方。

    2. 运行任何自定义设置配方。

    3. 运行内置的Deploy配方。

    4. 运行任何自定义部署配方。

    我正在自定义部署配方中运行该配方,因此它应该是最后一个运行的。不知道为什么/如何将其重置为原始主机名。

    谢谢

    1 回复  |  直到 10 年前
        1
  •  2
  •   Bernie Perez    10 年前

    我想通了。您应该覆盖AWS提供的Chef中的默认模板。

    Extending AWS OpsWorks Configuration Files Using Custom Templates

    所以在我的食谱中,我制作了一个文件,名为:

    opsworks_stack_state_sync/templates/default/hosts.erb

    添加文件如下所示:

    # This file was generated by OpsWorks
    # any manual changes will be removed on the next update.
    
    # Set the hostname with proper format, the rest are aliases.
    127.0.0.1 localhost localhost.example.com
    127.0.1.1 <%= node[:opsworks][:instance][:hostname] %>.example.com <%= node[:opsworks][:instance][:hostname] %>
    
    # The following lines are desirable for IPv6 capable hosts
    ::1 ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    ff02::3 ip6-allhosts
    
    # OpsWorks Layer State
    <% seen = [] -%>
    <% node[:opsworks][:layers].each do |layer_name, layer_config| -%>
    <% layer_config[:instances].each do |instance_name, instance_config| -%>
    <% if !seen.include?(instance_name) && instance_config[:private_ip] -%>
    <%= Resolv.getaddress(instance_config[:private_ip]) %> <%= instance_name %>
    <% if instance_config[:ip] %>
    <%= Resolv.getaddress(instance_config[:ip]) %> <%= instance_name %>-ext
    <% end %>
    <% seen << instance_name %>
    <% end -%>
    <% end -%>
    <% end -%>
    

    这会将主机名设置为 应用程序pie.example.com .