小ネタです。AnsibleでPlaybookを使わず、 ansible コマンドを使ってアドホックに以下をしました。
- ファイルを一括収集
- ファイルを一括配布
経緯としては以下です。
- 10台以上ある開発用サーバがあり、誰もが比較的自由に使えるのでカオスな状況になっている(当然 playbook での構成管理無し)
- 最低限のデプロイ処理を追加したいので、デプロイ用のユーザにssh鍵を追加したい
- この際だからせめてデプロイユーザの authorize_keys くらいは統一したい
やり方
ansible の fetch module で一括で集める
ファイルの収集はfetchモジュールが便利です。ポイントとしては
flat=yes
でディレクトリの階層を手元に再現しない{{ inventory_hostname }}
を使用してサーバ名を収集してきたファイルの末尾へ付与
#作業用ディレクトリ作成 mkdir fetched_files #対象のサーバたちをinventoryへ記載 vi hosts #回収 ansible -i hosts 'test_servers' -m fetch -a 'src=/home/deployuser/.ssh/authorized_keys dest=fetched_files/authorized_keys-{{ inventory_hostname }} flat=yes' -b
接続や権限に問題がなければ以下のようなファイルが手元に回収されます。
$ ll fetched_files -rw-r--r-- 1 morihaya wheel 404 Jan 22 16:22 authorized_keys-test_server01 -rw-r--r-- 1 morihaya wheel 404 Jan 22 16:22 authorized_keys-test_server02 -rw-r--r-- 1 morihaya wheel 404 Jan 22 16:22 authorized_keys-test_server03 -rw-r--r-- 1 morihaya wheel 404 Jan 22 16:22 authorized_keys-test_server04 -rw-r--r-- 1 morihaya wheel 404 Jan 22 16:22 authorized_keys-test_server05 -rw-r--r-- 1 morihaya wheel 404 Jan 22 16:22 authorized_keys-test_server06 -rw-r--r-- 1 morihaya wheel 404 Jan 22 16:22 authorized_keys-test_server07
配布用ファイルの作成
今回はauthorized_keysに含まれる鍵は増えても良いけど減らすと事故る可能性があるケースでしたので、全てのファイルを統合したものである必要がありました。そのため差分などを確認しながら配布用のファイルを準備しました。
#回収したファイル郡を確認して、必要ならまとめる cd fetched_files md5sum * diff authorized_keys-xxx authorized_keys-yyy #収集したどれかのファイルをベースに、都合の良い配布用ファイルを作成 cp authorized_keys-xxx authorized_keys-new vim authorized_keys-new
ansible の fetch module で一括で配布する
配布はcopyモジュールで行います。copyはAnsibleの入門時でもお世話になる大人気モジュールですね。ポイントは
-b
でsudo
権限で実行しています。対象がユーザのhome配下のファイルだからです--check --diff
で初回時には実行して動作を確認しましょう
#配布の前に差分確認 ansible -i hosts 'test_servers' -m copy -a 'dest=/home/deployuser/.ssh/authorized_keys src=fetched_files/authorized_keys-new backup=yes' -b --check --diff #配布 ansible -i hosts 'test_servers' -m copy -a 'dest=/home/deployuser/.ssh/authorized_keys src=fetched_files/authorized_keys-new backup=yes' -b --check --diff
以上、簡単にファイルを複数台のサーバから集めて、ファイルを配布し直す技でした。 そもそもちゃんと構成管理していれば良いのですが、今ある問題に立ち向かうときに役立つかもしれませんね。。。