跳转到主要内容

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)的扩展,您必须先安装该插件,然后才能安装此扩展。

屏幕截图

此截图显示了云视界到纳托博特主页。它包含云视界中所有系统标签的列表以及它们在纳托博特自定义字段中的映射。此图还显示了您的插件配置和同步历史。

cv_to_naut

此截图显示了纳托博特到云视界主页。它还包含数据映射、插件配置和同步历史。

naut_to_cv

安装

此插件作为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中创建一个使用消息中给定名称的自定义字段。

Custom_Fields_Arista

插件可以连接到本地或云实例的云视界。要连接到本地实例,必须在纳托博特配置文件中设置以下变量。

配置变量 类型 用途
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_roledefault_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 设置定义了一个正则表达式模式列表,这些模式定义了您的主机名结构。这些模式必须包括使用 siterole 键命名的捕获组,以标识主机名中表示这些数据的部分,即 (?P\w+)(?P\w+)。一旦提取了这些部分,它们将针对相关映射进行评估,例如,查找 site 捕获组的值在 site_mappings 字典中,期望值是具有映射值的站点名称的键。如果站点不存在,它将在暂存状态中创建。对于设备角色,如果它在 Nautobot 中不存在,它将创建。请注意,在执行解析时,主机名被转换为全部小写,因此键也期望全部小写。

配置变量 类型 用途 默认值
hostname_patterns List[str] 定义指示站点/角色的主机名部分。 []
site_mappings dict 定义与主机名中的代码关联的站点名称。 {}
role_mappings dict 定义与主机名中的代码关联的角色名称。 {}

由于设备主机名用作设备对象的标识符,因此任何主机名的更改都意味着一个新的设备,因此应触发在 Nautobot 中删除和创建新设备。因此,主机名解析功能不在更新期间执行,而仅在设备初始创建时执行。如果您需要在初始创建后更正设备的站点或角色,则需要手动更正它或删除它并重新运行导入作业。

用途

此扩展可以同步来自和发送到 Nautobot 的数据。一旦插件安装成功,Nautobot 单一事实(SSoT)插件下将出现两个新选项。

Arista Extension

请注意,属于分线包的接口,例如将40G端口分线为4个10G端口,将显示基础接口SFP收发器作为接口类型。这是由于CloudVision返回接口和收发器的方式。

从CloudVision同步

在加载Nautobot数据时,此工具仅加载制造商为"Arista"的设备类型。

当从CloudVision同步数据到Nautobot时,设备及其接口和标签将被同步。当CloudVision中存在Nautobot中不存在的设备时,此工具将在Nautobot中创建设备,并使用配置文件中指定的默认值。当Nautobot中存在CloudVision中不存在的设备时,此工具可以配置为删除或跳过该设备。您可以通过以下视频查看示例。

fromcv_sync

当从Nautobot同步数据到CloudVision时,Nautobot中的标签数据将被复制到CloudVision的用户标签中。您可以通过以下视频查看示例。

tocv_sync

贡献

欢迎提交拉取请求,并通过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开发环境

  1. development/creds.example.env复制到development/creds.env(此文件将被git和docker忽略)
  2. development/creds.env中取消注释POSTGRES_HOSTREDIS_HOSTNAUTOBOT_ROOT变量
  3. 在仓库根目录中创建一个包含以下内容的invoke.yml
---
aristacv_sync:
  local: true
  compose_files:
    - "docker-compose.requirements.yml"
  1. 运行以下命令
poetry shell
poetry install
export $(cat development/dev.env | xargs)
export $(cat development/creds.env | xargs)
  1. 现在您可以根据Nautobot文档中的说明运行nautobot-server命令,例如启动开发服务器
nautobot-server runserver 0.0.0.0:8080 --insecure

Nautobot服务器现在可通过http://localhost:8080访问。

Docker开发环境

本项目由Python Poetry管理,并有一些要求来设置您的开发环境。

  1. 安装 Poetry,根据您操作系统的Poetry 文档进行安装。
  2. 安装 Docker,根据您操作系统的Docker 文档进行安装。

安装 Poetry 和 Docker 后,您可以通过以下命令在独立的 Python 虚拟环境中安装所有其他开发依赖项:

poetry shell
poetry install
invoke start

Nautobot服务器现在可通过http://localhost:8080访问。

CLI 辅助命令

该项目包含一个基于invoke的 CLI 辅助工具,用于帮助设置开发环境。命令分为以下三类:开发环境实用工具测试

每个命令都可以通过invoke <command>执行。可以使用环境变量INVOKE_ARISTACV-SYNC_PYTHON_VERINVOKE_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 (99.9 kB 查看哈希值)

上传时间

构建分布

nautobot_ssot_aristacv-1.6.1-py3-none-any.whl (115.3 kB 查看哈希值)

上传时间 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面