2014-02-15 37 views
0

我想編寫一個腳本,將IP地址從一個主機文件,以及用戶名信息從一個配置文件。我顯然沒有把文件名作爲正確的散列值。什麼是從文件輸入選項的正確方法? | Ruby腳本

我應該我File.new(options[:config_file], 'r').each { |params| puts params }可以打電話?我試過了目前的設置,並且

File.new(config_file, 'r').each { |params| puts params }以及File.new(:config_file, 'r').each { |params| puts params }沒有運氣。

我應該做不同的東西放在一起?像load(filename = nil)

options = {} 

opt_parser = OptionParser.new do |opt| 
    opt.banner = 'Usage: opt_parser COMMAND [OPTIONS]' 
    opt.on('--host_file','I need hosts, put them here') do |host_file| 
    options[:host_file] = host_file 
    end 
    opt.on('--config_file', 'I need config info, put it here') do |config_file| 
    options[:config_file] = config_file 
    end 
    opt.on('-h', '--help', 'What your looking at') do |help| 
    options[:help] = help 
    puts opt 
    end 
end 

opt_parser.parse! 

if options[:config_file] 
    File.new(options[:config_file], 'r').each { |params| puts params } 
end 

if options[:host_file] 
    File.new(options[:host_file], 'r').each { |host| puts host } 
end 
+0

你的文件格式是什麼?我會直接與YAML或CSV聯繫,如此做法。 YAML給你散列。從CSV你可以得到一個散列。 –

+0

現在只是標準的txt文件,但我打開選項。主機文件只是IP地址(或主機名),每行一個。配置文件是username = un,password = pw,每行一個。我不喜歡以明文形式存儲密碼,但我不確定我在這方面還能做什麼。 –

+0

看看這個。 http://stackoverflow.com/questions/6012930/read-lines-of-a-file-in-ruby –

回答

0

解析hosts文件

你可以寫你自己的解析器,或者使用已經實現一個寶石。

例如,使用"hosts" gem:(你需要安裝它)

require 'hosts' 

hosts = Hosts::File.read('/etc/hosts') 

entries = hosts.elements.select{ |element| element.is_a? Hosts::Entry } 
addresses = Hash[entries.map{ |entry| [entry.name, entry.address] }] 

# You should get a hash of entry names and addresses 
# {"localhost"=>"127.0.0.1", "ip6-localhost"=>"::1"} 

解析配置文件

存儲配置的一種常見方法是使用YAML文件。

考慮以下YAML文件(在 '/tmp/config.yml'):

require 'yaml' 

config = YAML.load_file('config.yml') 

# You should get a hash of config values 
# {"username"=>"foo", "password"=>"bar"} 

如果不這樣做:

username: foo 
password: bar 

您可以使用YAML module解析這個配置文件希望純文本格式存儲在配置文件中的密碼,您可以:

  • 在運行時詢問密碼,如果你的背景下允許
  • 使用環境變量來存儲密碼,並在運行時檢索

編輯
如果你只需要從一個文本文件中提取您的主機名,考慮每行一個主機名,你可以使用的東西如hostnames = IO.readlines("config.yml").map{ |line| line.chomp }獲取主機名數組。你可以遍歷這個數組來完成你的操作。

www.ruby-doc.org/core-2.1.0/IO.html#method-i-readline

+0

感謝'解析配置file'例如,幫助很大。因爲'hosts'文件的一部分,我不會使用'操作系統的主機files',但文件(可以是任何名稱)每行的IP地址。我想在下面的腳本session = Net :: SSH中使用每行作爲'@ hostname'。start(@hostname,@username,:password => @password,:encryption =>'aes256-cbc',::hos​​t_key =>'ssh-rsa')' –

相關問題