はじめに
ここでは iPython-notebook と ansible を CentOS7 上にインストールする方法と、iPython-notebook 上で ansible コマンドを実行し、別ホストのユーザーでコマンドを実行する一例を述べます。
iPython-notebookに関しては、下記の記事がとてもわかりやすかったです。(ついでに公式も)
インストール
sudo yum -y update
sudo yum -y install python-pip python-devel gcc gcc-c++ epel-release sshpass
sudo pip install jinja2 tornado pyzmq ipython paramiko pyyaml httplib2 ansible requests
iPython-notebook
iPython-notebook で使用するポート
CentOS7でのfirewall設定例。
ここでは8888をpublicにしています。
sudo firewall-cmd --list-all --zone=public
sudo firewall-cmd --add-port=8888/tcp --zone=public --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all --zone=public
iPython-notebook を起動
notebook-dirは任意の場所でOKです。
永続化するのであれば & を最後に付けましょう。
mkdir /tmp/notebook
ipython notebook --no-browser --ip=0.0.0.0 --port=8888 --notebook-dir=/tmp/notebook
これで8888番ポートにブラウザからアクセスすると、iPython-notebookが使用できます。
ansible
ansible を使うため、ホストをもう1台用意します。
ここでは、ホストAに ipython-notebook, ansible をインストールし、もう一方のホストBを notebook 上で操作することを目的とします。
ホストAの設定
ここで生成した公開鍵はホストBで使用します。
mkdir -p /etc/ansible
echo "[defaults]" > /etc/ansible/ansible.cfg
echo "host_key_checking = False" >> /etc/ansible/ansible.cfg
cd /tmp/notebook
ssh-keygen -t rsa -f id_rsa -C "" -N ""
続いて、 ansible 用の inventry ファイルを作成します。
xxx.xxx.xxx.xxx はホストBのアドレスを書いて下さい。
echo 'xxx.xxx.xxx.xxx ansible_ssh_user=ansible' >> /tmp/inventry
ホストBの設定
こちらで ansible ユーザーを作成し、ホストAで生成した公開鍵をauthorized_keysに設定します。
sudo adduser ansible --disabled-password
sudo mkdir /home/ansible/.ssh
sudo vim /home/ansible/.ssh/authorized_keys
sudo echo ansible ALL=\(ALL\) NOPASSWD: ALL > /etc/sudoers.d/ansible
sudo chmod 440 /etc/sudoers.d/ansible
ansible を実行
まずは iPython-notebook を起動します。
これまでの設定の場合、ブラウザの notebook 上で下記のように実行することで、ホストB内のansibleユーザーを使うことができます。
!ansible --sudo -a "sh -c 'touch hoge.txt'" --private-key /tmp/notebook/id_rsa -i /tmp/inventry xxx.xxx.xxx.xxx
おわりに
iPython-notebook は出力結果が残るので、作業履歴が明確になります。自分が見直すときも良いですが、引き継ぎにもnotebookを渡すだけで済みそうです。
使い道はいろいろあると思いますので、各々のベストプラクティスを探してみてはいかがでしょうか?