|
1 | 1 | require "rspec/core/rake_task" |
2 | | -require 'ipaddr' |
3 | 2 | require 'fileutils' |
4 | 3 | require 'json' |
5 | 4 | require 'time' |
@@ -94,27 +93,16 @@ namespace :server do |
94 | 93 | "または: IP_ADDRESS=192.168.1.1 rake server:find_by_ip" |
95 | 94 | end |
96 | 95 |
|
97 | | - # セキュリティのためRubyのIPAddrを使用してIPアドレスを検証 |
98 | | - begin |
99 | | - validated_ip = IPAddr.new(ip) |
100 | | - |
101 | | - # プライベート/特殊IPをチェック |
102 | | - if validated_ip.private? || validated_ip.loopback? || validated_ip.link_local? |
103 | | - abort "❌ エラー: プライベートまたは特殊IPアドレスは許可されていません: #{ip}" |
104 | | - end |
105 | | - |
106 | | - # さくらクラウドのIP範囲の追加検証(オプション) |
107 | | - if ENV['VALIDATE_SAKURA_RANGE'] == 'true' |
108 | | - unless in_sakura_cloud_range?(validated_ip) |
109 | | - abort "❌ エラー: IPアドレスがさくらクラウドの範囲外です: #{ip}" |
110 | | - end |
111 | | - end |
112 | | - |
113 | | - validated_ip_str = validated_ip.to_s |
114 | | - rescue IPAddr::InvalidAddressError => e |
115 | | - abort "❌ エラー: 無効なIPアドレス形式: #{ip}\n#{e.message}" |
| 96 | + # IPアドレスの検証(SakuraServerUserAgentの共通メソッドを使用) |
| 97 | + require_relative 'scripts/sakura_server_user_agent' |
| 98 | + |
| 99 | + unless SakuraServerUserAgent.valid_ip_address?(ip) |
| 100 | + abort "❌ エラー: 無効なIPアドレス形式: #{ip}" |
116 | 101 | end |
117 | 102 |
|
| 103 | + # IPアドレスを正規化 |
| 104 | + validated_ip_str = SakuraServerUserAgent.normalize_ip_address(ip) |
| 105 | + |
118 | 106 | puts "✅ 有効なIPアドレス: #{validated_ip_str}" |
119 | 107 | puts "🔍 サーバー情報を検索中..." |
120 | 108 | puts "-" * 50 |
@@ -359,51 +347,53 @@ namespace :server do |
359 | 347 | end |
360 | 348 | end |
361 | 349 |
|
362 | | -# ヘルパーメソッド(将来のフェーズで拡張予定) |
363 | | -def in_sakura_cloud_range?(ip_addr) |
364 | | - # さくらクラウドのIP範囲(現時点では簡略化) |
365 | | - sakura_ranges = [ |
366 | | - IPAddr.new("153.127.0.0/16"), # 石狩第二ゾーン |
367 | | - IPAddr.new("163.43.0.0/16"), # 東京ゾーン |
368 | | - IPAddr.new("133.242.0.0/16"), # 大阪ゾーン |
369 | | - ] |
370 | | - |
371 | | - sakura_ranges.any? { |range| range.include?(ip_addr) } |
372 | | -end |
| 350 | +# ヘルパーメソッド(将来の拡張用に保持) |
| 351 | +# 注: 現在は使用されていません(YAGNI原則により簡素化) |
| 352 | +# def in_sakura_cloud_range?(ip_addr) |
| 353 | +# sakura_ranges = [ |
| 354 | +# IPAddr.new("153.127.0.0/16"), # 石狩第二ゾーン |
| 355 | +# IPAddr.new("163.43.0.0/16"), # 東京ゾーン |
| 356 | +# IPAddr.new("133.242.0.0/16"), # 大阪ゾーン |
| 357 | +# ] |
| 358 | +# sakura_ranges.any? { |range| range.include?(ip_addr) } |
| 359 | +# end |
373 | 360 |
|
374 | 361 | # ================================================================ |
375 | | -# 並列実行タスク(Rakeの高度な機能) |
| 362 | +# 並列実行タスク(将来の実装用にコメントアウト) |
376 | 363 | # ================================================================ |
377 | | -namespace :parallel do |
378 | | - desc "複数サーバーの状態を並列チェック" |
379 | | - multitask :check_all => ['server:validate_env'] do |
380 | | - # servers.csvから全サーバーをチェック |
381 | | - servers = CSV.read('servers.csv', headers: true) |
382 | | - |
383 | | - # 並列でステータスチェックを実行 |
384 | | - threads = servers.map do |server| |
385 | | - Thread.new do |
386 | | - begin |
387 | | - result = `ruby scripts/initialize_server.rb --find #{server['Name']} 2>&1` |
388 | | - { name: server['Name'], status: $?.success? ? 'OK' : 'ERROR', details: result } |
389 | | - rescue => e |
390 | | - { name: server['Name'], status: 'ERROR', details: e.message } |
391 | | - end |
392 | | - end |
393 | | - end |
394 | | - |
395 | | - results = threads.map(&:value) |
396 | | - |
397 | | - # 結果をサマリー表示 |
398 | | - puts "\n" + "=" * 50 |
399 | | - puts "サーバーステータスサマリー" |
400 | | - puts "=" * 50 |
401 | | - results.each do |r| |
402 | | - status_icon = r[:status] == 'OK' ? '✅' : '❌' |
403 | | - puts "#{status_icon} #{r[:name]}: #{r[:status]}" |
404 | | - end |
405 | | - end |
406 | | -end |
| 364 | +# YAGNI原則により、実際に必要になるまでコメントアウト |
| 365 | +# 注意: 200サーバーの並列チェックはAPI制限のリスクあり |
| 366 | +# |
| 367 | +# namespace :parallel do |
| 368 | +# desc "複数サーバーの状態を並列チェック" |
| 369 | +# multitask :check_all => ['server:validate_env'] do |
| 370 | +# # servers.csvから全サーバーをチェック |
| 371 | +# servers = CSV.read('servers.csv', headers: true) |
| 372 | +# |
| 373 | +# # 並列でステータスチェックを実行 |
| 374 | +# threads = servers.map do |server| |
| 375 | +# Thread.new do |
| 376 | +# begin |
| 377 | +# result = `ruby scripts/initialize_server.rb --find #{server['Name']} 2>&1` |
| 378 | +# { name: server['Name'], status: $?.success? ? 'OK' : 'ERROR', details: result } |
| 379 | +# rescue => e |
| 380 | +# { name: server['Name'], status: 'ERROR', details: e.message } |
| 381 | +# end |
| 382 | +# end |
| 383 | +# end |
| 384 | +# |
| 385 | +# results = threads.map(&:value) |
| 386 | +# |
| 387 | +# # 結果をサマリー表示 |
| 388 | +# puts "\n" + "=" * 50 |
| 389 | +# puts "サーバーステータスサマリー" |
| 390 | +# puts "=" * 50 |
| 391 | +# results.each do |r| |
| 392 | +# status_icon = r[:status] == 'OK' ? '✅' : '❌' |
| 393 | +# puts "#{status_icon} #{r[:name]}: #{r[:status]}" |
| 394 | +# end |
| 395 | +# end |
| 396 | +# end |
407 | 397 |
|
408 | 398 | # ================================================================ |
409 | 399 | # クリーンタスク(Rake標準機能の活用) |
|
0 commit comments