OSS編~Ansible でサーバ構成管理 パート③~

こんにちは! JQです。

前回は『 OSS編~Ansible でサーバ構成管理 パート②~ 』と題して、AnsibleでPlaybookを試してみました。

今回は『OSS編~Ansible でサーバ構成管理 パート③~』と題して、AnsibleのPython APIを試してみたいと思います。

Python API

1. 基本的な使い方

Python APIは次のように実装する事が出来ます。

1import ansible.runner
1runner = 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/python

import 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/python
1import ansible.runner2import sys
1results = 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で疎通確認~』と題して、

お楽しみに!!!

この記事を書いた人

aws-recipe-user