Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Don't need to backup the uptime of Ironware and Cisco IOS equipments #577

Closed
davromaniak opened this issue Sep 29, 2016 · 10 comments
Closed
Labels
bug device_model help_wanted No one is working on this issue. If no one fixes it, it will be closed after some time.

Comments

@davromaniak
Copy link
Contributor

davromaniak commented Sep 29, 2016

Hello.

On IronWare/Cisco IOS based equipments, all the configuration is backed up, but it contains the current uptime.

So every 6 hours (in my case), I get this kind of diff.

-! STACKID 1  system uptime is 466 days 5 hours 45 minutes 19 seconds 
+! STACKID 1  system uptime is 466 days 11 hours 46 minutes 15 seconds 

or

-! switchname uptime is 47 weeks, 5 days, 9 hours, 51 minutes
+! switchname uptime is 47 weeks, 5 days, 15 hours, 52 minutes

I don't think it's useful to backup this information.

If needed, I can work on a patch.

Thanks.

@davromaniak davromaniak changed the title Don't need to backup the uptime of Ironware equipments Don't need to backup the uptime of Ironware and Cisco IOS equipments Sep 29, 2016
@davromaniak
Copy link
Contributor Author

davromaniak commented Sep 29, 2016

I just checked ironware.rb, and it seems the following code doesn't do anything :

  cmd 'show version' do |cfg|
    cfg.gsub! /(^((.*)[Ss]ystem uptime(.*))$)/, '' #remove unwanted line system uptime
    cfg.gsub! /(^((.*)[Tt]he system started at(.*))$)/, ''
    cfg.gsub! /[Uu]p\s?[Tt]ime is .*/,''

    comment cfg
  end

As the regex seems to be correct, but the system uptime line is still here.

For the IOS module, there isn't any gsub to remove the uptime, I will try to make it work and make a patch.

Thanks.

@ytti
Copy link
Owner

ytti commented Sep 29, 2016

The IOS model only takes first line of 'show version', which does not contain uptime. But you're welcome to store all of it and remove changing data.

I can't explain the IronWare issue, but I'm happy to take a look, if remove access can be arranged.

@davromaniak
Copy link
Contributor Author

I won't be able to give you remote access to this device.

But I can send you a complete "show version" in a private message.

Thanks.

@ytti
Copy link
Owner

ytti commented Sep 29, 2016

I'm just confused because you see this problem in ios, which shouldn't even be storing this data to begin with. And you see this in ironware, which should be filtering.
So I suspect something else may be in play than model error, perhaps mistakenly wrong models are being used.
I have high confidence that the regexp would work if I give it to ruby.

You can test easily yourself

ssh box|tee box.log
show version
exit
irb
cfg = File.read "box.log"
cfg.gsub! /(^((.*)[Ss]ystem uptime(.*))$)/, '' #remove unwanted line system uptime
File.write "box-mangled.log", cfg

And review box-mangled.log.

@davromaniak
Copy link
Contributor Author

Hi.

I just tested the script using telnet (because SSH isn't enabled on these Brocade switches) and it works, the system uptime is stripped from the "show version".

I'm double checking my configuration to see where I made a PEBKAC.

Thanks.

@ytti ytti added the help_wanted No one is working on this issue. If no one fixes it, it will be closed after some time. label Sep 30, 2016
@davromaniak
Copy link
Contributor Author

Hello.

It seems I found the issue.

I removed "prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/" from the configuration file and it works.

Here is the prompt I get on the Brocade switches : "telnet@sw8-oob.domain.tld#"

I'm testing to see if removing the prompt variable hasn't broke anything.

Thanks.

@ytti
Copy link
Owner

ytti commented Sep 30, 2016

We don't use the configuration prompt, if model (or device) has prompt configured. Order of resolution is:

device_prompt => model_prompt => configuration_prompt

We'll stop when it is defined. If this is not true, then there is a bug. Code is here: https://github.com/ytti/oxidized/blob/master/lib/oxidized/node.rb#L127

@davromaniak
Copy link
Contributor Author

Well, I think I have an issue on those switches.

When the system uptime is displayed, the config file begins with

! Invalid input -> length 0
! Type ? for a list

But when the system uptime isn't displayed, there isn't these two lines.

I will try to see what these two lines are about.

Thanks.

@ytti
Copy link
Owner

ytti commented Sep 30, 2016

Do you per-chance use enable? Quite common bug we have (I should have paid more attention on model submissions) is that we don't consume/read prompt always.

If we don't consume prompt, then the next command we write races, it might read the previous prompt and have completely wrong idea where the command starts and ends.

We /must/ always eat every prompt (except if ssh and exec is set true), otherwise we get desynchronisation and program runs wonkily depending on timing.

I see that ironware actually has this bug:
https://github.com/ytti/oxidized/blob/master/lib/oxidized/model/ironware.rb#L77

send does not expect for prompt, but that line actually produces prompt, so prompt is left unconsumed and we lose track of state.
This line should be replaced by cmd vars(:enable)which will cause it to consume the prompt, and probably will address your problem.

@ytti ytti added the bug label Sep 30, 2016
@davromaniak
Copy link
Contributor Author

Hello.

Wiith "cmd vars(:enable)" instead of "cmd vars(:enable) + "\r\n"", I don't have any other issues.

Even the temperatures are stripped, which wasn't the case earlier.

Thanks.

@ytti ytti closed this as completed in d09f9c8 Sep 30, 2016
MajesticFalcon added a commit to MajesticFalcon/oxidized that referenced this issue Feb 6, 2017
* Remove extra new lines added by export command

* Updated Dockerfile to use ruby 2.3

* ruby2.1 behaves oddly with this style of dependcy

fixed ytti#565

* rollback `alvarion` model

wrongly removed in 56bac97

* interpolate node variable values

Empty value was variably considered "" or nil, now it will always be ""
string.

Now "nil", "false", "true" strings are converted to their respective
types nil, false and true.

This also means we cannot have verbatim strings by that name, like if
your password was "false", you're shit out of luck. If this is the case,
we can add some __false__ hack or consider other similar solutions.

Fixes ytti#500
Fixes ytti#534

May break stuff with ""/nil changing now, but as it was not consistent
to begin with, I find it acceptable. Users now may need to manually
enter nil in some fields to regain old behaviour.

* update CHANGELOG

* bump up version

* Redoing the modifications on a up to date base

* Redoing the modifications on a up to date base

* update model names

* add links to models

* add comware link

name contained -, which my replace regexp didn't allow, thus didn't
generate link for that model

* regexp missed this model

* prompt not captured after sending enabe PW

fixes ytti#577

* The \n is not seen as a lineline with ' it need "

* Update README.md

Added correction related to issue ytti#445 and docker-compose file example

* Interpolate also node variables, not just vars map

Fixes ytti#583

* Add nginx reverse proxy example

* Add apache2 reverse proxy example

* Add key authentication to ssh input

* bump up version

* Use variable vars(:ssh_keys) for private key authentication

* Fix blank pfSense configs being saved if regex doesn't match

* Update regex to match newer pfSense config files

* Add missing dependency for Rugged

* Added support for fujitsu blade switches

* Added Support for MRV FiberDriver Linux based management module

* fetch should return string, not array

Also if group was explicitly given, we referred to wrong directory

* return nil if we can't find file

unsure if we really should, or just raise the error and let consumer of
fetch decide what to do with the error

* add support for the HPE BladeSystem

* add Ruby.gitignore from github.com/github/gitignore

* Allow model to specify SSH PTY options

* it shouldn't be a private method

* add Planet SGS switches

* add to README

* Update dnos.rb

Handles old DNOS switches that do not allow term length 0 prior to enable, and double exits in case of enable..

* expect prompt after sending enable password

* Added support for Trango/Trangolink-45

I only have the Trangolink-45 so I'm not sure which other radios this
might support.

* This adds support for the Casa C1G CMTS

This will probably work for the other Casa CMTS as well.

* This adds support for D-Link switches

This specifically supports DES-3526/3550 series switches.

* This adds support for Hatteras Networks devices

* renamed  alvarion -> alvarion.rb

I believe from this:
require File.join dir, file+'.rb'

That the only way this model would work is if it has a .rb extension.  I
don't have any of these devices to test if this works.

* add support for PLANET SG switches

So far, only SGS switches were supported.

Now, we check the model type during the 'show version' command, and only
execute the 'show transceiver details' command in case an SGS switch was
detected (as its not supported on SG models).
We will also strip lines containing the current System Time and Uptime.
These only appear on SG models, but it's a good idea to strip them anyways.

* expect prompt after entering enable password

* Update ciscosmb.rb

Adapted for SG series, not sure about SF.

Please test.

* Update ciscosmb.rb

Forgot the username prompt change.

* Update ciscosmb.rb

Added old commands in case of different CLI variations.

* Added option to disable ssl verification checks for http source

* Updated config options

* New hook: awssns - Publish messages to AWS SNS topics

* exclude time from output

* Update eos.rb

* Remove trailing whitespace and enable prompt detection

Fixes: ytti#630

* Fix suggested by ytti for issue ytti#610

* Recursively search from one dir above specified

Fixes ytti#626

* update changelogs

* bump up version

* delete secret password if it is called secret

* documention: debug inside input is now boolean

* Update ios.rb

Do the terminal configure after enable since it might be prohibited in non ena

* Hide remaining passwords

* adding zhone OLT/MX GPON/MetroE/DSL gear

* Ignore undefined UTF8 in ironware.rb

We have some Brocade MLX devices that are triggering  'raised Encoding::UndefinedConversionError with msg ""\xFF" from ASCII-8BIT to UTF-8"'.  Update the ironware.rb file to ignore undefined UTF8 as well as invalid UTF8

* Add support for telnet

* Mask out configuration date for fiberdriver

Our fiberdriver devices report a timestamp during 'show running-config', which results in a config diff on every run.  This patch removes the '+! Configuration saved on 2017/01/10 14:21:20' line from the config, as well as a couple other useless status messages

* Ensure config gets returned even if no replacements are done

* Ignore fan speed changes for ironware

Brocade ICX/FCX log fan speed changes like this:

Fan ok, speed (auto): 1<->[[2]]<->3
Fan ok, speed (auto): [[1]]<->2<->3

Remove the current fan speed from the configuration to prevent lots of useless changes from being logged.

* Add suggestion to set `ip` variable in CSV reader

We have around ~1000 nodes, and oxidized was taking 30s to do the initial config load.  After adding the 'ip' variable to our CSV, load time dropped to less than 1 second.

* Update ironware.rb

Some Brocade devices only have two possible fan speeds.  Previously, this only handled three levels of fan speeds.  Updated regex will handle both of these cases:

    Fan 1 ok, speed (auto): 1<->[[2]]
    Fan 1 ok, speed (auto): 1<->[[2]]<->3

* Tweak the white space for cleaning.

* Untested GPG work

* Syntax error

* Update

* GPG support

* GPG support working

* Requested changes

* Update

* Don't show error is unsupported

This is the proposed fix for issue ytti#669. Let me know if there is anything that I need to fix.
This appears to be working correctly for the switch I have in house (S2400-24P). However the model is not working for the Aruba Instant AP (IAP) (virtual) controller. I hope to submit a fix for those once I have it working. The problems with that device appear to be unrelated to these changes as the prompt is incorrect.

* Filter out rogue client alerts from AireOS

* Added git build

* Adjustments

* feature: support IP Addressed provided with a netmask

* Updated split to be more efficient, thanks ytti!

* Update fabricos.rb

Ignore Uptime/Power/Date fields in chassisShow and configShow

* Restore compatibility with older versions of IronWare
Remove \r from the "enable" command. Both \r and \n are interpreted the same on older versions, causing a blank line to be sent as the enable password.
Add a delay between the sending of the "logout" command and each "exit" command. Older devices don't seem to be able to keep up with the speed the commands are sent without a delay.

* Cleaner way to fix older IronWare devices
This works on older IronWare devices without needing a sleep between each command.

* added secret removal for fortiOS

* nicer regex for both password variants of fortiOS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug device_model help_wanted No one is working on this issue. If no one fixes it, it will be closed after some time.
Projects
None yet
Development

No branches or pull requests

2 participants