特に知らなくても気にしなくてもid重複事件が起きないように靴屋の小人的にデフォルトに設定しておきたい用途の備忘録。
roles/mysqld/defaults/main.ymlとかに
server_id: "{{ ansible_default_ipv4.address.split('.')[3]}}"
と書いとく。
で、roles/mysqld/templates/my.cnf.j2 とかに
server-id = {{ server_id }}
とかいとく。
上書きしたいならinventoryのhost_varsとかにホスト毎に一意になるように定義しとく。
変数の順位はここらに書いてあった
http://docs.ansible.com/ansible/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable
注意
どのセクションでも、varを再定義すると前のインスタンスが上書きされます。複数のグループに同じ変数がある場合は、最後にロードされたグループが優先されます。プレイのvars:セクションで変数を2回定義すると、2番目の変数が勝ちます。
優先度のあたりの注意書きのとおり、グループ(webとかdbとかのインベントリでセクションわけてグループ化してるやつ)違うのに同時に動かすのはだめっぽくてsite.yml一個でなくグループ毎にplaybook作ってvars_fileをグループ用の指定して動かすのが無難というか同時に動かすと本当に最後に読まれた値になってた。
http://dev.classmethod.jp/server-side/ansible/ansible-inventory-pattern/
chefだとこんなんしていた
http://qiita.com/smallpalace/items/157bd0fc9be9b3c4464c
ipaddressフィルタ(netaddr)というのがありよくマニュアルをみたらこのモジュールはサブネットマスク刈込してくれるかipv4からv6に変換って感じでオクテット分割はしてくれなかった。
http://docs.ansible.com/ansible/playbooks_filters_ipaddr.html
参考:
http://qiita.com/yteraoka/items/7119d4e1e2f8faddfb64
http://docs.ansible.com/ansible/playbooks_loops.html
http://docs.ansible.com/ansible/playbooks_variables.html
https://stackoverflow.com/questions/25470712/ansible-replace-the-host-part-of-an-ipv4-address
http://docs.ansible.com/ansible/playbooks_filters_ipaddr.html
いっぱいあって絶対かぶらせたくないみたいな話の場合(需要があるかアレですが)足したり掛けたりするとよさそうです。
server_id: "{{ ansible_default_ipv4.address.split('.')[2]|int * ansible_default_ipv4.address.split('.')[3]|int }}"
servier_idの範囲は1=65535みたいなので、255 * 255
で掛けても大丈夫そう。