AnsibleをUbuntuで初めて使ってつまづいた点をまとめた
UbuntuでAnsibleを使ってプロビジョニングをやってみたくなったので、初めて触った人のつまづいた点をまとめておきます。
環境
OS: Ubuntu 14.04
Vagrant box: ubuntu/trusty64
つまづいた点
- SSHで接続できない
- root権限なくてパッケージインストールできない
SSHで接続できない
VagrantでAnsibleのテストをしているので、普通にRLoginとかでSSHで接続できる(秘密鍵無しでと思い込んで)のに、Permission denied
が出てきてました。
これは自分は何度も経験しているので、何度か試行錯誤しているうちに、サーバ側(AnsibleのPlaybookによってプロビジョニングされるマシン)に公開鍵を登録しておかないと行けないんだと気が付きました。
早速ssh-keygen
で仮の秘密鍵と公開鍵を作成。サーバ側に登録。
ansible -m ping all
を打って秘密鍵のパスワード打って無事pingの結果pong
が返ってくる。
よって、AnsibleではSSH接続をしてプロビジョニングを行うため、サーバ側に公開鍵を事前に登録しておく必要があることがわかりました。
root権限なくてパッケージインストールできない
SSH接続できて、次の壁にぶつかります。「パッケージがインストールできない」
ネットをいろいろ波乗りしていると、みなAnsibleとかChefとかでもCentOSでプロビジョニングを説明するので、Ubuntuで説明しているページが少ないです。
これって、あまりサーバとしてUbuntuが人気じゃないんでしょうか? 個人的には、Ubuntu大好きなんですけどね。
CentOS用のPlaybookの中にremote_user: root
という記述があります。
ですが、Ubuntuにはrootというユーザは実在しないはずです。
だから上のコードで実行すると「お前はrootじゃね」とdpkgとかのコマンドを実行しようとするときに怒られます。
困った、CentOSにできて、Ubuntuにできないわけがない。
sudo
コマンドは権限昇格(Privilege Escalation)をするためのコマンドであるという定義をすっ飛ばしていたので、いい勉強になりました。
よって、Ubuntuに実在するユーザで権限昇格をしてパッケージをインストールすればいいので、become: true
とremote_user: root
の代わりに入力します。
これで、Playbookを実行するコマンドを走らせて。。。完了!
実際に試してみたPlaybookです
---
- hosts: host1
become: true
tasks:
- name: install nginx
apt:
name: nginx
state: present
notify: restart nginx
handlers:
- name: restart nginx
service: name=nginx state=restarted
あと気になる点
YAMLでPlaybookを記述するんですが、どうやらまだ理解していない模様なので、しっかり復習したいと思います!