2016-01-22 1 views
1

Я пытаюсь изменить/установить /etc/elasticsearch/elasticsearch.yml файл в манифесте марионеток через augeas ресурс, но он не работает. Может кто-нибудь объяснить, какой файл lens я должен указать? и нужно ли мне установить что-то дополнительное для этого или необходимый объектив включен в установку по умолчанию?Изменение файла yml в augeas

Я пытаюсь изменить пары ключ-значение, как это:

key1.key2: value 
eg: 


cluster.name: cms-es 

Мой код:

augeas { "elastic_config": 
    context => "/files/etc/elasticsearch/elasticsearch.yml", 
    changes => [ 
    "set 'network.host:' ipaddress_eth0", 
    "set 'cluster.name:' cms-es", 
    "set 'node.name:' ec2_hostname", 
    "set 'bootstrap.mlockall:' true", 
], 
} 

ответ

1

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

Копия & вставьте следующее в /usr/share/augeas/lens/colonvars.aug (или используйте модуль auges для автоматизации этого).

(* 
Module: Colonvars 
    Parses a simple colon (:) delimited files 

Author: Alex Simenduev <[email protected]> 

About: Usage Example 
(start code) 
    augtool> set /augeas/load/Colonvars/lens "Colonvars.lns" 
    augtool> set /augeas/load/Colonvars/incl "/etc/elasticsearch/elasticsearch.yml" 
    augtool> load 

    augtool> get /files/etc/elasticsearch/elasticsearch.yml/cluster.name 
    /files/etc/elasticsearch/elasticsearch.yml/cluster.name = elk 

    augtool> set /files/etc/elasticsearch/elasticsearch.yml/node.name elk-node-0 
    augtool> save 
    Saved 1 file(s) 

    $ grep node.name /etc/elasticsearch/elasticsearch.yml 
    node.name: elk-node-0 
(end code) 

About: License 
    This file is licensed under the LGPL v2+, like the rest of Augeas. 
*) 

module Colonvars = 

    let colon = del /[ \t]*:[ \t]*/ ": " 
    let entry = Build.key_value_line Rx.word colon (store Rx.space_in) 
    let lns = (Util.empty | Util.comment | entry)* 

Вот как вы можете использовать его (основано на вашем примере):

augeas { "elastic_config": 
    incl => "/etc/elasticsearch/elasticsearch.yml", 
    lens => "Colonvars.lns", 
    changes => [ 
     "set network.host ipaddress_eth0", 
     "set cluster.name cms-es", 
     "set node.name ec2_hostname", 
     "set bootstrap.mlockall true", 
    ] 
} 
2

Авгий не может в настоящее время редактировать YAML файлы, потому что грамматика YAML не может быть описана с помощью объектива Авгий , Для поддержки этого потребуется модификация в основе Augeas (для поддержки последовательной идентификации, которая является обязательной для этого формата).

+0

Я вижу, ты возился с грамматикой Авгий в https://github.com/hercules-team/augeas /commits/master/lenses/yaml.aug перед вашим комментарием здесь, так что вы знаете, что есть грамматика, это просто не очень полно. Простые структуры действительно проходят, и поэтому их можно редактировать. –

+0

Существует определенная грамматика, и некоторые части могут быть реализованы, но она не может быть полностью описана с использованием Augeas в настоящее время (поскольку, как указано, требование для последовательной идентификации). –