为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
收到一只叮咚 2023-08-07 15:04:57
我正在创建一个 Django Web 应用程序,它将协助准系统服务器部署,其中准系统服务器将 PXE 启动到自定义 LiveCD,以发送 cURL 命令将其自身注册到 DRF REST API。当 Django 收到POST请求时,它将远程启动一个 Go 应用程序,该应用程序将根据 REST API 中的条目找到基本服务器,然后开始配置服务器。识别/将裸机服务器引入我的 Go 服务器的最佳方式是什么?我的想法是要么使用解析器参数来识别服务器,然后 Go 将从 REST API 中提取基本的服务器信息,或者在 REST API 中添加一个布尔字段,Go 应用程序将查找 TRUE 的条目,然后将其翻转到当它开始设置裸机服务器时为 FALSE。这是完成这项工作的最佳方法还是有更好的方法?
查看完整描述

1 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

实际上,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 和主机名,然后启动机器。


查看完整回答
反对 回复 2023-08-07
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信