LoginSignup
1
2

More than 5 years have passed since last update.

AnsibleでIPアドレスの4オクテット目をserver_idにする

Last updated at Posted at 2017-07-14

特に知らなくても気にしなくても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で掛けても大丈夫そう。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2