我有一个terraform
配置的AWS
结构。我已准备好厨师执行配方,但问题是实例没有任何node_name
属性,因为Terraform
使用AutoScaling Group
和chef client
安装了user_data
。 {1}}脚本。节点名称由chef
生成,我需要在每个实例上最初执行一些安装。我尝试创建base
角色并使用所需操作将其更新到服务器。更新成功但未在实例上启动任何安装。有没有办法运行命令或为每个新到达的实例分配一个角色?
答案 0 :(得分:2)
我能想到两种解决方案:
例如:
resource "aws_instance" "foo" {
ami = "ami-408c7f28"
instance_type = "t1.micro"
user_data = "**your script**"
}
答案 1 :(得分:0)
感谢您的回答。自定义AMI不是一个选项,所以我不得不研究不同的方法。事实证明,您可以跳过chef-service-manager
部分并直接致电chef client
。重点是您可以将JSON
文件作为参数分配给chef client
。 JSON
可以包含可以分配给新实例的runlist
和/或role
,即使它是由Autoscaling group
创建的。由于我已经在使用user_data
,我刚刚在脚本中添加了JSON
创建,并分配了runlist
中已有Chef Server
的所需角色。这两个答案帮助我实现了目标。现在,在每个新实例上,通过user_data
我创建一个带有角色的JSON
,最后我运行chef client -f role_config.json
,之后我调用服务创建chef-service-manager
。这只是一个补丁,因为最好的选择不是将其创建为服务而是使用scheduled task
并且每次都调用json
,因为如果它是第二次为同一个实例调用它在将来的处决中将被忽视。另外,根据我在Chef
文档中的介绍,scheduled task
将是比使用该服务更好的选择。谢谢你的回答!