【问题标题】:Is there a GNU/Linux command to write ini files?是否有用于写入 ini 文件的 GNU/Linux 命令?
【发布时间】:2016-04-09 16:05:43
【问题描述】:

我目前正在编写一些文档(特别是关于如何使用本地 Vagrant 机器设置 Ansible),我喜欢以要发出的命令的形式列出评论。例如:

  1. 设置 SSH 代理:

    ssh-agent bash
    ssh-add .vagrant/machines/default/virtualbox/private_key
    

但是,有时我发现我想在配置文件中记录更改,这并不容易描述。我目前这样做:

  1. 配置 Ansible 为 Vagrant 使用端口 2222

    Modify /etc/ansible/ansible.cfg to use remote_port = 2222
    

我宁愿做这样的事情(理论上的命令),因为它可以以更自动化的方式快速发出,而不是使用文本编辑器:

  1. 配置 Ansible 为 Vagrant 使用端口 2222

    ansible-config remote_port 2222
    

这似乎是一个 ini 文件,所以如果 ansible 二进制文件不支持这个(而且我看不到它支持),是否有通用的 Linux/Unix 方法来执行此操作?如果以上都做不到,怎么办:

iniwrite /etc/ansible/ansible.cfg defaults.remote_port 2222

当然我可以写一个脚本,但最好不要重新发明轮子!

我使用的是 Ubuntu 14.04 LTS。

【问题讨论】:

标签: linux ansible ini


【解决方案1】:

这正是 Ansible 应该解决的问题之一——因此您可以使用它来编写自己的配置文件。只需创建一个引导手册,在 localhost 上执行所有必要的操作(当然,除了安装 Ansible)。

这些工具的前身是Augeas。它带有一个默认的IniFile "lens",您可以使用它轻松编写各种 ini 条目。

【讨论】:

  • 这是个好主意!你会推荐ini config module吗?
  • 如果您只想修改用户默认拥有的文件的一部分,那么该模块是一个不错的选择;如果你想控制整个事情,你可以使用copytemplate
  • 是的,在这种情况下,它将编辑现有的 ini 文件 - Ansible 配置本身。
【解决方案2】:

我不知道这样的工具,它绝对不是您可以期望安装在用户系统上的默认工具链的一部分。

你可以使用sed:

sed -i 's/^remote_port=.*/remote_port=2222/' ansible.cfg

所有 GNU/Linux 用户都会理解这一点,尤其是因为您描述了它在做什么。

【讨论】:

  • 如果配置文件首先没有remote_port= 行怎么办? :)
  • 这不是真正的问题,imo。我错过了什么吗?
  • 我是说“修改...以使用...”不一定排除添加不存在的行(而不是仅仅修改现有的行)...只是语义.
  • 当然,但由于它只是文档,您要么假设它在那里(imo 这是 ansible 的标准),要么您需要在文档中描述它需要存在。当然也可以详细说明一下脚本,不过这样就不太容易理解了。
  • 这是一个很好的解决方案(非常感谢),尽管 isedev 的观点是一个很好的解决方案 - 碰巧默认的 ansible.cfg 定义了这个变量,但是一般的 ini 编写者应该添加一个键,如果它已经不存在了。但是,如果事实证明标准 Linux 不包含执行此操作的二进制文件,我将使用它运行。
【解决方案3】:

ansible-config 脚本可以很简单:

#!/bin/sh
CFG=/etc/ansible/ansible.cfg
awk '{BEGIN {found=0} END {if(!found){print keyword" = "value}} if($0~"^ *"keyword" *="){print keyword" = "value; found=1}else{print $0}}' \
    keyword="$1" value="$2" $CFG > $CFG.new \
    && mv $CFG.new $CFG \
    || rm -f $CFG.new

需要进行一些错误检查,等等...,但它给了你这个想法。

【讨论】:

  • 谢谢,点赞。我确信这会起作用,但从文档的角度来看,我正在寻找比要求某人编辑文件的特定行更容易的东西。我想说上面的更难,特别是如果它也可以使用一些错误检查。
  • 更新了答案以应对配置文件中不存在关键字的情况。
  • 谢谢你 - 我不是一个 Awker,但我会试一试!
【解决方案4】:

虽然我的问题的重点是“如何自动编写 ini 文件”,但我已经找到了如何避免 Ansible 的问题。 SSH 端口可以添加到/etc/ansible/hosts 文件中,因此:

127.0.0.1:2222

这会覆盖 /etc/ansible/ansible.cfg 配置 ini 文件中的 remote_port

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 2011-04-05
    • 2014-02-07
    • 2017-03-07
    相关资源
    最近更新 更多