如果我在我的刀ec2服务器中给出了--node-name选项,则创建节点名称
例如:
knife ec2 server create -r "role[test]" -I ami-59aas30 --flavor
t1.micro -x ubuntu --ssh-key VS_Key --availability-zone us-east-1a -p
22 --tags Name=filetext --subnet subnet-f7sdfdf -g sg-8adsf3e4
--node-name Testnode
我的问题是,如果我没有提到任何节点名称如何将instance-id作为节点名称,我想在我的代码中使用实例ID。我想知道,它是如何采用实例的ID
您无法指定Amazon EC2实例ID - EC2会在您创建新虚拟机时为您生成这些值。 --node-name
标志对应于Chef服务器中的节点名称,而不是实例ID。
要获取特定实例的id,可以使用AWS Command Line Tools:
ec2-describe-instances
或者你可以使用knife
:
knife ec2 server list
或者,您可以在节点属性中搜索此值:
knife search node "node_name:YOURNAME" -a ec2.instance_id
在ubuntu上,您可以使用ec2metadata,它是cloud-utils apt-get包的一部分:
apt-get install cloud-utils
ec2metadata --instance-id
您可以从instance identity document中检索实例ID
instance_info =
Chef::HTTP.new('http://169.254.169.254/latest/dynamic/instance-identity/document').get('/')
instance_id = JSON.parse(instance_info)['instanceId']
169.254.169.254
是提供这些文档的亚马逊服务的IP,因此只要您从运行在AWS上的计算机上运行它,它就可以运行。