使用 puppet 修改 ip route 和 sysctl

Qui*_*Par 7 linux centos puppet

我有两个更改ip route&sysctl禁用 tcp 慢启动。这是我的方法

ip route show
Run Code Online (Sandbox Code Playgroud)

记下以 default 开头的行。

从默认行中选择 IP 并运行

sudo ip route change default via $ip_address dev eth0 initcwnd 12 
sudo sysctl -w net.ipv4.tcp_slow_start_after_idle=0
Run Code Online (Sandbox Code Playgroud)

我怎样才能从中创建一个木偶脚本?一种可以部署到多台相同类型机器的机器——CentOS 6

编辑: 添加赏金以获得一个工作示例

sudo ip route change default via $ip_address dev eth0 initcwnd 12 
Run Code Online (Sandbox Code Playgroud)

eww*_*ite 6

sysctl侧覆盖在这个岗位:设置sysctl.conf的参数与木偶

Puppet 的网络示例也利用了Augeas

编辑:您在 CentOS 上,所以请记住,您需要使这些路由持久化......在文件中进行更改,验证,然后重新启动网络接口是更安全的方法吗?这假定/etc/sysconfig/network-scripts/route-ethX使用,因为您使用的是via语法。该ip route命令似乎是您的目标,因为您想更改初始拥塞窗口 (initcwnd)。我会认真地把它分成另一个选项,因为设置默认网关本身应该由操作系统网络脚本/kickstart/build 过程来处理。


现在有一个完全不同的解决方案:

我喜欢 Puppet 的某些方面。网络配置和 sysctl 值不在其中。使用 EL6 系统,您可以使用tuned-adm 框架以简单且一致的方式动态更改这些系统。我管理的服务器有时需要 30 多个sysctlsysfs在投入生产之前进行更改。我用手动管理,然后用木偶......但EL6,我创建了一个调整轮廓与所有必要的调整和脚本,管理配置文件和他们的木偶分布,控制tuned木偶守护进程。

鉴于此,只需在自定义配置文件中移动您的ip脚本和sysctl值,然后从那里开始。干净多了。


lar*_*sks 6

如果您使用 DHCP 获取 Internet 地址(这是您的问题所建议的),那么您可以/etc/dhcp/dhclient-exit-hooksdhclient配置接口后使用它来运行 shell 命令。您将可以访问 dhclient 提供的许多变量,包括$router. 您可以使用它来运行:

ip route change default via $router dev $interface initcwnd 12 
Run Code Online (Sandbox Code Playgroud)

您将使用普通的 Puppetfile资源安装此脚本:

file { '/etc/dhcp/dhclient-exit-hooks':
owner => root,
group => root,
mode => 0755,
source => 'puppet:///.../dhclient-exit-hooks',
}
Run Code Online (Sandbox Code Playgroud)

文件内容可能类似于:

#!/bin/sh

if [ "$interface" = eth0 ]; then
  ip route change default via ${new_routers%% *} dev $interface initcwnd 12 
fi
Run Code Online (Sandbox Code Playgroud)

如果您使用 DHCP,您可以执行类似的操作。配置接口后ifup运行正常脚本/sbin/ifup-local,您可以使用它来运行ip命令。在这种情况下,您可以简单地通过在接口配置中获取资源来获取默认网关的地址/etc/sysconfig/network-scripts/ifcfg-eth0(并且您的 Puppetfile资源将安装/sbin/ifup-local)。


小智 6

离开 larsks 的答案,如果您有静态 IP 地址,请将其放在 /sbin/ifup-local 中

#!/bin/sh

GATEWAY=`ip route| awk '/^def/{print $3}'`
DEFGWDEV=`ip route| awk '/^def/{print $5}'`

if [ "$1" = $DEFGWDEV ]; then
  ip route change default via $GATEWAY dev $DEFGWDEV initcwnd 12
fi
Run Code Online (Sandbox Code Playgroud)