ライトウェルブログ

2020/06/23PC展開を自動化!Ansible便利モジュール編①

こんにちは!ライトウェルAnsibleチームの増田です。

今年の1月にWidows7のサポートが終了しましたが、Windows10への移行はお済みでしょうか?

まだWindows10への移行がおわっていない皆さま、
ライトウェルではAnsible PC展開サービスを提供しています!

私もこのPC展開サービスに携わっているのですが、
実際にAnsibleを使用してPC展開を行った際に、躓いたこと・便利だなと思ったことなどを
これから全4回に渡ってブログで発信していきたいと思います。
ということで、初回はAnsibleのwin_copyモジュールについて書いていきたいと思います。

 

PCセットアップあるある?

PCをセットアップするにあたって、
必要なファイルやフォルダを外部のサーバから、コピーしてきたりすることはありませんか?
例えば、アプリーケーションのインストールをするのに
インストーラーをファイルサーバからクライアント端末にコピーするとか。

私が担当したお客様のPCセットアップでも
PCのセットアップに必要なファイルやフォルダを
クライアントにコピーするという手順がありました。

ファイルやフォルダを外部サーバからコピーしてくることは
作業ボリュームとしては大きくないですが、そんな細々した作業もチリツモですね。
細々した作業だからこそ自動化してしまいましょう!

 

Playbookを作成しよう

今回のPlaybookの内容は以下の通りです。
①クライアント側のCドライブ直下にファイル配布先ディレクトリ(InstallSoftware)を作成する
②ファイルサーバ(192.168.100.100)から対象フォルダをInstallSoftwareディレクトリにコピーする
③ZIPファイルを解凍する

サンプルPlaybookはこちらです。

---
- hosts: windows
  tasks:
    - name:インストーラ配布先ディレクトリの作成
      win_file:
        path: C:\InstallSoftware
        state: directory
    
    - name: のインストーラーを配布する
      win_copy:
        remote_src: true
        src: '\\192.168.100.100\share\Notes.zip'
        dest: 'C:\InstallSoftware\Notes.zip'

    - name: インストーラーを解凍する
      win_unzip:
        src: 'C:\InstallSoftware\Notes.zip'
        dest: 'C:\InstallSoftware\Notes'

ポイントはwin_copyモジュールのremote_srcオプションです。

remote_src: falseとする場合、Ansibleサーバにあるファイル(src)を操作対象のディレクトリ(dest)にコピーする動きとなり、
remote_src: trueとする場合は、操作対象からみたファイル(src)を、操作対象のディレクトリ(dest)にコピーする動きになります。

ここでは、操作対象からみたファイル(src)としてファイルサーバ上のネットワークフォルダが指定されているため、ファイルサーバからクライアントにファイルをコピーする動きとなります。

ちなみに、remote_srcオプションを指定しない場合はremote_src: falseと同様の動作をします。

 

それでは、Playbookを実行してみましょう。

 

Playbookの実行結果は…?!

Playbookの実行結果を確認してみましょう。ちゃんと成功していますね!

[root@Ansible01 ansible]# ansible-playbook -i inventory win_copy.yml

PLAY [Windows10セットアップ] **********************************************************************************************************************

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

TASK [win_copy : インストーラ配布先ディレクトリの作成] ********************************************************************************************************
changed: [192.168.123.10]

TASK [win_copy : インストーラーを配布する] **************************************************************************************************************
changed: [192.168.123.10]

TASK [win_copy : インストーラーを解凍する] **************************************************************************************************************
changed: [192.168.123.10]

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

 

ではでは、実機のほうも確認してみましょう。
ちゃんとInstallSoftwareディレクトリの作成とファイルコピーと解凍がされてますね!

でもこれだけだと、感動度が低いですよね…。
そんな時はみなさん、思い出してください!Ansibleの特徴を!!!
そう!Ansibleは複数台のクライアントに対して並列実行できるんです!

↓早速、クライアント数を増やして実行してみました。

[root@Ansible01 ansible]# ansible-playbook -i inventory win_copy.yml

PLAY [Windows10セットアップ] **********************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************
ok: [192.168.123.10]
ok: [192.168.123.11]
ok: [192.168.123.12]

TASK [win_copy : インストーラ配布先ディレクトリの作成] ********************************************************************************************************
ok: [192.168.123.10]
changed: [192.168.123.11]
changed: [192.168.123.12]

TASK [win_copy : インストーラーを配布する] **************************************************************************************************************
ok: [192.168.123.10]
changed: [192.168.123.11]
changed: [192.168.123.12]

TASK [win_copy : インストーラーを解凍する] **************************************************************************************************************
changed: [192.168.123.10]
changed: [192.168.123.11]
changed: [192.168.123.12]

PLAY RECAP **********************************************************************************************************************************
192.168.123.10            : ok=4    changed=1    unreachable=0    failed=0
192.168.123.11            : ok=4    changed=3    unreachable=0    failed=0
192.168.123.12            : ok=4    changed=3    unreachable=0    failed=0

実機の状態はこちらです。

このように、Inventoryファイルに複数のクライアントを書いて実行したら効果は絶大です。
今まで、1台ずつ順番にファイルサーバからローカルにファイルコピーしていたのが
1回Playbookを実行するだけで、同時に何十台というクライアントにファイルがコピーされます。
しかも数秒から数分でコピーが終わりますヨ。※ファイルサイズが大きいとそれなりにコピー時間はかかります。

 

今回の記事のまとめです。

  • 手作業によるファイルコピーの手間がなくなる
  • 1回のPlaybook実行で複数クライアントに同時ファイルがコピーが可能

 

次回はこのwin_copyモジュールと別のモジュールを組み合わせて
アプリケーションのインストールまで自動化しちゃいましょう!

 

余談ライトウェルのPC展開サービスでは、クローニング部分も含めた自動化の実績もあります。
クローニングから自動化する際は、PCのマスターイメージを作成する際に、
アプリケーションのインストーラなどをマスターイメージに組み込んで配布することで、
Ansibleでファイルサーバ等からファイルをコピーしてくるという処理すらもカットできますよ。

トップページに戻る