AnsibleでWindowsの共有フォルダを操作する


こんにちわ! @ktoshi です!

今日は Ansible で Windows Server を触る機会があり、
その際のことを備忘録として記載します。

少し、設定に困った個所もあったので皆さまの参考になればと思います。

概要

Ansible で Windows Server に共有フォルダを作成する

環境

  • 実行環境

    • OS: Ubuntu 18.04.4 (Windows 10 WSL 利用)
    • python 3.8.3
    • ansible 2.9.12
  • Windows Server側

    • Windows Server 2012 R2 Standard

事前準備

事前に Windows Server を Ansible で操作できるようにしておいてください。
こちらなどをご参考ください。

Let's Enjoy!!!

共有フォルダの作成

- name: フォルダの作成
  win_file:
    path: D:\Shared
    state: directory

- name: 共有設定
  win_share:
    name: Shared
    description: Shared Folder
    path: D:\Shared
    read: Everyone
    full: Administrators

これで共有フォルダを作成できます。簡単ですね。
え?何に困ったの?と思われる方もおられるでしょう。
そうです、別にここで困ったわけではないのです。

一応、各コマンドの説明だけ記載しておきます。

win_file

Windows 上でファイルやフォルダを操作するコマンドです。
今回は共有フォルダを作成する際に利用しています。
公式ドキュメント

win_share

Windows 上のフォルダに対して共有設定を行います。
なお、フォルダが無い場合に作成などの処理はないので、事前にフォルダを作成しておく必要があります。
公式ドキュメント

サブフォルダの共有設定

ここからが本題です。
社内で Active Directory を使って共有をされておられる場合、
共有フォルダ自体は全ユーザが参照でき、その下のサブフォルダで組織ごとに
権限を分けられる運用をされるのではないでしょうか。

今回、それを設定する際に継承の無効化などの設定に困ったので
同じような方の手助けになればと思います!

今回は共有フォルダ配下に「Development」というフォルダを作成し、下記のような権限を付与します。

  • フルコントロール
    • Administrators グループ
    • Dev グループ
  • 読み取り権限
    • Sales

ひとまず、例のごとく Playbook はこんな感じです。

- name: サブディレクトリを作成
  win_file:
    path: D:\Shared\Development
    state: directory

- name: サブディレクトリに権限を追加
  win_acl:
    user: "{{ item.name }}"
    path: D:\Shared\Development
    type: allow
    rights: "{{ item.rights }}"
  with_items:
    - name: Administrators
      rights: FullControl
    - name: Dev
      rights: FullControl
    - name: Sales
      rights: Read,ListDirectory

- name: 上位フォルダからの権限継承を無効化
  win_acl_inheritance:
    path: D:\Shared\Development
    reorganize: no
    state: absent

いざ、書けてしまえば簡単なのですが、なにせ英語が不自由でどのコマンドが意図したいものかわからず苦労しました。。。

win_acl

フォルダに対して権限の設定を行います。
なお、「user」についてはグループの指定も可能です。

win_acl_inheritance

上位フォルダからのアクセス権の継承を設定するコマンドです。
オプションは下記のとおりです。

  • state
    • absent: 無効化(デフォルト)
    • present: 有効化
  • reorganize
    • no: 継承されている権限を残さない。(デフォルト)
    • yes: 継承されている権限を明示的にこのフォルダへの権限として設定する。

なお、今回の例では上位からの継承を無効化した上で既存の権限は一度削除するようにしています。

まとめ

最近、ますますTerraform や Ansible を使う機会が増えてきて、今まで使ったことのなかったプロバイダやモジュールを利用することが増えてきました。
今回は Windows を初めて Ansible で使ってみましたが、非常に楽でありがたい。

ちなみにADアカウントなども今Ansibleで作業を行うように準備を進めているのですが、
ADのOUを作成する用の Ansible のコマンドってないんでしょうか。。。
いい感じにADグループ操作ができたのですが、その先に進めず少し困っています。

では皆様!引き続き、素晴らしき Ansible ライフをお送りください。