【问题标题】:Modifying yml file in augeas在augeas中修改yml文件
【发布时间】:2016-04-29 07:50:27
【问题描述】:

我正在尝试通过 augeas 资源在 puppet 清单中修改/设置 /etc/elasticsearch/elasticsearch.yml 文件,但它不起作用。有人可以解释我应该指定什么lens 文件吗?以及我是否需要为此安装额外的东西或所需的镜头包含在默认安装中?

我正在尝试像这样更改键值对:

 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",
 ],
}

【问题讨论】:

    标签: puppet puppet-enterprise augeas


    【解决方案1】:

    Augeas 目前无法编辑 YAML 文件,因为无法使用 Augeas 镜头描述 YAML 语法。它需要对 Augeas 的核心进行修改以支持这一点(以支持一致的标识,这对于这种格式是强制性的)。

    【讨论】:

    • 在您发表评论之前,我看到您在github.com/hercules-team/augeas/commits/master/lenses/yaml.aug 处摆弄 augeas 语法,所以您知道有一个语法,只是不是很完整。简单的结构确实可以通过,因此可以进行编辑。
    • 有一定的语法,有些部分可以实现,但目前不能用 Augeas 完全描述(因为如前所述,需要一致的标识)。
    【解决方案2】:

    不是最好的解决方案,但如果您只依赖冒号分隔的配置文件,我有一个镜头可以解决这个问题。

    将以下内容复制并粘贴到 /usr/share/augeas/lens/colonvars.aug 中(或使用 auges 模块自动执行此操作)。

    (*
    Module: Colonvars
        Parses a simple colon (:) delimited files
    
    Author: Alex Simenduev <shamil.si@gmail.com>
    
    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",
        ]
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-23
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      相关资源
      最近更新 更多