capistranoをほんのちょっと動かしてみる⑦(タスクからタスクを実行)
実行中のタスクから別のタスクを実行する。 実施することはchefuserというユーザを作成しPasswordというパスワードを設定する。 そのあとに鍵を追加する。
使用したファイルとディレクトリは下記の通り。
$ tree --charset=C
|-- Capfile
|-- config
| |-- deploy
| | |-- develop.rb
| | `-- os.rb
| `-- deploy.rb
`-- lib
`-- capistrano
`-- tasks
[cap install]から変更しているファイルは下記の通り。 1.[./config/deploy/production.rb]は削除 2.[./config/deploy/staging.rb]は削除 3.[./config/deploy/deploy.rb]は新規作成 4.[./config/deploy/os.rb]は新規作成
3.[./config/deploy/deploy.rb]の中身。
role :client, %w{capistrano}
set :ssh_options, {
user: 'root',
password: '****'
}
4.[./config/deploy/os.rb]の中身。 ※[invoke "os:key_set"]にて別タスクを実行。
load './config/deploy/develop.rb'
namespace :os do
# ユーザ名指定
user = 'chefuser'
# パスワード指定
password = 'password'
desc "chef install"
task :useradd do
# 乱数作成
salt = rand( 36**8 ).to_s( 36 )
# 乱数を元に暗号化
shadow_hash = password.crypt( salt )
on roles( :client ) do
# ユーザ追加
execute "useradd -p '#{shadow_hash}' #{user}"
# namespaceが[os]のtaskが[key_set]を実行
invoke "os:key_set"
end
end
task :key_set do
src = '/opt/capistrano/manage/files/root/.ssh/authorized_keys'
dir = '/root/.ssh'
dst = '/root/.ssh/tmp_keys'
on roles(:client) do
execute "test -d #{dir} && mkdir -p #{dir}"
upload! src, dst, :recursive => true
execute "cat #{dst} >> #{dir}/authorized_keys"
execute "rm -f #{dst}"
end
end
end
実行してみる。
$ cap os os:useradd
INFO [14617d6a] Running /usr/bin/env useradd -p 'tcA7gikJhAx6U' chefuser on capistrano
DEBUG [14617d6a] Command: useradd -p 'tcA7gikJhAx6U' chefuser
INFO [14617d6a] Finished in 0.601 seconds with exit status 0 (successful).
INFO [9d403af2] Running /usr/bin/env test -d /root/.ssh && mkdir -p /root/.ssh on capistrano
DEBUG [9d403af2] Command: test -d /root/.ssh && mkdir -p /root/.ssh
INFO [9d403af2] Finished in 0.020 seconds with exit status 0 (successful).
DEBUG Uploading /opt/capistrano/manage/files/root/.ssh/authorized_keys 0.0%
INFO Uploading /opt/capistrano/manage/files/root/.ssh/authorized_keys 100.0%
INFO [9a24584d] Running /usr/bin/env cat /root/.ssh/tmp_keys >> /root/.ssh/authorized_keys on capistrano
DEBUG [9a24584d] Command: cat /root/.ssh/tmp_keys >> /root/.ssh/authorized_keys
INFO [9a24584d] Finished in 0.018 seconds with exit status 0 (successful).
INFO [0136eab2] Running /usr/bin/env rm -f /root/.ssh/tmp_keys on capistrano
DEBUG [0136eab2] Command: rm -f /root/.ssh/tmp_keys
INFO [0136eab2] Finished in 0.015 seconds with exit status 0 (successful).
4行目でuseraddのタスクが終了し5行目からkey_setのタスク内容が実行されていることを確認できればOK。