|  | 
| 4 | 4 |   local container = $.core.v1.container, | 
| 5 | 5 |   local statefulSet = $.apps.v1.statefulSet, | 
| 6 | 6 |   local service = $.core.v1.service, | 
|  | 7 | +  local isGossiping = $._config.alertmanager.replicas > 1, | 
|  | 8 | +  local peers = if isGossiping then | 
|  | 9 | +    [ | 
|  | 10 | +      'alertmanager-%d.alertmanager.%s.svc.%s.local:%s' % [i, $._config.namespace, $._config.cluster, $._config.alertmanager_gossip_port] | 
|  | 11 | +      for i in std.range(0, $._config.alertmanager.replicas - 1) | 
|  | 12 | +    ] | 
|  | 13 | +  else [], | 
| 7 | 14 | 
 | 
| 8 | 15 |   alertmanager_args:: | 
| 9 | 16 |     { | 
| 10 | 17 |       target: 'alertmanager', | 
| 11 | 18 |       'log.level': 'debug', | 
| 12 | 19 | 
 | 
|  | 20 | +      'experimental.alertmanager.enable-api': 'true', | 
| 13 | 21 |       'alertmanager.storage.type': 'gcs', | 
| 14 | 22 |       'alertmanager.storage.path': '/data', | 
| 15 |  | -      'alertmanager.gcs.bucketname': '%(cluster)s-cortex-configdb-%(namespace)s' % $._config, | 
|  | 23 | +      'alertmanager.storage.gcs.bucketname': '%(cluster)s-cortex-%(namespace)s' % $._config, | 
| 16 | 24 |       'alertmanager.web.external-url': '%s/alertmanager' % $._config.external_url, | 
| 17 | 25 |     }, | 
| 18 | 26 | 
 | 
|  | 
| 27 | 35 |   alertmanager_container:: | 
| 28 | 36 |     if $._config.alertmanager_enabled then | 
| 29 | 37 |       container.new('alertmanager', $._images.alertmanager) + | 
| 30 |  | -      container.withPorts($.util.defaultPorts) + | 
| 31 |  | -      container.withArgsMixin($.util.mapToFlags($.alertmanager_args)) + | 
|  | 38 | +      container.withPorts( | 
|  | 39 | +        $.util.defaultPorts + | 
|  | 40 | +        if isGossiping then [ | 
|  | 41 | +          $.core.v1.containerPort.newUDP('gossip-udp', $._config.alertmanager_gossip_port), | 
|  | 42 | +          $.core.v1.containerPort.new('gossip-tcp', $._config.alertmanager_gossip_port), | 
|  | 43 | +        ] | 
|  | 44 | +        else [], | 
|  | 45 | +      ) + | 
|  | 46 | +      container.withEnvMixin([container.envType.fromFieldPath('POD_IP', 'status.podIP')]) + | 
|  | 47 | +      container.withArgsMixin( | 
|  | 48 | +        $.util.mapToFlags($.alertmanager_args) + | 
|  | 49 | +        if isGossiping then | 
|  | 50 | +          ['--cluster.listen-address=[$(POD_IP)]:%s' % $._config.alertmanager_gossip_port] + | 
|  | 51 | +          ['--cluster.peer=%s' % peer for peer in peers] | 
|  | 52 | +        else [], | 
|  | 53 | +      ) + | 
| 32 | 54 |       container.withVolumeMountsMixin([volumeMount.new('alertmanager-data', '/data')]) + | 
| 33 | 55 |       $.util.resourcesRequests('100m', '1Gi') + | 
| 34 | 56 |       $.util.readinessProbe + | 
|  | 
| 37 | 59 | 
 | 
| 38 | 60 |   alertmanager_statefulset: | 
| 39 | 61 |     if $._config.alertmanager_enabled then | 
| 40 |  | -      statefulSet.new('alertmanager', 1, [$.alertmanager_container], $.alertmanager_pvc) + | 
|  | 62 | +      statefulSet.new('alertmanager', $._config.alertmanager.replicas, [$.alertmanager_container], $.alertmanager_pvc) + | 
| 41 | 63 |       statefulSet.mixin.spec.withServiceName('alertmanager') + | 
| 42 | 64 |       statefulSet.mixin.metadata.withNamespace($._config.namespace) + | 
| 43 | 65 |       statefulSet.mixin.metadata.withLabels({ name: 'alertmanager' }) + | 
|  | 
| 50 | 72 | 
 | 
| 51 | 73 |   alertmanager_service: | 
| 52 | 74 |     if $._config.alertmanager_enabled then | 
| 53 |  | -      $.util.serviceFor($.alertmanager_statefulset) | 
|  | 75 | +      if $._config.alertmanager.replicas > 1 then | 
|  | 76 | +        $.util.serviceFor($.alertmanager_statefulset) + | 
|  | 77 | +        service.mixin.spec.withClusterIp('None') | 
|  | 78 | +      else | 
|  | 79 | +        $.util.serviceFor($.alertmanager_statefulset) | 
| 54 | 80 |     else {}, | 
| 55 | 81 | } | 
0 commit comments