1

I'd like to somehow get the public instance address or hostname from knife ec2 create ..., but I can't find any mechanism for doing so.

Since I'm currently using chef-solo, I've written a simple script that runs knife ec2 create with a bootstrap template to prepare the node for chef-solo. At the midpoint of that script (after knife ec2 create has finished), I need to copy and paste the public IP for the instance, which is then used to "push" to the node (copies the cookbooks, roles, data_bags, host-dna, etc up to the node and runs chef-solo).

When you bootstrap a node with chef-client and chef-server, you don't have this problem, because the new node reaches out to the chef-server and pulls it config. But I'd prefer to stick with chef-solo for now.

  • I don't think I understand - who needs to know about the public IP address? Your bootstrap script, or the node itself in some config file? – Mike Fiedler Nov 07 '12 at 12:36
  • My script needs to know the public IP address. It first runs `knife ec2 create ...`, then pushes the chef files with rsync, then runs chef-solo via ssh. But rsync and ssh can't run unless the script knows the public IP or hostname. – nicholas a. evans Nov 12 '12 at 19:19
  • For what it's worth, I'm working around this at the moment with a policy of never using the same "Name" tag on more than one server at a time, and using a simple ruby fog script that pulls the list of servers and finds the server with the appropriate "Name" tag. – nicholas a. evans Nov 12 '12 at 19:20
  • I guess another way to do this would be to `tee` the output of `knfe ec2 server create` to a dump file, and when it completes, grep the output file for the public hostname line, etc. – Mike Fiedler Nov 13 '12 at 12:45
  • @nicholasa.evans Rather than have a policy about unique "name" tags, I think I'm going to get a list of active servers and sort by creation date. I'll assume the most recent is the one I want. This would seem to work so long as very few people are working with the account :) – patcon Apr 25 '13 at 15:52

1 Answers1

2

Take a look at http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html

Something like:

wget http:// 169.254.169.254 /latest/meta-data/public-hostname

or change the last part to

public-ipv4

blaine
  • 43
  • 1
  • 7