require stdlib
require concat

class eid::telegraf(String $version = "stable", Array $volumes = [], Array $ports = []) {
   $influxdb2_token = hiera("influxdb2_token","NOT_SET_IN_HIERA");
   $influx2_token = hiera("influx2_token","NOT_SET_IN_HIERA");
   $influxdb2_org = hiera("influxdb2_org","NOT_SET_IN_HIERA");
   $influxdb2_bucket = hiera("influxdb2_bucket","NOT_SET_IN_HIERA");
   $influxdb2_bucket_proxy = hiera("influxdb2_bucket_proxy","NOT_SET_IN_HIERA");
   file {['/etc/telegraf','/etc/telegraf/telegraf.conf.d']: ensure => directory }
   concat {'/etc/telegraf/telegraf.conf':
      owner     => 'root',
      group     => 'root',
      mode      => '0644',
      notify    => Sunet::Docker_run['telegraf']
   }

   # Below not pretty but I'm piggy-backing on this class to add a secondary output to test the new influx2-server
   if ($influx2_token != 'NOT_SET_IN_HIERA') {
     file { "/etc/telegraf/telegraf.conf.d/95-telegraf.conf":
       ensure  => file,
       owner   => 'root',
       group   => 'root',
       path    => "/etc/telegraf/telegraf.conf.d/95-telegraf.conf",
       mode    => '0644',
       content => template('eid/telegraf/95-telegraf.conf.erb'),
     }
   }

   eid_glob(["/etc/telegraf/telegraf.conf.d/*.conf"]).each |String $file| {
     concat::fragment { $file:
        target => "/etc/telegraf/telegraf.conf",
        source => $file,
     }
   }

   $_volumes = flatten(["/dev/log:/dev/log","/var/log:/var/log","/etc/telegraf:/etc/telegraf","/var/run/utmp:/var/run/utmp:ro",$volumes])

   if ($influx2_token != 'NOT_SET_IN_HIERA') {
     sunet::docker_run {"telegraf":
       hostname => "${::fqdn}",
       image     => "docker.sunet.se/eduid/telegraf",
       imagetag  => "latest",
       volumes   => $_volumes,
       ports     => $ports,
       env       => ["INFLUXDB2_TOKEN=$influxdb2_token","INFLUXDB2_ORG=$influxdb2_org","INFLUXDB2_BUCKET=$influxdb2_bucket","INFLUXDB2_BUCKET_PROXY=$influxdb2_bucket_proxy","INFLUX2_TOKEN=$influx2_token"]
     }
   } else {
     sunet::docker_run {"telegraf":
       hostname => "${::fqdn}",
       image     => "docker.sunet.se/eduid/telegraf",
       imagetag  => $version,
       volumes   => $_volumes,
       ports     => $ports,
       env       => ["INFLUXDB2_TOKEN=$influxdb2_token","INFLUXDB2_ORG=$influxdb2_org","INFLUXDB2_BUCKET=$influxdb2_bucket","INFLUXDB2_BUCKET_PROXY=$influxdb2_bucket_proxy"]
     }
   }
}