gpt4 book ai didi

ruby-on-rails - 通过连接到 Ruby on Rails 应用程序更新主机名?

转载 作者:太空宇宙 更新时间:2023-11-04 11:01:54 25 4
gpt4 key购买 nike

场景:

我希望在启动时让 Linux 机器连接到 Ruby on Rails 网站,该网站已将主机名列表添加到模型中。 Linux box 从列表中的下一个可用主机名记录更新它自己的主机名,并在 rails 站点中记录它的 MAC 地址和 IP 地址。强硬吧?

Ruby on Rails 应用程序

Host.rb (model) ip_address:string, mac_address:string, hostname:string, available:boolean

艰难的部分:

我正在尝试弄清楚如何让 Linux 机器连接到 RoRs 站点以查看我的所有主机记录,其中将列出所有主机名。即:

id:1 hostname: "hostname-1", ip_address: nil, mac_address: nil, available: true
id:2 hostname: "hostname-2", ip_address: nil, mac_address: nil, available: true
id:3 hostname: "hostname-3", ip_address: nil, mac_address: nil, available: true

.. 然后查看下一个可用主机名并更新自身为该主机名,同时将 mac_address 和 ip_address 记录到该记录。

在 Linux 机器“下载”主机名后,记录将如下所示:

id:1 hostname: "hostname-1", ip_address: "192.168.1.10", mac_address: "00:13:EF:35:GH:00":, available: false
id:2 hostname: "hostname-2", ip_address: nil, mac_address: nil, available: true
id:3 hostname: "hostname-3", ip_address: nil, mac_address: nil, available: true

我尝试过的:

我在/etc/init.d/selfconfig 中放置了一个新文件

#! /bin/sh
# /etc/init.d/selfconfig

USER=root
HOME=/root

export USER HOME

# download remote /zip file with hostname inside
/usr/bin/wget -o /home/admin/selfconfig.zip http://examplewebsite.com/selfconfig.zip
# unzip the .zip file
/usr/bin/unzip -o /home/admin/selfconfig.zip /home/admin
# copy the hostname file to the primary hostname location
cp /home/admin/hostname /etc/hostname

exit 0

这正是我希望它在重启后更新主机名的方式,但主机名文件位于静态 .zip 文件中。我需要能够动态更新 .zip 文件或以某种方式让 Linux 机器连接到站点本身并提取 json 列表或其他内容。这就是我被困的地方。

推理:

我将设置大约 150 台这样的机器,这将消除很多麻烦。

有人有什么想法吗?

最佳答案

在 Rails 应用程序上创建一个具有以下方法的 Controller :

def hostname
host = Host.where(available: true).order(:id).first
if host.present?
render :text => host.hostname
else
render :text => 'No hostname available'
end
end

假设您已将访问此路由配置为 http://examplewebsite.com/hostname。您可以通过这种方式从 init shell 脚本获取主机名:

lwp-request http://examplewebsite.com/hostname >/etc/hostname

当然,您应该通过检查 lwp-request 的返回值来检查主机名是否耗尽。您可以使用 curl 或其他 http 客户端来请求必要的信息,但我认为这超出了问题的范围。

发送 MAC 和 IP 地址可以通过将它们附加为 GET 查询参数来完成,如下所示:

lwp-request http://examplewebsite.com/hostname?mac=$mac&ip=$ip >/etc/hostname

前提是您已经在相应的变量中收集了 MAC 和 IP 地址。

然后,在 rails 端,您可以像这样记录它们:

def hostname
host = Host.where(available: true).order(:id).first
if host.present?
host.update_attributes({
ip_address: params[:ip],
mac_address: params[:mac]
})
render :text => host.hostname
else
render :text => 'No hostname available'
end
end

关于ruby-on-rails - 通过连接到 Ruby on Rails 应用程序更新主机名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26659701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com