使用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应该也没问题。

广告
将在 10 秒后关闭
bannerAds