local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';

{
  _config+:: {
    namespace: 'monitoring',

    versions+:: {
      smtpRelay: 'v1.0.1',
    },

    imageRepos+:: {
      smtpRelay: 'carlosedp/docker-smtp',
    },
  },

  smtpRelay+:: {
    deployment:
      local deployment = k.apps.v1.deployment;
      local container = k.apps.v1.deployment.mixin.spec.template.spec.containersType;
      local containerPort = container.portsType;

      local podLabels = { run: 'smtp-server' };

      local smtpRelay =
        container.new('smtp-server', $._config.imageRepos.smtpRelay + ':' + $._config.versions.smtpRelay) +
        container.withPorts(containerPort.newNamed(25, 'smtp')) +
        container.withEnv([
          {
            name: 'GMAIL_USER',
            valueFrom: {
              secretKeyRef: { name: 'smtp-account', key: 'username' },
            },
          },
          {
            name: 'GMAIL_PASSWORD',
            valueFrom: {
              secretKeyRef: { name: 'smtp-account', key: 'password' },
            },
          },
          {
            name: 'DISABLE_IPV6',
            value: 'True',
          },
          { name: 'RELAY_DOMAINS', value: ':192.168.0.0/24:10.0.0.0/16' },
        ]);

      local c = [smtpRelay];

      deployment.new('smtp-server', 1, c, podLabels) +
      deployment.mixin.metadata.withNamespace($._config.namespace) +
      deployment.mixin.metadata.withLabels(podLabels) +
      deployment.mixin.spec.selector.withMatchLabels(podLabels),

    service:
      local service = k.core.v1.service;
      local servicePort = k.core.v1.service.mixin.spec.portsType;
      local smtpRelayPorts = servicePort.newNamed('smtp', 25, 'smtp');

      service.new('smtp-server', $.smtpRelay.deployment.spec.selector.matchLabels, smtpRelayPorts) +
      service.mixin.metadata.withNamespace($._config.namespace) +
      service.mixin.metadata.withLabels({ run: 'smtp-server' }),
  },
}