V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
saytesnake
V2EX  ›  Linux

Ansible 新手,如何批量给不同主机分配 IP?

  •  
  •   saytesnake · 2019-03-13 17:11:43 +08:00 · 5559 次点击
    这是一个创建于 2068 天前的主题,其中的信息可能已经有所发展或是发生改变。
    貌似 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"。

    好菜,感觉没啥思路...
    14 条回复    2019-12-16 18:11:39 +08:00
    rootit
        1
    rootit  
       2019-03-13 17:14:30 +08:00
    这种事情 我感觉 shell 脚本更适合,更快能实现需求
    saytesnake
        2
    saytesnake  
    OP
       2019-03-13 17:26:14 +08:00
    @rootit shell 脚本能实现多机器批量更改不同的 IP 嘛?会不会用到 sshpass 之类的?
    dracher
        3
    dracher  
       2019-03-13 17:31:46 +08:00
    scalaer
        4
    scalaer  
       2019-03-13 17:59:12 +08:00 via Android
    https://github.com/mggger/playbooks/blob/master/update_host.yml

    不知道这个能不能满足你的需求
    ik
        5
    ik  
       2019-03-13 18:37:54 +08:00 via iPhone
    咦 这种需求也能满足吗?
    那么旧 ip 和新 ip 怎么对应呢?
    xcai
        6
    xcai  
       2019-03-13 20:27:54 +08:00 via Android
    for 循环生成变量
    saytesnake
        7
    saytesnake  
    OP
       2019-03-13 21:41:42 +08:00
    @dracher 啊...完全不懂。
    @mggis0or1 得研究一下。
    @ik 没有旧 IP,都是新的 IP,给另外一个网卡。
    ik
        8
    ik  
       2019-03-13 22:10:48 +08:00 via iPhone
    #7 哦 这样…
    ik
        9
    ik  
       2019-03-13 22:11:23 +08:00 via iPhone
    似乎还是会有如何对应的问题
    h807892124
        10
    h807892124  
       2019-03-13 23:30:41 +08:00   ❤️ 1
    用 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
    hljjhb
        11
    hljjhb  
       2019-03-14 13:07:32 +08:00   ❤️ 1
    是给每个 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)] }}"
    saytesnake
        12
    saytesnake  
    OP
       2019-03-15 17:00:47 +08:00
    @h807892124
    @hljjhb

    谢谢,研究 playbook 中,这个很有帮助
    rootit
        13
    rootit  
       2019-03-16 19:29:13 +08:00
    @saytesnake shell 直接 ssh 过去然后执行命令即可,for 循环 如果用密码 先写好 ip 和密码对应关系,如果密钥直接 ssh 即可 如果第一次登录需要 expect 即可 完全可以实现
    zfaka
        14
    zfaka  
       2019-12-16 18:11:39 +08:00
    @dracher 这个只能配置 debian 系的,RedHat 系的怎么配置大佬,没找到模块
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1780 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:36 · PVG 00:36 · LAX 08:36 · JFK 11:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.