Ansible で OpenLDAP マルチマスター/スレーブサーバー構築 - OpenLDAP と仲間たち Advent Calendar 2015 - ダメ出し Blog

2015-12-01(Tue) [openldap][ldap] [更新履歴]

OpenLDAP と仲間たち Advent Calendar 2015 の 1日目の記事です。

OpenLDAP のマルチマスターサーバー群とスレーブサーバーの構築と ベースとなる LDAP DIT データ作成と投入を行なう Ansible playbook を作りました。

初めての Ansible playbook です。まだ手探りだったり使い方が変なところがあると 思うので、強くダメ出しを希望します。よろしくお願いします!!!!

いまのところ OpenLDAP だけですが、ほかのも追加していく予定です。

要件

構成

ステージング環境の構成です。

ソフトウェア構成

ホスト構成

ステージング環境内では FQDN で名前解決できるようになっています。

DNS レコード構成

dnsmasq でステージング環境内のホストやサービスの名前解決ができるようになっています。

DIT 構成

準備

Ansible 2.0 はまだ正式リリースされていません。 以下の要領で Ansible Git リポジトリの開発版を利用できるようにします。

$ git clone git://github.com/ansible/ansible.git
$ cd ansible
$ git checkout -b stable-2.0 origin/stable-2.0
$ source hacking/env-setup

Vagrant と VirtualBox は適宜インストールしてください。 Debian や Ubuntu でのインストール例は以下の通り。

$ sudo apt-get install vagrant virtualbox

使い方

Ansible playbook を git clone します。

$ git clone https://github.com/fumiyas/ansible-playbooks.git
$ cd ansible-playbook

ステージング環境のインベントリや変数を staging ディレクトリ下に作成します。 例が含まれているので、コピーして利用してください。

$ cp -rp staging.example staging

必要であれば、インベントリや変数定義をカスタマイズしてください。 (カスタマイズしなくても動きます)

$ vi staging/group_vars/all/hosts.yml
...
$ vi staging/host_vars/*/*.yml
...
$ vi staging/inventory.ini
...

VM を起動します。

$ make up
vagrant up
Bringing machine 'ldap-master1' up with 'virtualbox' provider...
Bringing machine 'ldap-master2' up with 'virtualbox' provider...
Bringing machine 'ldap-slave1' up with 'virtualbox' provider...
==> ldap-master1: Importing base box 'bento/centos-7.1'...

Ansible playbooks を実行します。

$ make staging

VM 上の OS にログインすれば、OpenLDAP 環境を利用できるようになります。

$ vagrant ssh ldap-master1
$ vagrant ssh ldap-master2
$ vagrant ssh ldap-slave1

ステージング環境が不要になったら破棄します。

$ make destroy

LDAP 操作例

匿名バインドで検索。

$ ldapsearch -H ldap://ldap.example.jp/ -x
$ ldapsearch -H ldap://ldap-master.example.jp/ -x
$ ldapsearch -H ldap://ldap-master1.example.jp/ -x
$ ldapsearch -H ldap://ldap-master2.example.jp/ -x
$ ldapsearch -H ldap://ldap-slave1.example.jp/ -x

管理者用エントリでバインドして検索。

$ ldapsearch -H ldap://ldap.example.jp/ -x -D cn=admin,dc=example,dc=jp -W
Enter LDAP Password: admin-pass

エントリの追加と検索。

$ cat user.ldif
dn: uid=testuser1,ou=Users,dc=example,dc=jp
objectClass: inetOrgPerson
uid: testuser1
cn: testuser1
sn: testuser1
userPassword: plain-text-password
$ ldapadd -H ldap://ldap-master.example.jp/ -x -D cn=admin,dc=example,dc=jp -W <user.ldif
Enter LDAP Password: admin-pass
adding new entry "uid=testuser1,ou=Users,dc=example,dc=jp"
$ ldapsearch -H ldap://ldap.example.jp/ -x -LLL '(uid=testuser1)' '*' +
dn: uid=testuser1,ou=Users,dc=example,dc=jp
objectClass: inetOrgPerson
uid: testuser1
cn: testuser1
sn: testuser1
structuralObjectClass: inetOrgPerson
entryUUID: 91d20362-2c6b-1035-8d18-057fc4e885e0
creatorsName: cn=admin,dc=example,dc=jp
createTimestamp: 20151201113656Z
entryCSN: 20151201113656.024726Z#000000#001#000000
modifiersName: cn=admin,dc=example,dc=jp
modifyTimestamp: 20151201113656Z
entryDN: uid=testuser1,ou=Users,dc=example,dc=jp
subschemaSubentry: cn=Subschema
hasSubordinates: FALSE

エントリの削除。

$ ldapdelete -H ldap://ldap-master.example.jp/ -x -D cn=admin,dc=example,dc=jp -W uid=testuser1,ou=Users,dc=example,dc=jp
Enter LDAP Password: admin-pass

$ ldapsearch -H ldap://ldap.example.jp/ -x '(uid=testuser1)'
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=jp> (default) with scope subtree
# filter: (uid=testuser1)
# requesting: ALL
#

# search result
search: 2
result: 0 Success

# numResponses: 1

TODO


ところで、12月25日はクリスマスな上に、 OSS 界隈で地味に活躍されているふみやすさんの誕生日ですね!
http://www.amazon.co.jp/registry/wishlist/27M7TV8CEEF6G?sort=priority

逆に、あなたの書いた OSS や Blog や Advent Calendar が気に入ったら何か送りたく なってしまうかもしれないので、プロフィールや Web サイトに あなたの Amazon 欲しいものリストの URL を貼っておいてくださいね!


私が勤める OSSTech っていう某弊社で社員募集しているようです。 人材紹介会社を介さなければ、入社後に 20万円のボーナス! 「ふみやすっていう人に紹介された」と言ってもらえると私にもボーナス!! → https://www.osstech.co.jp/recruit/


よろしければ、これまで参加した/参加予定のほかの Advent Calendar もどうぞ。