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使ったこと無いから適当です。)