summary refs log blame commit diff
path: root/nixos/modules/services/search/elasticsearch-curator.nix
blob: bb2612322bbad0ec27be44ebaae4ebe517592914 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14













                                                                                   
                                    









































                                                                                                                           
                         


























                                                                                    
                                              

                             
                   
                                                       
                                                        



        
{ config, lib, pkgs, ... }:

with lib;

let
    cfg = config.services.elasticsearch-curator;
    curatorConfig = pkgs.writeTextFile {
      name = "config.yaml";
      text = ''
        ---
        # Remember, leave a key empty if there is no value.  None will be a string,
        # not a Python "NoneType"
        client:
          hosts: ${builtins.toJSON cfg.hosts}
          port: ${toString cfg.port}
          url_prefix:
          use_ssl: False
          certificate:
          client_cert:
          client_key:
          ssl_no_validate: False
          http_auth:
          timeout: 30
          master_only: False
        logging:
          loglevel: INFO
          logfile:
          logformat: default
          blacklist: ['elasticsearch', 'urllib3']
        '';
    };
    curatorAction = pkgs.writeTextFile {
      name = "action.yaml";
      text = cfg.actionYAML;
    };
in {

  options.services.elasticsearch-curator = {

    enable = mkEnableOption "elasticsearch curator";
    interval = mkOption {
      description = "The frequency to run curator, a systemd.time such as 'hourly'";
      default = "hourly";
      type = types.str;
    };
    hosts = mkOption {
      description = "a list of elasticsearch hosts to connect to";
      type = types.listOf types.str;
      default = ["localhost"];
    };
    port = mkOption {
      description = "the port that elasticsearch is listening on";
      type = types.int;
      default = 9200;
    };
    actionYAML = mkOption {
      description = "curator action.yaml file contents, alternatively use curator-cli which takes a simple action command";
      type = types.lines;
      example = ''
        ---
        actions:
          1:
            action: delete_indices
            description: >-
              Delete indices older than 45 days (based on index name), for logstash-
              prefixed indices. Ignore the error if the filter does not result in an
              actionable list of indices (ignore_empty_list) and exit cleanly.
            options:
              ignore_empty_list: True
              disable_action: False
            filters:
            - filtertype: pattern
              kind: prefix
              value: logstash-
            - filtertype: age
              source: name
              direction: older
              timestring: '%Y.%m.%d'
              unit: days
              unit_count: 45
      '';
    };
  };

  config = mkIf cfg.enable {
    systemd.services.elasticsearch-curator = {
      startAt = cfg.interval;
      serviceConfig = {
        ExecStart =
          "${pkgs.elasticsearch-curator}/bin/curator" +
          " --config ${curatorConfig} ${curatorAction}";
      };
    };
  };
}