こんにちは。@jedipunkz です。 今回は Opscode Chef でユーザ・グループを作成する方法をまとめます。

‘users’ Cookbook を使います。

% cd ${YOUR_CHEF_REPO}
% ${EDITOR} Berksfile
cookbook 'users'
% berks install --path ./cookbooks

data_bag を使ってユーザ・グループの管理をしたいので管理ディレクトリを作成しま す。

% mkdir -p data_bags/users

data_bags/users/jedipunkz.json ファイルを作成します。必要に応じて内容を書き換えてください。

{
  "id": "jedipunkz",
  "ssh_keys": "ssh-rsa AAAABx92tstses jedipunkz@somewhere",
  "groups": [ "sysadmin", "sudo" ],
  "uid": 2001,
  "shell": "\/usr\/bin\/zsh",
  "comment": "jedipunkz sysadmin",
  "password": "$1$s%H8BMHlB$7s3h30y9IB1SklftZXYhvssJ"

}

json ファイルの説明です。

  • id : ユーザ名
  • ssh_keys : SSH 公開鍵
  • groups : 所属させるグループ
  • uid : unix id
  • sheell : ログインシェル
  • comment : コメント
  • passwd : ハッシュ化したパスワード

特にハッシュ化したパスワードは下記のコマンドで生成出来ます。

% openssl passwd -1 'yourPassword'

data_bag を作成し json ファイルを読み込みます。

% knife data bag create users
% knife data bag from file users data_bags/users/jedipunkz.json

現在 (2013/05/18 現在) 、‘users’ Cookbook に不具合があるらしく groups に記した グループにユーザが所属してくれませんでした。なので下記の対処をします。 sysadmins.rb を今回は利用します。このファイルに下記の行を追記します。僕は sudo グループに所属させたかったので (先ほど groups: に記した) こうしましたが、他の グループが良ければ変更してください。また、Ubuntu Server を扱うことがメインの僕 なので group_id は 27 にしています。適宜変更してください。

% ${EDITOR} cookbooks/users/recipes/sysadmins.rb
# 下記の行を追記
users_manage "sudo" do
  group_id 27
end

cookbook を Chef サーバにアップロードします。

% knife cookbook upload users

適用したいノードの run_list に Recipe ‘users::sysadmins’ を追加します。

% knife node run_list add ${YOUR_NODE_NAME} users::sysadmins

chef-client の次回実行時にユーザ ‘jedipunkz’ が作成されているはずです。SSH で ログインして確認してみてください。待ちきれなかったら knife ssh して chef-client を実行してください。

この ‘users’ cookbook は他の Cookbook からも呼び出して利用することが出来るので 応用が利きますね。