- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对 python 和 mako 非常陌生,我可能在基本概念上遇到困难。我有工作模板,但如果我可以使用 netaddr 模块来处理模板中的 IP 地址,我的 CSV 输入可以得到很大的清理。我想做的是传递一个接口(interface) IP 变量,例如:LAN_IP = '192.168.1.1/24'(我从 CSV 中执行此操作)到模板,然后以某种方式使用 netaddr 模块来填写 IP、子网掩码(点分十进制和反掩码)和网络地址,这样我可以在同一配置中将这一 CSV 变量用于 bgp 网络语句、eigrp 掩码和 ACL 等。我可以从 Python shell 执行以下操作:
>>> from netaddr import *
>>> LAN_IP = '192.168.1.1/24'
>>> IP = IPNetwork(LAN_IP)
>>> print(IP.ip)
192.168.1.1
>>> print(IP.network)
192.168.1.0
>>> print(IP.netmask)
255.255.255.0
>>> print(IP.hostmask)
0.0.0.255
编辑。我被告知要尝试内置的 ipaddress 功能。在 Python 提示符下尝试此操作表明它可以工作:
MAKO_TEMPLATE_STRING = """\
<%def name="get_netmask(ip_string)"><%
import ipaddress
return ipaddress.IPv4Interface(ip_string).netmask
%></%def>
<%def name="get_address(ip_string)"><%
import ipaddress
return ipaddress.IPv4Interface(ip_string).ip
%></%def>
<%def name="get_subnet(ip_string)"><%
import ipaddress
return ipaddress.IPv4Interface(ip_string).network
%></%def>
<%def name="get_hostmask(ip_string)"><%
import ipaddress
return ipaddress.IPv4Interface(ip_string).hostmask
%></%def>
! Variable Input: ${data}
${get_address(data)} ${get_netmask(data)} ${get_subnet(data)} ${get_hostmask(data)}
"""
print(Template(MAKO_TEMPLATE_STRING).render(data="192.168.1.1/25"))
这给了我以下输出:!变量输入:192.168.1.1/25192.168.1.1 255.255.255.128 192.168.1.0/25 0.0.0.127
现在,一个新问题是 ipaddress.IPv4Interface(ip_string).network 定义返回网络加上子网“192.168.1.0/25”,而 netaddr 没有这样做。我还没有找到任何方法让 ipaddress 仅返回子网部分。
因此,对于模板构建,我走得更远了......如果我仅将其放入模板中,它就会验证:
<%def name="get_netmask(ip_string)"><%
import ipaddress
return ipaddress.IPv4Interface(ip_string).netmask
%></%def>
<%def name="get_address(ip_string)"><%
import ipaddress
return ipaddress.IPv4Interface(ip_string).ip
%></%def>
<%def name="get_network(ip_string)"><%
import ipaddress
return ipaddress.IPv4Interface(ip_string).network
%></%def>
但是当我尝试任何类型的引用时,我都会收到错误。
! Variable Input: ${LAN_IP} <--I tried with and without this line
${get_address(LAN_IP)} <--The template does not seem to like these references.
${get_netmask(LAN_IP)}
${get_subnet(LAN_IP)}
在我看来,我在这里遗漏了一些非常简单的东西,但也许我正在以错误的方式处理问题。任何帮助将不胜感激,因为 Mako 文档和 Google 几乎没有提供任何帮助来说明如何做这样的事情。
最佳答案
问题出在验证代码上。在模板的 python 部分中,类 IPv4Interface 将因验证过程中的值无效而引发异常。因此,服务器拒绝表单数据并且不会创建模板。
解决方案:如果将错误处理添加到模板的 python 部分,就会起作用。
<%!
## python module-level code
import ipaddress
%>
<%def name="get_address(ip_string)">
<%
try:
return ipaddress.IPv4Interface(ip_string).ip
except Exception:
return "FAIL_OR_EMPTY"
%>
</%def>
! Variable Input: ${LAN_IP}
${get_address(LAN_IP)}
说明:在 HTML 表单的服务器端验证期间,配置模板会使用虚拟参数集进行呈现,以验证语法(请参阅文件 app/forms.py,类 ConfigTemplateForm)。您的配置模板在表单验证期间使用以下参数集进行验证:
{
"hostname": "test",
"LAN_IP": "test"
}
关于python - 使用 mako 生成 Cisco 配置。是否可以在模板中使用 netaddr 模块(或任何模块)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46640281/
所以我可以在 WSL2 中使用 X11 转发,例如 How to set up working X11 forwarding on WSL2 .然后我在连接到 Cisco AnyConnect 服务器
我最近进入了固件编程领域,我需要您的专家建议来保持我在该领域的初步发展。 我想修改CISCO E2500路由器的固件以增强IPv4和IPv6的路由,其中包括在此过程中更改路由表。 我决定使用 dd
Cisco IOS设置口令—启用口令 可以在全局配置模式下设置启用口令: Router(config)#enable ? last-res
我正在尝试从 Cisco ACI 获取路由表。我收到重复的路线。有办法解决它们吗? 例子: "10.127.32.70/32", "10.127.32.70/32",
我在 Cisco CVP 中有一个外部项目,我已将该项目导入到 Cisco CVP IDE 中。这个项目有一些自定义元素,我也有它们的相关类。我已将它们的相关类放在 cisco\cvp\plugin\
我只想获取打入我们调用中心的所有调用的 3 位信息:调用者、他们调用的号码以及实际接听电话的人的号码(不同于外界调用的号码)。 直到最近,我们通过监听 JTAPI 日志文件更改(使用 Microsof
我有一个文本思科配置。我应该匹配的主机名行是“125-hostname billdevice”。我正在使用下面的模式,但不匹配 true。 Pattern ciscohostname = Patter
只有第一个命令的输出才会写入文件。 如何让它将所有命令的输出写入文件? --- - name: run show commands hosts: nexus1 gather_facts: Fa
我在尝试解析路由器的 mrib 表时遇到了一些问题。我已经能够解析其中的一些但有问题。例如我有以下输出: (192.168.1.1,232.0.6.8) RPF nbr: 55.44.23.1 Fla
我无法让 CharlesProxy 在 Android 或 iOS 设备上运行。笔记本电脑和移动设备位于 Anyconnect VPN 之后。这里的任何指示都会有所帮助。谢谢。 最佳答案 我在 Cha
我有一个 C++ 程序,它使用 Microsoft TAPI 接口(interface)从 Cisco Call Manager PBX 收集调用事件。为了获得 Cisco 事件,我从调用管理器下载了
在我的网页上,我需要检查给定用户是否可以在 Cisco Jabber 客户端上使用。我有号码和用户名。我已经能够发送聊天消息并开始语音对话,但最好检查用户是否在线,例如显示很酷的图标或其他东西。有没有
我已成功使用其他几个 Webex API,但“LstrecordaccessDetailHistory XML 请求”不起作用。 我从 XML 响应中收到此消息: unable to instanti
我目前正在尝试让 RHEL 5 机器通过 radius 访问 cisco acs。我安装了 freeradius 包并使用 radtest 命令尝试访问 radius 服务器。当我进入 cisco r
我希望你能帮助我,目标是使用 pysnmp 获取已连接到 ap 的客户端数量,我想我很接近,我知道我可能必须使用 pyasn1,但我得到了一个给我以下错误的部分: ('-------->', Disp
我正在尝试通过 SNMP 从 ucs-6100 获得答案。 通过控制台:(模拟我的请求) >>> snmpget -v3 -l authPriv -u usr-sha-aes -A authkey1
我在 Ubuntu 20.04 上遇到 Cisco AnyConnect 问题。 当我启动 docker 容器(使用非主机网络驱动程序)时,Cisco AnyConnect 立即重新连接。 启动 do
我正在使用基本的 Cisco VPN 客户端(我相信是 v.5)。无论如何以编程方式确定特定配置文件(或与此相关的任何配置文件)是否已连接? 我希望以某种方式从客户端本身获得状态。我不想尝试 ping
我需要从我的 .NET 应用程序配置和查询 Cisco 路由器,我需要通过 Cisco WSMA 来完成网络服务接口(interface)。 这些服务通过 HTTP(在我的例子中)公开,并使用 SOA
我正在寻找命令行参数,以使用 CISCO H264 将一系列图像转换为 H264。 (类似于 FFMPEG 图像到视频功能)。不幸的是,我不能使用 FFMPEG,因为我正在创建一个商业应用程序,我在其
我是一名优秀的程序员,十分优秀!