猿问

从 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。

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


收到一只叮咚
浏览 93回答 1
1回答

慕标琳琳

实际上,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 或者好的 SYSV init。最后但并非最不重要的一点是如何配置机器。我强烈建议不要重新发明轮子。我在(闭源)项目中有非常相似的要求。我们使用 kickstart 进行基本的系统安装,并在重新启动到Ansible Tower后简单地执行一个 curl 命令,触发更详细的配置。由于我们有一个带有 MAC 的 DHCP 服务器、为所述 MAC 保留的 IP 以及易于配置的主机名(dnsmasq、caugh、caugh),所以这不是什么大问题。基本上,我们手动要做的就是注册 MAC 地址并分配 IP 和主机名,然后启动机器。
随时随地看视频慕课网APP

相关分类

Go
我要回答