Ansible:查找并替换远程 IP

Ansible:查找并替换远程 IP

我正在使用 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

从技术上来说这应该是可能的,但是您会遇到问题,因为:

如果找到则替换模式;只有找到的最后一行会被替换

lineinfile 模块文档

所以如果你想要改变/etc/hosts它,那应该没问题。如果你想要更改一个配置文件,其中多次出现 rexex 模式,你会遇到问题。(从问题来看,不确定你是想更改 /etc/hosts 还是 app.conf)

如果你想管理 Apache 配置文件,最好使用模板模块

相关内容