Data Bagを使ってユーザ登録をしてみた。
Data Bag を作成する
knife data bag create
コマンドで user という名前のData Bagを作成する。
$ knife data bag create user
次に、data bagに格納するデータをJSON形式で用意する。
作成するユーザー名やグループ名、関連プロパティなどを記述した default.json というファイルを作成する。
data_bags/users/default.json
{
"id": "default",
"groups": [
{
"name": "apple",
"gid": 1000
}
],
"users": [
{
"name": "jobs",
"uid": 1001,
"gid": 1000,
"home": "/home/jobs",
"shell": "/bin/bash",
"comment": "CEO",
"password": "$1$l5gWNx5i$ebiM7uknseQY2rjNDGdgA1",
"ssh_keys": "ssh-rsa ..."
}
]
}
"id”: “default”
はData Bagに格納するデータに必須の項目で、Data Bagに格納するデータ(ハッシュ)は、この項目で指定した名前で管理される。このデータは、Recipe側からは"default"という名前でアクセスできる。
ちなみにパスワードはopenssl
でハッシュ化しないといけないらしい。
$ openssl passwd -1 'PASSWORD'
$1$l5gWNx5i$ebiM7uknseQY2rjNDGdgA1
Data Bagの中身は、knife data bag show
コマンドで確認できる。
$ knife data bag show users default -z
groups:
gid: 1000
name: apple
id: defaults
users:
comment: CEO
gid: 1000
home: /home/jobs
name: manage
password: $1$l5gWNx5i$ebiM7uknseQY2rjNDGdgA1
shell: /bin/bash
ssh_keys: ssh-rsa ...
uid: 1001
※knife solo
環境の場合は-z
を付けないと怒られるみたいです。。
レシピを作成する
Data Bag を利用したレシピは下記の通り。
recipe
accounts = data_bag('user')
accounts.each do |id|
item = data_bag_item('user', id)
item['groups'].each do |g|
group g['name'] do
gid g['gid']
action :create
end
end
item['users'].each do |u|
user u['name'] do
uid u['uid']
gid u['gid']
home u['home']
shell u['shell']
comment u['comment']
password u['password']
supports :manage_home => true
action :create
end
directory "/home/#{u['name']}/.ssh" do
owner u['uid']
group u['gid']
mode 0700
action :create
end
file "/home/#{u['name']}/.ssh/authorized_keys" do
owner u['uid']
group u['gid']
mode 0600
content u['ssh_keys']
action :create_if_missing
end
end
end
とりあえずこれで動くけど、ちゃんとRubyを分かってないとこれ以上はキツイ感じ。。