idrac 0.1.29 → 0.1.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c080d98bd3ca44b9cc006ba66cc443ec410dcfb6bc1b712141720cc82998884
4
- data.tar.gz: fe0e09d1e3089c5d354abf6f786624d5afd7dfbcd7b2984d84a72be9936dcf9c
3
+ metadata.gz: 6992752c6eee7bfb3c858d8bb465c68c68bff2008732ecfc88553ba7ac0524b5
4
+ data.tar.gz: ab1e816e1c1d903c3095c5131652f917a61b3c4006e0941fd05d24555230f9f5
5
5
  SHA512:
6
- metadata.gz: 479b4ceb21686d4803a3f780f8fe19fcd1741f17cf3b1e24cd0039bd7758688810260dd939fe60cfe07b3b829feefcfbeee4953826f315b65707d2467121fa6c
7
- data.tar.gz: 1855a7715e1267c505cc20f9dfd9a9e0665b78ac4db5b06a6984503bb88fb849e7f41b9ebeb68b6e67a70d0b663ea3a6f9b7bbecd1e4c5e194aff198ca9b5238
6
+ metadata.gz: b65362922f5a5728e6840a005ee7a79f2c08a835bba4ae7394eb304d2992426d9a9a52457173eb579e8e792413767c9249c64f5eacaee9dd47105971b10b3187
7
+ data.tar.gz: 8f97a86b72b0fb3544cb85c61f94b8228b037f63adeb345d9da856f7159d7e698c176fd303e212182dd779496b77c07b0b2efe83cc8d8fe8cee281060132d0e0
data/README.md CHANGED
@@ -7,7 +7,11 @@ A Ruby client for the Dell iDRAC API. This gem provides a command-line interface
7
7
  - Take screenshots of the iDRAC console
8
8
  - Update firmware using Dell's catalog
9
9
  - Check for firmware updates
10
- - Interactive firmware update process
10
+ - Interactive firmware update process with robust error handling
11
+ - Simplified catalog download without requiring host connection
12
+ - Comprehensive error handling with clear user guidance
13
+ - Automatic job tracking and monitoring for firmware updates
14
+ - Color-coded terminal output for improved readability and user experience
11
15
 
12
16
  ## Installation
13
17
 
@@ -130,6 +134,25 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
130
134
 
131
135
  ## Changelog
132
136
 
137
+ ### Version 0.1.30
138
+ - **Enhanced Terminal Output with Colors**: Added colorized output for better readability and user experience
139
+ - Integrated the `colorize` gem to provide color-coded messages throughout the application
140
+ - Success messages are displayed in green, warnings in yellow, errors in red, and informational messages in cyan
141
+ - Improved visual distinction between different types of messages (success, error, warning, info)
142
+ - Enhanced readability of firmware update status, system information, and error messages
143
+ - Updated all output messages across the codebase for consistent color formatting
144
+ - Added color to the test script output for better visualization of the firmware update process
145
+
146
+ ### Version 0.1.29
147
+ - **Enhanced Firmware Update Error Handling**: Improved detection and handling of common firmware update issues
148
+ - Added specific error handling for "deployment already in progress" scenarios with clear user guidance
149
+ - Improved job ID extraction with fallback mechanisms to ensure proper job tracking
150
+ - Enhanced the `upload_firmware` method to properly initiate firmware updates by calling the SimpleUpdate action
151
+ - Added informative messages before starting firmware updates, including iDRAC limitations and requirements
152
+ - Simplified the catalog download process by removing host requirement from the `firmware:catalog` command
153
+ - Added a comprehensive test script (`test_firmware_update.rb`) to demonstrate the firmware update process
154
+ - Improved user experience with better error messages and recovery suggestions for common issues
155
+
133
156
  ### Version 0.1.28
134
157
  - **Improved Firmware Update Checking**: Completely redesigned the firmware update checking process
135
158
  - Added a dedicated `FirmwareCatalog` class for better separation of concerns
data/bin/idrac CHANGED
@@ -10,6 +10,7 @@ end
10
10
  # Load required gems directly
11
11
  require "thor"
12
12
  require "idrac"
13
+ require "colorize"
13
14
 
14
15
  module IDRAC
15
16
  class CLI < Thor
@@ -51,10 +52,11 @@ module IDRAC
51
52
  catalog = IDRAC::FirmwareCatalog.new
52
53
 
53
54
  begin
55
+ puts "Downloading Dell catalog...".yellow
54
56
  catalog_path = catalog.download(directory)
55
- puts "Catalog downloaded to: #{catalog_path}"
57
+ puts "Catalog downloaded to: #{catalog_path}".green
56
58
  rescue IDRAC::Error => e
57
- puts "Error: #{e.message}"
59
+ puts "Error: #{e.message}".red.bold
58
60
  exit 1
59
61
  end
60
62
  end
@@ -73,15 +75,15 @@ module IDRAC
73
75
  # Get system inventory - the Firmware class will print its own message
74
76
  inventory = firmware.get_system_inventory
75
77
 
76
- puts "System Information:"
77
- puts " Model: #{inventory[:system][:model]}"
78
- puts " Manufacturer: #{inventory[:system][:manufacturer]}"
79
- puts " Service Tag: #{inventory[:system][:service_tag]}"
80
- puts " BIOS Version: #{inventory[:system][:bios_version]}"
78
+ puts "System Information:".green.bold
79
+ puts " Model: #{inventory[:system][:model]}".light_cyan
80
+ puts " Manufacturer: #{inventory[:system][:manufacturer]}".light_cyan
81
+ puts " Service Tag: #{inventory[:system][:service_tag]}".light_cyan
82
+ puts " BIOS Version: #{inventory[:system][:bios_version]}".light_cyan
81
83
 
82
- puts "\nInstalled Firmware:"
84
+ puts "\nInstalled Firmware:".green.bold
83
85
  inventory[:firmware].each do |fw|
84
- puts " #{fw[:name]}: #{fw[:version]} (#{fw[:updateable] ? 'Updateable' : 'Not Updateable'})"
86
+ puts " #{fw[:name]}: #{fw[:version]} (#{fw[:updateable] ? 'Updateable'.light_green : 'Not Updateable'.light_red})".light_cyan
85
87
  end
86
88
 
87
89
  # Default catalog location is now ~/.idrac/Catalog.xml
@@ -95,13 +97,13 @@ module IDRAC
95
97
  updates = firmware.check_updates(catalog_path)
96
98
 
97
99
  if updates.empty?
98
- puts "No updates available."
100
+ puts "\nNo updates available.".yellow
99
101
  end
100
102
  else
101
- puts "\nTo check for updates, download the catalog first with 'idrac firmware:catalog'"
103
+ puts "\nTo check for updates, download the catalog first with 'idrac firmware:catalog'".yellow
102
104
  end
103
105
  rescue IDRAC::Error => e
104
- puts "Error: #{e.message}"
106
+ puts "Error: #{e.message}".red.bold
105
107
  exit 1
106
108
  ensure
107
109
  client.logout
@@ -131,42 +133,42 @@ module IDRAC
131
133
 
132
134
  # If still no catalog, download it
133
135
  if catalog_path.nil?
134
- puts "No catalog found. Downloading..."
136
+ puts "No catalog found. Downloading...".yellow
135
137
  catalog = IDRAC::FirmwareCatalog.new
136
138
  catalog_path = catalog.download
137
139
  end
138
140
 
139
- puts "Starting interactive firmware update. Please note:"
140
- puts "- The iDRAC can only process one firmware update at a time"
141
- puts "- Updates may take several minutes to complete"
142
- puts "- For BIOS updates, a server reboot will be required to apply the update"
143
- puts "- If you encounter errors, check the iDRAC web interface for active jobs"
141
+ puts "Starting interactive firmware update. Please note:".green.bold
142
+ puts "- The iDRAC can only process one firmware update at a time".light_cyan
143
+ puts "- Updates may take several minutes to complete".light_cyan
144
+ puts "- For BIOS updates, a server reboot will be required to apply the update".light_cyan
145
+ puts "- If you encounter errors, check the iDRAC web interface for active jobs".light_cyan
144
146
  puts ""
145
147
 
146
148
  begin
147
149
  firmware.interactive_update(catalog_path)
148
150
  rescue ArgumentError => e
149
- puts "Error: #{e.message}"
150
- puts "This could be due to an issue with the interactive update process."
151
- puts "If you're seeing a 'job ID not found' error, it might be because:"
152
- puts "1. The firmware update job wasn't created properly"
153
- puts "2. There's already an update in progress"
154
- puts "3. The iDRAC needs time to process the previous request"
155
- puts "\nTry again in a few minutes or check the iDRAC web interface for active jobs."
151
+ puts "Error: #{e.message}".red.bold
152
+ puts "This could be due to an issue with the interactive update process.".yellow
153
+ puts "If you're seeing a 'job ID not found' error, it might be because:".yellow
154
+ puts "1. The firmware update job wasn't created properly".light_yellow
155
+ puts "2. There's already an update in progress".light_yellow
156
+ puts "3. The iDRAC needs time to process the previous request".light_yellow
157
+ puts "\nTry again in a few minutes or check the iDRAC web interface for active jobs.".light_cyan
156
158
  rescue IDRAC::Error => e
157
159
  if e.message.include?("already in progress")
158
- puts "Error: #{e.message}"
159
- puts "\nTroubleshooting steps:"
160
- puts "1. Check the iDRAC web interface under Maintenance > System Update for active jobs"
161
- puts "2. Wait for any existing updates to complete (can take 15-30 minutes)"
162
- puts "3. If no updates appear to be in progress, you may need to restart the iDRAC"
163
- puts " (iDRAC web interface > Settings > iDRAC Settings > Reset iDRAC)"
160
+ puts "Error: #{e.message}".red.bold
161
+ puts "\nTroubleshooting steps:".yellow.bold
162
+ puts "1. Check the iDRAC web interface under Maintenance > System Update for active jobs".light_yellow
163
+ puts "2. Wait for any existing updates to complete (can take 15-30 minutes)".light_yellow
164
+ puts "3. If no updates appear to be in progress, you may need to restart the iDRAC".light_yellow
165
+ puts " (iDRAC web interface > Settings > iDRAC Settings > Reset iDRAC)".light_yellow
164
166
  else
165
- puts "Error: #{e.message}"
167
+ puts "Error: #{e.message}".red.bold
166
168
  end
167
169
  end
168
170
  rescue => e
169
- puts "Error: #{e.message}"
171
+ puts "Error: #{e.message}".red.bold
170
172
  exit 1
171
173
  ensure
172
174
  client.logout
@@ -212,7 +214,7 @@ module IDRAC
212
214
 
213
215
  def ensure_host_provided
214
216
  unless options[:host]
215
- puts "Error: No value provided for required option '--host'"
217
+ puts "Error: No value provided for required option '--host'".red.bold
216
218
  exit 1
217
219
  end
218
220
  end
@@ -220,8 +222,8 @@ module IDRAC
220
222
  def check_ssl_verification
221
223
  # If verify_ssl is not explicitly set in the command line, show a warning
222
224
  unless ARGV.include?('--verify-ssl') || ARGV.include?('--no-verify-ssl')
223
- puts "WARNING: SSL verification is disabled by default. iDRAC typically uses self-signed certificates."
224
- puts " Use --verify-ssl if you want to enable SSL verification."
225
+ puts "WARNING: SSL verification is disabled by default. iDRAC typically uses self-signed certificates.".yellow
226
+ puts " Use --verify-ssl if you want to enable SSL verification.".yellow
225
227
  puts ""
226
228
  end
227
229
  end
@@ -0,0 +1 @@
1
+ "8e46be845f83db1:0"
Binary file
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,103 @@
1
+ # IDRAC
2
+
3
+ A Ruby client for the Dell iDRAC API. This gem provides a command-line interface and a Ruby API for interacting with Dell iDRAC servers.
4
+
5
+ ## Features
6
+
7
+ - Take screenshots of the iDRAC console
8
+ - Update firmware using Dell's catalog
9
+ - Check for firmware updates
10
+ - Interactive firmware update process
11
+
12
+ ## Installation
13
+
14
+ Add this line to your application's Gemfile:
15
+
16
+ ```ruby
17
+ gem 'idrac'
18
+ ```
19
+
20
+ And then execute:
21
+
22
+ $ bundle install
23
+
24
+ Or install it yourself as:
25
+
26
+ $ gem install idrac
27
+
28
+ ## Usage
29
+
30
+ ### Command Line Interface
31
+
32
+ The gem provides a command-line interface for interacting with iDRAC servers:
33
+
34
+ ```bash
35
+ # Take a screenshot of the iDRAC console
36
+ idrac screenshot --host=192.168.1.100 --username=root --password=calvin
37
+ # Specify a custom output filename
38
+ idrac screenshot --host=192.168.1.100 --username=root --password=calvin --output=my_screenshot.png
39
+
40
+ # Download the Dell firmware catalog
41
+ idrac firmware:catalog --host=192.168.1.100 --username=root --password=calvin
42
+
43
+ # Check firmware status and available updates
44
+ idrac firmware:status --host=192.168.1.100 --username=root --password=calvin
45
+
46
+ # Update firmware using a specific file
47
+ idrac firmware:update /path/to/firmware.exe --host=192.168.1.100 --username=root --password=calvin
48
+
49
+ # Interactive firmware update
50
+ idrac firmware:interactive --host=192.168.1.100 --username=root --password=calvin
51
+ ```
52
+
53
+ ### Ruby API
54
+
55
+ ```ruby
56
+ require 'idrac'
57
+
58
+ # Create a client
59
+ client = IDRAC.new(
60
+ host: '192.168.1.100',
61
+ username: 'root',
62
+ password: 'calvin'
63
+ )
64
+
65
+ # Take a screenshot (using the client convenience method)
66
+ filename = client.screenshot
67
+ puts "Screenshot saved to: #{filename}"
68
+
69
+ # Or use the Screenshot class directly for more control
70
+ screenshot = IDRAC::Screenshot.new(client)
71
+ filename = screenshot.capture
72
+ puts "Screenshot saved to: #{filename}"
73
+
74
+ # Firmware operations
75
+ firmware = IDRAC::Firmware.new(client)
76
+
77
+ # Download catalog
78
+ catalog_path = firmware.download_catalog
79
+
80
+ # Get system inventory
81
+ inventory = firmware.get_system_inventory
82
+ puts "Service Tag: #{inventory[:system][:service_tag]}"
83
+
84
+ # Check for updates
85
+ updates = firmware.check_updates(catalog_path)
86
+ updates.each do |update|
87
+ puts "#{update[:name]}: #{update[:current_version]} -> #{update[:available_version]}"
88
+ end
89
+
90
+ # Update firmware
91
+ job_id = firmware.update('/path/to/firmware.exe', wait: true)
92
+ puts "Update completed with job ID: #{job_id}"
93
+ ```
94
+
95
+ ## Development
96
+
97
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
98
+
99
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
100
+
101
+ ## Contributing
102
+
103
+ Bug reports and pull requests are welcome on GitHub at https://github.com/usiegj00/idrac.
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
9
+
10
+ # Add a task that tags and pushes to the repository and builds
11
+ # the gem and pushes it to rubygems.org.
12
+ # Depend on the build task to ensure the gem is up to date.
13
+ task :release => [:build] do
14
+ system "git tag v#{Idrac::VERSION}"
15
+ system "git push --tags"
16
+ system "gem push pkg/idrac-#{Idrac::VERSION}.gem"
17
+ end
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "idrac"
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ require "irb"
11
+ IRB.start(__FILE__)
@@ -0,0 +1,179 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Attempt to load bundler/setup, but don't fail if it's not available
4
+ begin
5
+ require "bundler/setup"
6
+ rescue LoadError
7
+ # Continue without bundler
8
+ end
9
+
10
+ # Load required gems directly
11
+ require "thor"
12
+ require "idrac"
13
+
14
+ module IDRAC
15
+ class CLI < Thor
16
+ class_option :host, type: :string, required: true, desc: "iDRAC host address"
17
+ class_option :username, type: :string, required: true, desc: "iDRAC username"
18
+ class_option :password, type: :string, required: true, desc: "iDRAC password"
19
+ class_option :port, type: :numeric, default: 443, desc: "iDRAC port"
20
+ class_option :no_ssl, type: :boolean, default: false, desc: "Disable SSL"
21
+ class_option :no_verify_ssl, type: :boolean, default: false, desc: "Disable SSL verification"
22
+
23
+ desc "firmware:update PATH", "Update firmware using the specified file"
24
+ method_option :wait, type: :boolean, default: true, desc: "Wait for the update to complete"
25
+ method_option :timeout, type: :numeric, default: 3600, desc: "Timeout in seconds when waiting"
26
+ def firmware_update(path)
27
+ client = create_client
28
+ firmware = IDRAC::Firmware.new(client)
29
+
30
+ begin
31
+ job_id = firmware.update(path, wait: options[:wait], timeout: options[:timeout])
32
+ puts "Firmware update initiated with job ID: #{job_id}"
33
+ rescue IDRAC::Error => e
34
+ puts "Error: #{e.message}"
35
+ exit 1
36
+ ensure
37
+ client.logout
38
+ end
39
+ end
40
+
41
+ desc "firmware:catalog [DIRECTORY]", "Download Dell firmware catalog"
42
+ def firmware_catalog(directory = nil)
43
+ client = create_client
44
+ firmware = IDRAC::Firmware.new(client)
45
+
46
+ begin
47
+ catalog_path = firmware.download_catalog(directory)
48
+ puts "Catalog downloaded to: #{catalog_path}"
49
+ rescue IDRAC::Error => e
50
+ puts "Error: #{e.message}"
51
+ exit 1
52
+ ensure
53
+ client.logout
54
+ end
55
+ end
56
+
57
+ desc "firmware:status", "Show current firmware status and available updates"
58
+ method_option :catalog, type: :string, desc: "Path to existing catalog file"
59
+ def firmware_status
60
+ client = create_client
61
+ firmware = IDRAC::Firmware.new(client)
62
+
63
+ begin
64
+ # Get system inventory
65
+ inventory = firmware.get_system_inventory
66
+
67
+ puts "System Information:"
68
+ puts " Model: #{inventory[:system][:model]}"
69
+ puts " Manufacturer: #{inventory[:system][:manufacturer]}"
70
+ puts " Service Tag: #{inventory[:system][:service_tag]}"
71
+ puts " BIOS Version: #{inventory[:system][:bios_version]}"
72
+
73
+ puts "\nInstalled Firmware:"
74
+ inventory[:firmware].each do |fw|
75
+ puts " #{fw[:name]}: #{fw[:version]} (#{fw[:updateable] ? 'Updateable' : 'Not Updateable'})"
76
+ end
77
+
78
+ # Check for updates if catalog is available
79
+ if options[:catalog] || File.exist?(File.join(Dir.pwd, "Catalog.xml"))
80
+ catalog_path = options[:catalog] || File.join(Dir.pwd, "Catalog.xml")
81
+ puts "\nChecking for updates using catalog: #{catalog_path}"
82
+
83
+ updates = firmware.check_updates(catalog_path)
84
+
85
+ if updates.empty?
86
+ puts "No updates available."
87
+ else
88
+ puts "\nAvailable Updates:"
89
+ updates.each do |update|
90
+ puts " #{update[:name]}: #{update[:current_version]} -> #{update[:available_version]}"
91
+ end
92
+ end
93
+ else
94
+ puts "\nTo check for updates, download the catalog first with 'idrac firmware:catalog'"
95
+ end
96
+ rescue IDRAC::Error => e
97
+ puts "Error: #{e.message}"
98
+ exit 1
99
+ ensure
100
+ client.logout
101
+ end
102
+ end
103
+
104
+ desc "firmware:interactive", "Interactive firmware update"
105
+ method_option :catalog, type: :string, desc: "Path to existing catalog file"
106
+ def firmware_interactive
107
+ client = create_client
108
+ firmware = IDRAC::Firmware.new(client)
109
+
110
+ begin
111
+ catalog_path = options[:catalog]
112
+
113
+ # If no catalog specified, check if one exists in current directory
114
+ if catalog_path.nil? && File.exist?(File.join(Dir.pwd, "Catalog.xml"))
115
+ catalog_path = File.join(Dir.pwd, "Catalog.xml")
116
+ end
117
+
118
+ # If still no catalog, download it
119
+ if catalog_path.nil?
120
+ puts "No catalog found. Downloading..."
121
+ catalog_path = firmware.download_catalog
122
+ end
123
+
124
+ firmware.interactive_update(catalog_path)
125
+ rescue IDRAC::Error => e
126
+ puts "Error: #{e.message}"
127
+ exit 1
128
+ ensure
129
+ client.logout
130
+ end
131
+ end
132
+
133
+ desc "screenshot", "Take a screenshot of the current iDRAC console"
134
+ method_option :output, type: :string, desc: "Output filename (default: idrac_screenshot_timestamp.png)"
135
+ def screenshot
136
+ client = create_client
137
+
138
+ begin
139
+ # Create a Screenshot instance directly
140
+ screenshot = IDRAC::Screenshot.new(client)
141
+ filename = screenshot.capture
142
+
143
+ # Rename the file if output option is provided
144
+ if options[:output]
145
+ new_filename = options[:output]
146
+ File.rename(filename, new_filename)
147
+ filename = new_filename
148
+ end
149
+
150
+ puts "Screenshot saved to: #{filename}"
151
+ rescue IDRAC::Error => e
152
+ puts "Error: #{e.message}"
153
+ exit 1
154
+ ensure
155
+ client.logout
156
+ end
157
+ end
158
+
159
+ map "firmware:update" => :firmware_update
160
+ map "firmware:catalog" => :firmware_catalog
161
+ map "firmware:status" => :firmware_status
162
+ map "firmware:interactive" => :firmware_interactive
163
+
164
+ private
165
+
166
+ def create_client
167
+ IDRAC::Client.new(
168
+ host: options[:host],
169
+ username: options[:username],
170
+ password: options[:password],
171
+ port: options[:port],
172
+ use_ssl: !options[:no_ssl],
173
+ verify_ssl: !options[:no_verify_ssl]
174
+ )
175
+ end
176
+ end
177
+ end
178
+
179
+ IDRAC::CLI.start(ARGV)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/idrac/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "idrac"
7
+ spec.version = IDRAC::VERSION
8
+ spec.authors = ["Jonathan Siegel"]
9
+ spec.email = ["<248302+usiegj00@users.noreply.github.com>"]
10
+
11
+ spec.summary = "API Client for Dell iDRAC"
12
+ spec.description = "A Ruby client for the Dell iDRAC API"
13
+ spec.homepage = "http://github.com"
14
+ spec.license = "MIT"
15
+ spec.required_ruby_version = ">= 3.2.0" # Updated to support Ruby 3.2.x
16
+
17
+ # spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
18
+
19
+ spec.metadata["homepage_uri"] = spec.homepage
20
+ # spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
21
+ # spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
22
+
23
+ # Specify which files should be added to the gem when it is released.
24
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
25
+ spec.files = Dir.chdir(__dir__) do
26
+ `git ls-files -z`.split("\x0").reject do |f|
27
+ (File.expand_path(f) == __FILE__) ||
28
+ f.start_with?(*%w[test/ spec/ features/ .git .circleci appveyor Gemfile])
29
+ end
30
+ end
31
+ spec.bindir = "bin"
32
+ spec.executables = ["idrac"]
33
+ spec.require_paths = ["lib"]
34
+
35
+ # Dependencies - Using more flexible version constraints
36
+ spec.add_dependency "httparty", ">= 0.21.0", "< 0.22.0"
37
+ spec.add_dependency "nokogiri", ">= 1.15.0", "< 1.19.0"
38
+ spec.add_dependency "faraday", ">= 2.7.0", "< 2.8.0"
39
+ spec.add_dependency "faraday-multipart", ">= 1.0.0", "< 1.1.0"
40
+ spec.add_dependency "thor", ">= 1.2.0", "< 1.4.0"
41
+ spec.add_dependency "base64", "~> 0.1", ">= 0.1.0"
42
+
43
+ # Development dependencies
44
+ spec.add_development_dependency "bundler", "~> 2.4", ">= 2.4.0"
45
+ spec.add_development_dependency "rake", "~> 13.0"
46
+ spec.add_development_dependency "rspec", "~> 3.12"
47
+ spec.add_development_dependency "debug", "~> 1.8"
48
+
49
+ # For more information and examples about making a new gem, check out our
50
+ # guide at: https://bundler.io/guides/creating_gem.html
51
+ end