OpenStack Heatで建てたインスタンスの名前にIPアドレスベースの文字列をつける
インスタンス名やホスト名の命名規則にはいろいろあると思うが、「www-192-168-0-1」のように、ロール名にIPアドレスベースの文字列を繋げた名前にしたい、ということがある(今そういう命名規則を採用している)。OpenStack Heatではできないかなと思っていたが、ちょっと工夫したらできそうなことに気づいたので確認しておいた。
以下のようなスクリプトをcloud-initで実行することで、自分自身のインスタンス名とホスト名を変えることができる。
INSTANCE_ID=$(curl http://169.254.169.254/openstack/latest/meta_data.json | jq -r ".uuid")
IP=$(curl -sS http://169.254.169.254/latest/meta-data/local-ipv4)
HOSTNAME=hoge-$(echo $IP | sed 's/\./-/g')
openstack server set --name $HOSTNAME $INSTANCE_ID
hostname $HOSTNAME
echo $HOSTNAME > /etc/hostname
いい感じ。