Добрый вечер.
Составляю генерацию к host_vars файлов в Ansible.
Имеется на входе “сырой” файл с будущими адресами хостов (будет генерироваться /etc/network/interface файл по шаблону), маска всегда постояная – 255.255.255.128 так так же, как и гейтвей – *.*.*.1
host_vars.yml.j2
--- sys_hostname: "{{ cfg_hostname }}" sys_type: "{{ type }}" sys_eth0_ipv4_address: "{{ tb_eth0 }}" sys_eth0_ipv4_gateway: "{{ tb_eth0_gw }}" sys_eth0_ipv4_netmask: "255.255.255.128"
Файл с сырыми значениями:
raw_host_vars
ES:TB-MT:SiteHostName-1:10.58.11.111 ES:TB-MT:SiteHostName-2:10.58.12.111 ES:TB-MT:SiteHostName-3:10.58.13.111
Скрипт, который будет генерировать файлы
#!/usr/bin/env python3 import os import sys import yaml import ipaddress from jinja2 import Environment, FileSystemLoader, Template ENV = Environment(loader=FileSystemLoader('./templates')) with open('./raw_host_vars') as file: raw_host_vars = file.read().split("\n") template = ENV.get_template("host_vars.yml.j2") for line in raw_host_vars: iso = line.split(":")[0] type = line.split(":")[1] cfg_hostname = line.split(":")[2] tb_eth0 = line.split(":")[3] tb_eth0_gw = # Нужно сформировать гейтвей по шаблону \*.\*.\*.1 # изменить только последний октет print(template.render(cfg_hostname=cfg_hostname, iso=iso, type=type, tb_eth0=tb_eth0, tb_eth0_gw=tb_eth0_gw)) # End of script
Как сформировать новый адрес (гейтвей) из имеющихся данных о подсети и адреса самого хоста исользую модуль ipaddress (документация практически не содержит примеров)?
Рабочий хак:
tb_eth0_gw = ".".join(line.split(":")[2].split(".")[:3])+".1",