Ansible コマンドでパッケージを更新する

自分は普段使いの OS として Ubuntu を使っているのだけど、パッケージのアップデートの際に

```bash
$ sudo aptitude update && sudo aptitude upgrade
```

ってコマンド叩くのがなんとなく面倒。

最近自分の環境で Ansible を使ってる事もあり、Ansible の apt モジュールで一括で更新できないかなと試してみた

# Ansible コマンドを単体で使う

一般的に Ansible は task をファイルに書いて `ansible-playbook` を使って実行するけど、たかだかパッケージのアップデートにファイルを用意するとか尚更めんどうなので `ansible` コマンドを使って実行してみることにした。

ってことでコードがこちら

```bash
$ ansible localhost --become --ask-become-pass -m apt -a update_cache=yes -a upgrade=full
```

# コマンド解説
## Usage
まず基本の Usage として

```bash
$ ansible <host-pattern> [options]
```

という形式で引数を取る。

なので最初の `localhost` はそのままどのホストに接続するか？ を書いている。

## --become, --ask-become-pass
`--become` と `--ask-become-pass` で root になる事とそのパスワードを対話的に解決する事を指定してる。
`--su` オプションや `--sudo` オプションもあるけど今は deprecate になって `--become` を使えとヘルプメッセージは訴えてくる。

```bash
$ ansible
# ...略...
 -b, --become          run operations with become (nopasswd implied)
 -S, --su              run operations with su (deprecated, use become)
 -s, --sudo            run operations with sudo (nopasswd) (deprecated, use become)
# ...略...
```

## -m
`-m` はモジュールを指定するオプション。
ここでは apt モジュールを選択している。

## -a
`-a` オプションはモジュールに対する引数を指定する。
apt モジュールを使ったアップデートは

```yaml
apt: update_cache=yes upgrade=full
```

といった感じで指定するので
`-a update_cache=yes` と `-a upgrade=full` と直せる。

# 注意点

## その１
普段の Ansible Playbook のように

```
- name: Upgrade
  become: yes
  apt: update_cache=yes upgrade=full
```

みたいに「タスクに sudo 権限を与える」といった考え方が適用できないので、はじめの段階で `--become` で root 権限を必要とする事を書かないといけない。

## その２
一括でアップデートからアップグレードまで行うので何をアップグレードするのか確認ができない。
個人的にそこまでバージョンに気をつけなければいけないものはインストールしていないつもりなので盲目的にアップデートかけてるけど、バージョンアップに慎重な人とかは普通に使わないことをおすすめします←

あと何をアップデートしたかもめっちゃ見づらいです。

```
$ ansible localhost --become --ask-become-pass -m apt -a update_cache=yes -a upgrade=full
SUDO password: 
localhost | success >> {
    "changed": true, 
    "msg": "Reading package lists...\nBuilding dependency tree...\nReading state information...\nReading extended state information...\nInitializing package states...\nWriting extended state information...\nBuilding tag database...\nThe fo
llowing packages will be upgraded:\n  heroku heroku-toolbelt libnss3 libnss3-nssdb \n4 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\nNeed to get 2,967 kB of archives. After unpacking 0 B will be used.\nWriting extended state information...\nGet: 1 http://security.ubuntu.com/ubuntu/ wily-security/main libnss3-nssdb all 2:3.19.2.1-0ubuntu0.15.10.2 [10.6 kB]\nGet: 2 http://security.ubuntu.com/ubuntu/ wily-security/main libnss3 amd64 2:3.19.2.1-0ubuntu0
.15.10.2 [1,129 kB]\nGet: 3 http://toolbelt.heroku.com/ubuntu/ ./ heroku-toolbelt 3.42.27 [666 B]\nGet: 4 http://toolbelt.heroku.com/ubuntu/ ./ heroku 3.42.27 [1,827 kB]\nFetched 2,967 kB in 8s (345 kB/s)\n(Reading database ... \r(Reading database ... 5%\r(Reading database ... 10%\r(Reading database ... 15%\r(Reading database ... 20%\r(Reading database ... 25%\r(Reading database ... 30%\r(Reading database ... 35%\r(Reading database ... 40%\r(Reading database ... 45%\r(Readi
ng database ... 50%\r(Reading database ... 55%\r(Reading database ... 60%\r(Reading database ... 65%\r(Reading database ... 70%\r(Reading database ... 75%\r(Reading database ... 80%\r(Reading database ... 85%\r(Reading database ... 90%\r(R
eading database ... 95%\r(Reading database ... 100%\r(Reading database ... 282586 files and directories currently installed.)\r\nPreparing to unpack .../heroku-toolbelt_3.42.27_all.deb ...\r\nUnpacking heroku-toolbelt (3.42.27) over (3.42.
25) ...\r\nPreparing to unpack .../heroku_3.42.27_all.deb ...\r\nUnpacking heroku (3.42.27) over (3.42.25) ...\r\nPreparing to unpack .../libnss3-nssdb_2%3a3.19.2.1-0ubuntu0.15.10.2_all.deb ...\r\nUnpacking libnss3-nssdb (2:3.19.2.1-0ubunt
u0.15.10.2) over (2:3.19.2.1-0ubuntu0.15.10.1) ...\r\nPreparing to unpack .../libnss3_2%3a3.19.2.1-0ubuntu0.15.10.2_amd64.deb ...\r\nUnpacking libnss3:amd64 (2:3.19.2.1-0ubuntu0.15.10.2) over (2:3.19.2.1-0ubuntu0.15.10.1) ...\r\nSetting up
 heroku (3.42.27) ...\r\nSetting up heroku-toolbelt (3.42.27) ...\r\nSetting up libnss3-nssdb (2:3.19.2.1-0ubuntu0.15.10.2) ...\r\nSetting up libnss3:amd64 (2:3.19.2.1-0ubuntu0.15.10.2) ...\r\nProcessing triggers for libc-bin (2.21-0ubuntu
4) ...\r\nReading package lists...\nBuilding dependency tree...\nReading state information...\nReading extended state information...\nInitializing package states...\nBuilding tag database...\n", 
    "stderr": "", 
    "stdout": "Reading package lists...\nBuilding dependency tree...\nReading state information...\nReading extended state information...\nInitializing package states...\nWriting extended state information...\nBuilding tag database...\nThe
 following packages will be upgraded:\n  heroku heroku-toolbelt libnss3 libnss3-nssdb \n4 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\nNeed to get 2,967 kB of archives. After unpacking 0 B will be used.\nWriting e
xtended state information...\nGet: 1 http://security.ubuntu.com/ubuntu/ wily-security/main libnss3-nssdb all 2:3.19.2.1-0ubuntu0.15.10.2 [10.6 kB]\nGet: 2 http://security.ubuntu.com/ubuntu/ wily-security/main libnss3 amd64 2:3.19.2.1-0ubun
tu0.15.10.2 [1,129 kB]\nGet: 3 http://toolbelt.heroku.com/ubuntu/ ./ heroku-toolbelt 3.42.27 [666 B]\nGet: 4 http://toolbelt.heroku.com/ubuntu/ ./ heroku 3.42.27 [1,827 kB]\nFetched 2,967 kB in 8s (345 kB/s)\n(Reading database ... \r(Readi
ng database ... 5%\r(Reading database ... 10%\r(Reading database ... 15%\r(Reading database ... 20%\r(Reading database ... 25%\r(Reading database ... 30%\r(Reading database ... 35%\r(Reading database ... 40%\r(Reading database ... 45%\r(Re
ading database ... 50%\r(Reading database ... 55%\r(Reading database ... 60%\r(Reading database ... 65%\r(Reading database ... 70%\r(Reading database ... 75%\r(Reading database ... 80%\r(Reading database ... 85%\r(Reading database ... 90%\
r(Reading database ... 95%\r(Reading database ... 100%\r(Reading database ... 282586 files and directories currently installed.)\r\nPreparing to unpack .../heroku-toolbelt_3.42.27_all.deb ...\r\nUnpacking heroku-toolbelt (3.42.27) over (3.
42.25) ...\r\nPreparing to unpack .../heroku_3.42.27_all.deb ...\r\nUnpacking heroku (3.42.27) over (3.42.25) ...\r\nPreparing to unpack .../libnss3-nssdb_2%3a3.19.2.1-0ubuntu0.15.10.2_all.deb ...\r\nUnpacking libnss3-nssdb (2:3.19.2.1-0ub
untu0.15.10.2) over (2:3.19.2.1-0ubuntu0.15.10.1) ...\r\nPreparing to unpack .../libnss3_2%3a3.19.2.1-0ubuntu0.15.10.2_amd64.deb ...\r\nUnpacking libnss3:amd64 (2:3.19.2.1-0ubuntu0.15.10.2) over (2:3.19.2.1-0ubuntu0.15.10.1) ...\r\nSetting
 up heroku (3.42.27) ...\r\nSetting up heroku-toolbelt (3.42.27) ...\r\nSetting up libnss3-nssdb (2:3.19.2.1-0ubuntu0.15.10.2) ...\r\nSetting up libnss3:amd64 (2:3.19.2.1-0ubuntu0.15.10.2) ...\r\nProcessing triggers for libc-bin (2.21-0ubu
ntu4) ...\r\nReading package lists...\nBuilding dependency tree...\nReading state information...\nReading extended state information...\nInitializing package states...\nBuilding tag database...\n"
}
```

ってログが流れて、一発で「あ、heroku 関連と libnss3 関連のもの、計４つのパッケージがアップグレードされたな」ってわかる人は多分いない。

## その3
普通にコマンド長い

# 結論

まぁ普通に aptitude コマンド2回叩けばいいんじゃないかな。


そんな感じで。