Files
2024-02-23 14:48:02 -05:00

33 lines
1.7 KiB
Python

import asyncclick as click
from ipaddress import IPv4Address
from sagemcom_api.client import SagemcomClient
from . import xmo
@xmo.cli.command()
@click.option('-s', '--dns-servers', required=True, nargs=2, type=IPv4Address)
@click.pass_obj
async def set_dns_servers(client: SagemcomClient, dns_servers: tuple[IPv4Address]) -> None:
try:
forwards = await client.get_value_by_xpath('Device/DNS/Relay/Forwardings')
autos = {forward['uid'] for forward in forwards \
if forward.keys() >= {'uid', 'alias', 'interface', 'enable'} and \
forward['alias'].startswith('IPCP') and \
forward['interface'].endswith('[IP_DATA]') and \
forward['enable']}
statics = {forward['uid'] for forward in forwards \
if forward.keys() >= {'uid', 'alias', 'interface'} and \
forward['alias'].startswith('STATIC') and \
forward['interface'].endswith(('[IP_DATA]', '[IP_BR_LAN]'))}
for uid in autos:
await client.set_value_by_xpath(f"Device/DNS/Relay/Forwardings/Forwarding[@uid={uid}]/Enable", False)
for uid, dns_server in zip(statics, dns_servers):
await client.set_value_by_xpath(f"Device/DNS/Relay/Forwardings/Forwarding[@uid={uid}]/DNSServer", dns_server)
await client.set_value_by_xpath(
f"Device/DNS/Relay/Forwardings/Forwarding[@uid={uid}]/Interface",
'Device/IP/Interfaces/Interface[IP_BR_LAN]' if dns_server.is_private else 'Device/IP/Interfaces/Interface[IP_DATA]'
)
await client.set_value_by_xpath(f"Device/DNS/Relay/Forwardings/Forwarding[@uid={uid}]/Enable", True)
except Exception as e:
ctx.fail(e)