我正在使用 Ansible 进行自动 apache 配置,其中我有自己的 app.conf。现在我在 ansible 服务器中有了 app.conf,并希望 ansible 用远程 ip 地址替换现有 ip 地址。我的 app.conf 看起来像这样。
<VirtualHost \
10.10.10.10:80 \
10.10.10.10:80 \
>
DocumentRoot /var/www/application/httpdocs
ServerName lists
ServerAlias lists.*
UseCanonicalName Off
ScriptAlias /mailman/ /usr/lib/mailman/cgi-bin/
Alias /icons/ /var/www/icons/
Alias /pipermail/ /var/lib/mailman/archives/public/
<Directory /var/lib/mailman/archives/>
Options FollowSymLinks
Order allow,deny
Allow from all
</Directory>
现在我想用远程 IP 地址替换 10.10.10.10。我们可以使用 lineinfile 模块来做到这一点吗?
lineinfile:
path: /etc/hosts
regexp: '^10\.10\.10\.10'
line: ''
owner: root
group: root
mode: 0644
答案1
您正在寻找的是一个模板。我将在下面使用远程主机上的默认 ipv4 地址。如果您需要其他信息,可以探索收集到的事实。简而言之:
templates/app.conf.j2
<VirtualHost {{ ansible_default_ipv4.address }}:80>
DocumentRoot /var/www/application/httpdocs
ServerName lists
ServerAlias lists.*
UseCanonicalName Off
ScriptAlias /mailman/ /usr/lib/mailman/cgi-bin/
Alias /icons/ /var/www/icons/
Alias /pipermail/ /var/lib/mailman/archives/public/
<Directory /var/lib/mailman/archives/>
Options FollowSymLinks
Order allow,deny
Allow from all
</Directory>
那么你的剧本应该看起来像
- name: Configure my application
hosts: my_hosts
tasks:
- name: deploy the configuration template
template:
src: app.conf.j2
dest: path/to/app.conf
答案2
从技术上来说这应该是可能的,但是您会遇到问题,因为:
如果找到则替换模式;只有找到的最后一行会被替换
所以如果你想要改变/etc/hosts
它,那应该没问题。如果你想要更改一个配置文件,其中多次出现 rexex 模式,你会遇到问题。(从问题来看,不确定你是想更改 /etc/hosts 还是 app.conf)
如果你想管理 Apache 配置文件,最好使用模板模块