从 Django View 将变量传递给远程 (Golang) 应用程序的最佳方式



我正在创建一个Django Web应用程序,它将协助准系统服务器部署,其中裸骨服务器将PXE启动到自定义LiveCD以发送cURL命令以将自身注册到DRF REST API。

当 Django 收到POST请求时,它将远程启动一个 Go 应用程序,该应用程序将根据 REST API 中的条目找到裸机服务器,然后开始配置服务器。将裸机服务器识别/引入我的 Go 服务器的最佳方法是什么?

我的想法是要么使用解析器参数来识别服务器,然后 Go 将从 REST API 中提取裸骨服务器信息,或者在 REST API 中添加一个布尔字段,Go 应用程序将查找 TRUE 的条目,然后在开始设置裸骨服务器时将其翻转为 FALSE。

这是完成这项工作的最佳方法还是有更好的方法?

实际上,PXELINUX 带有基于系统 MAC 外观的识别机制,并且可以相应地定制配置。由于您无论如何都需要对裸机服务器进行记帐(端口安全吗?;)(,因此无论如何,您应该知道裸机服务器上所有接口的MAC外观。

您的目录通常如下所示(路径前缀可能不同(。

/srv/pxe/pxelinux.cfg/default

现在发生的情况是,您的系统启动,发送DHCP请求并获得包含DHCP选项"下一个服务器"和"文件名"的提议。当系统选择所述报价时,它将连接到"下一个服务器"并请求"文件名",通常pxelinux.0。这是你的第一个潜在钩子:编写一个处理请求并注册系统的 tftp 服务器。

现在pxelinux.0执行,它会读取上面的配置文件。但事情是这样的:假设系统的Mac地址是23:67:33:5a:cc:e8,并且文件

/srv/pxe/pxelinux.cfg/23-67-33-5a-cc-e8

存在,这将改为读取。这是你的第二个钩子:请求将由 tftp 记录。

无论使用default还是系统特定的配置文件,基本上我们都在谈论 GRUB 配置文件。假设你使用Kickstart来安装系统,它看起来像这样。

default linux
prompt 0
timeout 1
label linux
kernel /images/yourdistro/vmlinuz
ipappend 2
append initrd=/images/yourdistro/initrd.img console=ttyS0,115200

现在,事情是这样的:您有几种在启动时执行自定义程序的可能性:

  • 将可执行文件的路径追加到append参数。按照惯例,内核会将它不知道的所有参数发送到 pid 1。虽然我还没有测试过 systemd 是否遵守约定并简单地执行它不知道的参数,但我假设了很多。
  • 克龙。如今,大多数 cron 实现都支持@boot时间定义。
  • init 系统,无论是 systemd 还是 openrc 还是好的 ol' SYSV init。

最后但并非最不重要的一点是,如何配置机器。我强烈建议不要重新发明轮子。我在(闭源(项目中有非常相似的要求。我们使用kickstart进行基本的系统安装,并在重新启动到Ansible Tower后简单地发送一个curl命令,触发更详细的配置。由于我们有一个带有MAC的DHCP服务器,为所述MAC保留的IP和易于配置的主机名(dnsmasq,caugh,caugh(,这不是什么大问题。基本上,我们所要做的就是手动注册MAC地址并分配IP和主机名,然后启动机器。

相关内容

  • 没有找到相关文章

最新更新