技術的な話題なので、興味ある方のみ。
最近、簡単に開発環境を作成できるVagrantを覚えまして、
インフラ知識をちょっとだけでもあげようとおもしろ環境を作って遊んでいました。
(一番作ってて苦労したのは、Ubuntu+nginx+Python3+MySQL,Pyramid,jinja2の環境)
で、そろそろchefも勉強しようかなーと思ってたのですが、
ansibleってのが便利だよってことだったので、先にこちらをやってみました。
手順だけでも備忘録で記載しておきます。
Vagrantは既に準備されてる前提です。
実証環境
Mac:10.9.2 Vagrant:1.3.5 Python:2.7.5 ansible:1.5.5
Pythonのインストール
これはMacにはおそらく入っているので、問題無いと思います。
一応、私の環境は2.7.5でした。
$ python --version
Python 2.7.5
pipのインストール
ansibleはyumでインストールもできますが、
私はpipから入れました。Pythonのパッケージです。
これ入れとくと便利なので、今後のためにも。
pipのインストールもeasy_installを使ったり色々あると思いますが、
githubのpipソースをダウンロードして実行しました。
$ sudo wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
$ sudo python get-pip.py
$ pip --version
pip 1.5.4 from /Library/Python/2.7/site-packages (python 2.7)
ansibleのインストール
はい、ド━(゚Д゚)━ン!!
$ sudo pip install ansible
clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future]
clang: note: this will be a hard error (cannot be downgraded to a warning) in the future
error: command 'cc' failed with exit status 1
え、エラー出ちゃいました…。
Google先生に聞いてみると、xcode5.1での弊害っぽいですね。
そうそう、ちょっと前にMacでPerl使う時も、
xcodeのコマンドラインツールがないよ、みたいなエラー出て、
以前入れた記憶あるのにーと思って、xcode立ち上げたら、
プロパティからコマンドラインツールインストールが無くなってて涙目になったなぁ…。
まあ、そんな昔話は置いといて、下記でいけました。
$ sudo ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install
$ ansible --version
ansible 1.5.5
よし、これで下準備できましたので、Vagrantへつなげていきます。
Vagrantへansible実行
Vagrantでinitまでしてある状態にしておいてください。
いろんなサイトでいろんな方々の記事を参考にしたのですが、
皆さん異なっていて、私の環境ではできなかったりで結構苦戦しました。
なので、これは結構自己流です。
他にも簡単なやり方などあるかもしれませんが、結果論ということで方法のみ記述していきます。
まずはpingが通るかの実験。
vagrant起動
$ vagrant up
vagrantへsshコマンドで入れるように、Macの.ssh/configにvagrantのIPを設定します。
$ vi ~/.ssh/config
下記を追加
Host 192.168.33.*
IdentityFile ~/.vagrant.d/insecure_private_key
User vagrant
対象のvagrantへSSHで入れればOK。
※IPアドレスは、VagrantFileに記載してあるもので。
$ ssh 192.168.33.11
このように、sshで入れるようにしておかないと、connection refusedが出てしまって入れなかったんですよね…。
公開鍵を指定できなかったせいだと思うのですが。
なので、configにvagrantで使っている鍵を指定しました。
デフォルトでは、~/.vagrant.d/ にあるはずです。
任意の場所にhostsファイルを作り、IPアドレスを追加。
$ echo “192.168.33.11″ > ~/a_hosts
そして、ここでansibleのコマンドを叩いてみます。
$ ansible 192.168.33.11 -m 'ping' -i ~/a_hosts
192.168.33.12 | success >> {
"changed": false,
"ping": "pong"
}
無事にpingが返ってきました。
さて、今度はplaybookを使ってモジュールをインストールします。
テスト的にMySQLを使いました。
ymlファイルを任意の場所に作ります。
$ vi mysql.yml
MySQLツール一式インストールするので、ymlの中はこんな感じ。
---
- hosts: all
user: root
tasks:
- name: install mysql
yum: name=mysql state=installed
- name: install mysql-server
yum: name=mysql-server state=installed
- name: install mysql-devel
yum: name=mysql-devel state=installed
これでansible-playbookを実行します。下記コマンドでやりました。
SSHのパスワードを聞かれると思うので、デフォルトの「vagrant」で。
$ ansible-playbook -k -c paramiko -i a_hosts mysql.yml -vv --extra-vars "user_password=vagrant"
インストールログがズラズラ−っと出ます。これ結構快感ですw
終わったら、Vagrantでサーバーに入ってサービスが入ったか確認してみます。
[vagrant]$ chkconfig | grep mysql
mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off
はい、いますねー。インストール成功!
まあ今回はMySQLだけ入れましたが、apacheやら、ユーザ作成やら色々やれます。
試しに、他の人がGitにあげてくれているymlを実行したりしましたが、
ユーザー作成や権限やらの部分が結構面倒そうです。
何度かやって失敗多数でした。
手軽に開発環境は作るのいいねーとは思うのですが、本番サーバー構築とかだと結構手間かかりそう。。。
chefとansible使い分けるのがいいんですかね。
ということで、次はchefもやってみようと思います。