2017-02-11 20 views
2

Я пытаюсь написать конфиг Прометея с этим модулем: https://github.com/voxpupuli/puppet-prometheusФайл конфигурации Prometheus с Puppet: как обрабатывать кавычки и скобки в файле конфигурации yaml?

Но я не могу показаться, чтобы получить его, чтобы генерировать правильное переобозначение конфигурации для Прометея.

Это соответствующая часть моей текущей конфигурации:

'relabel_configs' => [ 
    { 
    'source_labels' => '[__meta_consul_node]', 
    'regex'   => '^(.*)$', 
    'target_label' => 'instance', 
    'replacement' => '$1', 
    }, 
    { 
    'source_labels' => '[__meta_consul_service]', 
    'regex'   => '^(.*)$', 
    'target_label' => 'job', 
    'replacement' => '$1', 
    } 
], 

Это то, что я получаю в моем prometheus.yml:

relabel_configs: 
    - source_labels: '[__meta_consul_node]' 
    regex: ^(.*)$ 
    target_label: instance 
    replacement: $1 
    - source_labels: '[__meta_consul_service]' 
    regex: ^(.*)$ 
    target_label: job 
    replacement: $1 

Что я хочу:

relabel_configs: 
    - source_labels: ['__meta_consul_node'] 
    regex: '^(.*)$' 
    target_label: 'instance' 
    replacement: '$1' 
    - source_labels: ['__meta_consul_service'] 
    regex: '^(.*)$' 
    target_label: 'job' 
    replacement: '$1' 

Я пробовал массу вещей, но не мог понять, как форматировать значения хэша в моем манифесте, чтобы я получил правильное co nfig файл для Prometheus.

Это похоже на проблему с рубиновым синтаксическим анализатором? Как правильно скрыть '?

+0

В YAML, определяющем эту пару ключ-значение: 'regex:^(. *) $' Или это: 'regex: '^ (. *) $'' Точно такое же, потому что первое скалярное значение не нужно процитировать. То же самое верно для KV пар с ключами 'regex',' target_labels' и 'replacement'. Добавление цитат там абсолютно не имеет смысла. Только для 'source_labels' вы меняете значение из скалярной строки, которая начинается и заканчивается скобкой, в список, содержащий одно скалярное строковое значение. Почему вы добавляете все эти сверхъестественные цитаты? – Anthon

ответ

2

Я думаю, что путаница здесь заключается в том, как массивы переменных обрабатываются в Puppet и YAML, и как строки анализируются в YAML.

В YAML, массивы переменные могут быть:

array: 
- element 
- another_element 

или:

array: [element, another_element] 

В Кукольном, они выглядят как:

$array = [element, another_element] 

Таким образом, вы можете иметь чистые один -to-one сопоставление массивов, просто указав массив строк в вашем хеш-стиле Puppet для source_labels Ключ, как:

'relabel_configs' => [ 
    { 
    'source_labels' => ['__meta_consul_node'], # single element string array 
    'regex'   => '^(.*)$', 
    'target_label' => 'instance', 
    'replacement' => '$1', 
    }, 
    { 
    'source_labels' => ['__meta_consul_service'], # single element string array 
    'regex'   => '^(.*)$', 
    'target_label' => 'job', 
    'replacement' => '$1', 
    } 
], 

и это будет правильно генерировать массив строк для source_labels, как вы описали, для чего вы хотели.

relabel_configs: 
    - source_labels: ['__meta_consul_node'] # single element string array 
    regex: ^(.*)$ 
    target_label: instance 
    replacement: $1 
    - source_labels: ['__meta_consul_service'] # single element string array 
    regex: ^(.*)$ 
    target_label: job 
    replacement: $1 

Обратите внимание, что YAML будет обрабатываться точно так же для кавычек и без строк (например, target_label: job такого же, как target_label: 'job').