salt插件,可通过凝固汽油弹与网络设备交互,无需运行爪牙

salt-napalm的Python项目详细描述


#napalm salt
salt模块,用于检索、控制、实施和更新网络设备的配置


salt基础
==


salt新功能?查看[本文档](https://docs.saltstack.com/en/latest/topics/tutorials/walkthrough.html)了解基本知识的简要介绍。

针对路由器的命令。这个测试环境使用运行ubuntu 16.04的vagrant vm,它充当salt主机和代理主机,它建立并维护到路由器的连接,以便在路由器上执行命令。


install salt
==


最简单的安装salt的方法是通过[salt bootstrap](https://docs.saltstack.com/en/latest/topics/tutorials/salt撸bootstrap.html)。下面是一个安装示例:

``bash
wget-o bootstrap-salt.sh https://bootstrap.saltstack.com/develop
sudo sh bootstrap salt.sh
````

这将仅安装"salt minion"和"salt proxy",但我们也希望此框是"salt master",因此我们将安装即:

`` bash
sudo sh bootstrap-salt.sh-m
````

有关更具体的安装说明,请参阅Saltstack官方文档中的[特定于平台的说明](https://docs.saltstack.com/en/latest/topics/installation/特定于平台的安装说明)。
请注意从ppa repo安装主发行版**,在本地服务器上,将作为主服务器运行,控制设备作为代理服务器。

centos文档可以在[此处](centos_installation.md)中找到。


可以工作:
``
sudo apt get install libffi dev libssl dev python dev python cffi libxslt1 dev python pip
sudo pip install--upgrade cffi
sudo pip install napalm junos napalm iosxr napalm ios
```

[Napalm安装saltstack公式](https://github.com/saltstack formulas/Napalm安装公式)。一个更详细的用法示例可以在以下位置找到:https://mirceaulinic.net/2017-07-06-napalm-install-formula/


配置salt代理(和minion)
==============

使salt作为代理主机运行所需的主配置文件位于`/etc/salt/proxy`。这个文件应该已经存在,尽管您可能需要创建它。

我们需要告诉代理进程本地计算机是"salt master",并关闭多处理。您可以在`/etc/salt/proxy`文件的顶部添加以下内容:

```
master:localhost
multiprocessing:false
mine\u enabled:true不需要,但是很高兴不需要pki目录/etc/salt/pki/proxy-这将代理密钥分隔到不同的目录中,另外,您可能需要编辑`/etc/salt/minion'文件来将主位置指向自己。这是不必要的,但它允许您将vm作为一个仆从,除了路由器。将此项添加到`/etc/salt/minion`:

````
master:localhost
```


配置与设备的连接
====

`master配置文件要求pillar位于`/srv/pillar`,但此目录可能不存在,所以创建它:
```
mkdir-p/srv/pillar
```

请参阅主配置文件(通常为`/etc/salt/master`或'/SRV/master`-取决于操作系统)。

下一步,我们需要在该目录中创建一个"top.sls"文件,该文件告诉salt master哪个奴才接收哪个柱子。创建并编辑`/srv/pillar/top.sls`文件,并使其看起来像这样:

``yaml
base:
[device\u id]:
-[device\u sls\u file name]
```

,其中:

-device\u id将是用于与设备交互的名称,从服务器的cli中,device sls是包含设备规范的文件名,例如:


``yaml
base:
router1:
-router1_pillar
```


-router1是用于与设备交互的名称:` salt'router1'测试。ping `
-`/srv/pillar/router1\u pillar.sls'是包含此设备规范的文件

**请注意此结构**:请注意,top.sls'文件的`-router1\u pillar'部分缺少`.sls'扩展名,尽管这一行预期会在同一个目录中看到一个名为"router1_pillar.sls"的文件。另外,请注意在引用`.sls'文件时不应该使用点,因为这将被解释为一个目录结构。例如,如果将行配置为"-router1.pillar",salt将在"/srv/pillar"目录中查找名为"router1"的文件夹,然后在该目录中查找名为"pillar.sls"的文件。最后一件事-在本例中,我将支柱文件称为"router1_pillar",以明确说明最后一行引用的是支柱文件,但更常见的是将支柱文件称为设备本身的名称,所以:

``yaml
base:
router1:
-router1
```
既然我们引用了这个"router1支柱"文件,我们需要创建它并添加支柱。创建并编辑`/srv/pillar/router1_pillar.sls`文件并添加以下内容:

``yaml
代理:
代理类型:napalm
驱动程序:[driver]
主机:[hostname]
用户名:[username]
密码:[password]
```

其中:

-驱动程序是要使用的驱动程序连接到设备时。有关支持的操作系统的完整列表,请查看[napalm readthedocs page](https://napalm.readthedocs.io/en/latest/支持的网络操作系统)
-主机名,用户名,密码是连接详细信息

example```router1``u pillar.sls````:

```yaml
proxy:
proxytype:napalm
driver:iosxr
host:192.168.128
username:my嫒username
passwd:my嫒password
```

***注意:**YAML文件!

此外,请使用支柱中提供的凭据,仔细检查是否可以从服务器连接到设备。


如果错误仍然存在,请在python控制台中运行以下行,并在[network.tocode()](https://networktocode.herokapp.com/):

`` python
>;>从凝固汽油弹库导入get_network_driver
>;>d=get_network_driver('driver')
>;>e=d('hostname','username','password',可选参数={'config_lock':false})
>;>;e.open()
>;>e.get_facts()
>;>e.close()
````

>对于其他参数,可以将它们添加到"可选参数"字段中,例如:


`` yaml
代理:
代理类型:napalm
驱动程序:ios
主机:192.168.128
用户名:myu用户名
密码:'
可选参数:
机密:sup3rsek3t
ssh配置文件:~/自定义ssh配置文件每个驱动程序的参数](http://napalm.readthedocs.io/en/develop/support/index.html受支持的可选参数列表)。

使用ssh密钥进行身份验证时,字段"passwd"(或"password"(密码)、"pass"(通过))可以为空,也可以从柱子。但是,请注意,并非所有驱动程序都使用基于ssh的身份验证。例如,arista eos和cisco nexus使用基于http的api,因此密码是必需的!

有关支柱配置的更多详细信息,请参阅[官方文档](https://docs.saltstack.com/en/develop/ref/proxy/all/salt.proxy.napalm.html)和[salt下的网络自动化参考docs)(https://docs.saltstack.com/en/development/topics/network廑automation/index.html廑apalm)。




服务
==



minion
after=network.target

[服务]
type=simple
execstart=/usr/bin/salt proxy-l debug--proxyid=%i
user=root
group=root
restart=always
restartprovertexitstatus=sighup
restartsec=5

[安装]
wantedby=default.target
```

关于salt master的安装方式,可能需要更改``salt proxy``二进制文件的位置。可以使用"which salt proxy"命令查找二进制文件的位置。此外,日志记录级别设置为使用``-l debug``开关进行调试。这对于故障排除很有用,但是您可能需要删除它。

一旦创建并填充了文件``systemd```后,将需要用``systemctl daemon reload``重新加载该文件以获取新单元。请注意,重新加载``systemd``可能会有影响,因此请小心。





第一次连接尝试时,您将发现该minion无法交谈,并被以下错误消息卡住:
````
[错误]salt master已缓存此节点的公钥,此salt minion将等待10秒,然后再尝试重新验证
[信息]等待重试前10秒。
```
这是正常的,因为主人不接受仆从的盐钥匙。使用<;kbd>;ctrl<;/kbd>;+<;kbd>;c<;/kbd>;退出仆从,然后运行"sudo salt key"。在"未接受的密钥:```下,您应该看到您的````[设备id]`````。接受带有`` sudo salt key-a[设备id]```的密钥。现在重新运行minion调试,您将看到该minion正在连接到您的设备。




测试您的配置
===

接受密钥后,在调试模式下重新启动代理并启动单独的终端会话。在您的新终端中,发出以下命令:
```
sudo salt'core01.nrt01'test.ping
````
将设备ID替换为'core01.nrt01'。输出:
``
core01.nrt01:
true
```
如果没有问题,它应该返回'true'。如果一切正常,请按<;kbd>;ctrl<;/kbd>;+<;kbd>;c<;/kbd>;并重新启动salt proxy作为守护进程。
````
sudo salt proxy--proxy id=[device\u id]-d
`````
最后,同步您的包:
````
sudo salt core01.nrt01 saltutil.sync\u all
`
`>其中"core01.nrt01"是您的设备id。




开始使用salt
=====


>现在一切都已设置好,您只需开始发出命令来重新设置/设置属性即可。


语法:

``bash
salt[device id][function]
```


函数,请检查以下资源:
-[net](https://docs.saltstack.com/en/develop/ref/modules/all/salt.modules.napalm_network.html module salt.modules.napalm_network)module
-[ntp](https://docs.saltstack.com/en/dedevop/ref/modules/all/salt.modules.napalm_ntp.html modules salt.modules.napalm_ntp)模块
-[bgp](https://docs.saltstack.com/en/develop/ref/modules/all/salt.modules.napalm_bgp.html module salt.modules.napalm_bgp)模块
-[SNMP](https://docs.saltstack.com/en/develope/ref/modules/all/salt.modules.napalm_snmp.html module salt.modules.napalm_snmp)模块
-[路由](https://docs.saltstack.com/en/develope/ref/modules/all/salt.modules.napalm route.html module salt.modules.napalm路由)模块
-[用户](https://docs.saltstack.com/en/develope/ref/modules/all/salt.modules.napalm椆users.html椆modules.napalm椆users)模块
-[探测](https://docs.saltstack.com/en/develope/ref/modules/all/salt.modules.napalm椆probes.html椆modules.napalm椆probes)模块

示例:

`` bash
盐芯01.nrt01 net.arp
盐芯01.nrt01 net.mac
盐芯01.nrt01 net.lldp
盐芯01.nrt01 net.ipaddrs
盐芯01.nrt01 net.interfaces
盐芯01.nrt01 ntp.peers
盐芯01.nrt01 ntp.set\peers 192.168.0.1 172.17.1172.17.17.2
salt core01.nrt01 bgp.config返回bgp配置
salt core01.nrt01 bgp.neighbors提供有关bgp会话的统计信息
salt core01.nrt01 snmp.config
salt core01.nrt01 route.show 1.2.3.4/24 bgp
salt core01.nrt01 probes.config
salt core01core01.nrt01探测。结果
salt core01.nrt01 net.commit
salt core01.nrt01 net.rollback
`````

configuration enforcement
=====

确保整个网络的一致性,[状态](https://docs.saltstack.com/en/latest/topics/tutorials/starting_states.html)是您的朋友。当模块已经提供时,使用状态是非常直接的(下一节中的示例,例如[NTP](https://github.com/napalm automation/napalm salt configuration enforcement for ntp peers example))。
有两个状态已经可用,对于:

-[ntp](https://docs.saltstack.com/en/develop/ref/states/all/salt.states.netntp.html)
-[snmp](https://docs.saltstack.com/en/develop/ref/states/all/salt.states.netsnmp.html)
-[用户](https://docs.saltstack.com/en/develop/ref/states/all/salt.states.netusers.html)
-[探测](https://docs.saltstack.com/en/develope/ref/states/all/salt.states.netntp.html)




ntp对等机的配置强制(示例)
==========================>

行:

``yaml
ntp.对等点:
-[peer1]
-[peer2]
-…
```


示例:

``yaml
``ntp.对等点:
-192.168.0.1
-172.17.17.1
````

salt将检查您的设备上的ntp对等机是否按照支柱文件中的指定设置。否则,将添加丢失的NTP对等点并删除多余的。因此,在手术结束时,设备上配置的NTP对等点列表将与列在支柱中的NTP对等点匹配。

``bash
salt core01.nrt01 state.sls router.ntp
````


snmp的配置强制(示例)
==
==


设备附加以下行:

``yaml
snmp.config:
联系人:<;电子邮件地址>;
位置:<;位置>;
社区:<;社区名称>;
``````

示例:

``yaml
snmp.config:
联系人:noc@yourcompany.com
位置:圣何塞,ca,us
community:super-safe
````

将在您的设备上更新SNMP配置:

```bash
salt core01.nrt01 state.sls router.snmp
```


>计划状态:保持配置已更新
==调度程序](https://docs.saltstack.com/en/latest/ref/states/all/salt.states.schedule.html salt调度程序的管理)您可以确保设备上的配置是一致的和最新的。

您不需要跳入一个框中,手动执行命令或添加别名等。只需编写5行配置:

示例:

returner:smtp
days:1
```

-您可以将状态的输出转发到其他服务。在这种情况下,snmp-将向特定地址发送一封包含状态摘要的电子邮件。有[许多其他返回程序可用](https://docs.saltstack.com/en/latest/ref/returners/返回程序的完整列表)
-`` days```-检查和更新配置的频率。其他选项有:```seconds```,```minutes``,```小时``等…



其他模块:
这样的[反应器](https://docs.saltstack.com/en/latest/topics/reactor/)。reactor系统允许您在事件发生后根据其输出执行命令。

vagrant:
==
可以使用包含的vagrantfile和saltstack目录自动提供包含salt的开发/测试环境还有一个可变作用力转向开关。要利用它,请从[www.arista.com](www.arista.com)下载veos-lab-4.16.9m.box图像,并将其导入,启动:

``bash
vagrant box add--name veos-lab.4.16.9m veos-lab-4.16.9m.box
vagrant up
`````
这将构建一个ubuntu信任的映像,其中salt minion和salt master是从最新的git源构建的,安装napalm和capirca,并正确配置
代理。在那里,使用'vagrant ssh master'登录到master并运行salt命令。如果需要,可以在运行"vagrant up"之前编辑vagrant文件,以更改创建的主机数,或者使用自定义saltstack git存储库测试新的salt模块。




对于早于"2016.11.0"的盐版本。有关详细信息,请参见:[https://mirceaulinic.net/2016-11-30-salt-carbon-released/](https://mirceaulinic.net/2016-11-30-salt-carbon-released/)。如果不确定,可以使用以下命令检查salt版本:```salt--versions report``.

命令:``tar xf napalm-2016.11.spm```用于salt``>;=2016.3```或``tar xf napalm.spm``用于旧版本。解包时,将创建一个名为"napalm"的目录。

在``文件根``目录(例如:```/etc/salt/states```)下,应该具有类似于以下的目录结构:

```
/etc/salt/states
——top.sls
——proxy
汽油弹网络。py
——汽油弹用户。py
—汽油弹路径。py
汽油弹网络网络。py
—凝固汽油弹.py
—状态
|——netntp.py
——netuspy


欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将字符串转换为自定义对象   java如何从socket方法获取数据?   Java中的soap读取回车和新行   java在单击时替换图像   java推荐的使用RXJava执行异步任务的方法   java MySql连接器JDBC驱动程序不支持连接池吗?   java将活动堆栈清理到顶部   java计数用户输入的数量   java从webservice下载大文件导致应用程序性能问题   JavaLocalDate。EPOCH不可用   java如何在使用Selenium等待一定时间后,在页面无法加载(get(url))时自动刷新页面   java Calendar setLenient方法不允许检查年份字段的健全性   java Eclipse和intelliJ 安卓 SDK问题   java为什么我可以在没有super关键字的情况下调用父方法?   java iText的PDF格式不好