ansible-playbookのTODO解決

銀鷹です。

前の記事で書いた以下のTODOについて、Twitterでアドバイスを頂き、

無事解決したのでまとめておきます。

アドバイスありがとうございました。

解決したTODO

前の記事よりコピー。

TODO?

一部のplaybookでコメントアウトしてある部分がある.

それをちゃんと動かせるようにしたいな・・・

具体的には以下の2つ.知ってる人がいたら教えてください.

  • ansibleでデフォルトのshellを変更(chsh)
    chshがパスワード聞いてくるのでうまく行かない様子.
  • templateモジュールでvarsの展開
    なぜか展開されなかった・・・

解決方法

1.ansibleでデフォルトのshellを変更(chsh) について

以下のURLを参考にしてはどうか?というアドバイスを頂いた。

http://www.ansibleworks.com/docs/modules.html#user

ansibleに標準で存在するuserモジュール。

てっきり、ユーザ作成用かと思ったら、色々出来て、

バッチリshellオプションがあった。こいつを使って解決。

(もうちょっとちゃんとgitのcommit分けてやらないとダメだな・・・・)

以下修正内容(diff)

# roles/common/tasks/main.yml

-# - name: Change default shell
-#   sudo: False
-#   command: /usr/bin/chsh -s /bin/zsh
-#   tags: chsh

+- name: Change default shell
+  user: name={{item.user}} shell={{item.shell}}
+  with_items: ${default_shell}
+  tags: default-shell
# roles/common/vars/main.yml

+default_shell:
+    - user: 'vagrant'
+      shell: '/bin/zsh'

2.templateモジュールでvarsの展開

1.同様に以下のURLをアドバイスとして頂いた。

https://groups.google.com/forum/#!msg/ansible-project/bKEoFjc-slE/23sfQfsxyCYJ

参照は、{{item['src']}}みたいな形ではなく{{item.src}}のような形で参照すれば良い。

また、vasrはPythonで言う辞書形式ではなく、YAMLの配列で表現すれば良い。(詳しくは下記参照)

以下修正内容(diff)

# roles/common/tasks/main.yml

-# - name: Write config files
-#   sudo: False
-#   template: src={{item['src']}} dest={{item['dest']}} owner={{item['owner']}} group={{['group']}} mode={{item['mode']}}
-#   with_items: ${config_files}
-#   tags: config-files

+- name: Write config files
+  sudo: False
+  template: src={{item.src}} dest={{item.dest}} owner={{item.owner}} group={{item.group}} mode={{item.mode}}
+  with_items: ${config_files}
+  tags: config-files
# roles/common/vars/main.yml

-# config_files:
-#     - {src: 'zshrc.j2', dest: '~/.zshrc', owner: 'vagrant', group: 'vagrant', mode '0644'}
-#     - {src: 'tmux.conf.j2', dest: '~/.tmux.conf', owner: 'vagrant', group: 'vagrant', mode '0644'}

+config_files:
+    - src: 'zshrc.j2'
+      dest: '~/.zshrc'
+      owner: 'vagrant'
+      group: 'vagrant'
+      mode: '0644'
+    - src: 'tmux.conf.j2'
+      dest: '~/.tmux.conf'
+      owner: 'vagrant'
+      group: 'vagrant'
+      mode: '0644'

これらで無事TODOが解決された。ありがとうございました。


朝、Twitterのリプライに気づいて検証作業を始めた時に、

無駄にaptのupdateが遅くておかしいなと思ったら、usのリポジトリを参照していたので、

ついでにsources.listをjpに書き換えるようにした。

ちょっと乱暴な方法なので、本当にこれでよいのかはちょっと謎である。

あと、何気なしにaptでupgradeしたら非常に大量に降ってきて大変だった。

boxの元のイメージが古いのが原因なんだろうけど、このへんの管理って面倒なんだろうな。

EC2も似たような感じで、ベースのイメージからインスタンス立ててたような気がするけど、

あのへんってどのくらいちゃんとメンテナンスされてるんだろう?(EC2使ったこと無いから適当です。)