'SaltStack Generate json for prometheus targets
How to add targets to json file with salt, i use file_sd_configs file in prometheus.yml
- job_name: 'winserver_node'
file_sd_configs:
- files:
- targets.json
targets.json:
[
{
"targets": [ "192.168.1.2:9182" ],
"labels": {
"env": "dev",
"job": "devjob",
"instance": "Test001"
}
},
{
"targets": [ "192.168.1.3:9182" ],
"labels": {
"env": "dev",
"job": "devjob",
"instance": "Test002"
}
}
]
And wroute some example.sls with pillars, but i wonder how to generate it with file.blockreplace.
#SLS for adding targets for prometheus (nodes)
{% set minion = salt['pillar.get']('variables:some:instance') %}
{% set minionip = salt ['pillar.get']('variables:some:ip') %}
{% set promenv = salt['pillar.get']('variables:some:promenv') %}
{% set job = salt['pillar.get']('variables:some:devjob') %}
{% set port = salt['pillar.get']('variables:some:exporterport') %}
make-config:
file.managed:
- name: /etc/prometheus/targets.json
- source: salt://prometheus/targets_template.json
main-block:
file.blockreplace:
- name: /etc/prometheus/targets.json
- marker_start: "# START managed zone Target {{ minion }} -DO-NOT-EDIT-"
- marker_end: "# END managed zone Target {{ minion }} --"
- backup: '.bak'
- show_changes: True
- append_if_not_found: True
Also i have some problems with , and [ ]
Solution 1:[1]
file_sd_configs may be in yml format. So final result looks like this:
/etc/prometheus/linuxtargets.yml:
file.touch
main-lin-block:
file.blockreplace:
- name: /etc/prometheus/linuxtargets.yml
- marker_start: "# START managed zone {{ minion }} -DO-NOT-EDIT-"
- marker_end: "# END managed zone {{ minion }} --"
- backup: '.bak'
- show_changes: True
- append_if_not_found: True
targets-lin-block:
file.accumulated:
- filename: /etc/prometheus/linuxtargets.yml
- name: targets-accum
- text: |
- targets:
- '{{ minionip }}:{{ port }}'
labels:
instance: '{{ minion }}'
job: '{{ job }}'
env: '{{ promenv }}'
- require_in:
- file: main-lin-block
Solution 2:[2]
You can use file.serialize to write data out into multiple formats, of which JSON is one.
However, you cannot maintain a managed block in a JSON file, simply because the JSON format will not allow it. Comments are not supported, for example.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Dolore |
| Solution 2 | OrangeDog |
