こんにちは! JQです。
前回は『 OSS編~Ansible でサーバ構成管理 パート②~ 』と題して、AnsibleでPlaybookを試してみました。
今回は『OSS編~Ansible でサーバ構成管理 パート③~』と題して、AnsibleのPython APIを試してみたいと思います。
Python API
1. 基本的な使い方
Python APIは次のように実装する事が出来ます。
1import ansible.runner1runner = ansible.runner.Runner(2 module_name='モジュール名',3 module_args='モジュール引数',4 pattern='対象グループ名(ワイルドカード利用可能)',5 forks=並列数6)7datastructure = runner.run()結果は次のように帰ってきます。
「dark」と「contacted」で接続の正否でグループ分けがされます。
1{2 "dark" : {3 "web1.example.com" : "failure message"4 }5 "contacted" : {6 "web2.example.com" : 17 }8}2. 確認
実際に試して確認してみます。
テストグループにpingモジュールを行うスクリプトになります。
1#!/usr/bin/pythonimport ansible.runner
1runner = ansible.runner.Runner(2 module_name='ping',3 module_args='',4 pattern='test',5 forks=106)7datastructure = runner.run()1print datastructure「contacted」に入力されて帰ってきました。
1{2 'dark': {3 },4 'contacted': {5 'ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com': {6 'invocation': {7 'module_name': 'ping', 'module_args': ''8 }, 9 u'changed': False, u'ping': u'pong'10 }11 }12}3. コマンド実行
最後にコマンドモジュールを試してみます。
Apacheのバージョンを取得するプログラムになります。
上から順に「ホストがない場合」「コマンドがあった場合」「コマンドがない場合」「接続出来ない場合」となります。
1#!/usr/bin/python1import ansible.runner2import sys1results = ansible.runner.Runner(2 pattern='test', forks=10,3 module_name='command', module_args='/usr/sbin/apachectl -v',4).run()1if results is None:2 print "No hosts found"3 sys.exit(1)1print "OK ***********"2for (hostname, result) in results['contacted'].items():3 if not 'No such file or directory' in result:4 print "%s >>> %s" % (hostname, result['stdout'])1print "FAILED *******"2for (hostname, result) in results['contacted'].items():3 if 'No such file or directory' in result:4 print "%s >>> %s" % (hostname, result['msg'])1print "DOWN *********"2for (hostname, result) in results['dark'].items():3 print "%s >>> %s" % (hostname, result)それでは実行してみます。
1$ python ansible_test.py2OK ***********3ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com >>> Server version: Apache/2.2.26 (Unix)4Server built: Dec 10 2013 00:28:545FAILED *******6DOWN *********成功すれば上記のようにApacheのバージョンを取得出来ます!
いかがでしたでしょうか?
次回は『OSS編~httpingで疎通確認~』と題して、
お楽しみに!!!