# Outputs ## Output: File Parent directory needs to be created manually, one file per device, with most recent running config. ```yaml 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: ```yaml output: default: git git: user: Oxidized email: o@example.com repo: "/var/lib/oxidized/devices.git" ``` And for group-based repositories: ```yaml output: default: git git: user: Oxidized email: o@example.com 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: ```csv host1:ios:first host2:nxos:second ``` This will generate the following repositories: ```bash $ 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. ```yaml 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](https://www.agwa.name/projects/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: ```yaml output: default: gitcrypt gitcrypt: user: Oxidized email: o@example.com repo: "/var/lib/oxidized/devices" users: - "0x0123456789ABCDEF" - "" ``` And for group-based repositories: ```yaml output: default: gitcrypt gitcrypt: user: Oxidized email: o@example.com 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: ```csv host1:ios:first host2:nxos:second ``` This will generate the following repositories: ```bash $ 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. ```yaml 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: ```yaml 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 ```text - 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 ```text diff/$FQDN--show_running_config nodiff/$FQDN--show_version nodiff/$FQDN--show_inventory ```