community.windows
コレクション の現時点で最新の 1.6.0
には、グループやユーザの管理の機能はありますが、それらが所属する Organizational Unit(OU)自体の管理の機能が含まれません。
Ansible で Active Directory の OU そのものの作成や変更・削除を行うには、PowerShell DSC の ActiveDirectoryDsc
モジュール に含まれる ADOrganizationalUnit
リソース を ansible.windows.win_dsc
モジュールで呼び出すことで実現できます。
以下、階層化された OU を作るプレイブックの簡単な実装例とその実行例です。
---
- hosts: dc1.ansible.local
gather_facts: false
vars:
organizational_units:
- name: Hands-On Lab
path: DC=ansible,DC=local
description: Container for Hands-On Lab management
# protected: true / false
# state: present / absent
- name: Management
path: OU=Hands-On Lab,DC=ansible,DC=local
description: Container for Lab Management
- name: Development
path: OU=Hands-On Lab,DC=ansible,DC=local
description: Container for Lab Users
state: present
tasks:
- name: Ensure required module is installed
community.windows.win_psmodule:
name: ActiveDirectoryDsc
state: present
- name: Ensure OUs are exist
ansible.windows.win_dsc:
resource_name: ADOrganizationalUnit
Name: "{{ item.name }}"
Path: "{{ item.path }}"
Description: "{{ item.description | default(omit) }}"
ProtectedFromAccidentalDeletion: "{{ item.protected | default(omit) }}"
Ensure: "{{ item.state | default(omit) }}"
loop: "{{ organizational_units }}"
この例では、あるべき OU の状態は変数で定義して loop
で渡しています。また、ActiveDirectoryDsc
モジュールはデフォルトでは含まれないので、はじめに community.windows.win_psmodule
でインストール済みの状態にさせています。
$ ansible-runner run . -p ad_manage_ous.yml
PLAY [dc1.ansible.local] *******************************************************
TASK [Ensure required module is installed] *************************************
ok: [dc1.ansible.local]
TASK [Ensure OUs are exist] ****************************************************
changed: [dc1.ansible.local] => (item={'name': 'Hands-On Lab', 'path': 'DC=ansible,DC=local', 'description': 'Container for Hands-On Lab management'})
changed: [dc1.ansible.local] => (item={'name': 'Management', 'path': 'OU=Hands-On Lab,DC=ansible,DC=local', 'description': 'Container for Lab Management'})
changed: [dc1.ansible.local] => (item={'name': 'Development', 'path': 'OU=Hands-On Lab,DC=ansible,DC=local', 'description': 'Container for Lab Users', 'state': 'present'})
PLAY RECAP *********************************************************************
dc1.ansible.local : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
できました。
削除も Ensure
に Absent
が渡るようにすれば実行されます。ただし、誤消去防止の保護フラグが立っていても問答無用で消しにかかるようなので、その点は注意が必要そうです。
利用できるパラメータの詳細は、Get-Help about_ADOrganizationalUnit
で確認できます。