使用Ansible时,将IP地址的第四组转换为服务器ID
无论你是否知道这一点,也无论你是否在意,我希望将其设置为鞋店小人的默认备忘录,以防止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番目の変数が勝ちます。
根据优先级注意事项中提到的,不同组(例如在网页和数据库清单中进行分组)不能同时运行。因此,最好是为每个组创建一个playbook并指定组相关的vars文件来运行,而不是只用一个site.yml文件。如果同时运行,最终读取的值将真正成为最后一个读取到的值。
如果是厨师,就会做这样的事情。
有一个叫做ipaddressフィルタ(netaddr)的东西,经常看了很多手册发现这个模块不仅可以对子网掩码进行裁剪,还可以将ipv4转换为v6,不过它不会进行八位一组的拆分。
http://docs.ansible.com/ansible/playbooks_filters_ipaddr.html
参考网址包括:
1. http://qiita.com/yteraoka/items/7119d4e1e2f8faddfb64
2. http://docs.ansible.com/ansible/playbooks_loops.html
3. http://docs.ansible.com/ansible/playbooks_variables.html
4. https://stackoverflow.com/questions/25470712/ansible-replace-the-host-part-of-an-ipv4-address
5. 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应该也没问题。