使用 Ansible 创建接口配置文件

Create interface configuration files using Ansible

我有一个 Excel 电子表格,已保存为 CSV 文件(以逗号分隔),其中包含服务器列表的多个接口的 IP 地址。这些服务器上(最初)配置了一个接口,所以我可以连接。我想逐行查看此文件并获取必要的值以在本地构建 ifcfg 文件,复制到服务器,然后重新启动网络。

这不是实际文件;相反,一个示例概述了一个位置提供了多个 IP 地址的想法。

New Orleans, 192.168.10.42, 13, 192.168.3.10
Atlanta, 192.168.31.100, 18, 192.168.10.10
Detroit, 172.16.31.8, 43, 172.16.10.27

目标是解析此文件并创建如下网络接口文件

ifcfg-eth0

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
NM_CONTROLLED=no
IPADDR=192.168.10

ifcfg-ens3

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
NM_CONTROLLED=no
IPADDR=192.168.3.10

这看起来让我走到了那里

- debug:
  loop: "{{ lookup('file', './file.one').splitlines() }}"
  register: val

和returns

ok: [localhost] => (item=New Orleans, 192.168.10.42, 13, 192.168.3.10) => {
    "msg": "Hello world!"
}
ok: [localhost] => (item=Atlanta, 192.168.31.100, 18, 192.168.10.10) => {
    "msg": "Hello world!"
}
ok: [localhost] => (item=Detroit, 172.16.31.8, 43, 172.16.10.27) => {
    "msg": "Hello world!"
}

我确实在 Whosebug 上找到了一个使用 the_dict 的片段,但所有内容都作为列表而不是标量返回:(

  tasks:
  - debug: var=the_dict
    vars:
      the_dict: >-
        {%- set row = lookup("file", "~/Documents/Book1.csv").split("\n") | list -%}
        {%- for i in row -%}
        {%- set v  = i.split(",") -%}
        {%- set A_Location = v.0 -%}
        {%- set B_Interface = v.1 -%}
        ...
        ...
        ...

要使用 ansible 读取 csv,请阅读 module CSV

模板使用示例 模板文件conf.j2(放在templates目录)

{% for record in  records.list %}
ifcfg-eth0

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
NM_CONTROLLED=no
IPADDR={{ record.ip1 }}

ifcfg-ens3

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
NM_CONTROLLED=no
IPADDR=1{{ record.ip2 }}

{% endfor %} 




- name: playbook2.0
  hosts: localhost
  gather_facts: False
  tasks:
    - name: Read CSV file and return a list
      community.general.read_csv:
        path: file.csv
        fieldnames: location,ip1,data,ip2
        delimiter: ','
      register: records
      delegate_to: localhost

    - name: generate fileconf.txt from conf.j2
      template:
        src: conf.j2
        dest: fileconf.txt 

您在文件 fileconf.txt

中生成了新文件 conf

您可以根据需要使用 jinja2 语法调整 file.j2