#!/usr/bin/env ruby # frozen_string_literal: true require 'pwn' require 'optparse' opts = {} OptionParser.new do |options| options.banner = "USAGE: #{File.basename($PROGRAM_NAME)} [opts] " options.on('-sIP', '--ip=IP', '') { |s| opts[:ip] = s } options.on('-dPORT', '--dest-port=PORT', '') do |port| opts[:port] = port end options.on('-UUSER', '--username=USER', '') do |user| opts[:username] = user end options.on('-PKEY', '--api-key=KEY', '') do |api_key| opts[:api_key] = api_key end options.on('-pPLUGIN', '--plugin-name=PLUGIN', '') do |plugin_name| opts[:plugin_name] = plugin_name end options.on('-L', '--[no-]list-updates', '') do |list_updates_bool| opts[:list_updates_bool] = list_updates_bool end options.on('-R', '--[no-]restart-jenkins', '') do |restart_bool| opts[:restart_jenkins] = restart_bool end end.parse! if opts.empty? puts `#{File.basename($PROGRAM_NAME)} --help` exit 1 end ip = opts[:ip].to_s.scrub port = opts[:port].to_i username = opts[:username] api_key = opts[:api_key] plugin_name = opts[:plugin_name] list_updates_bool = if opts[:list_updates_bool] true else false end restart_jenkins = opts[:restart_jenkins].nil? if port.positive? jenkins_obj = PWN::Plugins::Jenkins.connect( ip: ip, port: port, username: username, api_key: api_key ) else jenkins_obj = PWN::Plugins::Jenkins.connect( ip: ip, username: username, api_key: api_key ) end if list_updates_bool puts jenkins_obj.plugin.list_updates else if plugin_name.nil? jenkins_obj.plugin.list_updates.each_key do |current_plugin_name| jenkins_obj.plugin.update(current_plugin_name) end else jenkins_obj.plugin.update(plugin_name) end jenkins_obj.system.restart if restart_jenkins end PWN::Plugins::Jenkins.disconnect(jenkins_obj: jenkins_obj)