如何修复 ifupdown2 的 puppet 安装以便网络恢复(或不会中断)?

如何修复 ifupdown2 的 puppet 安装以便网络恢复(或不会中断)?

我有 puppet 代码,它会自动在新配置的物理服务器上安装 ifupdown2(以及所有其他新主机配置)。(这是 Debian 11 Bullseye。)

然而,几乎所有的配置失败,这是在安装此包后应用的,因为安装 ifupdown2 时网络会中断,因此无法从 puppet 服务器或 apt repos 等下载文件。

不仅如此,Puppet 无法自行恢复。必须通过带外方式(即控制台、ipmi 等)处理该盒子,或者ifup -a只需重新启动,网络即可恢复。

我发现这是 ifupdown2 安装的一个已知问题:https://www.mail-archive.com/[电子邮件保护]/msg1703008.html

那里的建议是:

对于像 ansible、puppet 等配置系统,我建议您将其设置为将脚本推送到节点,该节点基本上使用 nohup 或其他方法执行与“apt-get install ifupdown2 && systemctl restart networking”等效的操作,以确保它在网络本身发生故障时不会失败。

我当前相关的傀儡诗节只是:

    package { "ifupdown2":
      ensure => 'latest',
    }

我应该如何解决这个问题,以便其余的 puppet 配置能够正确应用,也就是说,网络能够作为应用该资源的一部分出现?

答案1

如果您遵循找到的建议,您可以在安装软件包后重新启动网络服务。此方法要求service{'networking':}也由 Puppet 管理。

package { "ifupdown2":
  ensure => 'latest',
  notify => Service['networking'],
}

另一种方法可能是使用exec资源

package { "ifupdown2":
  ensure => 'latest',
  notify => Exec['start-networking'],
}

exec { 'start-networking':
  refreshonly => true,
  command     => [
    '/usr/bin/systemctl', 
    'start', 
    'networking'
  ],
}

同样,您可以使用 来exec运行ifup -a

这些可能仍会导致软件包更新后立即运行的某些资源失败,但会修复下一次 Puppet 运行的网络问题。如果这是不可接受的,您将不得不package完全放弃使用此资源类型进行此更新。您可以用一个脚本替换它,该脚本在确保任何其他资源之前执行更新和服务重启。

相关内容