fabricでchef-soloの実行環境を整えてみる

AWS環境を除き、SSHアカウントがパスワードでの管理がメインとなっている今の職場環境にて、

chef-soloを実行する上でまず最初にクリアすべき、

sudo権限のあるSSHキーファイルでログインできるユーザの作成と、

chef-solo実行環境を整えて、あとはレシピを適用するだけ!な状態を作る作業を自動化すべく、

fabricで実装してみました。

 

環境はCentOS6.4(x86_64)です。

 

fabricを実行する環境ではchef-solo,knife-solo環境が整っていることが前提です。

 

↓こんな感じです。

import cuisine
from fabric.api import run, cd, abort, require, sudo, env, put, prompt, get, local
from fabric.decorators import runs_once, roles
from fabric.contrib.console import confirm

env.user = ''
env.password = ''
env.hosts = ['']

def prepare_chef():
    sudo('useradd chefuser')
    sudo('passwd -fu chefuser')
    sudo('ssh-keygen', user="chefuser")
    sudo('cat /home/chefuser/.ssh/id_rsa.pub >> /home/chefuser/.ssh/authorized_keys', user="chefuser")
    get('/home/chefuser/.ssh/id_rsa', '~/' + env.host + '.pem')
    sudo('chmod 600 /home/chefuser/.ssh/authorized_keys')
    sudo('echo "chefuser ALL=(ALL) ALL" >> /etc/sudoers')
    local('chmod 600 ~/' + env.host + '.pem')
    local('knife solo prepare chefuser@' + env.host + ' -i ~/' + env.host + '.pem')

実行すると、ホームディレクトリ下に接続先.pemというSSHキーファイルができるので、

レシピを適用する場合はそれを利用します。

 

SSHキーの生成時に対話入力を求められてしまうので、

そこも自動化したいのですが、

未熟故にexpect使うくらいしか方法が思い浮かびません・・・

 


Hyper-Vの仮想マシン上でVagrantは(あんまり)使えない

Chefのレシピを試すのはVagrantが便利との噂を聞き、

職場PCのWindows8クライアントHyper-Vに入れているCentOS6.4にVagrantを入れてみた。

しかし、ホストマシンのCPU仮想化支援か有効でも、

ゲストOSではCPU仮想化支援は使えないようで64bitOSのインストールができなかった…

VagrantはWindowsでも使えるみたいだけど、

Chefは使えないので、諦めてHyper-V仮想マシンを増やすことにしました。

ドメイン参加という足枷が無ければ、

Windowsでの開発を辞めたくてたまらない今日この頃w

 

 


「PHPはクソ言語」は間違いでした

最近、愚痴っぽくて自分でも嫌になります。

業務でPHPが一番多く使う言語なのですが、

少し前までなんというクソ言語…

と思っていました。

PHPなんて敷居の低いお手軽言語使うからクソみたいなソース書く奴が出てくるんだよ。

Javaで良いじゃんJavaで。

みたいな。

でも、それは間違いだと思うようになりました。

何が間違っていたと思うかというと、

PHPが敷居の低いお手軽言語であるという認識です。

PHPやその他RubyやPythonといったLL言語がなんのためにあるのか?

確かに、「簡単に扱える」「制約が少なくて柔軟」というのは最大の特徴であり、利点です。

ですが、それらは敷居の低いお手軽言語としての特徴ではなく、

より人間の思考に直結したプログラムを書くための言語であると思うのです。

例えば、よく槍玉に挙げられる「変数の型宣言が無い」
という点について、

「変数の型を意識してプログラミングしなくてはならない」とか、

「接頭語に型名をつけよう」というのは間違いだと思うのです。

普段、物事を考える時に先に型を意識しますか?

しないですよね?

商品.金額といったら当然数値で、

商品.名前といったら当然文字列である。

それは、意識するまでもなく自然と理解して扱っているわけです。

PHPやその他のLL言語はそうやって、

パッと見てすぐ理解できる自然なオブジェクト指向で書くべきだと思うのです。

まあだからといってPHPを別に好んで使いたくはならないんですけどねw

だって、上記を一番体現しているのは、

ちゃんと使ったことが無いのであくまでなんとなくですが、

Ruby辺りだと思うのでw

でも、PHPも最近変わってきたみたいで、

他言語の良い所を積極的に取り入れる感じになってきてたり、

ソース管理がGitになってたり、

ファイル配布がAmazon S3になってたりして、

なんか変革が起きてるっぽいのでちょっと期待しています。