Unverified Commit a4c1084d authored by github-actions[bot]'s avatar github-actions[bot] Committed by GitHub
Browse files

Merge master into staging-next

parents 76c5dacb e9545762
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -187,6 +187,14 @@
          <link xlink:href="options.html#opt-services.mtr-exporter.enable">services.mtr-exporter</link>.
        </para>
      </listitem>
      <listitem>
        <para>
          <link xlink:href="https://github.com/prometheus-pve/prometheus-pve-exporter">prometheus-pve-exporter</link>,
          a tool that exposes information from the Proxmox VE API for
          use by Prometheus. Available as
          <link xlink:href="options.html#opt-services.prometheus.exporters.pve">services.prometheus.exporters.pve</link>.
        </para>
      </listitem>
      <listitem>
        <para>
          <link xlink:href="https://tetrd.app">tetrd</link>, share your
+2 −0
Original line number Diff line number Diff line
@@ -55,6 +55,8 @@ In addition to numerous new and upgraded packages, this release has the followin

- [mtr-exporter](https://github.com/mgumz/mtr-exporter), a Prometheus exporter for mtr metrics. Available as [services.mtr-exporter](options.html#opt-services.mtr-exporter.enable).

- [prometheus-pve-exporter](https://github.com/prometheus-pve/prometheus-pve-exporter), a tool that exposes information from the Proxmox VE API for use by Prometheus. Available as [services.prometheus.exporters.pve](options.html#opt-services.prometheus.exporters.pve).

- [tetrd](https://tetrd.app), share your internet connection from your device to your PC and vice versa through a USB cable. Available at [services.tetrd](#opt-services.tetrd.enable).

- [agate](https://github.com/mbrubeck/agate), a very simple server for the Gemini hypertext protocol. Available as [services.agate](options.html#opt-services.agate.enable).
+1 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ let
    "postfix"
    "postgres"
    "process"
    "pve"
    "py-air-control"
    "redis"
    "rspamd"
+118 −0
Original line number Diff line number Diff line
{ config, lib, pkgs, options }:

with lib;
let
  cfg = config.services.prometheus.exporters.pve;

  # pve exporter requires a config file so create an empty one if configFile is not provided
  emptyConfigFile = pkgs.writeTextFile {
    name = "pve.yml";
    text = "default:";
  };

  computedConfigFile = "${if cfg.configFile == null then emptyConfigFile else cfg.configFile}";
in
{
  port = 9221;
  extraOpts = {
    package = mkOption {
      type = types.package;
      default = pkgs.prometheus-pve-exporter;
      defaultText = literalExpression "pkgs.prometheus-pve-exporter";
      example = literalExpression "pkgs.prometheus-pve-exporter";
      description = ''
        The package to use for prometheus-pve-exporter
      '';
    };

    environmentFile = mkOption {
      type = with types; nullOr path;
      default = null;
      example = "/etc/prometheus-pve-exporter/pve.env";
      description = ''
        Path to the service's environment file. This path can either be a computed path in /nix/store or a path in the local filesystem.

        The environment file should NOT be stored in /nix/store as it contains passwords and/or keys in plain text.

        Environment reference: https://github.com/prometheus-pve/prometheus-pve-exporter#authentication
      '';
    };

    configFile = mkOption {
      type = with types; nullOr path;
      default = null;
      example = "/etc/prometheus-pve-exporter/pve.yml";
      description = ''
        Path to the service's config file. This path can either be a computed path in /nix/store or a path in the local filesystem.

        The config file should NOT be stored in /nix/store as it will contain passwords and/or keys in plain text.

        If both configFile and environmentFile are provided, the configFile option will be ignored.

        Configuration reference: https://github.com/prometheus-pve/prometheus-pve-exporter/#authentication
      '';
    };

    collectors = {
      status = mkOption {
        type = types.bool;
        default = true;
        description = ''
          Collect Node/VM/CT status
        '';
      };
      version = mkOption {
        type = types.bool;
        default = true;
        description = ''
          Collect PVE version info
        '';
      };
      node = mkOption {
        type = types.bool;
        default = true;
        description = ''
          Collect PVE node info
        '';
      };
      cluster = mkOption {
        type = types.bool;
        default = true;
        description = ''
          Collect PVE cluster info
        '';
      };
      resources = mkOption {
        type = types.bool;
        default = true;
        description = ''
          Collect PVE resources info
        '';
      };
      config = mkOption {
        type = types.bool;
        default = true;
        description = ''
          Collect PVE onboot status
        '';
      };
    };
  };
  serviceOpts = {
    serviceConfig = {
      ExecStart = ''
        ${cfg.package}/bin/pve_exporter \
          --${if cfg.collectors.status == true then "" else "no-"}collector.status \
          --${if cfg.collectors.version == true then "" else "no-"}collector.version \
          --${if cfg.collectors.node == true then "" else "no-"}collector.node \
          --${if cfg.collectors.cluster == true then "" else "no-"}collector.cluster \
          --${if cfg.collectors.resources == true then "" else "no-"}collector.resources \
          --${if cfg.collectors.config == true then "" else "no-"}collector.config \
          ${computedConfigFile} \
          ${toString cfg.port} ${cfg.listenAddress}
      '';
    } // optionalAttrs (cfg.environmentFile != null) {
          EnvironmentFile = cfg.environmentFile;
    };
  };
}
+4 −2
Original line number Diff line number Diff line
@@ -33,7 +33,9 @@ import ./make-test-python.nix ({ pkgs, ... }: {
    server.succeed("mkdir -p /tmp/stuff && chown minidlna: /tmp/stuff")
    server.wait_for_unit("minidlna")
    server.wait_for_open_port("8200")
    server.succeed("curl --fail http://localhost:8200/")
    client.succeed("curl --fail http://server:8200/")
    # requests must be made *by IP* to avoid triggering minidlna's
    # DNS-rebinding protection
    server.succeed("curl --fail http://$(getent ahostsv4 localhost | head -n1 | cut -f 1 -d ' '):8200/")
    client.succeed("curl --fail http://$(getent ahostsv4 server | head -n1 | cut -f 1 -d ' '):8200/")
  '';
})
Loading