ひよこインフラてっく!

ひよこインフラエンジニア「ひよこ大佐」による技術ブログ的なもの。インフラ技術や仮想化、Pythonなど。

Windowsでメンテナンス開始前にログインしているユーザーに通知する

この記事は、「Ansible 3 Advent Calendar 2019」13日目の記事です。 qiita.com

どうも、ひよこ大佐です。昨日に引き続き小ネタ風味のネタですが、今回はもう少しだけ役に立つモジュールを紹介します。

例えばWindowsをターゲットにPlaybookを実行して再起動を実施するようなシチュエーションで、もしログインしているユーザーがいる場合に備えてログアウトするように通知を流したいというケースがあります。今回は、そのような場合に使えるモジュールを紹介します。

Windowsホストにメッセージを表示するモジュールは2種類あります。

それぞれ若干挙動が違います。

win_msg

このモジュールは、ダイアログとして指定したメッセージをポップアップ表示させます。以下のようなテスト用のPlaybookを作成し、実行してみましょう。

---
- hosts: all
  tasks:
    - name: Pop up dialog to notify the maintenance
      win_msg:
        display_seconds: 60
        msg: "本日19時よりメンテナンスのため、このマシンは再起動されます。19時までに作業ファイルを保存し、ログアウトしてください。"

上記Playbookを実行すると、以下のようにダイアログが表示されます。作業中でも気が付きやすいので、個人的にはこちらを利用するのがおすすめです。

f:id:hiyokotaisa:20191212155827p:plain

win_toast

こちらもWindowsホストへメッセージを通知するモジュールですが、表示される通知の種類が異なります。ダイアログではなく、Windows 10やWindows Server2016で利用できる「トースト通知」として送信されます。

以下のようなPlaybookを作成します。記述内容はwin_msgモジュールと似ていますが、「async」を指定しないとexpireするまでタスクの実行が進まなくなるので、必ずasyncと組み合わせて利用してください。

---
- hosts: all
  tasks:
    - name: Send toast notification for the maintenance
      win_toast:
        expire: 60
        title: "System Upgrade Notification"
        msg: "本日19時よりメンテナンスのため、このマシンは再起動されます。19時までに作業ファイルを保存し、ログアウトしてください。"
      async: 60
      poll: 0

こちらのPlaybookを実行すると、以下のように通知されます。

f:id:hiyokotaisa:20191212155933p:plain

※今回の検証では、win_toastモジュールはWindows Server 2019では正常に通知されませんでした。お使いの環境によっては正常に動作しない可能性がありますので注意が必要です。ちなみにコミュニティモジュールなので、レッドハットによるサポートを受けられるモジュールではありません。

実際のメンテナンス作業では、明確なメンテナンス時間を設けてログインができないようにアクセスを遮断する運用もありますが、Windowsではそういった運用が難しいケースもあります。その場合は、メンテナンスを周知することと併せて上記のようなポップアップを表示させることで、不要な社内からのクレームを回避することができます。