自分は普段使いの OS として Ubuntu を使っているのだけど、パッケージのアップデートの際に
$ sudo aptitude update && sudo aptitude upgrade
ってコマンド叩くのがなんとなく面倒。
最近自分の環境で Ansible を使ってる事もあり、Ansible の apt モジュールで一括で更新できないかなと試してみた
Ansible コマンドを単体で使う
一般的に Ansible は task をファイルに書いて ansible-playbook
を使って実行するけど、たかだかパッケージのアップデートにファイルを用意するとか尚更めんどうなので ansible
コマンドを使って実行してみることにした。
ってことでコードがこちら
$ ansible localhost --become --ask-become-pass -m apt -a update_cache=yes -a upgrade=full
コマンド解説
Usage
まず基本の Usage として
$ ansible <host-pattern> [options]
という形式で引数を取る。
なので最初の localhost
はそのままどのホストに接続するか? を書いている。
--become, --ask-become-pass
--become
と --ask-become-pass
で root になる事とそのパスワードを対話的に解決する事を指定してる。
--su
オプションや --sudo
オプションもあるけど今は deprecate になって --become
を使えとヘルプメッセージは訴えてくる。
$ 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 モジュールを使ったアップデートは
apt: update_cache=yes upgrade=full
といった感じで指定するので
-a update_cache=yes
と -a upgrade=full
と直せる。
注意点
その1
普段の Ansible Playbook のように
- name: Upgrade
become: yes
apt: update_cache=yes upgrade=full
みたいに「タスクに sudo 権限を与える」といった考え方が適用できないので、はじめの段階で --become
で root 権限を必要とする事を書かないといけない。
その2
一括でアップデートからアップグレードまで行うので何をアップグレードするのか確認ができない。
個人的にそこまでバージョンに気をつけなければいけないものはインストールしていないつもりなので盲目的にアップデートかけてるけど、バージョンアップに慎重な人とかは普通に使わないことをおすすめします←
あと何をアップデートしたかもめっちゃ見づらいです。
$ 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 関連のもの、計4つのパッケージがアップグレードされたな」ってわかる人は多分いない。
その3
普通にコマンド長い
結論
まぁ普通に aptitude コマンド2回叩けばいいんじゃないかな。
そんな感じで。