Ansible2のfindモジュールを利用したかったけどちょっと手間取ったのでメモ
環境
- CentOS7(x86_64)
- Vagrant
どうやらyumではなく、GitHubからソースを取得してコンパイルする必要があるようだ。
手順
下記の公式の手順を参考に作業を実施します。
http://docs.ansible.com/ansible/intro_installation.html#running-from-source
下記のコマンドでエラーが発生した。。。
$ sudo pip install paramiko PyYAML Jinja2 httplib2 six
gcc -pthread -fno-strict-aliasing -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param= ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -pipe -Wall -Wp,-D_FORTIFY_SOURC E=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOU RCE -fPIC -fwrapv -fPIC -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/usr/include/python2.7 -c src/MD2.c -o build/temp.lin ux-x86_64-2.7/src/MD2.o
src/MD2.c:31:20: fatal error: Python.h: No such file or directory
#include "Python.h"
^
compilation terminated.
error: command 'gcc' failed with exit status 1
----------------------------------------
Command "/usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-DJuN7X/pycrypto/setup.py';exec(compile (getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-c G6Sjn-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-buil d-DJuN7X/pycrypto
調べてみるとpythonのdevelopツールが無い事が原因らしい。
ということで
$ sudo yum install python-devel
上記パッケージ導入後に同じコマンドを実行したところ正常に終了しました。
後続の作業はエラーも無しにそのまま実施できました。
インストール成功
バージョンを確認して問題なさそう
$ ansible --version
ansible 2.0.0
config file =
configured module search path = Default w/o overrides
いざテスト!
$ echo "127.0.0.1" > ~/ansible_hosts
$ ansible all -m ping --ask-pass
SSH password:
127.0.0.1 | FAILED! => {
"failed": true,
"msg": "ERROR! to use the 'ssh' connection type with passwords, you must ins tall the sshpass program"
}
あれ、エラーになる。sshpassを入れてくれとのこと。
じゃぁその通りにしましょうか。
$ sudo rpm -ivh http://ftp.iij.ad.jp/pub/linux/fedora/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
$ sudo yum install sshpass
いざテスト!(その2)
$ ansible all -m ping --ask-pass
SSH password:
127.0.0.1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
お、通信出来た。そしたら、最後に使いたかったfindコマンドを実行してみる。
$ ansible all -m find -a "paths=." --ask-pass
SSH password:
127.0.0.1 | SUCCESS => {
"changed": false,
"examined": 10,
"files": [
{
"atime": 1448404038.6609726,
"ctime": 1448403725.0179846,
"dev": 64769,
"gid": 1000,
"inode": 611328,
"isblk": false,
"ischr": false,
"isdir": false,
"isfifo": false,
"isgid": false,
"islnk": false,
"isreg": true,
"issock": false,
"isuid": false,
"mode": "0664",
"mtime": 1448403725.0179846,
"nlink": 1,
"path": "ansible_hosts",
"rgrp": true,
"roth": true,
"rusr": true,
"size": 10,
"uid": 1000,
"wgrp": true,
"woth": false,
"wusr": true,
"xgrp": false,
"xoth": false,
"xusr": false
}
],
"matched": 1,
"msg": ""
}
正常に、ファイル情報が取得できました。
最後に
やっぱり依存関係とか考えるとyumで入れるのが楽ですね。でも、最新の機能が提供されてない一時的にこういう作業も仕方なしっと。