我目前正在撰写一些文档(特别是关于如何使用本地Vagrant机器设置Ansible),我喜欢以命令形式列出评论。例如:
- 醇>
设置SSH代理:
ssh-agent bash ssh-add .vagrant/machines/default/virtualbox/private_key
但是,有时我发现我想记录配置文件中的更改,这不容易描述。我现在这样做:
- 醇>
将Ansible配置为使用端口2222进行Vagrant
Modify /etc/ansible/ansible.cfg to use remote_port = 2222
我宁愿做这样的事情(一个理论上的命令),因为它可以快速发布,而且比以文本编辑器更自动化的方式发布:
- 醇>
将Ansible配置为使用端口2222进行Vagrant
ansible-config remote_port 2222
这似乎是一个ini文件,所以如果ansible
二进制文件不支持这个(我不能看到它),是否有通用的Linux / Unix方法做这个?如果失败了,那怎么样:
iniwrite /etc/ansible/ansible.cfg defaults.remote_port 2222
当然我可以写一些类型的剧本,但最好不要重新发明轮子!
我使用的是Ubuntu 14.04 LTS。
答案 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
。