IT井戸端会議

IT井戸端会議

インフラ、ネットワーク、アプリケーション開発、IT界隈の話等々を東京都千代田区界隈から発信します。

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。