bond添加路由_saltstack实现批量路由增加

一、需求

现网之前有两个机房,每台主机上有两个网段,三条路由 -------- 业务网段为192.168.X.X,管理网段是10.X.X.X,默认路由走的是业务网段,10.211.6网段是走互联网F5映射用的。后来又新增了一个机房,并根据总部要求分配了两个网段,10.125.X.X 网段是新机房的业务网段,200.200.X.X是新机房的管理网段 。同时三个机房需要互相能够通信。所以最终机器上需要有5条静态路由 。10.X.X.X 255.0.0.0 DCN gateway

200.200.X.X 255.255.0.0 DCN gateway

10.211.6.0 255.255.255.0 DCN gateway

10.125.0.0 255.255.0.0 业务 gateway

0.0.0.0 0.0.0.0 业务 gateway

由于默认之前的两个机房上已经有了10.X.X.X 、0.0.0.0 、10.211.6.0三个网段的路由。所以这里就结合下salt 完成所有主机的路由配置。

二、saltstack配置

在master端两个配置文件内容如下:[root@itohost ~]# tree /srv/salt

/srv/salt

├── _grains

│   ├── dcnyw.py

├── route2.sls

dcnyw.py内容如下:

# cat /srv/salt/_grains/dcnyw.py

import commands

def dcn_yw():

'''

Return dcn and yw eth informations

'''

grains = {}

ret = {}

cmd1 = 'netstat -A inet -rn | grep "^0.0.0.0"|tail -1'

cmd2 = 'netstat -A inet -rn | grep "^10.0.0.0"|tail -1'

ywout = commands.getoutput(cmd1)

dcnout = commands.getoutput(cmd2)

if ywout:

comps1 = ywout.split()

ret['ywgw'] = comps1[1]

ret['yweth'] = comps1[7]

if dcnout:

comps2 = dcnout.split()

ret['dcngw'] = comps2[1]

ret['dcneth'] = comps2[7]

grains['dcnyw'] = ret

return grains

通过salt '*' saltutil.sync_grains同步到minion端后,可以通过该自定义的grains获取到业务和管理网段的网关信息和对应的网口信息(由于主机有二三千台之多,对应的接口有eth0、eth1、也有bond0、bond1、还有ib0、ib1,所以需要通过路由信息获取接口名称)。

salt 下对应的有network这个state模块,所认可以很方便的利用该模块完成路由配置。对应的sls文件内容如下:

# cat /srv/salt/route2.sls

routes:

network.routes:

- name: {{ grains['dcnyw']['yweth']}}

- routes:

- name: sq

ipaddr: 10.125.0.0

netmask: 255.255.0.0

gateway: {{ grains['dcnyw']['ywgw']}}

- name: internet

ipaddr: 10.211.6.0

netmask: 255.255.255.0

gateway: {{ grains['dcnyw']['ywgw']}}

- name: default

ipaddr: 0.0.0.0

netmask: 0.0.0.0

gateway: {{ grains['dcnyw']['ywgw']}}

- name: {{ grains['dcnyw']['dcneth']}}

- routes:

- name: route to 10.0.0.0

ipaddr: 10.0.0.0

netmask: 255.0.0.0

gateway: {{ grains['dcnyw']['dcngw']}}

- name: route to 200.200.0.0

ipaddr: 200.200.0.0

netmask: 255.255.0.0

gateway: {{ grains['dcnyw']['dcngw']}}

剩下的就比较简单了,可以通过salt '匹配的主机' state.sls route2 执行,在相应的主机上增加对应的路由信息,并在路由配置文件中增加配置。不过在执行的时候,发现一个问题。有些主机上在执行的时候会有报错,如下:

ID: routes

Function: network.routes

Name: eth1

Result: False

Comment: State 'network.routes' was not found in SLS 'route2'

Reason: 'network' __virtual__ returned False

经确认发现执行出错的都是suse系统的主机,通过查看state network帮助信息,发现没有返回:

56fe85f9129649e250266ddd9f0aa264.png

通过查看官方源代码发现只支持redhat相关系统,如下:

b963be362b842d6edc2d9161ab1defd1.png

针对suse的问题也并非无解,可以通过自已写一个模块解决,也可以写一个普通脚本,通过cmd.script 执行,更可以通过修改network.py这个states文件,增加对suse的支持。

本篇先到这里吧,后面针对suse的问题,个人偏向写一个模块解决 。后面有时间再搞篇。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值