2018年9月5日水曜日

Ansibleを使ってntpdのインストールと時刻同期の設定を行う

Ansibleでnptdをインストールして時刻同期するところまでをできるようにPlaybookを作成してみた。非常に簡単な処理ではあるが、Ansibleの様々な要素を使うことができ、最初に作るPlaybookとしてちょうどよい難易度だった。

Playbook

いろいろ試行錯誤した結果、Playbookは以下の形となった。

setup_ntp_conf.yml
------------------------------
---
- hosts: all

  vars:
    proxy_env:
      http_proxy: http://192.168.33.23:8080/
      https_proxy: http://192.168.33.23:8080/
  tasks:
    - name: install ntp
      yum: name=ntp state=latest
      environment: "{{ proxy_env }}"

    - name: copy /etc/ntp.conf
      copy:
        src: /root/conf/ntp.conf
        dest: /etc/ntp.conf
        owner: root
        group: root
        mode: 0644
        backup: yes
      register: result

    - name: restart ntpd
      systemd:
        name: ntpd.service
        state: restarted
        enabled: yes
      when: result|changed
------------------------------

本Playbookのポイントを記載していこう。

hostsセクション

これについては特筆すべきことはなく、/etc/ansible/hostsに記載されたすべてのサーバーに対して処理を行うよう「all」で指定した。

varsセクション

プロキシを経由しなければインターネット接続ができない環境となっているため、環境変数にてプロキシを指定している。こちらに関しては、以下記事を参照いただきたい。

Ansibleでプロキシを指定してyum updateする
https://tech-mmmm.blogspot.com/2018/08/ansibleyum-update.html

tasksセクション

以下の流れでntpdの構築を行う。

  1. ntpdをyumを使ってインストール
  2. 作成済みのntp.confをコピー
  3. ntp.confに変更があった場合のみntpdをリスタート

ntp.confをコピーする際は、「backup: yes」を指定し、ntp.confファイルのバックアップを取得するように指定した。なお、バックアップは以下のようなファイル名で、同一のディレクトリに取得される。

[root@localhost ~]# ls -l /etc/ntp.conf*
------------------------------
-rw-r--r--. 1 root root  206  8月 10 09:10 /etc/ntp.conf
-rw-r--r--. 1 root root 2000  4月 11 05:29 /etc/ntp.conf.12346.2018-08-10@09:10:14~
------------------------------

また、ntp.confに変更があった場合のみntpdをリスタートするように、ntp.confの置き換え処理の実行結果をregister変数「result」に格納し、「when: result|changed」を指定することで、実行結果が「changed」の場合のみ、ntpdのリスタートが処理されるようにした。

実行結果

ntpdがインストールされていない状態から実行した結果は以下の通り。

[root@t1000cent ~]# ansible-playbook setup_ntp_conf.yml
------------------------------
PLAY [all] *********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.11.223]

TASK [install ntp] *************************************************************
changed: [192.168.11.223]

TASK [copy /etc/ntp.conf] ******************************************************
changed: [192.168.11.223]

TASK [restart ntpd] ************************************************************
changed: [192.168.11.223]

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

changed=3となっており、①インストール、②ntp.conf置き換え、③ntpdのリスタートが正常に処理されたようだ。

もう一度、playbookを実行してみる。

[root@t1000cent ~]# ansible-playbook setup_ntp_conf.yml
------------------------------
PLAY [all] *********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.11.223]

TASK [install ntp] *************************************************************
ok: [192.168.11.223]

TASK [copy /etc/ntp.conf] ******************************************************
ok: [192.168.11.223]

TASK [restart ntpd] ************************************************************
skipping: [192.168.11.223]

PLAY RECAP *********************************************************************
192.168.11.223             : ok=3    changed=0    unreachable=0    failed=0
------------------------------

2回目は、changed=0となっており、変更は発生しない。ntp.confに変更がないため、ntpdのリスタートが「skipping」ステータスとなっているのがポイント。

ためしに、ntp.confを少し変更して、3回目の実行を試みた。

[root@t1000cent ~]# ansible-playbook setup_ntp_conf.yml
------------------------------
PLAY [all] *********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.11.223]

TASK [install ntp] *************************************************************
ok: [192.168.11.223]

TASK [copy /etc/ntp.conf] ******************************************************
changed: [192.168.11.223]

TASK [restart ntpd] ************************************************************
changed: [192.168.11.223]

PLAY RECAP *********************************************************************
192.168.11.223             : ok=4    changed=2    unreachable=0    failed=0
------------------------------

changed=2となっており、②ntp.conf置き換え、③ntpdのリスタートが処理された。

実際に対象サーバーで時刻同期状況を確認してみたところ、以下の通り正常に同期できていることが確認できた。


[root@localhost ~]# ntpq -p
------------------------------
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*t3023ce72.intra 133.243.238.163  2 u   48   64  377    0.274   -1.756   9.654
------------------------------

参考

systemd - Manage services
https://docs.ansible.com/ansible/2.6/modules/systemd_module.html

0 件のコメント:

コメントを投稿

人気の投稿