如何使用基于p的引导在EC2实例中设置主机名

约翰

我正在尝试使用EC2实例在AWS中构建人偶管理的基础架构(非企业)。使用puppetlabs-aws模块,我可以通过方便的方法来创建机器。接下来是在每个节点上进行本地设置,最重要的是设置唯一的主机名。我怎样才能做到这一点?

我知道的一种方法是通过user_data参数提供脚本那样很好,但是要使用该功能,我需要能够对该脚本进行参数化,以避免为每个代理重复一次脚本。

是否有意义?我真的很感谢实现此目的的便捷方法,因为我想以编程方式启动新实例。任何建议都将被考虑。

更新

举一个我的问题的例子,考虑一下我的布袋清单清单:

ec2_instance { 'backend':
  ensure => present,
  name => 'backend',
  region => 'us-west-2',
  image_id => 'ami-f0091d91',
  instance_type => 't2.micro',
  key_name => 'mykey',
  security_groups => ['provision-sg'],
  user_data => template('configure.erb'),
}

ec2_instance { 'webfront':
  ensure => present,
  name => 'webfront',
  region => 'us-west-2',
  image_id => 'ami-f0091d91',
  instance_type => 't2.micro',
  key_name => 'mykey',
  security_groups => ['provision-sg'],
  user_data => template('configure.erb'),
}

这将确保两个实例都已启动并正在运行。请注意,user_data => template('configure.erb')一旦创建实例,便会引用实例上执行的模板脚本。如果我只知道决策所依据的数据,则可以在此处设置主机名(或任何我想设置的名称)。我可以在实例描述中添加标签,但是configure.erb据我所知,这在脚本中是无法读取的

无论如何,设置主机名只是我解决根本问题的想法。可能还有其他更方便的方法。我想要的只是使这两个实例代表the主节点的不同节点类型的一种方式。

领先

问题是如何使用来设置新实例,以便它将从特定类加载其配置

让我尝试解释我认为您正在尝试解决的问题

我在这里想要回答的是

您已有一个脚本,该脚本使用aws-puppet模块在AWS上设置EC2虚拟主机。该模块调用AWS API来实际制作EC2虚拟主机。但是它们仅包含“内置”在API调用中使用的AMI文件中的配置。典型的AMI文件可能是Centos基本映像。在此阶段,可以通过“用户数据脚本”进行进一步配置。但让我们假设这是一个shell脚本,难以测试和维护,因此不包含复杂的设置

因此,需要进一步的配置,软件包的安装和设置。为了使这种设置发生,木偶有第二个活动阶段,使用完全不同的清单(问题中没有详细介绍)

第二阶段由新的EC2虚拟主机独立控制,该虚拟主机附加到木偶主机上。所以我假设您正在做的是:

  • 第1阶段,制作EC2主机
  • 阶段2,当他们从puppet自行配置时

使用角色的基本答案

这里有一些有关如何通过EC2主机的两阶段配置来实现此方案的想法

在创建时,创建一个自定义事实“角色”。像这样在/etc/facter/facts.d/role.yaml中制作文件

role: webserver

可以通过在用户数据脚本中添加这样的命令来创建实例,从而进行设置

echo 'role: webserver' > /etc/facter/facts.d/role.yaml

只要在木偶启动之前设置了此“角色”,它将正常工作。

我假设您有一组带有清单的模块,也许还有模块路径中与角色同名的文件子目录

接下来,将您的site.pp更改为类似

include "$role"

模块中的init.pp将会启动并执行正确的操作,安装软件包,配置文件等!

这个想法在这里更详细地解释https://puppetlabs.com/presentations/designing-puppet-rolesprofiles-pattern


另一种方法

上面是我尚未测试的一种非常原始的方法!我们的设置具有角色,但通过hiera配置加载它们。heira配置看起来像这样

---
:backends:
  - yaml
:hierarchy:
    - role/%{::role}
    - global
:yaml:
  :datadir: /etc/puppet/environments/production/hiera

然后,我可能会有一个/etc/puppet/environments/production/hiera/role/webserver.yaml文件,其中显示

classes:
  - webserver
  - yum_repos
  - logstash
  - java8

然后site.pp的末尾说

hiera_include('classes')

它从modules_include文件加载所有相关的“类”定义

这样做的优点是每个角色可以加载多个类,而代码重复更少

yaml配置的“全局”部分适用于环境中所有内容加载的类,例如admin user ssh keys


定义类型的例子

这是一个示例,说明如何使用定义的类型作为ec2_instance的包装将“ myrole”传递到模板中。我没有测试过,我没有安装aws puppet的东西

define my_instance( 
  $ensure = present,
  $region = 'us-west-2',
  $image_id = 'ami-f0091d91',
  $instance_type = 't2.micro',
  $key_name= 'mykey',
  $security_groups = ['provision-sg'],
  $myrole = 'webserver'
  )
{
ec2_instance { $title :
  ensure => $ensure,
  name => $title,
  region => $region,
  image_id => $image_id,
  instance_type => $instance_type,
  key_name => $key,
  security_groups => $security_groups,
  user_data => template('configure.erb'),
}
}

$instance_data={
  'backend' =>
  {
  ensure => present,
  name => 'backend',
  region => 'us-west-2',
  image_id => 'ami-f0091d91',
  instance_type => 't2.micro',
  key_name => 'mykey',
  security_groups => ['provision-sg'],
  myrole => 'voodooswamp'
},
  'webfront'=>
  {
  ensure => present,
  region => 'us-west-2',
  image_id => 'ami-f0091d91',
  instance_type => 't2.micro',
  key_name => 'mykey',
  security_groups => ['provision-sg'],
  myrole => 'humanfly'
  }
}


create_resources(my_instance, $instance_data)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何基于AWS EC2库存主机名的IP地址访问Ansible剧本中的主机名标签?

来自分类Dev

如何以编程方式(从实例外部)设置EC2主机名?

来自分类Dev

使用EC2 VPC实例的新主机名动态更新主机文件

来自分类Dev

从AMI使用Splunk的不同主机名创建EC2实例

来自分类Dev

使用新主机名的EC2 box ssh

来自分类Dev

从OpenVPN网络中的远程计算机使用私有主机名访问AWS中的EC2实例

来自分类Dev

传输Amazon EC2实例时主机名和IP地址更改

来自分类Dev

使用ec2动态广告资源时,播放摘要摘要中是否有显示主机名而不是IP?

来自分类Dev

如果我想将 EC2 连接到 VPC 中的 RDS,我应该使用什么主机名?

来自分类Dev

AWS EC2 无法解析 DNS 主机名

来自分类Dev

如何在 azure 规模集中设置实例的主机名?

来自分类Dev

如何使用bash脚本获取远程实例的主机名?

来自分类常见问题

如何在docker-compose中设置主机名?

来自分类Dev

如何在httpclient中设置请求主机名

来自分类Dev

如何在yast中设置主机名?

来自分类Dev

如何在JAVA中设置主机名?

来自分类Dev

无法推送到EC2上的存储库-无法解析主机名

来自分类Dev

无法访问EC2代理上的Mesos / Marathon主机名

来自分类Dev

使用winsock设置主机名?

来自分类Dev

如何使用Qt获取主机名?

来自分类Dev

如何基于主机名动态更改R .libPaths()?

来自分类Dev

如何基于ssh主机名自动更改终端背景?

来自分类Dev

如何基于ssh主机名自动更改终端背景?

来自分类Dev

如何更改基于RHEL的发行版的主机名?

来自分类Dev

如何基于主机名加载正确的控制器

来自分类Dev

为什么在 EC2 重启后主机名和 IP 会发生变化?

来自分类Dev

如何在主机文件中交换fqdn <->主机名

来自分类Dev

如何使用列表的主机名解密解密的.ssh / known_hosts的主机名?

来自分类Dev

如何在C中设置字符串特定的主机名?

Related 相关文章

  1. 1

    如何基于AWS EC2库存主机名的IP地址访问Ansible剧本中的主机名标签?

  2. 2

    如何以编程方式(从实例外部)设置EC2主机名?

  3. 3

    使用EC2 VPC实例的新主机名动态更新主机文件

  4. 4

    从AMI使用Splunk的不同主机名创建EC2实例

  5. 5

    使用新主机名的EC2 box ssh

  6. 6

    从OpenVPN网络中的远程计算机使用私有主机名访问AWS中的EC2实例

  7. 7

    传输Amazon EC2实例时主机名和IP地址更改

  8. 8

    使用ec2动态广告资源时,播放摘要摘要中是否有显示主机名而不是IP?

  9. 9

    如果我想将 EC2 连接到 VPC 中的 RDS,我应该使用什么主机名?

  10. 10

    AWS EC2 无法解析 DNS 主机名

  11. 11

    如何在 azure 规模集中设置实例的主机名?

  12. 12

    如何使用bash脚本获取远程实例的主机名?

  13. 13

    如何在docker-compose中设置主机名?

  14. 14

    如何在httpclient中设置请求主机名

  15. 15

    如何在yast中设置主机名?

  16. 16

    如何在JAVA中设置主机名?

  17. 17

    无法推送到EC2上的存储库-无法解析主机名

  18. 18

    无法访问EC2代理上的Mesos / Marathon主机名

  19. 19

    使用winsock设置主机名?

  20. 20

    如何使用Qt获取主机名?

  21. 21

    如何基于主机名动态更改R .libPaths()?

  22. 22

    如何基于ssh主机名自动更改终端背景?

  23. 23

    如何基于ssh主机名自动更改终端背景?

  24. 24

    如何更改基于RHEL的发行版的主机名?

  25. 25

    如何基于主机名加载正确的控制器

  26. 26

    为什么在 EC2 重启后主机名和 IP 会发生变化?

  27. 27

    如何在主机文件中交换fqdn <->主机名

  28. 28

    如何使用列表的主机名解密解密的.ssh / known_hosts的主机名?

  29. 29

    如何在C中设置字符串特定的主机名?

热门标签

归档