diff --git a/nix/pkgs/default.nix b/nix/pkgs/default.nix index 8952687362..ad5ab28ad5 100644 --- a/nix/pkgs/default.nix +++ b/nix/pkgs/default.nix @@ -25,5 +25,6 @@ hp-rom = import ./hp-rom.nix args; enigma = import ./enigma.nix args; alertmanager-discord = pkgs.callPackage ./alertmanager-discord.nix {}; + prometheus-snmp-config = import ./prometheus-snmp-config args; } // (import ./heptapod-runner.nix args) // (import ./lightspeed args) diff --git a/nix/pkgs/prometheus-snmp-config/default.nix b/nix/pkgs/prometheus-snmp-config/default.nix new file mode 100644 index 0000000000..8527ffce3a --- /dev/null +++ b/nix/pkgs/prometheus-snmp-config/default.nix @@ -0,0 +1,84 @@ +{ depot, pkgs, ... }: +let + inherit (pkgs) prometheus-snmp-exporter curl cacert unzip p7zip; + + hpMibs = pkgs.stdenvNoCC.mkDerivation rec { + pname = "hp-mibs"; + version = "11.50"; + + src = pkgs.fetchurl { + url = "https://downloads.hpe.com/pub/softlib2/software1/pubsw-linux/p1580676047/v188074/upd11.50mib.tar.gz"; + hash = "sha256:0jxxcirbvhlqrflj0j2vzddqaq7wl7v3g7xi0gcjmxlj6rfkk7i9"; + }; + sourceRoot = "."; + + buildPhase = ":"; + installPhase = '' + mkdir $out + cp $(ls | grep -i '\.mib$') $out + ''; + }; + + mibsDrv = pkgs.stdenvNoCC.mkDerivation { + pname = "prometheus-snmp-mibs"; + version = "lukegb-${prometheus-snmp-exporter.version}"; + + outputHashMode = "recursive"; + outputHash = "sha256:164zv3cvxj9i1parww9nx8a7xihiklwyn7635r0xqdfj365g2fdh"; + + buildInputs = [ + curl + p7zip + prometheus-snmp-exporter + unzip + ]; + passthru.hp = hpMibs; + + CURL_OPTS = "--retry 3 --retry-delay 3 --compressed --location --fail"; + SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt"; + + src = prometheus-snmp-exporter.src; + + unpackPhase = '' + mkdir $NIX_BUILD_TOP/build + cp $src/generator/Makefile $NIX_BUILD_TOP/build/Makefile + ''; + + buildPhase = '' + pushd $NIX_BUILD_TOP/build + make CURL_OPTS="$CURL_OPTS" + + # Additional mibs... + cp ${hpMibs}/cpqhost.mib ./mibs/ + awk 'BEGIN { p=1 } /INDEX\s+{.+cpqRackServerBladeRack,/ { print " INDEX { cpqRackServerBladeIndex }"; p=0 } /}/ { if (p==0) { p=2 } } { if (p==1) { print } if (p==2) { p=1 } }' ${hpMibs}/cpqrack.mib > ./mibs/cpqrack.mib + ''; + + installPhase = '' + cp -R $NIX_BUILD_TOP/build/mibs $out + ''; + }; +in +pkgs.stdenvNoCC.mkDerivation { + pname = "prometheus-snmp-config"; + version = "lukegb"; + + src = prometheus-snmp-exporter.src; + passthru.mibs = mibsDrv; + + buildInputs = [ prometheus-snmp-exporter ]; + MIBDIRS = mibsDrv; + + unpackPhase = '' + mkdir $NIX_BUILD_TOP/build + cat $src/generator/generator.yml ${./generator.yml} > $NIX_BUILD_TOP/build/generator.yml + ''; + + buildPhase = '' + pushd $NIX_BUILD_TOP/build + generator generate + ''; + + installPhase = '' + cp $NIX_BUILD_TOP/build/snmp.yml $out + ''; +} diff --git a/nix/pkgs/prometheus-snmp-config/generator.yml b/nix/pkgs/prometheus-snmp-config/generator.yml new file mode 100644 index 0000000000..89356efc4e --- /dev/null +++ b/nix/pkgs/prometheus-snmp-config/generator.yml @@ -0,0 +1,11 @@ +# This isn't really a proper YAML file; it is just appended to the generator.yml from upstream. + + hpe: + walk: + - sysUpTime + - cpqRackPowerSupplyTable + - cpqRackServerBladeTable + lookups: + - source_indexes: + - cpqRackServerBladeIndex + lookup: cpqRackServerBladeName