oxidized 0.6.0 → 0.7.0
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 +4 -4
 - data/CHANGELOG.md +6 -0
 - data/README.md +27 -3
 - data/lib/oxidized/input/ssh.rb +1 -1
 - data/lib/oxidized/model/panos.rb +26 -0
 - data/lib/oxidized/model/screenos.rb +2 -0
 - data/lib/oxidized/source/http.rb +54 -0
 - data/oxidized.gemspec +1 -1
 - metadata +4 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: ef4f4fdf11db316eef81011b12feafa631253ba4
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 00cfa0009ac24aee8103c30a5958ddcf1164c2ea
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 4b55a6e73224b1cf47defa5f2294b333f9cdfc20fa89aa74ef419ac10f6fbfb3d72e15bf65b3018e718daff1c4cbbddf0bfe5af071a0ffd6f305b76cef0e5527
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: bdddd0238c911027b927a510269bcf7d34d36e6f58c8df669531ee65ae765f057279e0bfbe26eefb2401f8ecad79cfae52c69d84376b0722fb272aed43b694d2
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,3 +1,9 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # 0.7.0
         
     | 
| 
      
 2 
     | 
    
         
            +
            - FEATURE: support http source (by @laf)
         
     | 
| 
      
 3 
     | 
    
         
            +
            - FEATURE: support Palo Alto PANOS (by @rixxxx)
         
     | 
| 
      
 4 
     | 
    
         
            +
            - BUGFIX:  screenos fixes (by @rixxxx)
         
     | 
| 
      
 5 
     | 
    
         
            +
            - BUGFIX:  allow 'none' auth in ssh (spotted by @SaldoorMike, needed by ciscosmb+aireos)
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
       1 
7 
     | 
    
         
             
            # 0.6.0
         
     | 
| 
       2 
8 
     | 
    
         
             
            - FEATURE: support cumulus linux (by @FlorianDoublet)
         
     | 
| 
       3 
9 
     | 
    
         
             
            - FEATURE: support HP Comware SMB siwtches (by @sid3windr)
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -27,6 +27,7 @@ Oxidized is a network device configuration backup tool. It's a RANCID replacment 
     | 
|
| 
       27 
27 
     | 
    
         
             
                * [Privileged mode](#privileged-mode)
         
     | 
| 
       28 
28 
     | 
    
         
             
                * [Source: CSV](#source-csv)
         
     | 
| 
       29 
29 
     | 
    
         
             
                * [Source: SQLite](#source-sqlite)
         
     | 
| 
      
 30 
     | 
    
         
            +
                * [Source: HTTP](#source-http)
         
     | 
| 
       30 
31 
     | 
    
         
             
                * [Output: GIT](#output-git)
         
     | 
| 
       31 
32 
     | 
    
         
             
                * [Output: File](#output-file)
         
     | 
| 
       32 
33 
     | 
    
         
             
                * [Advanced Configuration](#advanced-configuration)
         
     | 
| 
         @@ -67,6 +68,7 @@ Oxidized is a network device configuration backup tool. It's a RANCID replacment 
     | 
|
| 
       67 
68 
     | 
    
         
             
             * Juniper ScreenOS (Netscreen)
         
     | 
| 
       68 
69 
     | 
    
         
             
             * Mikrotik RouterOS
         
     | 
| 
       69 
70 
     | 
    
         
             
             * Ubiquiti AirOS
         
     | 
| 
      
 71 
     | 
    
         
            +
             * Palo Alto PAN-OS
         
     | 
| 
       70 
72 
     | 
    
         | 
| 
       71 
73 
     | 
    
         | 
| 
       72 
74 
     | 
    
         
             
            # Installation
         
     | 
| 
         @@ -99,7 +101,7 @@ To initialize a default configuration in your home directory ```~/.config/oxidiz 
     | 
|
| 
       99 
101 
     | 
    
         | 
| 
       100 
102 
     | 
    
         
             
            ## Source
         
     | 
| 
       101 
103 
     | 
    
         | 
| 
       102 
     | 
    
         
            -
            Oxidized supports ```CSV``` and ``` 
     | 
| 
      
 104 
     | 
    
         
            +
            Oxidized supports ```CSV```, ```SQLite``` and ```HTTP``` as source backends. The CSV backend reads nodes from a rancid compatible router.db file. The SQLite backend will fire queries against a database and map certain fields to model items. The HTTP backend will fire queries against a http/https url. Take a look at the [Cookbook](#cookbook) for more details.
         
     | 
| 
       103 
105 
     | 
    
         | 
| 
       104 
106 
     | 
    
         
             
            ## Outputs
         
     | 
| 
       105 
107 
     | 
    
         | 
| 
         @@ -113,7 +115,7 @@ mkdir ~/.config/oxidized/configs 
     | 
|
| 
       113 
115 
     | 
    
         
             
            oxidized
         
     | 
| 
       114 
116 
     | 
    
         
             
            ```
         
     | 
| 
       115 
117 
     | 
    
         | 
| 
       116 
     | 
    
         
            -
            Now tell Oxidized where it finds a list of network devices to backup configuration from. You can either use CSV or SQLite as source. To create a  
     | 
| 
      
 118 
     | 
    
         
            +
            Now tell Oxidized where it finds a list of network devices to backup configuration from. You can either use CSV or SQLite as source. To create a CSV source add the following snippet:
         
     | 
| 
       117 
119 
     | 
    
         | 
| 
       118 
120 
     | 
    
         
             
            ```
         
     | 
| 
       119 
121 
     | 
    
         
             
            source:
         
     | 
| 
         @@ -220,6 +222,28 @@ source: 
     | 
|
| 
       220 
222 
     | 
    
         
             
                  enable: enable
         
     | 
| 
       221 
223 
     | 
    
         
             
            ```
         
     | 
| 
       222 
224 
     | 
    
         | 
| 
      
 225 
     | 
    
         
            +
            ### Source: HTTP
         
     | 
| 
      
 226 
     | 
    
         
            +
             
     | 
| 
      
 227 
     | 
    
         
            +
            One object per device.
         
     | 
| 
      
 228 
     | 
    
         
            +
             
     | 
| 
      
 229 
     | 
    
         
            +
            ```
         
     | 
| 
      
 230 
     | 
    
         
            +
            source:
         
     | 
| 
      
 231 
     | 
    
         
            +
              default: http
         
     | 
| 
      
 232 
     | 
    
         
            +
              http:
         
     | 
| 
      
 233 
     | 
    
         
            +
                url: https://url/api
         
     | 
| 
      
 234 
     | 
    
         
            +
                scheme: https
         
     | 
| 
      
 235 
     | 
    
         
            +
                delimiter: !ruby/regexp /:/
         
     | 
| 
      
 236 
     | 
    
         
            +
                map:
         
     | 
| 
      
 237 
     | 
    
         
            +
                  name: hostname
         
     | 
| 
      
 238 
     | 
    
         
            +
                  model: os
         
     | 
| 
      
 239 
     | 
    
         
            +
                  username: username
         
     | 
| 
      
 240 
     | 
    
         
            +
                  password: password
         
     | 
| 
      
 241 
     | 
    
         
            +
                vars_map:
         
     | 
| 
      
 242 
     | 
    
         
            +
                  enable: enable
         
     | 
| 
      
 243 
     | 
    
         
            +
                headers:
         
     | 
| 
      
 244 
     | 
    
         
            +
                  X-Auth-Token: 'somerandomstring'
         
     | 
| 
      
 245 
     | 
    
         
            +
            ```
         
     | 
| 
      
 246 
     | 
    
         
            +
             
     | 
| 
       223 
247 
     | 
    
         
             
            ### Output: File
         
     | 
| 
       224 
248 
     | 
    
         | 
| 
       225 
249 
     | 
    
         
             
            Parent directory needs to be created manually, one file per device, with most recent running config.
         
     | 
| 
         @@ -313,7 +337,7 @@ The following objects exist in Oxidized. 
     | 
|
| 
       313 
337 
     | 
    
         
             
               * input - method to acquire config, loaded dynamically as needed (Also default in config file)
         
     | 
| 
       314 
338 
     | 
    
         
             
               * output - method to store config, loaded dynamically as needed (Also default in config file)
         
     | 
| 
       315 
339 
     | 
    
         
             
               * prompt - prompt used for node (Also default in config file, can be specified in model too)
         
     | 
| 
       316 
     | 
    
         
            -
             * 'sql' and ' 
     | 
| 
      
 340 
     | 
    
         
            +
             * 'sql', 'csv' and 'http' (supports any format with single entry per line, like router.db)
         
     | 
| 
       317 
341 
     | 
    
         | 
| 
       318 
342 
     | 
    
         
             
            ## Model
         
     | 
| 
       319 
343 
     | 
    
         
             
             * lists commands to gather from given device model
         
     | 
    
        data/lib/oxidized/input/ssh.rb
    CHANGED
    
    | 
         @@ -24,7 +24,7 @@ module Oxidized 
     | 
|
| 
       24 
24 
     | 
    
         
             
                  @ssh = Net::SSH.start @node.ip, @node.auth[:username],
         
     | 
| 
       25 
25 
     | 
    
         
             
                                        :password => @node.auth[:password], :timeout => CFG.timeout,
         
     | 
| 
       26 
26 
     | 
    
         
             
                                        :paranoid => secure,
         
     | 
| 
       27 
     | 
    
         
            -
                                        :auth_methods => %w(publickey password),
         
     | 
| 
      
 27 
     | 
    
         
            +
                                        :auth_methods => %w(none publickey password),
         
     | 
| 
       28 
28 
     | 
    
         
             
                                        :number_of_password_prompts => 0
         
     | 
| 
       29 
29 
     | 
    
         
             
                  unless @exec
         
     | 
| 
       30 
30 
     | 
    
         
             
                    shell_open @ssh
         
     | 
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class PanOS < Oxidized::Model
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              # PaloAlto PAN-OS model #
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              comment  '! '
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              prompt /^[\w.\@:\(\)-]+>\s?$/
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              cmd :all do |cfg|
         
     | 
| 
      
 10 
     | 
    
         
            +
                cfg.each_line.to_a[2..-3].join
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              cmd 'show system info' do |cfg|
         
     | 
| 
      
 14 
     | 
    
         
            +
                cfg.gsub! /^(up)?time:\ .*\n/, ''
         
     | 
| 
      
 15 
     | 
    
         
            +
                comment cfg
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              cmd 'show config running' do |cfg|
         
     | 
| 
      
 19 
     | 
    
         
            +
                cfg
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              cfg :ssh do
         
     | 
| 
      
 23 
     | 
    
         
            +
                post_login 'set cli pager off'
         
     | 
| 
      
 24 
     | 
    
         
            +
                pre_logout 'exit'
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,54 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Oxidized
         
     | 
| 
      
 2 
     | 
    
         
            +
            class HTTP < Source
         
     | 
| 
      
 3 
     | 
    
         
            +
              def initialize
         
     | 
| 
      
 4 
     | 
    
         
            +
                @cfg = CFG.source.http
         
     | 
| 
      
 5 
     | 
    
         
            +
                super
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 9 
     | 
    
         
            +
                if @cfg.url.empty?
         
     | 
| 
      
 10 
     | 
    
         
            +
                  raise NoConfig, 'no source http url config, edit ~/.config/oxidized/config'
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              require "net/http"
         
     | 
| 
      
 15 
     | 
    
         
            +
              require "uri"
         
     | 
| 
      
 16 
     | 
    
         
            +
              require "json"
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              def load
         
     | 
| 
      
 19 
     | 
    
         
            +
                nodes = []
         
     | 
| 
      
 20 
     | 
    
         
            +
                uri = URI.parse(@cfg.url)
         
     | 
| 
      
 21 
     | 
    
         
            +
                http = Net::HTTP.new(uri.host, uri.port)
         
     | 
| 
      
 22 
     | 
    
         
            +
                http.use_ssl = true if uri.scheme == 'https'
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                # map headers
         
     | 
| 
      
 25 
     | 
    
         
            +
                headers = {}
         
     | 
| 
      
 26 
     | 
    
         
            +
                @cfg.headers.each do |header, value|
         
     | 
| 
      
 27 
     | 
    
         
            +
                  headers[header] = value
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                request = Net::HTTP::Get.new(uri.request_uri, headers)
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                response = http.request(request)
         
     | 
| 
      
 33 
     | 
    
         
            +
                data = JSON.parse(response.body)
         
     | 
| 
      
 34 
     | 
    
         
            +
                data.each do |line|
         
     | 
| 
      
 35 
     | 
    
         
            +
                  next if line.empty?
         
     | 
| 
      
 36 
     | 
    
         
            +
                  # map node parameters
         
     | 
| 
      
 37 
     | 
    
         
            +
                  keys = {}
         
     | 
| 
      
 38 
     | 
    
         
            +
                  @cfg.map.each do |key, position|
         
     | 
| 
      
 39 
     | 
    
         
            +
                    keys[key.to_sym] = line[position]
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
                  keys[:model] = map_model keys[:model] if keys.key? :model
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  # map node specific vars, empty value is considered as nil
         
     | 
| 
      
 44 
     | 
    
         
            +
                  vars = {}
         
     | 
| 
      
 45 
     | 
    
         
            +
                  @cfg.vars_map.each { |key, position| vars[key.to_sym] = line[position].to_s.empty? ? nil : line[position] }
         
     | 
| 
      
 46 
     | 
    
         
            +
                  keys[:vars] = vars unless vars.empty?
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                  nodes << keys
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
                nodes
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
            end
         
     | 
| 
      
 54 
     | 
    
         
            +
            end
         
     | 
    
        data/oxidized.gemspec
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: oxidized
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.7.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Saku Ytti
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2015- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2015-05-21 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: asetus
         
     | 
| 
         @@ -130,6 +130,7 @@ files: 
     | 
|
| 
       130 
130 
     | 
    
         
             
            - lib/oxidized/model/nos.rb
         
     | 
| 
       131 
131 
     | 
    
         
             
            - lib/oxidized/model/nxos.rb
         
     | 
| 
       132 
132 
     | 
    
         
             
            - lib/oxidized/model/outputs.rb
         
     | 
| 
      
 133 
     | 
    
         
            +
            - lib/oxidized/model/panos.rb
         
     | 
| 
       133 
134 
     | 
    
         
             
            - lib/oxidized/model/powerconnect.rb
         
     | 
| 
       134 
135 
     | 
    
         
             
            - lib/oxidized/model/procurve.rb
         
     | 
| 
       135 
136 
     | 
    
         
             
            - lib/oxidized/model/routeros.rb
         
     | 
| 
         @@ -145,6 +146,7 @@ files: 
     | 
|
| 
       145 
146 
     | 
    
         
             
            - lib/oxidized/output/git.rb
         
     | 
| 
       146 
147 
     | 
    
         
             
            - lib/oxidized/output/output.rb
         
     | 
| 
       147 
148 
     | 
    
         
             
            - lib/oxidized/source/csv.rb
         
     | 
| 
      
 149 
     | 
    
         
            +
            - lib/oxidized/source/http.rb
         
     | 
| 
       148 
150 
     | 
    
         
             
            - lib/oxidized/source/source.rb
         
     | 
| 
       149 
151 
     | 
    
         
             
            - lib/oxidized/source/sql.rb
         
     | 
| 
       150 
152 
     | 
    
         
             
            - lib/oxidized/string.rb
         
     |