表題の通り、OpenStackでUbuntuインスタンスを起動して、例えばsudoコマンドを実行するとresolveできないよ!って警告が出たり、状況によっては待ち時間が発生したり、最悪の場合...タイムアウトしたり(怖)...件ですが、原因はhostnameはインスタンス名で指定したものに変わっているのに/etc/hostsにはそのホスト名が書かれていないために起きるようです。一応数秒待てば通常通り使えるし、/etc/hostsを書き換えればエラーは出なくなるけどいちいち修正するのも面倒ですよね。
ubuntu@test1:~$ sudo -i sudo: unable to resolve host test1 ubuntu@test1:~$ sudo apt update sudo: unable to resolve host test1
インスタンスを起動するときにホスト名とFQDNを指定する方法はRHEL OSPのドキュメントに書かれていました。
カスタマイズスクリプトを指定してインスタンスを起動すればいいようです。「manage_etc_hosts: true」が効いて、/etc/hostsにもホスト名が記述されるようになります。
#cloud-config hostname: test1 fqdn: test1.localdomain manage_etc_hosts: true
OpenStackの構築手順などで8.8.8.8や8.8.4.4といった外部DNSを使う例が多いので、その通りやるとハマる問題というわけですね。本来はそこで指定するDNSも自前で用意すべきという話でもありますし。
ちなみにCentOS 7のインスタンスを起動しても/etc/hostnameは変わりますが/etc/hostsは同じく書き換わりません。しかしUbuntuのようなエラーは出ることはありません。
このネタに気がついたのは私ではないですが、どこかに書いておけば誰かの役に立つと思い、ブログに書かせていただきました。