2014-10-30 70 views
0

情景:通過連接到Ruby on Rails應用程序來更新主機名?

我正在尋找一個啓動時的Linux機器連接到一個Ruby on Rails網站,該網站上有添加到模型的主機名列表。 Linux框從列表中的下一個可用主機名記錄更新它自己的主機名,並在軌道站點中記錄它的MAC地址和IP地址。堅韌的權利?

的Ruby on Rails應用程序

Host.rb(模型)IP_ADDRESS:字符串,MAC_ADDRESS:字符串,主機名:字符串,可得:布爾

艱難的部分:

我想了解如何讓Linux機器連接RoR站點以查看我所有的主機記錄,這些記錄將列出所有主機名。即:

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,這將消除這麼多的麻煩。

任何人有任何想法?

回答

1

在具有方法Rails應用程序創建一個控制器:

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的路線。你可以從初始化shell腳本的主機名是這樣的:

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

當然,你應該檢查LWP請求的檢查返回值是否爲主機名枯竭。您可以使用curl或其他http客戶端來請求必要的信息,但我認爲這超出了問題的範圍。

發送MAC和IP地址可以通過附加它們作爲GET查詢參數這樣進行:

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

只要你收集到的MAC和IP地址對應的變量。

然後,在鐵軌邊,你可以登錄他們是這樣的:

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 
+0

謝謝你,這使得有很大的意義。我要去看看會發生什麼。如果有效,我會接受答案! – Devin 2014-10-30 18:47:51

+0

一個簡單的問題......控制器如何檢測客戶端正在訪問它,以及何時將更改從可用:true,變爲available:false? (我想這是兩個問題) – Devin 2014-10-30 18:51:12

+1

啊,你可以使用祕密令牌進行身份驗證,例如,所以只有你的客戶端能夠訪問它 - 只需將令牌作爲另一個獲取參數,並在軌道上檢查它。 – kroky 2014-10-30 18:52:17

相關問題