Nautobot SSoT Arista CloudVision
项目描述
Nautobot到Arista CloudVision同步
一个Nautobot插件,允许直接在CloudVision和Nautobot之间同步数据。从Nautobot到CloudVision,它同步用户设备标签。从CloudVision到Nautobot,它同步设备、它们的接口、相关IP地址以及它们的系统标签。以下是一个表格,显示了从CloudVision同步时的数据映射。
CloudVision系统标签 | Nautobot设备自定义字段 |
---|---|
topology_network_type | 拓扑网络类型 |
mlag | mlag |
mpls | mpls |
model | 设备类型* |
systype | systype |
serialnumber | 设备序列号 |
pimbidir | pimbidir |
sflow | sFlow |
eostrain | EOS Train |
tapagg | TAP聚合 |
pim | pim |
bgp | bgp |
terminattr | TerminAttr版本 |
ztp | ztp |
eos | EOS版本** |
topology_type | 拓扑类型 |
*模型系统标签映射到Nautobot中的设备类型模型。
**如果发现已安装设备生命周期插件,将创建一个匹配的版本,并通过关系关联将设备与该版本连接。
当从Nautobot同步用户标签到CloudVision时,数据映射如下
纳托博特 | 云视界 |
---|---|
接口 | 接口 |
---------- | ------------- |
标签 | 设备标签 |
此插件是纳托博特单源真(SSoT)的扩展,您必须先安装该插件,然后才能安装此扩展。
屏幕截图
此截图显示了云视界到纳托博特主页。它包含云视界中所有系统标签的列表以及它们在纳托博特自定义字段中的映射。此图还显示了您的插件配置和同步历史。
此截图显示了纳托博特到云视界主页。它还包含数据映射、插件配置和同步历史。
安装
此插件作为PyPI中的Python包可用,可以使用pip进行安装
pip install nautobot_ssot_aristacv
该插件与纳托博特1.0.0及更高版本兼容
为确保在未来的升级过程中自动重新安装纳托博特到阿瑞斯塔云视界同步,在纳托博特根目录中创建一个名为local_requirements.txt
的文件(如果尚不存在),与requirements.txt
位于同一位置,并列出nautobot_ssot_aristacv
包
# echo nautobot_ssot_aristacv >> local_requirements.txt
安装后,需要在您的nautobot_configuration.py
中启用插件,并定义插件设置。
# In your configuration.py
PLUGINS = ["nautobot_ssot", "nautobot_ssot_aristacv"]
PLUGINS_CONFIG = {
"nautobot_ssot" : {
"hide_example_jobs": True,
},
"nautobot_ssot_aristacv": {
"cvp_token": os.getenv("NAUTOBOT_ARISTACV_TOKEN", ""),
"cvp_host": os.getenv("NAUTOBOT_ARISTACV_HOST", ""),
"cvp_port": os.getenv("NAUTOBOT_ARISTACV_PORT", 443),
"cvp_user": os.getenv("NAUTOBOT_ARISTACV_USERNAME", ""),
"cvp_password": os.getenv("NAUTOBOT_ARISTACV_PASSWORD", ""),
"verify": is_truthy(os.getenv("NAUTOBOT_ARISTACV_VERIFY", True)),
"from_cloudvision_default_site": "",
"from_cloudvision_default_device_role": "",
"from_cloudvision_default_device_role_color": "",
"delete_devices_on_sync": is_truthy(os.getenv("NAUTOBOT_ARISTACV_DELETE_ON_SYNC", False)),
"apply_import_tag": is_truthy(os.getenv("NAUTOBOT_ARISTACV_IMPORT_TAG", False)),
"import_active": is_truthy(os.getenv("NAUTOBOT_ARISTACV_IMPORT_ACTIVE", False)),
"create_controller": is_truthy(os.getenv("NAUTOBOT_ARISTACV_CREATE_CONTROLLER", False)),
"controller_site": os.getenv("NAUTOBOT_ARISTACV_CONTROLLER_SITE", ""),
"hostname_patterns": [""],
"site_mappings": {},
"role_mappings": {},
}
}
所有插件设置如上图所示为例。下面将描述所需的设置。
安装后,此插件在纳托博特中创建了以下自定义字段
arista_bgp
arista_eos
arista_eostrain
arista_mlag
arista_mpls
arista_pim
arista_pimbidir
arista_sflow
arista_systype
arista_tapagg
arista_terminattr
arista_topology_network_type
arista_topology_type
arista_ztp
虽然这些在自定义字段管理员门户中包含“arista”前缀,但在查看设备时,将移除该前缀。
用户可能需要创建其他自定义字段。当运行同步并发现云视界中设备的系统标签没有相应的自定义字段时,同步日志将显示一条消息。要同步该数据,必须在管理员UI中创建一个使用消息中给定名称的自定义字段。
插件可以连接到本地或云实例的云视界。要连接到本地实例,必须在纳托博特配置文件中设置以下变量。
配置变量 | 类型 | 用途 |
---|---|---|
cvp_host | 字符串 | 云视界本地实例的主机名或IP地址。 |
cvp_port | 字符串 | gRPC端口(默认为8443,但自CVP 2021.3.0起该端口已更改为443) |
cvp_user | 字符串 | 用于连接云视界本地实例的用户名。 |
cvp_password | 字符串 | 上面指定用户使用的密码。 |
cvp_token | 字符串 | 连接云视界时要使用的令牌。 |
verify | 布尔值 | 如果为False,则插件将从云视界下载证书并信任它进行gRPC调用。 |
要连接到云实例的云视界,必须设置以下变量
配置变量 | 类型 | 用途 | 默认值 |
---|---|---|---|
cvaas_url | 字符串 | 连接到您的CvaaS实例的URL。 | www.arista.io:443 |
从云视界同步时,此插件将创建纳托博特中不存在的新的阿瑞斯塔设备。在纳托博特中创建新设备时,需要站点、设备角色、设备角色颜色、设备状态和设备。您可以通过在nautobot_config.py
文件中配置以下值来定义要使用的值。如果您定义了已存在的default_device_role
和default_device_status
,则将忽略这两个的默认颜色值,因为它将从纳托博特中提取该信息。
配置变量 | 类型 | 用途 | 默认值 |
---|---|---|---|
from_cloudvision_default_site | 字符串 | 同步新设备到纳托博特时创建的默认站点。 | cloudvision_imported |
from_cloudvision_default_device_role | 字符串 | 同步新设备到纳托博特时创建的默认角色。 | 网络 |
from_cloudvision_default_device_role_color | 字符串 | 默认角色颜色用于默认角色。 | ff0000 |
当这些变量未在插件设置中定义时,插件将使用所提到的默认值。
当 Arista 设备存在于 Nautobot 但不存在于 CloudVision 中时,此插件可以选择在 Nautobot 中删除或保留该设备。此行为可以通过 nautobot_config.py
文件中的以下变量设置。
配置变量 | 类型 | 用途 | 默认值 |
---|---|---|---|
delete_devices_on_sync | 布尔值 | 如果为真,则将在同步时删除 Nautobot 中存在但 CloudVision 中不存在的设备,并且设备类型制造商名称设置为 Arista。 | False |
当此变量未在插件设置中定义时,插件将默认使用
False
。
可选地,可以应用名为 cloudvision_imported
的导入标签到从 CloudVision 导入的设备上。
配置变量 | 类型 | 用途 | 默认值 |
---|---|---|---|
apply_import_tag | 布尔值 | 将导入标签应用于从 CloudVision 导入的设备。 | False |
如果 apply_import_tag 设置为 True,则应用于设备的标签值为
cloudvision_imported
。
此外,您还可以控制是否只导入活动设备,或者是否导入所有状态无关的设备。
配置变量 | 类型 | 用途 | 默认值 |
---|---|---|---|
import_active | 布尔值 | 仅从 CloudVision 导入活动设备。 | False |
您还可以选择在 Nautobot 内部创建 CloudVision 实例并将其链接到由实例管理的设备。如果 create_controller
设置为 True
,则将在 Nautobot 中创建 CloudVision 设备,并创建与从 CVP 导入的导入设备的关系。 controller_site
设置允许您指定要创建设备的站点名称。如果此设置为空,则将创建一个新的 CloudVision 站点,并将设备放置在其中。
配置变量 | 类型 | 用途 | 默认值 |
---|---|---|---|
create_controller | 布尔值 | 在 Nautobot 中创建 CloudVision 设备。 | False |
controller_site | 字符串 | 要关联 CloudVision 设备的站点。 | "" |
最后,您还可以选择解析设备主机名中的代码,以指示分配的站点或设备角色。这是通过几个设置的组合来完成的。首先,hostname_patterns 设置定义了一个正则表达式模式列表,这些模式定义了您的主机名结构。这些模式必须包括使用 site
和 role
键命名的捕获组,以标识主机名中表示这些数据的部分,即 (?P
和 (?P
。一旦提取了这些部分,它们将针对相关映射进行评估,例如,查找 site
捕获组的值在 site_mappings
字典中,期望值是具有映射值的站点名称的键。如果站点不存在,它将在暂存状态中创建。对于设备角色,如果它在 Nautobot 中不存在,它将创建。请注意,在执行解析时,主机名被转换为全部小写,因此键也期望全部小写。
配置变量 | 类型 | 用途 | 默认值 |
---|---|---|---|
hostname_patterns | List[str] | 定义指示站点/角色的主机名部分。 | [] |
site_mappings | dict | 定义与主机名中的代码关联的站点名称。 | {} |
role_mappings | dict | 定义与主机名中的代码关联的角色名称。 | {} |
由于设备主机名用作设备对象的标识符,因此任何主机名的更改都意味着一个新的设备,因此应触发在 Nautobot 中删除和创建新设备。因此,主机名解析功能不在更新期间执行,而仅在设备初始创建时执行。如果您需要在初始创建后更正设备的站点或角色,则需要手动更正它或删除它并重新运行导入作业。
用途
此扩展可以同步来自和发送到 Nautobot 的数据。一旦插件安装成功,Nautobot 单一事实(SSoT)插件下将出现两个新选项。
请注意,属于分线包的接口,例如将40G端口分线为4个10G端口,将显示基础接口SFP收发器作为接口类型。这是由于CloudVision返回接口和收发器的方式。
从CloudVision同步
在加载Nautobot数据时,此工具仅加载制造商为"Arista"的设备类型。
当从CloudVision同步数据到Nautobot时,设备及其接口和标签将被同步。当CloudVision中存在Nautobot中不存在的设备时,此工具将在Nautobot中创建设备,并使用配置文件中指定的默认值。当Nautobot中存在CloudVision中不存在的设备时,此工具可以配置为删除或跳过该设备。您可以通过以下视频查看示例。
当从Nautobot同步数据到CloudVision时,Nautobot中的标签数据将被复制到CloudVision的用户标签中。您可以通过以下视频查看示例。
贡献
欢迎提交拉取请求,并通过GitHub Actions自动构建和测试,以针对Python和Nautobot的多个版本。
项目使用基于docker-compose
的轻量级开发环境进行打包,以帮助项目本地开发和在Docker容器中运行测试。
项目遵循网络到代码软件开发指南,并利用
- Black、Pylint、Bandit和pydocstyle进行Python代码审查和格式化。
- 使用Django单元测试确保插件正常工作。
开发环境
开发环境可以以两种方式使用。首先,如果您希望在Docker之外开发,可以使用本地poetry环境。其次,在Docker容器内部。
调用任务
使用PyInvoke库提供基于环境的辅助命令。有一些配置参数可以传递给PyInvoke以覆盖默认配置
nautobot_ver
:用作任何构建的Docker容器的Nautobot版本(默认:develop-latest)project_name
:默认的docker compose项目名称(默认:aristacv-sync)python_ver
:用作任何构建的Docker容器的Python版本(默认:3.6)local
:一个布尔标志,表示是否在主机或Docker容器中运行调用任务(默认:False,命令将在Docker容器中运行)compose_dir
:包含项目compose文件的目录的完整路径compose_files
:按顺序应用的compose文件列表(有关更多信息,请参阅Multiple Compose files)
使用PyInvoke可以通过几种方法覆盖这些配置选项。可能最简单的方法是简单地设置环境变量INVOKE_ARISTACV-SYNC_VARIABLE_NAME
,其中VARIABLE_NAME
是要覆盖的变量。唯一的例外是compose_files
,因为它是一个列表,必须在一个YAML文件中覆盖。此目录中有一个示例invoke.yml
,可以作为起点使用。
本地Poetry开发环境
- 将
development/creds.example.env
复制到development/creds.env
(此文件将被git和docker忽略) - 在
development/creds.env
中取消注释POSTGRES_HOST
、REDIS_HOST
和NAUTOBOT_ROOT
变量 - 在仓库根目录中创建一个包含以下内容的invoke.yml
---
aristacv_sync:
local: true
compose_files:
- "docker-compose.requirements.yml"
- 运行以下命令
poetry shell
poetry install
export $(cat development/dev.env | xargs)
export $(cat development/creds.env | xargs)
- 现在您可以根据Nautobot文档中的说明运行nautobot-server命令,例如启动开发服务器
nautobot-server runserver 0.0.0.0:8080 --insecure
Nautobot服务器现在可通过http://localhost:8080访问。
Docker开发环境
本项目由Python Poetry管理,并有一些要求来设置您的开发环境。
安装 Poetry 和 Docker 后,您可以通过以下命令在独立的 Python 虚拟环境中安装所有其他开发依赖项:
poetry shell
poetry install
invoke start
Nautobot服务器现在可通过http://localhost:8080访问。
CLI 辅助命令
该项目包含一个基于invoke的 CLI 辅助工具,用于帮助设置开发环境。命令分为以下三类:开发环境
、实用工具
和测试
。
每个命令都可以通过invoke <command>
执行。可以使用环境变量INVOKE_ARISTACV-SYNC_PYTHON_VER
和INVOKE_ARISTACV-SYNC_NAUTOBOT_VER
来覆盖默认版本。每个命令都有自己的帮助信息invoke <command> --help
Docker 开发环境
build Build all docker images.
debug Start Nautobot and its dependencies in debug mode.
destroy Destroy all containers and volumes.
restart Restart Nautobot and its dependencies.
start Start Nautobot and its dependencies in detached mode.
stop Stop Nautobot and its dependencies.
实用工具
cli Launch a bash shell inside the running Nautobot container.
create-user Create a new user in django (default: admin), will prompt for password.
makemigrations Run Make Migration in Django.
nbshell Launch a nbshell session.
测试
bandit Run bandit to validate basic static code security analysis.
black Run black to check that Python files adhere to its style standards.
flake8 This will run flake8 for the specified name and Python version.
pydocstyle Run pydocstyle to validate docstring formatting adheres to NTC defined standards.
pylint Run pylint code analysis.
tests Run all tests for this plugin.
unittest Run Django unit tests for the plugin.
问题
对于任何问题或评论,请首先查看常见问题解答,并且欢迎加入Network to Code Slack 频道(频道 #networktocode)。在这里注册这里
项目详情
下载文件
下载您平台上的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
nautobot_ssot_aristacv-1.6.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c0255085a03aa1898a947b889228bca5539be2697005951eebf9186137485c79 |
|
MD5 | bad4ca465f0690b7ba76c628e1d191b5 |
|
BLAKE2b-256 | 0dc6949f6650e2e531f3a41304cd735bbb1c1a54f92800db3d39e1772e93c06f |
nautobot_ssot_aristacv-1.6.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f821b72fbd2516709aab3cc741cdc4f91246477c3e79be399d716abb6835d105 |
|
MD5 | d7dddf3ee7a17340acf65642f0373c29 |
|
BLAKE2b-256 | f9876dc30a38212511a613c1827805c3e606daa3ae85aa01f14e70d60357004d |