Class: Cisco::Upgrade
- Defined in:
- lib/cisco_node_utils/upgrade.rb
Overview
Upgrade - node util class for upgrading Cisco devices
Class Method Summary collapse
-
.box_online? ⇒ Boolean
Return true if box is online and config mode is ready to be used.
-
.clear_status ⇒ Object
Delete install logs from previous installation.
-
.delete(image, uri = 'bootflash:') ⇒ Object
Deletes ‘image’ from ‘uri’.
-
.delete_boot(uri = 'bootflash:') ⇒ Object
Deletes currently booted image.
-
.image_version(image = nil, uri = nil) ⇒ Object
Returns version of the ‘image’.
-
.package ⇒ Object
Return the nxos image installed on the device.
- .save_config ⇒ Object
-
.upgrade(image, uri = 'bootflash:', del_boot = false, force_all = false) ⇒ Object
Attempts to upgrade the device to ‘image’.
-
.upgraded? ⇒ Boolean
Returns True if device upgraded.
Methods inherited from NodeUtil
client, #client, config_get, #config_get, #config_get_default, config_get_default, config_set, #config_set, #get, #ios_xr?, #nexus?, #node, node, platform, #platform, supports?, #supports?
Class Method Details
.box_online? ⇒ Boolean
Return true if box is online and config mode is ready to be used
79 80 81 82 |
# File 'lib/cisco_node_utils/upgrade.rb', line 79 def self.box_online? output = config_set('upgrade', 'is_box_online') output[0]['body'] == {} end |
.clear_status ⇒ Object
Delete install logs from previous installation
24 25 26 |
# File 'lib/cisco_node_utils/upgrade.rb', line 24 def self.clear_status config_set('upgrade', 'clear_status') end |
.delete(image, uri = 'bootflash:') ⇒ Object
Deletes ‘image’ from ‘uri’
29 30 31 32 33 |
# File 'lib/cisco_node_utils/upgrade.rb', line 29 def self.delete(image, uri='bootflash:') config_set('upgrade', 'delete', image: image, uri: uri) rescue Cisco::CliError => e raise e end |
.delete_boot(uri = 'bootflash:') ⇒ Object
Deletes currently booted image
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/cisco_node_utils/upgrade.rb', line 36 def self.delete_boot(uri='bootflash:') # Incase of a N9K, N3K and N9Kv the system and kickstart images are # the same. # Incase of a N5K, N6K and N7K the system and kickstart images are # different. system_image = config_get('show_version', 'system_image').split('/')[-1] kickstart_image = config_get('show_version', 'boot_image').split('/')[-1] if kickstart_image == system_image config_set('upgrade', 'delete_boot', image: system_image, uri: uri) else config_set('upgrade', 'delete_boot', image: system_image, uri: uri) config_set('upgrade', 'delete_boot', image: kickstart_image, uri: uri) end rescue Cisco::CliError => e raise e end |
.image_version(image = nil, uri = nil) ⇒ Object
Returns version of the ‘image’
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/cisco_node_utils/upgrade.rb', line 56 def self.image_version(image=nil, uri=nil) # Returns version of currently booted image by default if image && uri config_get('upgrade', 'image_version', image: image, uri: uri) else version = config_get('show_version', 'version') # show version displays version differently for release and # development builds. # Eg: release build # NXOS: version 7.0(3)I4(2) # Eg: development build # NXOS: version 7.0(3)IFD6(1) [build 7.0(3)IGD7(0.65)] return version unless version[/build\s+\S+/] version.split(' ')[-1].split(']')[0] end end |
.package ⇒ Object
Return the nxos image installed on the device
74 75 76 |
# File 'lib/cisco_node_utils/upgrade.rb', line 74 def self.package config_get('show_version', 'system_image') end |
.save_config ⇒ Object
84 85 86 87 88 |
# File 'lib/cisco_node_utils/upgrade.rb', line 84 def self.save_config config_set('upgrade', 'save_config') rescue Cisco::CliError => e raise e end |
.upgrade(image, uri = 'bootflash:', del_boot = false, force_all = false) ⇒ Object
Attempts to upgrade the device to ‘image’
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/cisco_node_utils/upgrade.rb', line 101 def self.upgrade(image, uri='bootflash:', del_boot=false, force_all=false) delete_boot(uri) if del_boot force_all ? upgrade_str = 'upgrade_force' : upgrade_str = 'upgrade' begin Cisco::Logger.debug("Upgrading to version: #{image}") config_set('upgrade', upgrade_str, image: image, uri: uri) rescue Cisco::RequestFailed, Cisco::CliError => e1 # raise if install command failed raise e1 if e1.class == Cisco::CliError # Catch 'Backend Processing Error'. Install continues inspite of the # error thrown. Resend install command and expect a CliError. begin config_set('upgrade', upgrade_str, image: image, uri: uri) rescue Cisco::CliError => e2 raise e2 unless e2..include?('Another install procedure may be in progress') end end end |
.upgraded? ⇒ Boolean
Returns True if device upgraded
91 92 93 94 95 96 97 98 |
# File 'lib/cisco_node_utils/upgrade.rb', line 91 def self.upgraded? return false unless config_get('upgrade', 'upgraded') (0..500).each do sleep 1 return true if box_online? end fail 'Configuration is still blocked' end |