オープンソースなシステム管理フレームワーク Func

第3回funcコマンドの使用方法

今回はFuncを利用する上での基本となる、funcコマンドの使用方法について解説します。

funcコマンドの概要

funcコマンドはcertmaster上で実行します。コマンドの実行パターンとしては、管理対象のminion一覧を表示する場合と、各minion上でモジュールを実行して結果を取得する場合の、2パターンがあります。

管理対象のminion一覧を表示する場合は、以下のように実行します。

$ sudo func target list_minions

各minion上でモジュールを実行して結果を取得する場合は、以下のように実行します。

$ sudo func target call module method [args ...]

targetは対象となるminionを指定します。ワイルドカードや;(セミコロン)区切りで複数のminionを指定することができます。例えば、

$ sudo func "*" list_minions

と実行すると、管理対象となっているすべてのminionを表示します。また、

$ sudo func "www*" list_minions

と実行すると、ホスト名がwwwではじまるminionを表示します。ピンポイントで複数のminionを指定する場合には、

$ sudo func "www.example.org;mail.example.org" module method

といった形で、;(セミコロン)で区切って指定します。

また、モジュールを実行する場合の引数moduleには実行するモジュール名を、methodには実行するモジュールのメソッド名を、[args ...]には、モジュールメソッドの引数を、必要に応じて指定します。

では、実際にfuncコマンドを実行してみましょう。

管理対象minion一覧表示

管理対象minionの一覧を表示すると、以下のような結果が返ってきます。

$ sudo func "*" list_minions
['https://func02.example.org:51234', 'https://func01.example.org:51234']
func02.example.org
func01.example.org

結果の最初の行は、リストで渡されたminionの一覧をそのまま表示しており、2行目以降では、minionのホスト名をひとつひとつ表示しています。

モジュールの実行と結果表示

利用できるモジュールの一覧表示

モジュールを実行する前に、まずはどういったモジュールが使えるのかを知る必要があります。そのためには、systemモジュールのlist_modulesメソッドを実行します。

$ sudo func "func01*" call system list_modules
on https://func01.example.org:51234 running system list_modules ()
['certmaster', 'command', 'copyfile', 'filetracker', 'func_module', 'hardware',
'jobs', 'mount', 'nagios-check', 'netapp.snap', 'netapp.vol', 'netapp.vol.clone', 'networktest', 'process', 'reboot', 'rpms', 'service', 'smart', 'snmp', 'sysctl', 'test', 'yumcmd']

利用できるモジュールがリストとして返ってきます。

モジュールに関する情報の表示

各モジュールにどういったメソッドが存在するか確認したい場合には、call の後に利用したいモジュール名を指定し、続けてlist_methodsメソッドを指定します。

$ sudo func "func01*" call service list_methods
on https://func01.example.org:51234 running service list_methods ()
['status', 'reload', 'get_running', 'stop', 'start', 'inventory', 'get_enabled', 'restart', 'module_description', 'module_version', 'module_api_version', 'list_methods']

この例では、serviceモジュールで利用できるメソッドをリストで取得しています。

メソッドリスト中にある、module_descriptionメソッドを実行すると、モジュールの説明が表示されます。

$ sudo func "func01*" call service module_description
on https://func01.example.org:51234 running service module_description ()
Allows for service control via func.

module_versionメソッド、module_api_versionメソッドを実行すると、モジュールやモジュールAPIのバージョンが表示されます。

$ sudo func "func01*" call service module_version
on https://func01.example.org:51234 running service module_version ()
0.0.1
$ sudo func "func01*" call service module_api_version
on https://func01.example.org:51234 running service module_api_version ()
0.0.1

モジュールメソッドの実行と結果表示

では、serviceモジュールを実行して、minion上のntpdサービスを起動してみます。

$ sudo func "func01*" call service start ntpd
on https://func01.example.org:51234 running service start (ntpd)
0

最後の0はexitコードです。

きちんと起動されているかどうか確認するために、serviceモジュールのstatusメソッドを実行してみます。

$ sudo func "func01*" call service status ntpd
on https://func01.example.org:51234 running service status (ntpd)
0

exitコードが0なので、ntpdが起動していることがわかります。次に、ntpdサービスを停止してみます。

func "func01*" call service stop ntpd
on https://func01.example.org:51234 running service stop (ntpd)
0

この状態でstatusメソッドを実行してみます。

func "func01*" call service status ntpd
on https://func01.example.org:51234 running service status (ntpd)
3

exitコードが3となっており、ntpdが起動していないことがわかります。

以上がfuncコマンドの基本的な使い方です。他にも様々なモジュールがありますので、色々と試してみてください。

次回はPythonプログラムからモジュールを呼び出して実行する方法について解説する予定です。

おすすめ記事

記事・ニュース一覧