NissyBlog

Life goes on.

Ansibleで環境構築時にサーバ名のアスキーアートも登録出来るようにする方法

この記事はAnsible Advent Calendar 2016 - Qiitaの5日目の記事になります。
こんにちは。@nissy0409240です。

色々なサーバへ同時にSSHログインして作業をすることがよくあると思います。
そして色々なサーバで作業していると様々なヒヤリとする経験に遭遇します。
例えば、開発サーバと勘違いして本番サーバにログインしてしまい、
取り返しのつかないコマンドを入力しそうになる。
そんな怖い経験をしたことがある方は沢山いらっしゃると思います。

そのような事態を防ぐため、SSHログイン時にサーバ名を表示させる
という工夫をするケースがよく見られます。
具体的には/etc/motdファイルにサーバ名のアスキーアートを記述し、
ログイン時にアスキーアートが表示されるようにするといったものです。
しかし、この作業は環境構築後に直接/etc/motdファイルを編集しなくてはならず、
うっかり忘れてしまうケースもよく見られます。

ansibleで環境構築時に/etc/motdファイルも同時に登録出来るようにする

そこで、ansibleで環境構築時に/etc/motdファイルも同時に
サーバー名のアスキーアートを登録出来るようにしようと考えました。
今回は文字列をアスキーアートで表示してくれるfigletというツールを使って
下記の様なplaybookファイルを作成します。

---
- hosts: vagrants
  become: yes
  user: vagrant
  tasks:
    - name: yum install epel-release, deltarpm
      yum: name={{item}} state=latest
      with_items:
        - epel-release.noarch
        - deltarpm
    - name: yum install packages
      yum: name={{item}} state=latest
      with_items:
          - figlet
    - name: execute figlet module
      shell: "figlet figlet_demo | sudo tee -a /etc/motd"

上記playbookファイルではyumとepelパッケージをインストール後、
figletモジュールをyumを使ってインストールし、
最後にshellモジュールを使って、
サーバ名のアスキーアートを/etc/motdファイルに記述しています。
今回は「figlet_demo」という名前のサーバを構築します。

実際に構築する

それでは、Vagrantがインストール済かつAnsibleが動く環境で実際に構築してみます。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'bento/centos-7.1'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'bento/centos-7.1' is up to date...
==> default: Setting the name of the VM: figlet_demo_default_1480869765046_64483
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /path/to/figlet_demo
==> default: Running provisioner: ansible...

PLAY [vagrants] ****************************************************************

TASK [setup] *******************************************************************
ok: [192.168.33.10]

TASK [yum install epel-release, deltarpm] **************************************
changed: [192.168.33.10] => (item=[u'epel-release.noarch', u'deltarpm'])

TASK [yum install packages] ****************************************************
changed: [192.168.33.10] => (item=[u'figlet'])

TASK [execute figlet module] ***************************************************
changed: [192.168.33.10]

PLAY RECAP *********************************************************************
192.168.33.10              : ok=4    changed=3    unreachable=0    failed=0

無事、構築出来たようなので、SSHログインしてみます。

$ vagrant ssh
Last login: Sun Dec  4 16:43:53 2016 from 192.168.33.1
  __ _       _      _          _
 / _(_) __ _| | ___| |_     __| | ___ _ __ ___   ___
| |_| |/ _` | |/ _ \ __|   / _` |/ _ \ '_ ` _ \ / _ \
|  _| | (_| | |  __/ |_   | (_| |  __/ | | | | | (_) |
|_| |_|\__, |_|\___|\__|___\__,_|\___|_| |_| |_|\___/
       |___/          |_____|
[vagrant@localhost ~]$

無事、指定したサーバ名のアスキーアートが表示されました。

最後になりますが、今回作成したVagrantfileとplaybookはこちらになります。
github.com
なお、このレポジトリでは簡略化のため、figlet以外の内容(gitなどのミドルウェアのインストール等)は省略しています。
また、今回使用したboxファイルは下記のものになります。
https://atlas.hashicorp.com/bento/boxes/centos-7.1

最後までお付き合い頂き、ありがとうございました。

※参考
サーバ管理に役立つ(かもしれない)FIGletというツール | /var/log/azumakuniyuki
SSH接続時にmotdでメッセージを表示・非表示 - Qiita
サーバログイン時にカッコイイメッセージを表示する(CentOS 7.1編) - Qiita
sudoでリダイレクトするときにハマること - ぱせらんメモ