我试图从我的输出得到csv文件。
use Net::Cisco::ISE;
use Data::Dumper;
use Text::CSV;
my $ise = Net::Cisco::ISE->new(hostname=>'hostname', username=>'user', password=>'user');
$ise->namespace3;
$ise->namespace5;
my $networkdevices = $ise->networkdevices;
for my $name (keys %{$networkdevices})
{
print Dumper $ise->networkdevices("id" => $networkdevices->{$name}->id);
}
输出:
$VAR1 = bless( {
'NetworkDeviceGroupList' => {
'NetworkDeviceGroup' => [
'Device Type#All Device Types',
'IPSEC#Is IPSEC Device#No',
'Location#All Locations'
]
},
'tacacsSettings' => {
'previousSharedSecretExpiry' => '0',
'connectModeOptions' => 'OFF',
'sharedSecret' => '******'
},
'NetworkDeviceIPList' => {
'NetworkDeviceIP' => {
'mask' => '24',
'ipaddress' => '10.66.0.0'
}
},
'name' => 'LAB-Distri',
'coaPort' => '1700',
'authenticationSettings' => {
'radiusSharedSecret' => '******',
'keyInputFormat' => 'ASCII',
'enableKeyWrap' => 'false',
'networkProtocol' => 'RADIUS'
},
'profileName' => 'Cisco',
'id' => '3d21e200-a534-11e3-82cc-00505694f123'
}, 'Net::Cisco::ISE::NetworkDevice' );
这个脚本应该给予我我选择的元素(ipaddress和名称)在控制台,但它不工作
foreach $name (keys %{$networkdevices}){
print
my $ip = $networkdevices{$name}{'ipaddress'};
my $name = $networkdevices{$name}{'name'};
}
在结束时,我需要一个csv文件的名称和IP地址从设备。
现在我只使用两种方法:Name
和NetworkDeviceIPList
(只是为了清理我的输出信息)。不幸的是,在Net::Cisco::ISE
中没有方法只让IPs
获得ips。我可以调用NetworkDeviceIPList
并获得:
for my $name (keys %{$networkdevices}){
my $device = $ise->networkdevices("id" => $networkdevices->{$name}->id);
print Dumper $device->name;
print Dumper $device->NetworkDeviceIPList;
}
我有这样的输出:
$VAR1 = 'LAB-W';
$VAR1 = {
'NetworkDeviceIP' => {
'mask' => '32',
'ipaddress' => '10.66.1.12'
}
};
但我不知道现在如何从这个输出csv数据与数组的名称和ips。
1条答案
按热度按时间mrzz3bfm1#
Dumper
输出以“bless”开头,因此您手头上有对象,因此需要找到查询它们的方法,而不是直接插入它们的hashref。来自Net::Cisco::ISE文档 *
网络设备
返回的哈希包含
Net::Cisco::ISE::NetworkDevice
的示例......
当您知道主机名或ID时,使用
devices
调用,参数如下所示。它标识了返回的对象属于哪个类,并给予了一个例子
然后通过Net::Cisco::ISE::NetworkDevice查找在
$device
上使用的方法。所以你不用
如上所述使用
$ise->networkdevices
,并对返回的对象进行进一步的 * 方法调用 *。†备注
一个对象是一个引用,通常是一个散列引用,人们确实可以这样使用它。然而,这是不好的,它会带来麻烦,而且真的不应该这样做。
对对象内部结构的每一次深入都可能最终导致程序崩溃,而且根据业务的性质,可能会以难以诊断(发现)的微妙方式。
请记住,类的一个重要方面是为它的功能提供一个接口,并保护内部不受任何约束;它封装了实现,因此原则上对用户是不可见的。2内部可能在任何时候改变,没有任何通知,也许是以微妙的方式。
我们应该 * 总是 * 找到为该类提供的方法,并且只使用这些方法。
†即使你直接从
$networkdevices
中获取值,它也是一个hashref,所以需要首先解引用$networkdevices->{...}{...}
,在第一层之后,我们可以通过语法方便地删除箭头(但请不要对对象这样做)。