読者です 読者をやめる 読者になる 読者になる

クラウドとマレーシアでぐだぐだする日記

いいエンジニアでいるためにアウトプットします

Windowsマシンの初期設定を自動でババ〜ンっとやってみる

こんにちは、普段はネットワークエンジニアをやっています。しげるです。

先日の記事でAnsibleを使ってWindowsの構成管理をする場合に必要な設定と簡単なサンプル実行をやってみました。

shigeluma-tech.hatenablog.com


最終的にはボタン一発でAzureにActiveDirecrotoyを立ててなんなら冗長化構成にして1台壊れた場合に自動で検知してサーバー生成するぐらいにしてみたいと思います。(できるかな、、、、)

今回はWindowsマシンをセットアップする場合の初期に行う設定をAnsibleを使って自動でやっていきます。

実施したOSのバージョン、インストールした各ソフトウェアのバージョン

構成管理の対象のWindowsマシン、構成管理、Ansibleを実行する側のWindowsマシン、両方のWindows Firewallは切ってあります。

構成管理の対象のWindowsマシン

 Windows2012R2
 Powershell4

構成管理、Ansibleを実行する側

 Windows10上でLinux環境「Virtual box」+「vagrant」(CentOS)
 Ansible 2.3
 Python 2.7.5

初期設定をする前のWindowsマシンの状態

インストールメディアからインストールを行いadministratorアカウント、パスワードが設定されており、ネットワーク関連の設定(固定IPアドレス、サブネット、ゲートウェイを設定)がされている状態です。Windows Remote Management(WinRM)とパッケージ管理ツール「Chocolatery」についても事前に手動でインストールしております。(ココらへんはもう少し手間を減らしたい。。)
確認のためにリモートデスクトップも接続できる状態にしました。

Ansibleで初期設定、セットアップする項目はこんな感じ

だいたいサーバーを手動でセットアップする時の項目を思い浮かべて並べてみました。

設定項目については公式ドキュメントのWindowsの部分に詳細がのっています。
http://docs.ansible.com/ansible/list_of_windows_modules.html

今回、YAMLファイルをWindows Update関連のものとそれ以外のものに分けました。

タイムゾーンDNSサーバー、アプリケーションのインストールのためのYAMLファイル
アプリケーションはGitクライアント、PDFビューア、Firefoxを入れています。

---
- hosts: all

  tasks:
    - name: タイムゾーンの設定
      win_timezone:
        timezone: "Tokyo Standard Time"
    
    - name: DNSサーバーの設定
      win_dns_client:
        adapter_names: "*"
        ipv4_addresses:
          - 8.8.8.8
          - 8.8.4.4     
        log_path: c:\dns_log.txt

    - name: パッケージのインストール(Chocolatery)
      win_chocolatey: name={{ item }} state=latest
      with_items:
        - git
        - PDFXChangeViewer
        - Firefox

Windows Updateと再起動のためのYAMLファイル

---
- hosts: all

  tasks:
    - name: Windows updateの実施
      win_updates:
        category_names: 
          - SecurityUpdates
          - CriticalUpdates
          - UpdateRollups
     
    - name: Windows 再起動の実施
      win_reboot:
        when: update_result.reboot_required
        shutdown_timeout_sec: 3600
        reboot_timeout_sec: 3600

Ansibleで操作できなかった項目

Ansibleで操作できなかった項目についても正直に書いておきたいと思います。こちらはのちほどPowerShellあたりで実現できそうな方法を探してみます。

  • Windows Updateの有効化
  • 表示言語の設定
  • ファイルの拡張子を表示させる
  • chocolateryのインストー