技术解析

Ansible 新手,如何批量给不同主机分配 IP?
0
2021-06-21 04:46:16
idczone
貌似 Ansible 区很冷清...

目前有三台机器:

A:192.168.1.1 ( Ansible 操作机)
B:192.168.1.2
C:192.168.1.3

现在 B 机器跟 C 机器需要给另外一个网卡分配一个 IP。

或许我有个 shell 脚本可以一键给目标机器的指定网卡(已假设网卡名都是一样的)设置 IP 并重启网络,IP 在 shell 脚本设定好,但如果我用 Ansible 批量执行的话那怎么办?如何才能批量分配不同 IP ?

我目前的想法是,把要设定的 IP 都写在某个文本上,shell 读取,但这个跟 Ansible 应该怎么配合呢?

我还不太会用 playbook,还是用显得古老的 "ansible xxx -m raw -a xxx" 或 "ansible xxx -m script -a xxx.sh"。

好菜,感觉没啥思路...
这种事情 我感觉 shell 脚本更适合,更快能实现需求

shell 脚本能实现多机器批量更改不同的 IP 嘛?会不会用到 sshpass 之类的?

使用自带的 module 即可
https://docs.ansible.com/ansible/2.4/interfaces_file_module.html

https://github.com/mggger/playbooks/blob/master/update_host.yml
不知道这个能不能满足你的需求

咦 这种需求也能满足吗?
那么旧 ip 和新 ip 怎么对应呢?

for 循环生成变量

啊...完全不懂。
得研究一下。
没有旧 IP,都是新的 IP,给另外一个网卡。

哦 这样…

似乎还是会有如何对应的问题

用 ansible 管理过一批服务器,网络很简单,都是在同一个 24 掩码的网段下,做过批量配置 hostname,用 ip 的最后一个数区分服务器,参考下面的命令。用 ansible 采集的服务器信息(设置用 gather_facts: yes 开启这功能)获取机器的 IP。
- hostname: name=node-{{ ansible_default_ipv4.address.split('.')[-1] }}
另一个场景和你这个差不多,用另一张网卡配置存储的网络,也是单独的一个 24 掩码网段,和原来的 IP 一一对应,还是用本机的 IP 信息设置了另一个网段的 IP。如 192.168.2.3 --> 10.0.1.3

是给每个 host 分配 list 中不同的元素?以下严格依赖顺序
---
- hosts: test
vars:
ip_pool:
- 1.1.1.1
- 2.2.2.2
- 3.3.3.3
tasks:
- name: dispatch ip
shell: "echo {{ ip_pool[play_hosts.index(inventory_hostname)] }}"


@hljjhb
谢谢,研究 playbook 中,这个很有帮助

shell 直接 ssh 过去然后执行命令即可,for 循环 如果用密码 先写好 ip 和密码对应关系,如果密钥直接 ssh 即可 如果第一次登录需要 expect 即可 完全可以实现

这个只能配置 debian 系的,RedHat 系的怎么配置大佬,没找到模块

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服