Skip to content

Latest commit

 

History

History
189 lines (146 loc) · 4.57 KB

Outputs.md

File metadata and controls

189 lines (146 loc) · 4.57 KB

Outputs

Output: File

Parent directory needs to be created manually, one file per device, with most recent running config.

output:
  file:
    directory: /var/lib/oxidized/configs

Output: Git

This uses the rugged/libgit2 interface. So you should remember that normal Git hooks will not be executed.

For a single repository containing all devices:

output:
  default: git
  git:
    user: Oxidized
    email: [email protected]
    repo: "/var/lib/oxidized/devices.git"

And for group-based repositories:

output:
  default: git
  git:
    user: Oxidized
    email: [email protected]
    repo: "/var/lib/oxidized/git-repos/default.git"

Oxidized will create a repository for each group in the same directory as the default.git. For example:

host1:ios:first
host2:nxos:second

This will generate the following repositories:

$ ls /var/lib/oxidized/git-repos

default.git first.git second.git

If you would like to use groups and a single repository, you can force this with the single_repo config.

output:
  default: git
  git:
    single_repo: true
    repo: "/var/lib/oxidized/devices.git"

Output: Git-Crypt

This uses the gem git and system git-crypt interfaces. Have a look at GIT-Crypt documentation to know how to install it. Additionally to user and email informations, you have to provide the users ID that can be a key ID, a full fingerprint, an email address, or anything else that uniquely identifies a public key to GPG (see "HOW TO SPECIFY A USER ID" in the gpg man page).

For a single repository containing all devices:

output:
  default: gitcrypt
  gitcrypt:
    user: Oxidized
    email: [email protected]
    repo: "/var/lib/oxidized/devices"
    users:
      - "0x0123456789ABCDEF"
      - "<[email protected]>"

And for group-based repositories:

output:
  default: gitcrypt
  gitcrypt:
    user: Oxidized
    email: [email protected]
    repo: "/var/lib/oxidized/git-repos/default"
    users:
      - "0xABCDEF0123456789"
      - "0x0123456789ABCDEF"

Oxidized will create a repository for each group in the same directory as the default. For example:

host1:ios:first
host2:nxos:second

This will generate the following repositories:

$ ls /var/lib/oxidized/git-repos

default.git first.git second.git

If you would like to use groups and a single repository, you can force this with the single_repo config.

output:
  default: gitcrypt
  gitcrypt:
    single_repo: true
    repo: "/var/lib/oxidized/devices"
    users:
      - "0xABCDEF0123456789"
      - "0x0123456789ABCDEF"

Please note that user list is only updated once at creation.

Output: Http

The HTTP output will POST a config to the specified HTTP URL. Basic username/password authentication is supported.

Example HTTP output configuration:

output:
  default: http
  http:
    user: admin
    password: changeit
    url: "http://192.168.162.50:8080/db/coll"

Output types

If you prefer to have different outputs in different files and/or directories, you can easily do this by modifying the corresponding model. To change the behaviour for IOS, you would edit lib/oxidized/model/ios.rb (run gem contents oxidized to find out the full file path).

For example, let's say you want to split out show version and show inventory into separate files in a directory called nodiff which your tools will not send automated diffstats for. You can apply a patch along the lines of

-  cmd 'show version' do |cfg|
-    comment cfg.lines.first
+  cmd 'show version' do |state|
+    state.type = 'nodiff'
+    state

-  cmd 'show inventory' do |cfg|
-    comment cfg
+  cmd 'show inventory' do |state|
+    state.type = 'nodiff'
+    state
+  end

-  cmd 'show running-config' do |cfg|
-    cfg = cfg.each_line.to_a[3..-1].join
-    cfg.gsub! /^Current configuration : [^\n]*\n/, ''
-    cfg.sub! /^(ntp clock-period).*/, '! \1'
-    cfg.gsub! /^\ tunnel\ mpls\ traffic-eng\ bandwidth[^\n]*\n*(
+  cmd 'show running-config' do |state|
+    state = state.each_line.to_a[3..-1].join
+    state.gsub! /^Current configuration : [^\n]*\n/, ''
+    state.sub! /^(ntp clock-period).*/, '! \1'
+    state.gsub! /^\ tunnel\ mpls\ traffic-eng\ bandwidth[^\n]*\n*(
                   (?:\ [^\n]*\n*)*
                   tunnel\ mpls\ traffic-eng\ auto-bw)/mx, '\1'
-    cfg
+    state = Oxidized::String.new state
+    state.type = 'nodiff'
+    state

which will result in the following layout

diff/$FQDN--show_running_config
nodiff/$FQDN--show_version
nodiff/$FQDN--show_inventory