是否有GNU / Linux命令来编写ini文件?

时间:2016-04-09 16:05:43

标签: linux ansible ini

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

  
      
  1. 设置SSH代理:

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

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

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

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

我宁愿做这样的事情(一个理论上的命令),因为它可以快速发布,而且比以文本编辑器更自动化的方式发布:

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

    ansible-config remote_port 2222
    
  2.   

这似乎是一个ini文件,所以如果ansible二进制文件不支持这个(我不能看到它),是否有通用的Linux / Unix方法做这个?如果失败了,那怎么样:

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

当然我可以写一些类型的剧本,但最好不要重新发明轮子!

我使用的是Ubuntu 14.04 LTS。

4 个答案:

答案 0 :(得分:2)

这正是Ansible应该解决的问题之一 - 所以你可以用它来编写自己的配置文件。只需创建一个bootstrap playbook,在localhost上执行所有必要的操作(当然,除了安装Ansible之外)。

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

答案 1 :(得分:1)

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

您可以使用sed

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

所有GNU / Linux用户都会理解这一点,特别是在您描述它正在做什么之后。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

虽然我的问题的主要内容是"如何自动编写ini文件",我已经找到了如何避免它用于Ansible。 SSH端口可以添加到/etc/ansible/hosts文件中,因此:

127.0.0.1:2222

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